You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2020/07/23 07:05:12 UTC
[ignite] branch master updated: IGNITE-13038 Web Console moved to
separate repository: https://github.com/apache/ignite-web-console - Fixes
#8065.
This is an automated email from the ASF dual-hosted git repository.
akuznetsov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new b799a08 IGNITE-13038 Web Console moved to separate repository: https://github.com/apache/ignite-web-console - Fixes #8065.
b799a08 is described below
commit b799a0875e6a04259c9483a44c7087c1c21c63fc
Author: Alexey Kuznetsov <ak...@apache.org>
AuthorDate: Thu Jul 23 14:04:39 2020 +0700
IGNITE-13038 Web Console moved to separate repository: https://github.com/apache/ignite-web-console - Fixes #8065.
Signed-off-by: Alexey Kuznetsov <ak...@apache.org>
---
.gitignore | 1 -
assembly/dependencies-apache-ignite-lgpl.xml | 1 -
assembly/dependencies-apache-ignite-slim.xml | 1 -
assembly/dependencies-apache-ignite.xml | 1 -
docker/web-agent/Dockerfile | 46 -
docker/web-agent/README.txt | 36 -
docker/web-console/standalone/Dockerfile | 84 -
docker/web-console/standalone/README.txt | 35 -
docker/web-console/standalone/docker-entrypoint.sh | 23 -
docker/web-console/standalone/nginx/nginx.conf | 55 -
.../web-console/standalone/nginx/web-console.conf | 62 -
modules/web-console/.dockerignore | 10 -
modules/web-console/.gitignore | 4 -
modules/web-console/DEVNOTES.txt | 145 -
modules/web-console/README.txt | 36 -
modules/web-console/assembly/README.txt | 127 -
modules/web-console/assembly/direct-install.xml | 91 -
modules/web-console/backend/.eslintrc | 169 -
modules/web-console/backend/.gitignore | 3 -
modules/web-console/backend/agent_dists/README.txt | 6 -
modules/web-console/backend/app/agentSocket.js | 124 -
modules/web-console/backend/app/agentsHandler.js | 419 -
modules/web-console/backend/app/apiServer.js | 88 -
modules/web-console/backend/app/browsersHandler.js | 348 -
modules/web-console/backend/app/configure.js | 104 -
modules/web-console/backend/app/mongo.js | 180 -
modules/web-console/backend/app/nconf.js | 54 -
modules/web-console/backend/app/routes.js | 66 -
modules/web-console/backend/app/schemas.js | 1323 --
modules/web-console/backend/app/settings.js | 150 -
.../backend/config/settings.json.sample | 36 -
.../backend/errors/AppErrorException.js | 34 -
.../backend/errors/AuthFailedException.js | 30 -
.../backend/errors/DuplicateKeyException.js | 28 -
.../backend/errors/IllegalAccessError.js | 30 -
.../backend/errors/IllegalArgumentException.js | 28 -
.../errors/MissingConfirmRegistrationException.js | 34 -
.../backend/errors/MissingResourceException.js | 30 -
.../backend/errors/ServerErrorException.js | 35 -
modules/web-console/backend/errors/index.js | 43 -
modules/web-console/backend/index.js | 41 -
modules/web-console/backend/injector.js | 29 -
modules/web-console/backend/launch-tools.js | 113 -
modules/web-console/backend/middlewares/api.js | 60 -
modules/web-console/backend/middlewares/demo.js | 31 -
modules/web-console/backend/middlewares/host.js | 40 -
modules/web-console/backend/middlewares/user.js | 36 -
.../migrations/1502249492000-invalidate_rename.js | 28 -
.../migrations/1502432624000-cache-index.js | 32 -
.../backend/migrations/1504672035000-igfs-index.js | 32 -
.../migrations/1505114649000-models-index.js | 32 -
.../1508395969410-init-registered-date.js | 34 -
.../migrations/1516948939797-migrate-configs.js | 399 -
.../1547440382485-account-make-email-unique.js | 85 -
modules/web-console/backend/migrations/README.txt | 4 -
.../backend/migrations/migration-utils.js | 127 -
modules/web-console/backend/package-lock.json | 8115 -----------
modules/web-console/backend/package.json | 86 -
modules/web-console/backend/routes/activities.js | 46 -
modules/web-console/backend/routes/admin.js | 91 -
modules/web-console/backend/routes/caches.js | 79 -
modules/web-console/backend/routes/clusters.js | 108 -
.../web-console/backend/routes/configuration.js | 53 -
modules/web-console/backend/routes/demo.js | 145 -
.../web-console/backend/routes/demo/caches.json | 87 -
.../web-console/backend/routes/demo/clusters.json | 50 -
.../web-console/backend/routes/demo/domains.json | 317 -
modules/web-console/backend/routes/demo/igfss.json | 10 -
modules/web-console/backend/routes/domains.js | 84 -
modules/web-console/backend/routes/downloads.js | 59 -
modules/web-console/backend/routes/igfss.js | 79 -
modules/web-console/backend/routes/notebooks.js | 83 -
modules/web-console/backend/routes/profile.js | 74 -
modules/web-console/backend/routes/public.js | 161 -
modules/web-console/backend/services/Utils.js | 51 -
modules/web-console/backend/services/activities.js | 111 -
modules/web-console/backend/services/auth.js | 178 -
modules/web-console/backend/services/caches.js | 215 -
modules/web-console/backend/services/clusters.js | 279 -
.../web-console/backend/services/configurations.js | 70 -
modules/web-console/backend/services/domains.js | 266 -
modules/web-console/backend/services/downloads.js | 93 -
modules/web-console/backend/services/igfss.js | 184 -
modules/web-console/backend/services/mails.js | 216 -
modules/web-console/backend/services/notebooks.js | 115 -
.../web-console/backend/services/notifications.js | 50 -
modules/web-console/backend/services/sessions.js | 60 -
modules/web-console/backend/services/spaces.js | 90 -
modules/web-console/backend/services/users.js | 275 -
modules/web-console/backend/templates/base.html | 21 -
modules/web-console/backend/test/app/db.js | 69 -
modules/web-console/backend/test/app/httpAgent.js | 50 -
modules/web-console/backend/test/app/mail.js | 31 -
modules/web-console/backend/test/app/settings.js | 38 -
.../web-console/backend/test/config/settings.json | 17 -
.../web-console/backend/test/data/accounts.json | 19 -
modules/web-console/backend/test/data/caches.json | 135 -
.../web-console/backend/test/data/clusters.json | 56 -
modules/web-console/backend/test/data/domains.json | 322 -
modules/web-console/backend/test/data/igfss.json | 12 -
modules/web-console/backend/test/data/spaces.json | 14 -
modules/web-console/backend/test/index.js | 31 -
modules/web-console/backend/test/injector.js | 36 -
.../web-console/backend/test/routes/clusters.js | 82 -
modules/web-console/backend/test/routes/public.js | 68 -
.../backend/test/unit/ActivitiesService.test.js | 132 -
.../backend/test/unit/AuthService.test.js | 94 -
.../backend/test/unit/CacheService.test.js | 172 -
.../backend/test/unit/ClusterService.test.js | 376 -
.../backend/test/unit/DomainService.test.js | 172 -
.../backend/test/unit/IgfsService.test.js | 145 -
.../web-console/backend/test/unit/Utils.test.js | 48 -
.../web-console/docker/compose/backend/Dockerfile | 35 -
.../web-console/docker/compose/docker-compose.yml | 55 -
.../web-console/docker/compose/frontend/Dockerfile | 45 -
.../docker/compose/frontend/nginx/nginx.conf | 59 -
.../docker/compose/frontend/nginx/web-console.conf | 62 -
modules/web-console/e2e/docker-compose.yml | 42 -
modules/web-console/e2e/testcafe/.eslintrc | 1 -
modules/web-console/e2e/testcafe/Dockerfile | 32 -
.../e2e/testcafe/components/FormField.js | 88 -
.../e2e/testcafe/components/ListEditable.js | 83 -
.../e2e/testcafe/components/PanelCollapsible.js | 28 -
.../web-console/e2e/testcafe/components/Table.js | 63 -
.../e2e/testcafe/components/confirmation.js | 39 -
.../e2e/testcafe/components/modalInput.js | 40 -
.../web-console/e2e/testcafe/components/no-data.js | 20 -
.../e2e/testcafe/components/notifications.js | 21 -
.../components/pageAdvancedConfiguration.js | 29 -
.../e2e/testcafe/components/pageConfiguration.js | 21 -
.../e2e/testcafe/components/topNavigation.js | 23 -
.../e2e/testcafe/components/userMenu.js | 34 -
.../e2e/testcafe/environment/envtools.js | 197 -
.../e2e/testcafe/environment/launch-env.js | 26 -
.../e2e/testcafe/fixtures/admin-panel.js | 67 -
.../e2e/testcafe/fixtures/auth/forgot-password.js | 53 -
.../e2e/testcafe/fixtures/auth/logout.js | 38 -
.../fixtures/auth/signup-validation-local.js | 52 -
.../e2e/testcafe/fixtures/auth/signup.js | 76 -
.../e2e/testcafe/fixtures/configuration/basic.js | 86 -
.../configuration/clusterFormChangeDetection.js | 58 -
.../fixtures/configuration/newClusterWithCache.js | 45 -
.../testcafe/fixtures/configuration/overview.js | 147 -
.../e2e/testcafe/fixtures/menu-smoke.js | 48 -
.../testcafe/fixtures/queries/notebooks-list.js | 59 -
.../testcafe/fixtures/user-profile/credentials.js | 63 -
.../e2e/testcafe/fixtures/user-profile/profile.js | 60 -
modules/web-console/e2e/testcafe/helpers.js | 39 -
modules/web-console/e2e/testcafe/index.js | 38 -
modules/web-console/e2e/testcafe/package.json | 42 -
.../PageConfigurationAdvancedCluster.js | 39 -
.../testcafe/page-models/PageConfigurationBasic.js | 67 -
.../page-models/PageConfigurationOverview.js | 36 -
.../e2e/testcafe/page-models/PageQueries.js | 69 -
.../page-models/pageConfigurationAdvancedIGFS.js | 21 -
.../page-models/pageConfigurationAdvancedModels.js | 28 -
.../e2e/testcafe/page-models/pageForgotPassword.js | 24 -
.../e2e/testcafe/page-models/pageProfile.js | 40 -
.../e2e/testcafe/page-models/pageSignin.js | 32 -
.../e2e/testcafe/page-models/pageSignup.js | 48 -
modules/web-console/e2e/testcafe/roles.js | 30 -
.../web-console/e2e/testcafe/testcafe-runner.js | 63 -
modules/web-console/e2e/testenv/Dockerfile | 51 -
modules/web-console/e2e/testenv/nginx/nginx.conf | 55 -
.../web-console/e2e/testenv/nginx/web-console.conf | 62 -
modules/web-console/frontend/.babelrc | 16 -
modules/web-console/frontend/.eslintrc | 198 -
modules/web-console/frontend/.gitignore | 6 -
modules/web-console/frontend/app/app.config.js | 142 -
modules/web-console/frontend/app/app.d.ts | 29 -
modules/web-console/frontend/app/app.js | 392 -
.../frontend/app/browserUpdate/index.js | 36 -
.../frontend/app/browserUpdate/style.scss | 36 -
.../activities-user-dialog.controller.js | 33 -
.../activities-user-dialog.tpl.pug | 34 -
.../app/components/activities-user-dialog/index.js | 41 -
.../app/components/breadcrumbs/component.js | 43 -
.../frontend/app/components/breadcrumbs/index.js | 23 -
.../frontend/app/components/breadcrumbs/style.scss | 46 -
.../app/components/breadcrumbs/template.pug | 17 -
.../app/components/bs-select-menu/controller.js | 31 -
.../app/components/bs-select-menu/directive.js | 30 -
.../app/components/bs-select-menu/index.js | 28 -
.../app/components/bs-select-menu/index.spec.js | 67 -
.../app/components/bs-select-menu/strip.filter.js | 22 -
.../app/components/bs-select-menu/style.scss | 101 -
.../app/components/bs-select-menu/template.pug | 47 -
.../bs-select-menu/transcludeToBody.directive.js | 50 -
.../components/cluster-security-icon/component.js | 25 -
.../app/components/cluster-security-icon/index.js | 24 -
.../components/cluster-security-icon/template.pug | 30 -
.../app/components/cluster-selector/component.js | 25 -
.../app/components/cluster-selector/controller.js | 102 -
.../app/components/cluster-selector/index.js | 23 -
.../app/components/cluster-selector/style.scss | 74 -
.../app/components/cluster-selector/template.pug | 82 -
.../connected-clusters-badge/controller.js | 56 -
.../components/connected-clusters-badge/index.js | 33 -
.../components/connected-clusters-badge/style.scss | 43 -
.../connected-clusters-badge/template.pug | 18 -
.../components/cell-logout/index.js | 44 -
.../components/cell-logout/template.pug | 23 -
.../components/cell-status/index.ts | 31 -
.../components/list/column-defs.js | 59 -
.../components/list/controller.js | 60 -
.../components/list/index.js | 29 -
.../components/list/style.scss | 49 -
.../components/list/template.tpl.pug | 19 -
.../connected-clusters-dialog/controller.js | 24 -
.../components/connected-clusters-dialog/index.js | 35 -
.../connected-clusters-dialog/service.js | 44 -
.../connected-clusters-dialog/style.scss | 23 -
.../connected-clusters-dialog/template.tpl.pug | 34 -
.../dialog-admin-create-user/component.ts | 27 -
.../dialog-admin-create-user/controller.ts | 78 -
.../components/dialog-admin-create-user/index.ts | 23 -
.../components/dialog-admin-create-user/state.ts | 29 -
.../dialog-admin-create-user/template.pug | 37 -
.../components/form-field-size/controller.ts | 163 -
.../form-field/components/form-field-size/index.js | 42 -
.../components/form-field-size/style.scss | 35 -
.../components/form-field-size/template.pug | 79 -
.../form-field/copyInputValueButton.directive.js | 86 -
.../form-field/igniteFormField.directive.ts | 76 -
.../frontend/app/components/form-field/index.js | 31 -
.../form-field/showValidationError.directive.ts | 77 -
.../frontend/app/components/form-field/style.scss | 29 -
.../app/components/form-signup/component.ts | 32 -
.../app/components/form-signup/controller.ts | 46 -
.../frontend/app/components/form-signup/index.ts | 41 -
.../frontend/app/components/form-signup/style.scss | 31 -
.../app/components/form-signup/template.pug | 105 -
.../components/global-progress-line/component.ts | 28 -
.../components/global-progress-line/controller.ts | 47 -
.../app/components/global-progress-line/index.ts | 24 -
.../app/components/global-progress-line/style.scss | 25 -
.../components/global-progress-line/template.pug | 17 -
.../components/grid-column-selector/component.js | 29 -
.../components/grid-column-selector/controller.js | 115 -
.../grid-column-selector/controller.spec.js | 435 -
.../app/components/grid-column-selector/index.js | 24 -
.../app/components/grid-column-selector/style.scss | 25 -
.../components/grid-column-selector/template.pug | 29 -
.../app/components/grid-export/component.js | 70 -
.../frontend/app/components/grid-export/index.js | 24 -
.../frontend/app/components/grid-export/style.scss | 34 -
.../app/components/grid-export/template.pug | 22 -
.../app/components/grid-item-selected/component.js | 28 -
.../components/grid-item-selected/controller.js | 41 -
.../app/components/grid-item-selected/index.js | 25 -
.../app/components/grid-item-selected/style.scss | 23 -
.../app/components/grid-item-selected/template.pug | 20 -
.../app/components/grid-no-data/component.js | 33 -
.../app/components/grid-no-data/controller.js | 50 -
.../frontend/app/components/grid-no-data/index.js | 24 -
.../app/components/grid-no-data/style.scss | 31 -
.../app/components/grid-showing-rows/component.js | 29 -
.../app/components/grid-showing-rows/controller.js | 101 -
.../app/components/grid-showing-rows/index.js | 24 -
.../app/components/grid-showing-rows/style.scss | 24 -
.../components/grid-showing-rows/template.tpl.pug | 24 -
.../ignite-chart-series-selector/component.js | 28 -
.../ignite-chart-series-selector/controller.js | 63 -
.../ignite-chart-series-selector/index.js | 24 -
.../ignite-chart-series-selector/template.pug | 29 -
.../app/components/ignite-chart/component.ts | 35 -
.../components/chart-no-data/component.ts | 31 -
.../components/chart-no-data/controller.ts | 80 -
.../ignite-chart/components/chart-no-data/index.ts | 23 -
.../components/chart-no-data/template.tpl.pug | 20 -
.../app/components/ignite-chart/controller.js | 397 -
.../frontend/app/components/ignite-chart/index.js | 26 -
.../app/components/ignite-chart/style.scss | 85 -
.../app/components/ignite-chart/template.tpl.pug | 35 -
.../app/components/ignite-icon/directive.js | 82 -
.../frontend/app/components/ignite-icon/index.js | 27 -
.../frontend/app/components/ignite-icon/service.js | 49 -
.../frontend/app/components/ignite-icon/style.scss | 27 -
.../frontend/app/components/input-dialog/index.js | 24 -
.../input-dialog/input-dialog.controller.js | 34 -
.../input-dialog/input-dialog.service.ts | 172 -
.../components/input-dialog/input-dialog.tpl.pug | 108 -
.../app/components/list-editable/component.js | 36 -
.../component.spec.js | 72 -
.../list-editable-add-item-button/component.ts | 73 -
.../has-items-template.pug | 23 -
.../list-editable-add-item-button/index.ts | 24 -
.../no-items-template.pug | 18 -
.../list-editable-add-item-button/style.scss | 20 -
.../list-editable-cols/cols.directive.js | 77 -
.../components/list-editable-cols/cols.style.scss | 61 -
.../list-editable-cols/cols.template.pug | 29 -
.../components/list-editable-cols/index.js | 27 -
.../components/list-editable-cols/row.directive.js | 45 -
.../components/list-editable-one-way/directive.ts | 45 -
.../components/list-editable-one-way/index.ts | 24 -
.../list-editable-save-on-changes/directives.ts | 73 -
.../list-editable-save-on-changes/index.ts | 24 -
.../list-editable-transclude/directive.ts | 117 -
.../components/list-editable-transclude/index.ts | 23 -
.../app/components/list-editable/controller.ts | 126 -
.../frontend/app/components/list-editable/index.ts | 35 -
.../app/components/list-editable/style.scss | 149 -
.../app/components/list-editable/template.pug | 50 -
.../list-of-registered-users/categories.js | 31 -
.../list-of-registered-users/column-defs.js | 67 -
.../list-of-registered-users/controller.js | 406 -
.../components/list-of-registered-users/index.js | 28 -
.../components/list-of-registered-users/style.scss | 35 -
.../list-of-registered-users/template.tpl.pug | 85 -
.../frontend/app/components/no-data/component.ts | 31 -
.../frontend/app/components/no-data/controller.ts | 46 -
.../frontend/app/components/no-data/index.ts | 25 -
.../frontend/app/components/no-data/style.scss | 28 -
.../app/components/no-data/template.tpl.pug | 35 -
.../app/components/page-admin/controller.ts | 28 -
.../frontend/app/components/page-admin/index.js | 42 -
.../frontend/app/components/page-admin/style.scss | 62 -
.../app/components/page-admin/template.tpl.pug | 28 -
.../components/page-forgot-password/component.js | 30 -
.../components/page-forgot-password/controller.js | 75 -
.../app/components/page-forgot-password/index.js | 28 -
.../app/components/page-forgot-password/run.js | 57 -
.../app/components/page-forgot-password/style.scss | 41 -
.../components/page-forgot-password/template.pug | 40 -
.../app/components/page-forgot-password/types.ts | 24 -
.../frontend/app/components/page-landing/index.js | 64 -
.../app/components/page-landing/public.pug | 21 -
.../app/components/page-landing/style.scss | 115 -
.../app/components/page-landing/template.pug | 56 -
.../components/page-password-changed/controller.ts | 32 -
.../app/components/page-password-changed/index.js | 49 -
.../components/page-password-changed/style.scss | 35 -
.../components/page-password-changed/template.pug | 21 -
.../components/page-password-reset/controller.js | 60 -
.../app/components/page-password-reset/index.js | 65 -
.../app/components/page-password-reset/style.scss | 38 -
.../components/page-password-reset/template.pug | 60 -
.../app/components/page-profile/component.js | 24 -
.../app/components/page-profile/controller.js | 98 -
.../frontend/app/components/page-profile/index.js | 37 -
.../app/components/page-profile/style.scss | 34 -
.../app/components/page-profile/template.pug | 161 -
.../app/components/page-queries/component.js | 59 -
.../ignite-information/information.directive.js | 31 -
.../components/ignite-information/information.pug | 20 -
.../components/ignite-information/information.scss | 55 -
.../components/query-actions-button/component.ts | 28 -
.../components/query-actions-button/controller.ts | 53 -
.../components/query-actions-button/template.pug | 28 -
.../components/queries-notebook/controller.ts | 2353 ---
.../components/queries-notebook/index.js | 33 -
.../components/queries-notebook/style.scss | 197 -
.../components/queries-notebook/template.tpl.pug | 510 -
.../queries-notebooks-list/controller.js | 207 -
.../components/queries-notebooks-list/index.js | 28 -
.../components/queries-notebooks-list/style.scss | 39 -
.../queries-notebooks-list/template.tpl.pug | 56 -
.../frontend/app/components/page-queries/index.ts | 110 -
.../app/components/page-queries/notebook.data.js | 174 -
.../components/page-queries/notebook.service.js | 91 -
.../app/components/page-queries/style.scss | 24 -
.../app/components/page-queries/template.tpl.pug | 30 -
.../app/components/page-signin/component.ts | 29 -
.../app/components/page-signin/controller.ts | 88 -
.../frontend/app/components/page-signin/index.ts | 28 -
.../frontend/app/components/page-signin/run.ts | 70 -
.../frontend/app/components/page-signin/style.scss | 41 -
.../app/components/page-signin/template.pug | 55 -
.../page-signup-confirmation/component.ts | 28 -
.../page-signup-confirmation/controller.ts | 42 -
.../components/page-signup-confirmation/index.ts | 23 -
.../components/page-signup-confirmation/state.ts | 48 -
.../components/page-signup-confirmation/style.scss | 22 -
.../page-signup-confirmation/template.tpl.pug | 24 -
.../app/components/page-signup/component.js | 26 -
.../app/components/page-signup/controller.ts | 87 -
.../frontend/app/components/page-signup/index.js | 29 -
.../frontend/app/components/page-signup/run.js | 44 -
.../frontend/app/components/page-signup/style.scss | 38 -
.../app/components/page-signup/template.pug | 32 -
.../app/components/panel-collapsible/component.js | 39 -
.../app/components/panel-collapsible/controller.js | 63 -
.../app/components/panel-collapsible/index.js | 25 -
.../app/components/panel-collapsible/index.spec.js | 139 -
.../app/components/panel-collapsible/style.scss | 79 -
.../app/components/panel-collapsible/template.pug | 24 -
.../panel-collapsible/transcludeDirective.js | 51 -
.../app/components/password-visibility/index.js | 26 -
.../components/password-visibility/index.spec.js | 65 -
.../password-visibility/root.directive.js | 49 -
.../app/components/password-visibility/style.scss | 54 -
.../password-visibility/toggle-button.component.js | 49 -
.../permanent-notifications/component.ts | 25 -
.../permanent-notifications/controller.ts | 30 -
.../components/permanent-notifications/index.ts | 21 -
.../components/permanent-notifications/style.scss | 54 -
.../permanent-notifications/template.pug | 23 -
.../app/components/progress-line/component.js | 28 -
.../app/components/progress-line/controller.js | 60 -
.../frontend/app/components/progress-line/index.js | 23 -
.../app/components/progress-line/index.spec.js | 69 -
.../app/components/progress-line/style.scss | 82 -
.../app/components/progress-line/template.pug | 18 -
.../protect-from-bs-select-render/directive.js | 32 -
.../protect-from-bs-select-render/index.js | 24 -
.../app/components/status-output/component.ts | 31 -
.../components/status-output/componentFactory.ts | 30 -
.../app/components/status-output/controller.ts | 53 -
.../frontend/app/components/status-output/index.ts | 40 -
.../app/components/status-output/style.scss | 38 -
.../app/components/status-output/template.tpl.pug | 18 -
.../app/components/timed-redirection/component.ts | 29 -
.../app/components/timed-redirection/controller.ts | 68 -
.../app/components/timed-redirection/index.ts | 23 -
.../app/components/timed-redirection/style.scss | 48 -
.../app/components/timed-redirection/template.pug | 22 -
.../components/ui-grid-column-resizer/directive.js | 29 -
.../app/components/ui-grid-column-resizer/index.js | 24 -
.../app/components/ui-grid-filters/directive.js | 95 -
.../app/components/ui-grid-filters/index.js | 45 -
.../app/components/ui-grid-filters/style.scss | 48 -
.../app/components/ui-grid-filters/template.pug | 57 -
.../app/components/ui-grid-hovering/cell.js | 48 -
.../app/components/ui-grid-hovering/hovering.js | 31 -
.../app/components/ui-grid-hovering/index.js | 30 -
.../app/components/ui-grid-hovering/style.scss | 28 -
.../app/components/ui-grid-hovering/viewport.js | 42 -
.../frontend/app/components/ui-grid/component.js | 49 -
.../frontend/app/components/ui-grid/controller.js | 244 -
.../frontend/app/components/ui-grid/decorator.js | 38 -
.../frontend/app/components/ui-grid/index.js | 25 -
.../frontend/app/components/ui-grid/style.scss | 148 -
.../frontend/app/components/ui-grid/template.pug | 60 -
.../components/user-notifications/controller.js | 56 -
.../app/components/user-notifications/index.js | 26 -
.../app/components/user-notifications/service.js | 76 -
.../app/components/user-notifications/style.scss | 24 -
.../components/user-notifications/template.tpl.pug | 47 -
.../app/components/version-picker/component.js | 57 -
.../app/components/version-picker/index.js | 25 -
.../app/components/version-picker/style.scss | 40 -
.../app/components/version-picker/template.pug | 37 -
.../app/components/web-console-footer/component.js | 25 -
.../components/web-console-footer/controller.ts | 30 -
.../app/components/web-console-footer/index.js | 32 -
.../app/components/web-console-footer/style.scss | 102 -
.../app/components/web-console-footer/template.pug | 32 -
.../app/components/web-console-header/component.ts | 43 -
.../components/demo-mode-button/component.ts | 24 -
.../components/demo-mode-button/controller.ts | 57 -
.../components/demo-mode-button/template.pug | 20 -
.../components/user-menu/component.ts | 25 -
.../components/user-menu/controller.ts | 56 -
.../components/user-menu/style.scss | 43 -
.../components/user-menu/template.pug | 26 -
.../web-console-header-content/component.ts | 25 -
.../web-console-header-content/controller.ts | 46 -
.../web-console-header-content/style.scss | 44 -
.../web-console-header-content/template.pug | 24 -
.../app/components/web-console-header/index.js | 29 -
.../app/components/web-console-header/style.scss | 95 -
.../app/components/web-console-header/template.pug | 28 -
.../components/web-console-sidebar/component.ts | 25 -
.../components/web-console-sidebar/controller.ts | 33 -
.../app/components/web-console-sidebar/index.ts | 25 -
.../app/components/web-console-sidebar/style.scss | 44 -
.../components/web-console-sidebar/template.pug | 22 -
.../web-console-sidebar-navigation/component.ts | 28 -
.../web-console-sidebar-navigation/controller.ts | 26 -
.../web-console-sidebar-navigation/style.scss | 105 -
.../web-console-sidebar-navigation/template.pug | 35 -
.../web-console-sidebar-overflow/component.ts | 26 -
.../web-console-sidebar-overflow/controller.ts | 55 -
.../web-console-sidebar-overflow/style.scss | 52 -
.../web-console-sidebar-overflow/template.pug | 18 -
.../button-download-project/component.ts | 39 -
.../components/button-download-project/index.ts | 23 -
.../button-download-project/template.pug | 22 -
.../components/button-import-models/component.ts | 40 -
.../components/button-import-models/index.ts | 23 -
.../components/button-import-models/style.scss | 25 -
.../components/button-import-models/template.pug | 20 -
.../components/button-preview-project/component.ts | 39 -
.../components/button-preview-project/index.ts | 23 -
.../components/button-preview-project/template.pug | 22 -
.../configuration/components/fakeUICanExit.spec.js | 32 -
.../app/configuration/components/fakeUICanExit.ts | 60 -
.../configuration/components/formUICanExitGuard.ts | 62 -
.../components/modal-import-models/component.js | 1205 --
.../components/modal-import-models/index.ts | 31 -
.../selected-items-amount-indicator/component.ts | 27 -
.../selected-items-amount-indicator/style.scss | 23 -
.../selected-items-amount-indicator/template.pug | 17 -
.../components/modal-import-models/service.ts | 96 -
.../step-indicator/component.ts | 38 -
.../modal-import-models/step-indicator/style.scss | 100 -
.../step-indicator/template.pug | 31 -
.../components/modal-import-models/style.scss | 61 -
.../tables-action-cell/component.ts | 76 -
.../tables-action-cell/style.scss | 48 -
.../tables-action-cell/template.pug | 43 -
.../modal-import-models/template.tpl.pug | 263 -
.../components/modal-preview-project/component.ts | 31 -
.../components/modal-preview-project/controller.ts | 149 -
.../components/modal-preview-project/index.ts | 27 -
.../components/modal-preview-project/service.ts | 50 -
.../components/modal-preview-project/style.scss | 67 -
.../components/modal-preview-project/template.pug | 48 -
.../page-configure-advanced/component.ts | 25 -
.../components/cache-edit-form/component.ts | 32 -
.../components/cache-edit-form/controller.ts | 131 -
.../components/cache-edit-form/index.ts | 23 -
.../components/cache-edit-form/style.scss | 20 -
.../components/cache-edit-form/template.tpl.pug | 44 -
.../cache-edit-form/templates/affinity.pug | 142 -
.../cache-edit-form/templates/concurrency.pug | 87 -
.../cache-edit-form/templates/general.pug | 155 -
.../cache-edit-form/templates/key-cfg.pug | 66 -
.../cache-edit-form/templates/memory.pug | 252 -
.../components/cache-edit-form/templates/misc.pug | 95 -
.../templates/near-cache-client.pug | 67 -
.../templates/near-cache-server.pug | 68 -
.../cache-edit-form/templates/node-filter.pug | 67 -
.../components/cache-edit-form/templates/query.pug | 177 -
.../cache-edit-form/templates/rebalance.pug | 108 -
.../cache-edit-form/templates/statistics.pug | 44 -
.../components/cache-edit-form/templates/store.pug | 432 -
.../components/cluster-edit-form/component.ts | 31 -
.../cluster-edit-form/controller.spec.js | 81 -
.../components/cluster-edit-form/controller.ts | 190 -
.../components/cluster-edit-form/index.ts | 22 -
.../components/cluster-edit-form/style.scss | 20 -
.../components/cluster-edit-form/template.tpl.pug | 90 -
.../cluster-edit-form/templates/atomic.pug | 129 -
.../cluster-edit-form/templates/attributes.pug | 41 -
.../cluster-edit-form/templates/binary.pug | 151 -
.../cluster-edit-form/templates/cache-key-cfg.pug | 66 -
.../cluster-edit-form/templates/checkpoint.pug | 109 -
.../cluster-edit-form/templates/checkpoint/fs.pug | 42 -
.../templates/checkpoint/jdbc.pug | 126 -
.../cluster-edit-form/templates/checkpoint/s3.pug | 443 -
.../templates/client-connector.pug | 184 -
.../cluster-edit-form/templates/collision.pug | 64 -
.../templates/collision/custom.pug | 30 -
.../templates/collision/fifo-queue.pug | 38 -
.../templates/collision/job-stealing.pug | 83 -
.../templates/collision/priority-queue.pug | 79 -
.../cluster-edit-form/templates/communication.pug | 318 -
.../cluster-edit-form/templates/connector.pug | 233 -
.../cluster-edit-form/templates/data-storage.pug | 515 -
.../cluster-edit-form/templates/deployment.pug | 265 -
.../cluster-edit-form/templates/discovery.pug | 259 -
.../cluster-edit-form/templates/encryption.pug | 81 -
.../cluster-edit-form/templates/events.pug | 151 -
.../cluster-edit-form/templates/failover.pug | 189 -
.../cluster-edit-form/templates/general.pug | 101 -
.../templates/general/discovery/cloud.pug | 100 -
.../templates/general/discovery/google.pug | 63 -
.../templates/general/discovery/jdbc.pug | 52 -
.../templates/general/discovery/kubernetes.pug | 59 -
.../templates/general/discovery/multicast.pug | 94 -
.../templates/general/discovery/s3.pug | 55 -
.../templates/general/discovery/shared.pug | 30 -
.../templates/general/discovery/vm.pug | 55 -
.../templates/general/discovery/zookeeper.pug | 115 -
.../retrypolicy/bounded-exponential-backoff.pug | 48 -
.../discovery/zookeeper/retrypolicy/custom.pug | 32 -
.../zookeeper/retrypolicy/exponential-backoff.pug | 48 -
.../discovery/zookeeper/retrypolicy/forever.pug | 30 -
.../discovery/zookeeper/retrypolicy/n-times.pug | 38 -
.../discovery/zookeeper/retrypolicy/one-time.pug | 30 -
.../zookeeper/retrypolicy/until-elapsed.pug | 38 -
.../cluster-edit-form/templates/hadoop.pug | 147 -
.../cluster-edit-form/templates/load-balancing.pug | 183 -
.../cluster-edit-form/templates/logger.pug | 66 -
.../cluster-edit-form/templates/logger/custom.pug | 31 -
.../cluster-edit-form/templates/logger/log4j.pug | 68 -
.../cluster-edit-form/templates/logger/log4j2.pug | 50 -
.../cluster-edit-form/templates/marshaller.pug | 115 -
.../cluster-edit-form/templates/memory.pug | 240 -
.../cluster-edit-form/templates/metrics.pug | 71 -
.../cluster-edit-form/templates/misc.pug | 223 -
.../cluster-edit-form/templates/mvcc.pug | 47 -
.../cluster-edit-form/templates/odbc.pug | 106 -
.../cluster-edit-form/templates/persistence.pug | 247 -
.../cluster-edit-form/templates/service.pug | 114 -
.../cluster-edit-form/templates/sql-connector.pug | 117 -
.../components/cluster-edit-form/templates/ssl.pug | 160 -
.../cluster-edit-form/templates/swap.pug | 105 -
.../cluster-edit-form/templates/thread.pug | 207 -
.../cluster-edit-form/templates/time.pug | 72 -
.../cluster-edit-form/templates/transactions.pug | 124 -
.../components/igfs-edit-form/component.ts | 30 -
.../components/igfs-edit-form/controller.ts | 75 -
.../components/igfs-edit-form/index.ts | 22 -
.../components/igfs-edit-form/style.scss | 20 -
.../components/igfs-edit-form/template.tpl.pug | 35 -
.../components/igfs-edit-form/templates/dual.pug | 59 -
.../igfs-edit-form/templates/fragmentizer.pug | 67 -
.../igfs-edit-form/templates/general.pug | 73 -
.../components/igfs-edit-form/templates/ipc.pug | 105 -
.../components/igfs-edit-form/templates/misc.pug | 209 -
.../igfs-edit-form/templates/secondary.pug | 307 -
.../components/model-edit-form/component.js | 31 -
.../components/model-edit-form/controller.ts | 193 -
.../components/model-edit-form/index.js | 22 -
.../components/model-edit-form/style.scss | 20 -
.../components/model-edit-form/template.tpl.pug | 29 -
.../model-edit-form/templates/general.pug | 89 -
.../components/model-edit-form/templates/query.pug | 362 -
.../components/model-edit-form/templates/store.pug | 152 -
.../page-configure-advanced-caches/component.ts | 25 -
.../page-configure-advanced-caches/controller.ts | 167 -
.../page-configure-advanced-caches/index.ts | 23 -
.../page-configure-advanced-caches/template.pug | 57 -
.../page-configure-advanced-cluster/component.ts | 25 -
.../page-configure-advanced-cluster/controller.ts | 62 -
.../page-configure-advanced-cluster/index.ts | 23 -
.../page-configure-advanced-cluster/template.pug | 25 -
.../page-configure-advanced-igfs/component.ts | 25 -
.../page-configure-advanced-igfs/controller.ts | 156 -
.../page-configure-advanced-igfs/index.ts | 23 -
.../page-configure-advanced-igfs/template.pug | 51 -
.../page-configure-advanced-models/component.ts | 26 -
.../page-configure-advanced-models/controller.ts | 176 -
.../hasIndex.template.pug | 23 -
.../page-configure-advanced-models/index.ts | 23 -
.../keyCell.template.pug | 21 -
.../page-configure-advanced-models/style.scss | 37 -
.../page-configure-advanced-models/template.pug | 51 -
.../valueCell.template.pug | 18 -
.../page-configure-advanced/controller.ts | 31 -
.../components/page-configure-advanced/index.ts | 40 -
.../components/page-configure-advanced/style.scss | 96 -
.../page-configure-advanced/template.pug | 24 -
.../components/page-configure-basic/component.ts | 25 -
.../components/page-configure-basic/controller.ts | 210 -
.../components/page-configure-basic/index.ts | 28 -
.../page-configure-basic/reducer.spec.js | 208 -
.../components/page-configure-basic/reducer.ts | 109 -
.../components/page-configure-basic/style.scss | 136 -
.../components/page-configure-basic/template.pug | 198 -
.../page-configure-overview/component.ts | 25 -
.../pco-grid-column-categories/directive.ts | 66 -
.../page-configure-overview/controller.ts | 166 -
.../components/page-configure-overview/index.ts | 26 -
.../components/page-configure-overview/style.scss | 33 -
.../page-configure-overview/template.pug | 44 -
.../components/page-configure/component.ts | 28 -
.../components/page-configure/controller.ts | 51 -
.../components/page-configure/index.ts | 21 -
.../components/page-configure/style.scss | 334 -
.../components/page-configure/template.pug | 49 -
.../components/pc-items-table/component.js | 45 -
.../components/pc-items-table/controller.js | 143 -
.../components/pc-items-table/decorator.js | 34 -
.../components/pc-items-table/index.js | 25 -
.../components/pc-items-table/style.scss | 68 -
.../components/pc-items-table/template.pug | 46 -
.../components/pc-split-button/component.ts | 27 -
.../components/pc-split-button/controller.ts | 34 -
.../components/pc-split-button/index.ts | 23 -
.../components/pc-split-button/template.pug | 28 -
.../components/pc-ui-grid-filters/directive.ts | 65 -
.../components/pc-ui-grid-filters/index.ts | 46 -
.../components/pc-ui-grid-filters/style.scss | 22 -
.../components/pc-ui-grid-filters/template.pug | 39 -
.../configuration/components/pcIsInCollection.ts | 46 -
.../app/configuration/components/pcValidation.ts | 117 -
.../components/preview-panel/directive.ts | 242 -
.../components/preview-panel/index.ts | 23 -
.../configuration/components/ui-ace-java/index.ts | 26 -
.../ui-ace-java/ui-ace-java.controller.ts | 22 -
.../ui-ace-java/ui-ace-java.directive.ts | 44 -
.../components/ui-ace-java/ui-ace-java.pug | 22 -
.../components/ui-ace-spring/index.ts | 26 -
.../ui-ace-spring/ui-ace-spring.controller.ts | 22 -
.../ui-ace-spring/ui-ace-spring.directive.ts | 44 -
.../components/ui-ace-spring/ui-ace-spring.pug | 17 -
.../components/ui-ace-tabs.directive.ts | 26 -
.../configuration/components/ui-ace.controller.js | 123 -
.../frontend/app/configuration/defaultNames.ts | 23 -
.../generator/JavaTypesNonEnum.service.spec.ts | 38 -
.../generator/JavaTypesNonEnum.service.ts | 62 -
.../generator/configuration.module.js | 60 -
.../generator/generator/AbstractTransformer.js | 423 -
.../generator/ArtifactVersionChecker.service.js | 86 -
.../app/configuration/generator/generator/Beans.js | 424 -
.../generator/generator/ConfigurationGenerator.js | 2999 ----
.../generator/generator/Custom.service.js | 23 -
.../generator/generator/Docker.service.js | 109 -
.../generator/generator/Docker.service.spec.js | 133 -
.../generator/generator/JavaTransformer.service.js | 1808 ---
.../generator/generator/Maven.service.js | 267 -
.../generator/generator/PlatformGenerator.js | 531 -
.../generator/generator/Properties.service.js | 94 -
.../generator/generator/Readme.service.js | 78 -
.../generator/SharpTransformer.service.js | 258 -
.../generator/SpringTransformer.service.js | 346 -
.../generator/generator/StringBuilder.js | 76 -
.../generator/defaults/Cache.platform.service.js | 56 -
.../generator/generator/defaults/Cache.service.js | 151 -
.../generator/defaults/Cluster.platform.service.js | 43 -
.../generator/defaults/Cluster.service.js | 475 -
.../generator/defaults/Event-groups.service.js | 27 -
.../generator/generator/defaults/IGFS.service.js | 78 -
.../app/configuration/icons/configuration.icon.svg | 13 -
.../frontend/app/configuration/index.lazy.ts | 48 -
.../frontend/app/configuration/index.ts | 193 -
.../frontend/app/configuration/mixins.pug | 419 -
.../frontend/app/configuration/services/Caches.ts | 236 -
.../app/configuration/services/Clusters.spec.js | 55 -
.../app/configuration/services/Clusters.ts | 601 -
.../services/ConfigChangesGuard.spec.js | 40 -
.../configuration/services/ConfigChangesGuard.ts | 96 -
.../services/ConfigSelectionManager.ts | 93 -
.../services/ConfigurationDownload.spec.js | 110 -
.../services/ConfigurationDownload.ts | 82 -
.../services/ConfigurationResource.spec.js | 78 -
.../services/ConfigurationResource.ts | 48 -
.../app/configuration/services/ConfigureState.ts | 62 -
.../frontend/app/configuration/services/IGFSs.ts | 93 -
.../frontend/app/configuration/services/Models.ts | 199 -
.../app/configuration/services/PageConfigure.ts | 57 -
.../app/configuration/services/SummaryZipper.ts | 41 -
.../app/configuration/services/summary.worker.js | 147 -
.../frontend/app/configuration/states.ts | 289 -
.../app/configuration/store/actionCreators.js | 170 -
.../app/configuration/store/actionTypes.js | 31 -
.../frontend/app/configuration/store/effects.js | 763 -
.../app/configuration/store/effects.spec.js | 134 -
.../frontend/app/configuration/store/reducer.js | 502 -
.../app/configuration/store/reducer.spec.js | 275 -
.../frontend/app/configuration/store/selectors.ts | 209 -
.../configuration/transitionHooks/errorState.ts | 55 -
.../frontend/app/configuration/types/index.ts | 140 -
.../app/core/activities/Activities.data.ts | 51 -
.../frontend/app/core/admin/Admin.data.js | 102 -
modules/web-console/frontend/app/core/index.js | 25 -
.../frontend/app/core/utils/maskNull.js | 21 -
modules/web-console/frontend/app/data/colors.json | 22 -
.../web-console/frontend/app/data/countries.json | 179 -
.../web-console/frontend/app/data/demo-info.json | 14 -
.../web-console/frontend/app/data/dialects.json | 9 -
.../frontend/app/data/event-groups.json | 169 -
.../frontend/app/data/getting-started.json | 129 -
modules/web-console/frontend/app/data/i18n.js | 308 -
.../frontend/app/data/java-classes.json | 21 -
.../frontend/app/data/java-keywords.json | 55 -
.../frontend/app/data/java-primitives.json | 9 -
.../web-console/frontend/app/data/jdbc-types.json | 44 -
.../frontend/app/data/pom-dependencies.json | 28 -
.../frontend/app/data/sql-keywords.json | 41 -
.../app/directives/auto-focus.directive.js | 35 -
.../frontend/app/directives/btn-ignite-link.js | 29 -
.../app/directives/copy-to-clipboard.directive.js | 38 -
.../hide-on-state-change.directive.js | 36 -
.../frontend/app/directives/match.directive.js | 47 -
.../app/directives/match.directive.spec.js | 84 -
.../app/directives/on-click-focus.directive.js | 38 -
.../directives/on-enter-focus-move.directive.js | 41 -
.../frontend/app/directives/on-enter.directive.js | 44 -
.../frontend/app/directives/on-escape.directive.js | 44 -
.../app/directives/on-focus-out.directive.js | 107 -
.../app/directives/retain-selection.directive.js | 78 -
.../frontend/app/errors/CancellationError.js | 28 -
.../frontend/app/filters/byName.filter.js | 25 -
.../frontend/app/filters/bytes.filter.js | 40 -
.../frontend/app/filters/bytes.filter.spec.js | 36 -
.../frontend/app/filters/default-name.filter.js | 29 -
.../app/filters/domainsValidation.filter.js | 51 -
.../frontend/app/filters/duration.filter.js | 47 -
.../frontend/app/filters/hasPojo.filter.js | 21 -
.../web-console/frontend/app/filters/id8.filter.js | 22 -
.../app/filters/uiGridSubcategories.filter.js | 26 -
.../frontend/app/helpers/jade/mixins.pug | 22 -
.../web-console/frontend/app/modules/ace.module.js | 284 -
.../app/modules/agent/AgentManager.service.js | 861 --
.../app/modules/agent/AgentModal.service.js | 98 -
.../frontend/app/modules/agent/agent.module.js | 30 -
.../agent/components/cluster-login/component.js | 45 -
.../agent/components/cluster-login/index.js | 25 -
.../agent/components/cluster-login/service.js | 85 -
.../agent/components/cluster-login/template.pug | 58 -
.../app/modules/agent/decompress.worker.js | 36 -
.../frontend/app/modules/agent/types/Cluster.js | 37 -
.../app/modules/agent/types/ClusterSecrets.js | 61 -
.../modules/agent/types/ClusterSecretsManager.js | 70 -
.../app/modules/branding/branding.module.js | 41 -
.../app/modules/branding/branding.service.js | 46 -
.../app/modules/branding/features.directive.js | 40 -
.../app/modules/branding/terms.directive.js | 35 -
.../frontend/app/modules/cluster/Cache.js | 52 -
.../frontend/app/modules/cluster/CacheMetrics.js | 62 -
.../frontend/app/modules/cluster/NodeMetrics.js | 19 -
.../frontend/app/modules/demo/Demo.module.js | 182 -
.../app/modules/dialog/dialog-content.directive.js | 31 -
.../app/modules/dialog/dialog-title.directive.js | 31 -
.../app/modules/dialog/dialog.controller.js | 38 -
.../app/modules/dialog/dialog.directive.js | 32 -
.../frontend/app/modules/dialog/dialog.factory.js | 36 -
.../frontend/app/modules/dialog/dialog.module.js | 32 -
.../frontend/app/modules/dialog/dialog.tpl.pug | 26 -
.../form/field/bs-select-placeholder.directive.js | 57 -
.../form/field/input/autofocus.directive.js | 42 -
.../frontend/app/modules/form/form.module.js | 60 -
.../app/modules/form/services/FormGUID.service.js | 22 -
.../modules/form/validator/ipaddress.directive.js | 99 -
.../validator/java-built-in-class.directive.js | 48 -
.../form/validator/java-identifier.directive.js | 51 -
.../form/validator/java-keywords.directive.js | 52 -
.../form/validator/java-package-name.directive.js | 44 -
.../validator/java-package-specified.directive.js | 52 -
.../form/validator/property-unique.directive.js | 60 -
.../property-value-specified.directive.js | 39 -
.../app/modules/form/validator/unique.directive.js | 92 -
.../app/modules/form/validator/uuid.directive.js | 44 -
.../getting-started/GettingStarted.provider.js | 146 -
.../app/modules/loading/loading.directive.js | 57 -
.../frontend/app/modules/loading/loading.module.js | 26 -
.../frontend/app/modules/loading/loading.pug | 23 -
.../frontend/app/modules/loading/loading.scss | 73 -
.../app/modules/loading/loading.service.js | 54 -
.../app/modules/navbar/Userbar.provider.js | 30 -
.../frontend/app/modules/navbar/navbar.module.js | 26 -
.../frontend/app/modules/nodes/Nodes.service.js | 68 -
.../app/modules/nodes/nodes-dialog.controller.js | 70 -
.../frontend/app/modules/nodes/nodes-dialog.scss | 32 -
.../app/modules/nodes/nodes-dialog.tpl.pug | 42 -
.../frontend/app/modules/nodes/nodes.module.js | 27 -
.../frontend/app/modules/socket.module.js | 47 -
.../frontend/app/modules/states/admin.state.js | 35 -
.../frontend/app/modules/states/errors.state.js | 51 -
.../frontend/app/modules/states/logout.state.js | 33 -
.../frontend/app/modules/states/settings.state.js | 33 -
.../frontend/app/modules/user/Auth.service.ts | 98 -
.../frontend/app/modules/user/User.service.js | 85 -
.../modules/user/emailConfirmationInterceptor.ts | 37 -
.../frontend/app/modules/user/permissions.js | 28 -
.../frontend/app/modules/user/user.module.js | 111 -
.../frontend/app/primitives/badge/index.scss | 40 -
.../frontend/app/primitives/btn-group/index.pug | 39 -
.../frontend/app/primitives/btn/index.scss | 375 -
.../frontend/app/primitives/checkbox/index.scss | 32 -
.../frontend/app/primitives/datepicker/index.pug | 65 -
.../frontend/app/primitives/datepicker/index.scss | 42 -
.../frontend/app/primitives/dropdown/index.pug | 42 -
.../frontend/app/primitives/dropdown/index.scss | 79 -
.../app/primitives/form-field/checkbox.pug | 31 -
.../app/primitives/form-field/dropdown.pug | 59 -
.../frontend/app/primitives/form-field/email.pug | 38 -
.../frontend/app/primitives/form-field/error.pug | 30 -
.../frontend/app/primitives/form-field/index.pug | 29 -
.../frontend/app/primitives/form-field/index.scss | 706 -
.../frontend/app/primitives/form-field/input.pug | 29 -
.../frontend/app/primitives/form-field/label.pug | 31 -
.../frontend/app/primitives/form-field/number.pug | 48 -
.../app/primitives/form-field/password.pug | 53 -
.../frontend/app/primitives/form-field/phone.pug | 37 -
.../frontend/app/primitives/form-field/radio.pug | 32 -
.../frontend/app/primitives/form-field/text.pug | 36 -
.../frontend/app/primitives/form-field/tooltip.pug | 26 -
.../app/primitives/form-field/typeahead.pug | 55 -
.../frontend/app/primitives/grid/index.scss | 42 -
.../web-console/frontend/app/primitives/index.js | 37 -
.../frontend/app/primitives/modal/index.scss | 269 -
.../frontend/app/primitives/page/index.scss | 34 -
.../frontend/app/primitives/panel/index.scss | 132 -
.../app/primitives/spinner-circle/index.scss | 59 -
.../frontend/app/primitives/switcher/index.pug | 20 -
.../frontend/app/primitives/switcher/index.scss | 119 -
.../frontend/app/primitives/table/index.scss | 90 -
.../frontend/app/primitives/tabs/index.scss | 95 -
.../frontend/app/primitives/timepicker/index.pug | 63 -
.../frontend/app/primitives/timepicker/index.scss | 90 -
.../frontend/app/primitives/tooltip/index.scss | 40 -
.../frontend/app/primitives/typography/index.scss | 36 -
.../app/primitives/ui-grid-header/index.scss | 133 -
.../app/primitives/ui-grid-header/index.tpl.pug | 37 -
.../app/primitives/ui-grid-settings/index.scss | 272 -
.../frontend/app/primitives/ui-grid/index.scss | 554 -
.../app/services/AngularStrapSelect.decorator.js | 78 -
.../app/services/AngularStrapTooltip.decorator.js | 103 -
modules/web-console/frontend/app/services/CSV.js | 22 -
.../frontend/app/services/ChartColors.service.js | 22 -
.../frontend/app/services/Confirm.service.js | 118 -
.../frontend/app/services/ConfirmBatch.service.js | 101 -
.../app/services/CopyToClipboard.service.js | 62 -
.../frontend/app/services/Countries.service.js | 43 -
.../frontend/app/services/DefaultState.js | 39 -
.../frontend/app/services/ErrorParser.service.js | 89 -
.../frontend/app/services/ErrorPopover.service.js | 125 -
.../frontend/app/services/Focus.service.js | 41 -
.../frontend/app/services/FormUtils.service.js | 464 -
.../frontend/app/services/InetAddress.service.js | 55 -
.../frontend/app/services/JavaTypes.service.js | 163 -
.../frontend/app/services/JavaTypes.spec.js | 120 -
.../frontend/app/services/LegacyTable.service.js | 235 -
.../frontend/app/services/LegacyUtils.service.js | 556 -
.../frontend/app/services/Messages.service.js | 75 -
.../app/services/ModelNormalizer.service.js | 61 -
.../frontend/app/services/SqlTypes.service.js | 67 -
.../frontend/app/services/Version.service.js | 198 -
.../frontend/app/services/Version.spec.js | 106 -
.../frontend/app/services/exceptionHandler.js | 36 -
modules/web-console/frontend/app/services/index.js | 25 -
modules/web-console/frontend/app/services/store.ts | 73 -
.../web-console/frontend/app/store/actions/ui.ts | 36 -
.../web-console/frontend/app/store/actions/user.ts | 24 -
.../web-console/frontend/app/store/effects/ui.ts | 32 -
modules/web-console/frontend/app/store/index.ts | 48 -
modules/web-console/frontend/app/store/ofType.ts | 26 -
.../web-console/frontend/app/store/reducers/ui.ts | 50 -
.../web-console/frontend/app/store/reduxDebug.ts | 45 -
.../frontend/app/store/reduxDevtoolsIntegration.js | 80 -
.../web-console/frontend/app/store/selectors/ui.ts | 29 -
modules/web-console/frontend/app/style.scss | 22 -
modules/web-console/frontend/app/types/index.ts | 82 -
.../frontend/app/utils/SimpleWorkerPool.js | 115 -
.../web-console/frontend/app/utils/dialogState.ts | 56 -
modules/web-console/frontend/app/utils/id8.js | 20 -
.../web-console/frontend/app/utils/lodashMixins.js | 23 -
.../web-console/frontend/app/utils/uniqueName.js | 27 -
modules/web-console/frontend/app/vendor.js | 59 -
modules/web-console/frontend/index.js | 23 -
modules/web-console/frontend/package-lock.json | 14224 -------------------
modules/web-console/frontend/package.json | 147 -
modules/web-console/frontend/public/favicon.ico | Bin 1150 -> 0 bytes
.../web-console/frontend/public/images/cache.png | Bin 15087 -> 0 bytes
.../frontend/public/images/checkbox-active.svg | 25 -
.../frontend/public/images/checkbox.svg | 22 -
.../frontend/public/images/cluster-quick.png | Bin 16407 -> 0 bytes
.../web-console/frontend/public/images/cluster.png | Bin 24083 -> 0 bytes
.../frontend/public/images/collapse.svg | 3 -
.../web-console/frontend/public/images/domains.png | Bin 17899 -> 0 bytes
.../web-console/frontend/public/images/expand.svg | 3 -
.../frontend/public/images/icons/alert.icon.svg | 1 -
.../public/images/icons/attention.icon.svg | 3 -
.../frontend/public/images/icons/check.icon.svg | 3 -
.../public/images/icons/checkmark.icon.svg | 3 -
.../frontend/public/images/icons/clock.icon.svg | 1 -
.../frontend/public/images/icons/cluster.icon.svg | 10 -
.../frontend/public/images/icons/collapse.icon.svg | 3 -
.../frontend/public/images/icons/copy.icon.svg | 3 -
.../frontend/public/images/icons/cross.icon.svg | 1 -
.../frontend/public/images/icons/csv.icon.svg | 1 -
.../frontend/public/images/icons/download.icon.svg | 2 -
.../public/images/icons/downloadAgent.icon.svg | 16 -
.../public/images/icons/exclamation.icon.svg | 3 -
.../frontend/public/images/icons/exit.icon.svg | 3 -
.../frontend/public/images/icons/expand.icon.svg | 3 -
.../public/images/icons/eyeClosed.icon.svg | 6 -
.../public/images/icons/eyeOpened.icon.svg | 7 -
.../frontend/public/images/icons/filter.icon.svg | 1 -
.../frontend/public/images/icons/gear.icon.svg | 1 -
.../frontend/public/images/icons/home.icon.svg | 3 -
.../frontend/public/images/icons/index.js | 48 -
.../frontend/public/images/icons/info.icon.svg | 3 -
.../public/images/icons/lockClosed.icon.svg | 3 -
.../public/images/icons/lockOpened.icon.svg | 3 -
.../frontend/public/images/icons/manual.icon.svg | 1 -
.../frontend/public/images/icons/menu.icon.svg | 7 -
.../frontend/public/images/icons/plus.icon.svg | 2 -
.../frontend/public/images/icons/refresh.icon.svg | 1 -
.../frontend/public/images/icons/search.icon.svg | 1 -
.../frontend/public/images/icons/sort.icon.svg | 1 -
.../frontend/public/images/icons/sql.icon.svg | 3 -
.../public/images/icons/structure.icon.svg | 3 -
.../web-console/frontend/public/images/igfs.png | Bin 14683 -> 0 bytes
.../frontend/public/images/ignite-logo.svg | 17 -
.../frontend/public/images/ignite-puzzle.png | Bin 71974 -> 0 bytes
.../frontend/public/images/multicluster.png | Bin 31178 -> 0 bytes
.../public/images/page-landing-ui-sample.png | Bin 20468 -> 0 bytes
.../frontend/public/images/pb-ignite.png | Bin 3493 -> 0 bytes
.../web-console/frontend/public/images/preview.png | Bin 29829 -> 0 bytes
.../frontend/public/images/query-table.png | Bin 19943 -> 0 bytes
.../public/stylesheets/_bootstrap-custom.scss | 64 -
.../public/stylesheets/_bootstrap-variables.scss | 891 --
.../public/stylesheets/_font-awesome-custom.scss | 104 -
.../frontend/public/stylesheets/blocks/error.scss | 31 -
.../frontend/public/stylesheets/form-field.scss | 145 -
.../frontend/public/stylesheets/style.scss | 2171 ---
.../frontend/public/stylesheets/variables.scss | 39 -
.../frontend/test/check-doc-links/Dockerfile | 31 -
.../test/check-doc-links/check-doc-links.js | 151 -
.../test/check-doc-links/docker-compose.yml | 25 -
modules/web-console/frontend/test/ci/.dockerignore | 4 -
modules/web-console/frontend/test/ci/Dockerfile | 34 -
.../frontend/test/ci/docker-compose.yml | 25 -
modules/web-console/frontend/test/karma.conf.js | 112 -
.../frontend/test/unit/SqlTypes.test.js | 52 -
.../frontend/test/unit/UserAuth.test.js | 37 -
.../frontend/test/unit/defaultName.filter.test.js | 40 -
modules/web-console/frontend/tsconfig.json | 15 -
modules/web-console/frontend/views/base.pug | 23 -
modules/web-console/frontend/views/index.pug | 45 -
modules/web-console/frontend/views/public.pug | 20 -
.../frontend/views/sql/cache-metadata.tpl.pug | 41 -
.../frontend/views/sql/chart-settings.tpl.pug | 40 -
.../frontend/views/sql/paragraph-rate.tpl.pug | 46 -
.../views/templates/agent-download.tpl.pug | 69 -
.../frontend/views/templates/alert.tpl.pug | 21 -
.../frontend/views/templates/batch-confirm.tpl.pug | 47 -
.../frontend/views/templates/confirm.tpl.pug | 34 -
.../frontend/views/templates/demo-info.tpl.pug | 53 -
.../frontend/views/templates/dropdown.tpl.pug | 24 -
.../views/templates/getting-started.tpl.pug | 39 -
.../frontend/views/templates/message.tpl.pug | 32 -
.../views/templates/validation-error.tpl.pug | 25 -
.../web-console/frontend/webpack/webpack.common.js | 163 -
.../web-console/frontend/webpack/webpack.dev.js | 97 -
.../web-console/frontend/webpack/webpack.prod.js | 61 -
.../web-console/frontend/webpack/webpack.test.js | 45 -
modules/web-console/licenses/apache-2.0.txt | 202 -
modules/web-console/licenses/cc-by-3.0.txt | 319 -
modules/web-console/pom.xml | 431 -
.../console/configuration/FieldProcessingInfo.java | 89 -
.../ignite/console/configuration/MetadataInfo.java | 69 -
.../WebConsoleConfigurationSelfTest.java | 1118 --
.../ignite/console/configuration/WrongFields.java | 76 -
.../console/testsuites/WebConsoleTestSuite.java | 32 -
modules/web-console/web-agent/.gitignore | 2 -
modules/web-console/web-agent/README.txt | 123 -
.../web-agent/assembly/release-web-agent.xml | 66 -
.../web-console/web-agent/bin/ignite-web-agent.bat | 143 -
.../web-console/web-agent/bin/ignite-web-agent.sh | 91 -
.../web-console/web-agent/bin/include/functions.sh | 83 -
modules/web-console/web-agent/demo/README.txt | 4 -
modules/web-console/web-agent/demo/db-init.sql | 102 -
.../web-console/web-agent/jdbc-drivers/README.txt | 10 -
modules/web-console/web-agent/logs/README.txt | 5 -
modules/web-console/web-agent/pom.xml | 213 -
.../ignite/console/agent/AgentConfiguration.java | 619 -
.../apache/ignite/console/agent/AgentLauncher.java | 518 -
.../apache/ignite/console/agent/AgentUtils.java | 333 -
.../ignite/console/agent/ProxyAuthException.java | 42 -
.../ignite/console/agent/ProxyAuthenticator.java | 82 -
.../apache/ignite/console/agent/db/DbColumn.java | 95 -
.../ignite/console/agent/db/DbMetadataReader.java | 142 -
.../apache/ignite/console/agent/db/DbSchema.java | 60 -
.../apache/ignite/console/agent/db/DbTable.java | 87 -
.../agent/db/dialect/DB2MetadataDialect.java | 33 -
.../agent/db/dialect/DatabaseMetadataDialect.java | 127 -
.../agent/db/dialect/JdbcMetadataDialect.java | 246 -
.../agent/db/dialect/MySQLMetadataDialect.java | 88 -
.../agent/db/dialect/OracleMetadataDialect.java | 425 -
.../console/agent/handlers/AbstractListener.java | 136 -
.../console/agent/handlers/ClusterListener.java | 525 -
.../console/agent/handlers/DatabaseListener.java | 354 -
.../console/agent/handlers/RestListener.java | 100 -
.../ignite/console/agent/rest/RestExecutor.java | 409 -
.../ignite/console/agent/rest/RestResult.java | 114 -
.../ignite/console/demo/AgentClusterDemo.java | 318 -
.../apache/ignite/console/demo/AgentDemoUtils.java | 79 -
.../ignite/console/demo/AgentMetadataDemo.java | 99 -
.../org/apache/ignite/console/demo/model/Car.java | 152 -
.../apache/ignite/console/demo/model/Country.java | 152 -
.../ignite/console/demo/model/Department.java | 152 -
.../apache/ignite/console/demo/model/Employee.java | 356 -
.../apache/ignite/console/demo/model/Parking.java | 152 -
.../demo/service/DemoCachesLoadService.java | 498 -
.../demo/service/DemoComputeLoadService.java | 78 -
.../demo/service/DemoRandomCacheLoadService.java | 121 -
.../demo/service/DemoServiceClusterSingleton.java | 41 -
.../demo/service/DemoServiceKeyAffinity.java | 41 -
.../demo/service/DemoServiceMultipleInstances.java | 41 -
.../demo/service/DemoServiceNodeSingleton.java | 41 -
.../console/demo/task/DemoCancellableTask.java | 93 -
.../ignite/console/demo/task/DemoComputeTask.java | 105 -
.../web-agent/src/main/resources/log4j.properties | 52 -
.../console/agent/rest/RestExecutorSelfTest.java | 328 -
.../ignite/testsuites/IgniteWebAgentTestSuite.java | 33 -
.../web-agent/src/test/resources/ca.jks | Bin 1394 -> 0 bytes
.../web-agent/src/test/resources/client.jks | Bin 2030 -> 0 bytes
.../web-agent/src/test/resources/generate.bat | 122 -
.../web-agent/src/test/resources/generate.sh | 111 -
.../src/test/resources/jetty-with-ciphers-0.xml | 94 -
.../src/test/resources/jetty-with-ciphers-1.xml | 94 -
.../src/test/resources/jetty-with-ciphers-2.xml | 94 -
.../src/test/resources/jetty-with-ssl.xml | 89 -
.../web-agent/src/test/resources/server.jks | Bin 1419 -> 0 bytes
parent/pom.xml | 16 -
pom.xml | 10 -
1084 files changed, 118962 deletions(-)
diff --git a/.gitignore b/.gitignore
index 2e01d60..dea16dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -67,7 +67,6 @@ ipch/
!/bin
!/modules/core/src/test/bin
!/modules/sqlline/bin
-!/modules/web-console/web-agent/bin
[Dd]ebug*/
[Rr]elease*/
packages
diff --git a/assembly/dependencies-apache-ignite-lgpl.xml b/assembly/dependencies-apache-ignite-lgpl.xml
index fe2932e..7337210 100644
--- a/assembly/dependencies-apache-ignite-lgpl.xml
+++ b/assembly/dependencies-apache-ignite-lgpl.xml
@@ -132,7 +132,6 @@
<exclude>org.apache.ignite:ignite-cassandra</exclude>
<exclude>org.apache.ignite:ignite-yardstick</exclude>
<exclude>org.apache.ignite:ignite-benchmarks</exclude>
- <exclude>org.apache.ignite:ignite-web-agent</exclude>
<exclude>org.apache.ignite:ignite-dev-utils</exclude>
<exclude>org.apache.ignite:ignite-extdata-platform</exclude>
<exclude>org.apache.ignite:ignite-compatibility</exclude>
diff --git a/assembly/dependencies-apache-ignite-slim.xml b/assembly/dependencies-apache-ignite-slim.xml
index 25c2497..a4122f8 100644
--- a/assembly/dependencies-apache-ignite-slim.xml
+++ b/assembly/dependencies-apache-ignite-slim.xml
@@ -138,7 +138,6 @@
<exclude>org.apache.ignite:ignite-cassandra</exclude>
<exclude>org.apache.ignite:ignite-yardstick</exclude>
<exclude>org.apache.ignite:ignite-benchmarks</exclude>
- <exclude>org.apache.ignite:ignite-web-agent</exclude>
<exclude>org.apache.ignite:ignite-dev-utils</exclude>
<exclude>org.apache.ignite:ignite-extdata-platform</exclude>
<exclude>org.apache.ignite:ignite-compatibility</exclude>
diff --git a/assembly/dependencies-apache-ignite.xml b/assembly/dependencies-apache-ignite.xml
index d2b04dc..28e15db 100644
--- a/assembly/dependencies-apache-ignite.xml
+++ b/assembly/dependencies-apache-ignite.xml
@@ -139,7 +139,6 @@
<exclude>org.apache.ignite:ignite-cassandra</exclude>
<exclude>org.apache.ignite:ignite-yardstick</exclude>
<exclude>org.apache.ignite:ignite-benchmarks</exclude>
- <exclude>org.apache.ignite:ignite-web-agent</exclude>
<exclude>org.apache.ignite:ignite-dev-utils</exclude>
<exclude>org.apache.ignite:ignite-extdata-platform</exclude>
<exclude>org.apache.ignite:ignite-compatibility</exclude>
diff --git a/docker/web-agent/Dockerfile b/docker/web-agent/Dockerfile
deleted file mode 100644
index 7e45ad3..0000000
--- a/docker/web-agent/Dockerfile
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Start from Java 8 based on Alpine Linux image (~5Mb)
-FROM openjdk:8-jre-alpine
-
-# Provide default arguments
-ARG DEFAULT_DRIVER_FOLDER="/opt/ignite/drivers"
-ARG DEFAULT_NODE_URI="http://localhost:8080"
-ARG DEFAULT_SERVER_URI="http://localhost"
-ARG DEFAULT_TOKENS="NO_TOKENS"
-
-ENV DRIVER_FOLDER=$DEFAULT_DRIVER_FOLDER
-ENV NODE_URI=$DEFAULT_NODE_URI
-ENV SERVER_URI=$DEFAULT_SERVER_URI
-ENV TOKENS=$DEFAULT_TOKENS
-
-# Settings
-USER root
-ENV AGENT_HOME /opt/ignite/ignite-web-agent
-WORKDIR ${AGENT_HOME}
-
-# Add missing software
-RUN apk --no-cache \
- add bash
-
-# Copy main binary archive
-COPY ignite-web-agent* ./
-
-# Entrypoint
-CMD ./ignite-web-agent.sh -d ${DRIVER_FOLDER} -n ${NODE_URI} -s ${SERVER_URI} -t ${TOKENS}
-
diff --git a/docker/web-agent/README.txt b/docker/web-agent/README.txt
deleted file mode 100644
index 376e333..0000000
--- a/docker/web-agent/README.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-Apache Ignite Web Agent Docker module
-=====================================
-Apache Ignite Web Agent Docker module provides Dockerfile and accompanying files
-for building docker image of Web Agent.
-
-
-Build image
-===========
-1) Build Apache Ignite Web Console module
-
- mvn clean install -T 2C \
- -Pall-java,all-scala,licenses,web-console \
- -pl :ignite-web-console -am \
- -DskipTests
-
-2) Go to Apache Ignite Web Console Docker module directory and copy Apache
- Ignite Web Agent's binary archive
-
- cd docker/web-agent
- cp -rfv ../../modules/web-console/web-agent/target/ignite-web-agent-*.zip ./
-
-3) Unpack and remove Apache Ignite Web Agent's binary archive
-
- unzip ignite-web-agent-*.zip
- rm -rf ignite-web-agent-*.zip
-
-4) Build docker image
-
- docker build . -t apacheignite/web-agent[:<version>]
-
- Prepared image will be available in local docker registry (can be seen
- issuing `docker images` command)
-
-5) Clean up
-
- rm -rf ignite-web-agent*
diff --git a/docker/web-console/standalone/Dockerfile b/docker/web-console/standalone/Dockerfile
deleted file mode 100644
index bd03c7d..0000000
--- a/docker/web-console/standalone/Dockerfile
+++ /dev/null
@@ -1,84 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-#~~~~~~~~~~~~~~~~~~#
-# Frontend build #
-#~~~~~~~~~~~~~~~~~~#
-FROM node:10-stretch as frontend-build
-
-ENV NPM_CONFIG_LOGLEVEL error
-
-WORKDIR /opt/web-console
-
-# Install node modules and build sources
-COPY frontend frontend
-RUN cd frontend && \
- npm install --no-optional && \
- npm run build
-
-
-#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
-# Web Console Standalone assemble #
-#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
-FROM node:10-stretch
-
-ENV NPM_CONFIG_LOGLEVEL error
-
-# Install global node packages
-RUN npm install -g pm2
-
-# Update software sources and install missing applications
-RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 \
- && echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
- apt update && \
- apt install -y --no-install-recommends \
- nginx-light \
- mongodb-org-server \
- dos2unix && \
- apt-get clean && \
- rm -rf /var/lib/apt/lists/*
-
-WORKDIR /opt/web-console
-
-# Install node modules for backend
-COPY backend/package*.json backend/
-RUN cd backend && \
- npm install --no-optional --production
-
-# Copy and build sources
-COPY backend backend
-RUN cd backend && \
- npm run build
-
-# Copy Ignite Web Agent module package
-COPY ignite-web-agent-*.zip backend/agent_dists
-
-# Copy previously built frontend
-COPY --from=frontend-build /opt/web-console/frontend/build static
-
-# Copy and fix entrypoint script
-COPY docker-entrypoint.sh docker-entrypoint.sh
-RUN chmod +x docker-entrypoint.sh \
- && dos2unix docker-entrypoint.sh
-
-# Copy nginx configuration
-COPY nginx/* /etc/nginx/
-
-EXPOSE 80
-
-ENTRYPOINT ["/opt/web-console/docker-entrypoint.sh"]
-
diff --git a/docker/web-console/standalone/README.txt b/docker/web-console/standalone/README.txt
deleted file mode 100644
index c97e792..0000000
--- a/docker/web-console/standalone/README.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-Apache Ignite Web Console Standalone Docker module
-==================================================
-Apache Ignite Web Console Standalone Docker module provides Dockerfile and accompanying files
-for building docker image of Web Console.
-
-
-Ignite Web Console Standalone Docker Image Build Instructions
-=============================================================
-1) Build ignite-web-console module
-
- mvn clean install -P web-console -DskipTests -T 2C -pl :ignite-web-console -am
-
-2) Copy ignite-web-agent-<version>.zip from 'modules/web-console/web-agent/target'
- to 'docker/web-console/standalone' directory
-
- cp -rf modules/web-console/web-agent/target/ignite-web-agent-*.zip docker/web-console/standalone
-
-3) Go to Apache Ignite Web Console Docker module directory and copy Apache
- Ignite Web Console's frontend and backend directory
-
- cd docker/web-console/standalone
- cp -rf ../../../modules/web-console/backend ./
- cp -rf ../../../modules/web-console/frontend ./
-
-4) Build docker image
-
- docker build . -t apacheignite/web-console-standalone:[:<version>]
-
- Prepared image will be available in local docker registry (can be seen
- issuing `docker images` command)
-
-5) Clean up
-
- rm -rf backend frontend ignite-web-agent*
-
diff --git a/docker/web-console/standalone/docker-entrypoint.sh b/docker/web-console/standalone/docker-entrypoint.sh
deleted file mode 100644
index 6757de6..0000000
--- a/docker/web-console/standalone/docker-entrypoint.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-/usr/bin/mongod --fork --config=/etc/mongod.conf
-
-service nginx start
-
-cd backend && pm2 start ./index.js --no-daemon
diff --git a/docker/web-console/standalone/nginx/nginx.conf b/docker/web-console/standalone/nginx/nginx.conf
deleted file mode 100644
index dbc79d7..0000000
--- a/docker/web-console/standalone/nginx/nginx.conf
+++ /dev/null
@@ -1,55 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-user www-data;
-worker_processes 1;
-
-error_log /var/log/nginx/error.log warn;
-pid /var/run/nginx.pid;
-
-events {
- worker_connections 128;
-}
-
-http {
- server_tokens off;
- sendfile on;
- tcp_nopush on;
-
- keepalive_timeout 60;
- tcp_nodelay on;
-
- client_max_body_size 100m;
-
- #access log
- log_format main '$http_host $remote_addr - $remote_user [$time_local] '
- '"$request" $status $bytes_sent '
- '"$http_referer" "$http_user_agent" '
- '"$gzip_ratio"';
-
- include /etc/nginx/mime.types;
- default_type application/octet-stream;
- gzip on;
- gzip_disable "msie6";
- gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss application/javascript;
- gzip_vary on;
- gzip_comp_level 5;
-
- access_log /var/log/nginx/access.log main;
- #conf.d
- include web-console.conf ;
-}
diff --git a/docker/web-console/standalone/nginx/web-console.conf b/docker/web-console/standalone/nginx/web-console.conf
deleted file mode 100644
index caf171e..0000000
--- a/docker/web-console/standalone/nginx/web-console.conf
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-upstream backend-api {
- server localhost:3000;
-}
-
-server {
- listen 80;
- server_name _;
-
- set $ignite_console_dir /opt/web-console/static;
-
- root $ignite_console_dir;
-
- error_page 500 502 503 504 /50x.html;
-
- location / {
- try_files $uri /index.html = 404;
- }
-
- location /api/v1 {
- proxy_set_header Host $http_host;
- proxy_pass http://backend-api;
- }
-
- location /socket.io {
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_http_version 1.1;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header Host $host;
- proxy_pass http://backend-api;
- }
-
- location /agents {
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_http_version 1.1;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header Host $host;
- proxy_pass http://backend-api;
- }
-
- location = /50x.html {
- root $ignite_console_dir/error_page;
- }
-}
diff --git a/modules/web-console/.dockerignore b/modules/web-console/.dockerignore
deleted file mode 100644
index 1958528..0000000
--- a/modules/web-console/.dockerignore
+++ /dev/null
@@ -1,10 +0,0 @@
-.git
-*Dockerfile*
-*docker-compose*
-**/build/
-**/node_modules/
-**/target/
-!web-agent/target/*.zip
-**/backend/agent_dists/*.zip
-**/backend/config/*.json
-**/backend/test
\ No newline at end of file
diff --git a/modules/web-console/.gitignore b/modules/web-console/.gitignore
deleted file mode 100644
index e99ad51..0000000
--- a/modules/web-console/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.npmrc
-build/
-node_modules/
-package-lock.json
diff --git a/modules/web-console/DEVNOTES.txt b/modules/web-console/DEVNOTES.txt
deleted file mode 100644
index 417829e..0000000
--- a/modules/web-console/DEVNOTES.txt
+++ /dev/null
@@ -1,145 +0,0 @@
-Ignite Web Console Build Instructions
-=====================================
-1. Install MongoDB (version >=3.0) using instructions from http://docs.mongodb.org/manual/installation.
-2. Install Node.js (version >=8.0.0) using installer from https://nodejs.org/en/download/current for your OS.
-3. Change directory to 'modules/web-console/backend' and
- run "npm install --no-optional" for download backend dependencies.
-4. Change directory to 'modules/web-console/frontend' and
- run "npm install --no-optional" for download frontend dependencies.
-5. Build ignite-web-agent module follow instructions from 'modules/web-console/web-agent/README.txt'.
-6. Copy ignite-web-agent-<version>.zip from 'modules/web-console/web-agent/target'
- to 'modules/web-console/backend/agent_dists' folder.
-
-Steps 1 - 4 should be executed once.
-
-Ignite Web Console Run In Development Mode
-==========================================
-1. Configure MongoDB to run as service or in terminal change dir to $MONGO_INSTALL_DIR/server/3.2/bin
- and start MongoDB by executing "mongod".
-
-2. In new terminal change directory to 'modules/web-console/backend'.
- If needed run "npm install --no-optional" (if dependencies changed) and run "npm start" to start backend.
-
-3. In new terminal change directory to 'modules/web-console/frontend'.
- If needed run "npm install --no-optional" (if dependencies changed) and start webpack in development mode "npm run dev".
-
-4. In browser open: http://localhost:9000
-
-How to migrate model:
-
-1. Model will be upgraded on first start.
-2. To downgrade model execute in terminal following command: "./node_modules/.bin/migrate down <migration-name> -d <dbConnectionUri>".
- Example: "./node_modules/.bin/migrate down add_index -d mongodb://localhost/console".
-
-
-Ignite Web Console Direct-Install Maven Build Instructions
-==========================================================
-To build direct-install archive from sources run following command in Ignite project root folder:
-"mvn clean package -pl :ignite-web-console -am -P web-console,direct-install,lgpl -DskipTests=true -DskipClientDocs -Dmaven.javadoc.skip=true"
-
-Assembled archive can be found here: `modules/web-console/target/ignite-web-console-direct-install-*.zip`.
-
-
-Ignite Web Console Docker Images Build Instructions
-===================================================
-Install Docker (version >=17.05) using instructions from https://www.docker.com/community-edition.
-
-To build docker images from sources run following command in Ignite project root folder:
-
-"mvn clean package -pl :ignite-web-console -am -P web-console,docker-image -DskipTests=true -DskipClientDocs -Dmaven.javadoc.skip=true"
-
-Prepared image can be listed with `docker images` command.
-
-
-Ignite Web Console Backend Docker Image Build Manual Instructions
-====================================================================
-Install Docker (version >=17.05) using instructions from https://www.docker.com/community-edition.
-
-1. Build Apache Ignite Web Agent archive as described in `modules/web-console/web-agent/README.txt`.
-2. Goto Web Console's module directory: `cd modules/web-console`
-3. Build docker image:
-
-"docker build . -t apacheignite/web-console-backend[:<version>] -f docker/compose/backend/Dockerfile"
-
-Prepared image can be listed in `docker images` command output.
-
-
-Ignite Web Console Frontend Docker Image Build Manual Instructions
-====================================================================
-Install Docker (version >=17.05) using instructions from https://www.docker.com/community-edition.
-
-1. Build Apache Ignite Web Agent archive as described in `modules/web-console/web-agent/README.txt`.
-2. Goto Web Console's module directory: `cd modules/web-console`
-3. Build docker image:
-
-"docker build . -t apacheignite/web-console-frontend[:<version>] -f docker/compose/frontend/Dockerfile"
-
-Prepared image can be listed in `docker images` command output.
-
-
-End-to-end tests
-================
-E2E tests are performed with TestCafe framework - https://testcafe.devexpress.com
-
-To launch tests on your local machine you will need:
-1. Install and launch MongoDB.
-2. Optionally install Chromium (https://www.chromium.org/getting-involved/download-chromium or https://chromium.woolyss.com).
- You may use any other browser, just set 'BROWSERS' constant in 'modules/web-console/e2e/testcafe/index.js'.
-3. In new terminal change directory to 'modules/web-console/e2e/testcafe' folder and execute: "npm install".
-4. To start test environment and tests execute: "npm run test".
-
-During developing tests you may need to run some particular tests without running all suites.
-For this case you need to run environment and test separately.
-To perform it do the following:
-1. Ensure that MongoDB is up and running and all dependencies for backend and frontend are installed.
-2. Open directory "modules/web-console/e2e/testcafe" in terminal. Install dependencies for E2E testing with "npm install" command.
-3. Execute command "npm run env". This will start backend and frontend environment.
-4. Open another terminal window and run command "node index.js" in the same directory. This will run only tests without launching environment.
-
-Please refer to TestCafe documentation at https://devexpress.github.io/testcafe/documentation/test-api/test-code-structure.html#skipping-tests
- upon how to specify which particular test should be run or skipped.
-
-You can modify the following params with environment variables:
-- DB_URL - connection string to test MongoDB. Default: mongodb://localhost/console-e2e
-- APP_URL - URL for test environment applications. Default: http://localhost:9001
-- REPORTER - Which "TestCafe" reporter to use. Set to 'teamcity' to use Teamcity reporter. Default: "spec" (native Testcafe reporter)
-
-You can run tests in docker:
-1. Install docker and docker-compose.
-2. Execute in terminal: "docker-compose up --build --abort-on-container-exit" in directory "modules/web-console/e2e".
-3. If you need to cleanup docker container then execute "docker-compose down".
-
-
-Frontend unit tests
-===================
-Unit tests are performed with Mocha framework - https://mochajs.org
-
-To launch tests on your local machine you will need:
-1. In new terminal change directory to 'modules/web-console/frontend' folder and execute: "npm install".
-2. To start test environment and tests execute: "npm run test".
-
-
-Backend unit tests
-==================
-Unit tests are performed with Mocha framework - https://mochajs.org
-
-To launch tests on your local machine you will need:
-1. In new terminal change directory to 'modules/web-console/backend' folder and execute: "npm install".
-2. To start test environment and tests execute: "npm run test".
-
-
-Web Console settings
-====================
-Web Console backend could be configured with custom parameters.
-
-See "backend/config/settings.json.sample" for list of parameters with example value.
-
-If you need custom parameters, you will need create "backend/config/settings.json" and adjust values.
-
-Web Console settings for Docker
-===============================
-Web Console backend could be configured with custom parameters.
-
-You may pass custom parameters with help of "-e" option.
-
-For example: docker run -e "server_disable_signup=true" -p 9090:80 $IMAGE_ID
diff --git a/modules/web-console/README.txt b/modules/web-console/README.txt
deleted file mode 100644
index 286082c..0000000
--- a/modules/web-console/README.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-Ignite Web Console
-======================================
-An Interactive Configuration Wizard and Management Tool for Apache Ignite
-
-The Apache Ignite Web Console includes an interactive configuration wizard which helps you create and download configuration
- files for your Apache Ignite cluster. The tool also provides management capabilities which allow you to run SQL queries
- on your in-memory cache as well as view execution plans, in-memory schema, and streaming charts.
-
-In order to simplify evaluation of Web Console demo mode was implemented.
- To start demo, you need to click button "Start demo". New tab will be open with prepared demo data on each screen.
-
- Demo for import domain model from database.
- In this mode an in-memory H2 database will be started.
- How to evaluate:
- 1) Go to Ignite Web Console "Domain model" screen.
- 2) Click "Import from database". You should see modal with demo description.
- 3) Click "Next" button. You should see list of available schemas.
- 4) Click "Next" button. You should see list of available tables.
- 5) Click "Next" button. You should see import options.
- 6) Select some of them and click "Save".
-
- Demo for SQL.
- How to evaluate:
- In this mode internal Ignite node will be started. Cache created and populated with data.
- 1) Click "SQL" in Ignite Web Console top menu.
- 2) "Demo" notebook with preconfigured queries will be opened.
- 3) You can also execute any SQL queries for tables: "Country, Department, Employee, Parking, Car".
-
- For example:
- 1) Enter SQL statement:
- SELECT p.name, count(*) AS cnt FROM "ParkingCache".Parking p
- INNER JOIN "CarCache".Car c ON (p.id) = (c.parkingId)
- GROUP BY P.NAME
- 2) Click "Execute" button. You should get some data in table.
- 3) Click charts buttons to see auto generated charts.
-
diff --git a/modules/web-console/assembly/README.txt b/modules/web-console/assembly/README.txt
deleted file mode 100644
index e88e345..0000000
--- a/modules/web-console/assembly/README.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-Requirements
--------------------------------------
-1. JDK 8 suitable for your platform.
-2. Supported browsers: Chrome, Firefox, Safari, Edge.
-3. Ignite cluster should be started with `ignite-rest-http` module in classpath.
- For this copy `ignite-rest-http` folder from `libs\optional` to `libs` folder.
-
-How to run
--------------------------------------
-1. Unpack ignite-web-console-x.x.x.zip to some folder.
-2. Change work directory to folder where Web Console was unpacked.
-3. Start ignite-web-console-xxx executable for you platform:
- For Linux: `sudo ./ignite-web-console-linux`
- For macOS: `sudo ./ignite-web-console-macos`
- For Windows: `ignite-web-console-win.exe`
-
-NOTE: For Linux and macOS `sudo` required because non-privileged users are not allowed to bind to privileged ports (port numbers below 1024).
-
-4. Open URL `localhost` in browser.
-5. Login with user `admin@admin` and password `admin`.
-6. Start web agent from folder `web agent`. For Web Agent settings see `web-agent\README.txt`.
-
-NOTE: Cluster URL should be specified in `web-agent\default.properties` in `node-uri` parameter.
-
-Technical details
--------------------------------------
-1. Package content:
- `libs` - this folder contains Web Console and MongoDB binaries.
- `user_data` - this folder contains all Web Console data (registered users, created objects, ...) and
- should be preserved in case of update to new version.
- `web-agent` - this folder contains Web Agent.
-2. Package already contains MongoDB for macOS, Windows, RHEL, CentOs and Ubuntu on other platforms MongoDB will be downloaded on first start. MongoDB executables will be downloaded to `libs\mogodb` folder.
-3. Web console will start on default HTTP port `80` and bind to all interfaces `0.0.0.0`.
-3. To bind Web Console to specific network interface:
- On Linux: `./ignite-web-console-linux --server:host 192.168.0.1`
- On macOS: `sudo ./ignite-web-console-macos --server:host 192.168.0.1`
- On Windows: `ignite-web-console-win.exe --server:host 192.168.0.1`
-4. To start Web Console on another port, for example `3000`:
- On Linux: `sudo ./ignite-web-console-linux --server:port 3000`
- On macOS: `./ignite-web-console-macos --server:port 3000`
- On Windows: `ignite-web-console-win.exe --server:port 3000`
-
-All available parameters with defaults:
- Web Console host: --server:host 0.0.0.0
- Web Console port: --server:port 80
-
- Enable HTTPS: --server:ssl false
- Disable self registration: --server:disable:signup false
-
- MongoDB URL: --mongodb:url mongodb://localhost/console
-
- Enable account activation: --activation:enabled false
- Activation timeout(milliseconds): --activation:timeout 1800000
- Activation send email throttle (milliseconds): --activation:sendTimeout 180000
-
- Mail service: --mail:service "gmail"
- Signature text: --mail:sign "Kind regards, Apache Ignite Team"
- Greeting text: --mail:greeting "Apache Ignite Web Console"
- Mail FROM: --mail:from "Apache Ignite Web Console <so...@somecompany.somedomain>"
- User to send e-mail: --mail:auth:user "someusername@somecompany.somedomain"
- E-mail service password: --mail:auth:pass ""
-
-SSL options has no default values:
- --server:key "path to file with server.key"
- --server:cert "path to file with server.crt"
- --server:ca "path to file with ca.crt"
- --server:passphrase "Password for key"
- --server:ciphers "Comma separated ciphers list"
- --server:secureProtocol "The TLS protocol version to use"
- --server:clientCertEngine "Name of an OpenSSL engine which can provide the client certificate"
- --server:pfx "Path to PFX or PKCS12 encoded private key and certificate chain"
- --server:crl "Path to file with CRLs (Certificate Revocation Lists)"
- --server:dhparam "Diffie Hellman parameters"
- --server:ecdhCurve "A string describing a named curve"
- --server:maxVersion "Optional the maximmu TLS version to allow"
- --server:minVersion "Optional the minimum TLS version to allow"
- --server:secureOptions "Optional OpenSSL options"
- --server:sessionIdContext "Opaque identifier used by servers to ensure session state is not shared between applications"
- --server:honorCipherOrder "true or false"
- --server:requestCert "Set to true to specify whether a server should request a certificate from a connecting client"
- --server:rejectUnauthorized "Set to true to automatically reject clients with invalid certificates"
-
-Documentation for SSL options: https://nodejs.org/api/tls.html#tls_tls_createsecurecontext_options
-
-Sample usages:
- `ignite-web-console-win.exe --mail:auth:user "my_user@gmail.com" --mail:auth:pass "my_password"`
- `ignite-web-console-win.exe --server:port 11443 --server:ssl true --server:requestCert true --server:key "server.key" --server:cert "server.crt" --server:ca "ca.crt" --server:passphrase "my_password"`
-
-Advanced configuration of SMTP for Web Console.
--------------------------------------
-1. Create sub-folder "config" in folder with Web Console executable.
-2. Create in config folder file "settings.json".
-3. Specify SMTP settings in settings.json (updating to your specific names and passwords):
-
-Sample "settings.json":
-{
- "mail": {
- "service": "gmail",
- "greeting": "My Company Greeting",
- "from": "My Company Web Console <so...@gmail.com>",
- "sign": "Kind regards,<br>My Company Team",
- "auth": {
- "user": "some_name@gmail.com",
- "pass": "my_password"
- }
- }
-}
-
-Web Console sends e-mails with help of NodeMailer: https://nodemailer.com.
-
-Documentation available here:
- https://nodemailer.com/smtp
- https://nodemailer.com/smtp/well-known
-
-In case of non GMail SMTP server it may require to change options in "settings.json" according to NodeMailer documentation.
-
-Troubleshooting
--------------------------------------
-1. On Windows check that MongoDB is not blocked by Antivirus/Firewall/Smartscreen.
-2. Root permission is required to bind to 80 port under macOS and Linux, but you may always start Web Console
- on another port if you don't have such permission.
-3. For extended debug output start Web Console as following:
- On Linux execute command in terminal: `DEBUG=mongodb-* ./ignite-web-console-linux`
- On macOS execute command in terminal: `DEBUG=mongodb-* ./ignite-web-console-macos`
- On Windows execute two commands in terminal:
- `SET DEBUG=mongodb-*`
- `ignite-web-console-win.exe`
diff --git a/modules/web-console/assembly/direct-install.xml b/modules/web-console/assembly/direct-install.xml
deleted file mode 100644
index d34cd07..0000000
--- a/modules/web-console/assembly/direct-install.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<assembly xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
- <id>release-ignite-web-agent</id>
-
- <formats>
- <format>zip</format>
- </formats>
-
- <fileSets>
- <fileSet>
- <directory>${project.basedir}/target</directory>
- <outputDirectory>/libs/agent_dists</outputDirectory>
- <excludes>
- <exclude>**/*</exclude>
- </excludes>
- </fileSet>
-
- <fileSet>
- <directory>${project.basedir}/target</directory>
- <outputDirectory>/libs/mongodb/mongodb-download</outputDirectory>
- <excludes>
- <exclude>**/*</exclude>
- </excludes>
- </fileSet>
-
- <fileSet>
- <directory>${project.basedir}/target</directory>
- <outputDirectory>/user_data</outputDirectory>
- <excludes>
- <exclude>**/*</exclude>
- </excludes>
- </fileSet>
-
- <fileSet>
- <directory>${basedir}/assembly</directory>
- <outputDirectory>/</outputDirectory>
- <includes>
- <include>**/README*</include>
- </includes>
- </fileSet>
-
- <fileSet>
- <directory>${basedir}/backend/build</directory>
- <outputDirectory>/</outputDirectory>
- <includes>
- <include>ignite-web-console-win.exe</include>
- </includes>
- </fileSet>
- <fileSet>
- <directory>${basedir}/backend/build</directory>
- <outputDirectory>/</outputDirectory>
- <fileMode>0755</fileMode>
- <includes>
- <include>ignite-web-console-*</include>
- </includes>
- </fileSet>
-
- <fileSet>
- <directory>${basedir}/web-agent/target</directory>
- <outputDirectory>/libs/agent_dists</outputDirectory>
- <includes>
- <include>ignite-web-agent-${project.version}.zip</include>
- </includes>
- </fileSet>
-
- <fileSet>
- <directory>${basedir}/frontend/build</directory>
- <outputDirectory>/libs/frontend</outputDirectory>
- </fileSet>
- </fileSets>
-</assembly>
diff --git a/modules/web-console/backend/.eslintrc b/modules/web-console/backend/.eslintrc
deleted file mode 100644
index b288d07..0000000
--- a/modules/web-console/backend/.eslintrc
+++ /dev/null
@@ -1,169 +0,0 @@
-env:
- es6: true
- browser: false
- mocha: true
-parserOptions:
- sourceType: module
- ecmaVersion: 2018
-
-rules:
- arrow-parens: [1, "always"]
- arrow-spacing: [1, { "before": true, "after": true }]
- accessor-pairs: 2
- block-scoped-var: 2
- brace-style: [0, "1tbs"]
- comma-dangle: [2, "never"]
- comma-spacing: [2, {"before": false, "after": true}]
- comma-style: [2, "last"]
- complexity: [1, 40]
- computed-property-spacing: [2, "never"]
- consistent-return: 0
- consistent-this: [0, "that"]
- constructor-super: 2
- curly: [2, "multi-or-nest"]
- default-case: 2
- dot-location: 0
- dot-notation: [2, { "allowKeywords": true }]
- eol-last: 2
- eqeqeq: 2
- func-names: 0
- func-style: [0, "declaration"]
- generator-star-spacing: 0
- guard-for-in: 1
- handle-callback-err: 0
- id-length: [2, {"min": 1, "max": 60}]
- indent: [2, 4, {"SwitchCase": 1, "MemberExpression": "off", "CallExpression": {"arguments": "off"}}]
- key-spacing: [2, { "beforeColon": false, "afterColon": true }]
- lines-around-comment: 0
- linebreak-style: [0, "unix"]
- max-depth: [0, 4]
- max-len: [0, 120, 4]
- max-nested-callbacks: [1, 4]
- max-params: [0, 3]
- max-statements: [0, 10]
- new-cap: 2
- new-parens: 2
- no-alert: 2
- no-array-constructor: 2
- no-bitwise: 0
- no-caller: 2
- no-catch-shadow: 2
- no-cond-assign: 2
- no-console: 0
- no-constant-condition: 2
- no-continue: 0
- no-class-assign: 2
- no-const-assign: 2
- no-control-regex: 2
- no-debugger: 2
- no-delete-var: 2
- no-div-regex: 0
- no-dupe-keys: 2
- no-dupe-args: 2
- no-duplicate-case: 2
- no-else-return: 2
- no-empty: 2
- no-empty-character-class: 2
- no-eq-null: 2
- no-eval: 2
- no-ex-assign: 2
- no-extend-native: 2
- no-extra-bind: 2
- no-extra-boolean-cast: 2
- no-extra-parens: 0
- no-extra-semi: 2
- no-fallthrough: 2
- no-floating-decimal: 1
- no-func-assign: 2
- no-implied-eval: 2
- no-inline-comments: 0
- no-inner-declarations: [2, "functions"]
- no-invalid-regexp: 2
- no-irregular-whitespace: 2
- no-iterator: 2
- no-label-var: 2
- no-labels: 2
- no-lone-blocks: 2
- no-lonely-if: 2
- no-implicit-coercion: [2, {"boolean": false, "number": true, "string": true}]
- no-loop-func: 2
- no-mixed-requires: [0, false]
- no-mixed-spaces-and-tabs: [2, true]
- no-multi-spaces: ["error", {"exceptions": { "VariableDeclarator": true }}]
- no-multi-str: 2
- no-multiple-empty-lines: [0, {"max": 2}]
- no-native-reassign: 2
- no-negated-in-lhs: 2
- no-nested-ternary: 0
- no-new: 2
- no-new-func: 2
- no-new-object: 2
- no-new-require: 0
- no-new-wrappers: 2
- no-obj-calls: 2
- no-octal: 2
- no-octal-escape: 2
- no-param-reassign: 0
- no-path-concat: 0
- no-plusplus: 0
- no-process-env: 0
- no-process-exit: 0
- no-proto: 2
- no-redeclare: 2
- no-regex-spaces: 1
- no-restricted-modules: 0
- no-script-url: 0
- no-self-compare: 2
- no-sequences: 2
- no-shadow: 0
- no-shadow-restricted-names: 2
- no-spaced-func: 2
- no-sparse-arrays: 1
- no-sync: 0
- no-ternary: 0
- no-trailing-spaces: ["error", {"ignoreComments": true}]
- no-throw-literal: 0
- no-this-before-super: 2
- no-unexpected-multiline: 2
- // The rule produces undesired results with TS
- // no-undef: 2
- no-undef-init: 2
- no-undefined: 2
- no-unneeded-ternary: 2
- no-unreachable: 2
- no-unused-expressions: [2, { allowShortCircuit: true }]
- no-unused-vars: [0, {"vars": "all", "args": "after-used"}]
- typescript/no-unused-vars: [0]
- no-useless-call: 2
- no-void: 0
- no-var: 2
- no-warning-comments: 0
- no-with: 2
- newline-after-var: 0
- object-shorthand: [2, "always"]
- one-var: [2, "never"]
- operator-assignment: [2, "always"]
- operator-linebreak: 0
- padded-blocks: 0
- prefer-const: 1
- prefer-spread: 2
- quote-props: [2, "as-needed"]
- quotes: [2, "single", {"allowTemplateLiterals": true}]
- radix: 1
- semi: [2, "always"]
- semi-spacing: [2, {"before": false, "after": true}]
- sort-vars: 0
- keyword-spacing: 2
- space-before-blocks: [2, "always"]
- space-before-function-paren: [2, "never"]
- space-in-parens: 0
- space-infix-ops: 2
- space-unary-ops: [2, { "words": true, "nonwords": false }]
- spaced-comment: [1, "always", {"markers": ["/"]}]
- use-isnan: 2
- valid-jsdoc: 0
- valid-typeof: 2
- vars-on-top: 2
- wrap-iife: 0
- wrap-regex: 0
- yoda: [2, "never"]
diff --git a/modules/web-console/backend/.gitignore b/modules/web-console/backend/.gitignore
deleted file mode 100644
index 73bd1a1..0000000
--- a/modules/web-console/backend/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-agent_dists/*.zip
-config/*.json
-!package-lock.json
diff --git a/modules/web-console/backend/agent_dists/README.txt b/modules/web-console/backend/agent_dists/README.txt
deleted file mode 100644
index e0a67c6..0000000
--- a/modules/web-console/backend/agent_dists/README.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Ignite Web Console
-======================================
-
-This is a default directory for agent distributions.
-
-A custom directory can be set in `backend/config/settings.json`.
diff --git a/modules/web-console/backend/app/agentSocket.js b/modules/web-console/backend/app/agentSocket.js
deleted file mode 100644
index 0df5c5e..0000000
--- a/modules/web-console/backend/app/agentSocket.js
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const _ = require('lodash');
-
-// Fire me up!
-
-/**
- * Module interaction with agents.
- */
-module.exports = {
- implements: 'agent-socket'
-};
-
-/**
- * @returns {AgentSocket}
- */
-module.exports.factory = function() {
- /**
- * Connected agent descriptor.
- */
- class AgentSocket {
- /**
- * @param {Socket} socket Socket for interaction.
- * @param {Object} accounts Active accounts.
- * @param {Array.<String>} tokens Agent tokens.
- * @param {String} demoEnabled Demo enabled.
- */
- constructor(socket, accounts, tokens, demoEnabled) {
- Object.assign(this, {
- accounts,
- cluster: null,
- demo: {
- enabled: demoEnabled,
- browserSockets: []
- },
- socket,
- tokens
- });
- }
-
- resetToken(oldToken) {
- _.pull(this.tokens, oldToken);
-
- this.emitEvent('agent:reset:token', oldToken)
- .then(() => {
- if (_.isEmpty(this.tokens) && this.socket.connected)
- this.socket.close();
- });
- }
-
- /**
- * Send event to agent.
- *
- * @this {AgentSocket}
- * @param {String} event Event name.
- * @param {Array.<Object>} args - Transmitted arguments.
- * @param {Function} [callback] on finish
- */
- _emit(event, args, callback) {
- if (!this.socket.connected) {
- if (callback)
- callback('org.apache.ignite.agent.AgentException: Connection is closed');
-
- return;
- }
-
- this.socket.emit(event, ...args, callback);
- }
-
- /**
- * Send event to agent.
- *
- * @param {String} event - Event name.
- * @param {Object?} args - Transmitted arguments.
- * @returns {Promise}
- */
- emitEvent(event, ...args) {
- return new Promise((resolve, reject) =>
- this._emit(event, args, (resErr, res) => {
- if (resErr)
- return reject(resErr);
-
- resolve(res);
- })
- );
- }
-
- restResultParse(res) {
- if (res.status === 0)
- return JSON.parse(res.data);
-
- if (res.status === 2)
- throw new Error('AgentSocket failed to authenticate in grid. Please check agent\'s login and password or node port.');
-
- throw new Error(res.error);
- }
-
- /**
- * @param {Socket} browserSocket
- */
- attachToDemoCluster(browserSocket) {
- this.demo.browserSockets.push(...browserSocket);
- }
- }
-
- return AgentSocket;
-};
diff --git a/modules/web-console/backend/app/agentsHandler.js b/modules/web-console/backend/app/agentsHandler.js
deleted file mode 100644
index f6e3da9..0000000
--- a/modules/web-console/backend/app/agentsHandler.js
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const uuid = require('uuid/v4');
-
-const fs = require('fs');
-const path = require('path');
-const JSZip = require('jszip');
-const socketio = require('socket.io');
-const _ = require('lodash');
-
-// Fire me up!
-
-/**
- * Module interaction with agents.
- */
-module.exports = {
- implements: 'agents-handler',
- inject: ['settings', 'mongo', 'agent-socket']
-};
-
-/**
- * @param settings
- * @param mongo
- * @param {AgentSocket} AgentSocket
- * @returns {AgentsHandler}
- */
-module.exports.factory = function(settings, mongo, AgentSocket) {
- class AgentSockets {
- constructor() {
- /**
- * @type {Map.<String, Array.<String>>}
- */
- this.sockets = new Map();
- }
-
- get(account) {
- let sockets = this.sockets.get(account._id.toString());
-
- if (_.isEmpty(sockets))
- this.sockets.set(account._id.toString(), sockets = []);
-
- return sockets;
- }
-
- /**
- * @param {AgentSocket} sock
- * @param {String} account
- * @return {Array.<AgentSocket>}
- */
- add(account, sock) {
- const sockets = this.get(account);
-
- sockets.push(sock);
- }
-
- /**
- * @param {Socket} browserSocket
- * @return {AgentSocket}
- */
- find(browserSocket) {
- const {_id} = browserSocket.request.user;
-
- const sockets = this.sockets.get(_id);
-
- return _.find(sockets, (sock) => _.includes(sock.demo.browserSockets, browserSocket));
- }
- }
-
- class Cluster {
- constructor(top) {
- const clusterName = top.clusterName;
-
- this.id = _.isEmpty(top.clusterId) ? uuid() : top.clusterId;
- this.name = _.isEmpty(clusterName) ? `Cluster ${this.id.substring(0, 8).toUpperCase()}` : clusterName;
- this.nids = top.nids;
- this.addresses = top.addresses;
- this.clients = top.clients;
- this.clusterVersion = top.clusterVersion;
- this.active = top.active;
- this.secured = top.secured;
- }
-
- isSameCluster(top) {
- return _.intersection(this.nids, top.nids).length > 0;
- }
-
- update(top) {
- this.clusterVersion = top.clusterVersion;
- this.nids = top.nids;
- this.addresses = top.addresses;
- this.clients = top.clients;
- this.clusterVersion = top.clusterVersion;
- this.active = top.active;
- this.secured = top.secured;
- }
-
- same(top) {
- return _.difference(this.nids, top.nids).length === 0 &&
- _.isEqual(this.addresses, top.addresses) &&
- this.clusterVersion === top.clusterVersion &&
- this.active === top.active;
- }
- }
-
- /**
- * Connected agents manager.
- */
- class AgentsHandler {
- /**
- * @constructor
- */
- constructor() {
- /**
- * Connected agents.
- * @type {AgentSockets}
- */
- this._agentSockets = new AgentSockets();
-
- this.clusters = [];
- this.topLsnrs = [];
- }
-
- /**
- * Collect supported agents list.
- * @private
- */
- _collectSupportedAgents() {
- const jarFilter = (file) => path.extname(file) === '.jar';
-
- const agentArchives = fs.readdirSync(settings.agent.dists)
- .filter((file) => path.extname(file) === '.zip');
-
- const agentsPromises = _.map(agentArchives, (fileName) => {
- const filePath = path.join(settings.agent.dists, fileName);
-
- return JSZip.loadAsync(fs.readFileSync(filePath))
- .then((zip) => {
- const jarPath = _.find(_.keys(zip.files), jarFilter);
-
- return JSZip.loadAsync(zip.files[jarPath].async('nodebuffer'))
- .then((jar) => jar.files['META-INF/MANIFEST.MF'].async('string'))
- .then((lines) =>
- _.reduce(lines.split(/\s*\n+\s*/), (acc, line) => {
- if (!_.isEmpty(line)) {
- const arr = line.split(/\s*:\s*/);
-
- acc[arr[0]] = arr[1];
- }
-
- return acc;
- }, {}))
- .then((manifest) => {
- const ver = manifest['Implementation-Version'];
- const buildTime = manifest['Build-Time'];
-
- if (ver && buildTime)
- return { fileName, filePath, ver, buildTime };
- });
- });
- });
-
- return Promise.all(agentsPromises)
- .then((descs) => {
- const agentDescs = _.keyBy(_.remove(descs, null), 'ver');
-
- const latestVer = _.head(Object.keys(agentDescs).sort((a, b) => {
- const aParts = a.split('.');
- const bParts = b.split('.');
-
- for (let i = 0; i < aParts.length; ++i) {
- if (aParts[i] !== bParts[i])
- return aParts[i] < bParts[i] ? 1 : -1;
- }
-
- if (aParts.length === bParts.length)
- return 0;
-
- return aParts.length < bParts.length ? 1 : -1;
- }));
-
- // Latest version of agent distribution.
- if (latestVer)
- agentDescs.current = agentDescs[latestVer];
-
- return agentDescs;
- });
- }
-
- getOrCreateCluster(top) {
- let cluster = _.find(this.clusters, (c) => c.isSameCluster(top));
-
- if (_.isNil(cluster)) {
- cluster = new Cluster(top);
-
- this.clusters.push(cluster);
- }
-
- return cluster;
- }
-
- /**
- * Add topology listener.
- *
- * @param lsnr
- */
- addTopologyListener(lsnr) {
- this.topLsnrs.push(lsnr);
- }
-
- /**
- * Link agent with browsers by account.
- *
- * @param {Socket} sock
- * @param {Array.<mongo.Account>} accounts
- * @param {Array.<String>} tokens
- * @param {boolean} demoEnabled
- *
- * @private
- */
- onConnect(sock, accounts, tokens, demoEnabled) {
- const agentSocket = new AgentSocket(sock, accounts, tokens, demoEnabled);
-
- _.forEach(accounts, (account) => {
- this._agentSockets.add(account, agentSocket);
-
- this._browsersHnd.agentStats(account);
- });
-
- sock.on('disconnect', () => {
- _.forEach(accounts, (account) => {
- _.pull(this._agentSockets.get(account), agentSocket);
-
- this._browsersHnd.agentStats(account);
- });
- });
-
- sock.on('cluster:topology', (top) => {
- if (_.isNil(top)) {
- console.log('Invalid format of message: "cluster:topology"');
-
- return;
- }
-
- const cluster = this.getOrCreateCluster(top);
-
- _.forEach(this.topLsnrs, (lsnr) => lsnr(agentSocket, cluster, top));
-
- if (agentSocket.cluster !== cluster) {
- agentSocket.cluster = cluster;
-
- _.forEach(accounts, (account) => {
- this._browsersHnd.agentStats(account);
- });
- }
- else {
- const changed = !cluster.same(top);
-
- if (changed) {
- cluster.update(top);
-
- _.forEach(accounts, (account) => {
- this._browsersHnd.clusterChanged(account, cluster);
- });
- }
- }
- });
-
- sock.on('cluster:disconnected', () => {
- const newTop = _.assign({}, agentSocket.cluster, {nids: []});
-
- _.forEach(this.topLsnrs, (lsnr) => lsnr(agentSocket, agentSocket.cluster, newTop));
-
- agentSocket.cluster = null;
-
- _.forEach(accounts, (account) => {
- this._browsersHnd.agentStats(account);
- });
- });
-
- return agentSocket;
- }
-
- getAccounts(tokens) {
- return mongo.Account.find({token: {$in: tokens}}, '_id token').lean().exec()
- .then((accounts) => ({accounts, activeTokens: _.uniq(_.map(accounts, 'token'))}));
- }
-
- /**
- * @param {http.Server|https.Server} srv Server instance that we want to attach agent handler.
- * @param {BrowsersHandler} browsersHnd
- */
- attach(srv, browsersHnd) {
- this._browsersHnd = browsersHnd;
-
- this._collectSupportedAgents()
- .then((supportedAgents) => {
- this.currentAgent = _.get(supportedAgents, 'current');
-
- if (this.io)
- throw 'Agent server already started!';
-
- this.io = socketio(srv, {path: '/agents'});
-
- this.io.on('connection', (sock) => {
- const sockId = sock.id;
-
- console.log('Connected agent with socketId: ', sockId);
-
- sock.on('disconnect', (reason) => {
- console.log(`Agent disconnected with [socketId=${sockId}, reason=${reason}]`);
- });
-
- sock.on('agent:auth', ({ver, bt, tokens, disableDemo} = {}, cb) => {
- console.log(`Received authentication request [socketId=${sockId}, tokens=${tokens}, ver=${ver}].`);
-
- if (_.isEmpty(tokens))
- return cb('Tokens not set. Please reload agent archive or check settings');
-
- if (ver && bt && !_.isEmpty(supportedAgents)) {
- const btDistr = _.get(supportedAgents, [ver, 'buildTime']);
-
- if (_.isEmpty(btDistr) || btDistr !== bt)
- return cb('You are using an older version of the agent. Please reload agent');
- }
-
- return this.getAccounts(tokens)
- .then(({accounts, activeTokens}) => {
- if (_.isEmpty(activeTokens))
- return cb(`Failed to authenticate with token(s): ${tokens.join(',')}. Please reload agent archive or check settings`);
-
- cb(null, activeTokens);
-
- return this.onConnect(sock, accounts, activeTokens, !disableDemo);
- })
- // TODO IGNITE-1379 send error to web master.
- .catch(() => cb(`Invalid token(s): ${tokens.join(',')}. Please reload agent archive or check settings`));
- });
- });
- })
- .catch(() => {
- console.log('Failed to collect supported agents');
- });
- }
-
- agent(account, demo, clusterId) {
- if (!this.io)
- return Promise.reject(new Error('Agent server not started yet!'));
-
- const socks = this._agentSockets.get(account);
-
- if (_.isEmpty(socks))
- return Promise.reject(new Error('Failed to find connected agent for this account'));
-
- if (demo) {
- const sock = _.find(socks, (sock) => sock.demo.enabled);
-
- if (sock)
- return Promise.resolve(sock);
-
- return Promise.reject(new Error('Demo mode disabled by administrator'));
- }
-
- if (_.isNil(clusterId))
- return Promise.resolve(_.head(socks));
-
- const sock = _.find(socks, (agentSock) => _.get(agentSock, 'cluster.id') === clusterId);
-
- if (_.isEmpty(sock))
- return Promise.reject(new Error('Failed to find agent connected to cluster'));
-
- return Promise.resolve(sock);
- }
-
- agents(account) {
- if (!this.io)
- return Promise.reject(new Error('Agent server not started yet!'));
-
- const socks = this._agentSockets.get(account);
-
- if (_.isEmpty(socks))
- return Promise.reject(new Error('Failed to find connected agent for this token'));
-
- return Promise.resolve(socks);
- }
-
- /**
- * Try stop agent for token if not used by others.
- *
- * @param {mongo.Account} account
- */
- onTokenReset(account) {
- if (_.isNil(this.io))
- return;
-
- const agentSockets = this._agentSockets.get(account);
-
- _.forEach(agentSockets, (sock) => sock.resetToken(account.token));
- }
- }
-
- return new AgentsHandler();
-};
diff --git a/modules/web-console/backend/app/apiServer.js b/modules/web-console/backend/app/apiServer.js
deleted file mode 100644
index 90c39ba..0000000
--- a/modules/web-console/backend/app/apiServer.js
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const fs = require('fs');
-const path = require('path');
-
-// Fire me up!
-
-const Express = require('express');
-
-module.exports = {
- implements: 'api-server',
- inject: ['settings', 'configure', 'routes'],
- factory(settings, configure, routes) {
- /**
- * Connected agents manager.
- */
- class ApiServer {
- /**
- * @param {Server} srv
- */
- attach(srv) {
- const app = new Express();
-
- configure.express(app);
-
- routes.register(app);
-
- if (settings.packaged) {
- const staticDir = path.join(process.cwd(), 'libs/frontend');
-
- try {
- fs.accessSync(staticDir, fs.F_OK);
-
- app.use('/', Express.static(staticDir));
-
- app.get('*', function(req, res) {
- res.sendFile(path.join(staticDir, 'index.html'));
- });
- }
- catch (e) {
- console.log(`Failed to find folder with frontend files: ${staticDir}`);
- }
- }
-
- // Catch 404 and forward to error handler.
- app.use((req, res) => {
- if (req.xhr)
- return res.status(404).send({ error: 'Not Found: ' + req.originalUrl });
-
- return res.sendStatus(404);
- });
-
- // Production error handler: no stacktraces leaked to user.
- app.use((err, req, res) => {
- res.status(err.status || 500);
-
- res.render('error', {
- message: err.message,
- error: {}
- });
- });
-
- srv.addListener('request', app);
-
- return app;
- }
- }
-
- return new ApiServer();
- }
-};
diff --git a/modules/web-console/backend/app/browsersHandler.js b/modules/web-console/backend/app/browsersHandler.js
deleted file mode 100644
index 4d5b02d..0000000
--- a/modules/web-console/backend/app/browsersHandler.js
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const _ = require('lodash');
-const socketio = require('socket.io');
-
-// Fire me up!
-
-/**
- * Module interaction with browsers.
- */
-module.exports = {
- implements: 'browsers-handler',
- inject: ['configure', 'errors', 'mongo'],
- factory: (configure, errors, mongo) => {
- class BrowserSockets {
- constructor() {
- this.sockets = new Map();
- }
-
- /**
- * @param {Socket} sock
- */
- add(sock) {
- const key = sock.request.user._id.toString();
-
- if (this.sockets.has(key))
- this.sockets.get(key).push(sock);
- else
- this.sockets.set(key, [sock]);
-
- return this.sockets.get(sock.request.user);
- }
-
- /**
- * @param {Socket} sock
- */
- remove(sock) {
- const key = sock.request.user._id.toString();
-
- const sockets = this.sockets.get(key);
-
- _.pull(sockets, sock);
-
- return sockets;
- }
-
- get(account) {
- const key = account._id.toString();
-
- let sockets = this.sockets.get(key);
-
- if (_.isEmpty(sockets))
- this.sockets.set(key, sockets = []);
-
- return sockets;
- }
- }
-
- class BrowsersHandler {
- /**
- * @constructor
- */
- constructor() {
- /**
- * Connected browsers.
- * @type {BrowserSockets}
- */
- this._browserSockets = new BrowserSockets();
-
- /**
- * Registered Visor task.
- * @type {Map}
- */
- this._visorTasks = new Map();
- }
-
- /**
- * @param {Error} err
- * @return {{code: number, message: *}}
- */
- errorTransformer(err) {
- return {
- code: err.code || 1,
- message: err.message || err
- };
- }
-
- /**
- * @param {String} account
- * @param {Array.<Socket>} [socks]
- */
- agentStats(account, socks = this._browserSockets.get(account)) {
- return this._agentHnd.agents(account)
- .then((agentSocks) => {
- const stat = _.reduce(agentSocks, (acc, agentSock) => {
- acc.count += 1;
- acc.hasDemo = acc.hasDemo || _.get(agentSock, 'demo.enabled');
-
- if (agentSock.cluster)
- acc.clusters.push(agentSock.cluster);
-
- return acc;
- }, {count: 0, hasDemo: false, clusters: []});
-
- stat.clusters = _.uniqWith(stat.clusters, _.isEqual);
-
- return stat;
- })
- .catch(() => ({count: 0, hasDemo: false, clusters: []}))
- .then((stat) => _.forEach(socks, (sock) => sock.emit('agents:stat', stat)));
- }
-
- clusterChanged(account, cluster) {
- const socks = this._browserSockets.get(account);
-
- _.forEach(socks, (sock) => {
- if (sock)
- sock.emit('cluster:changed', cluster);
- else
- console.log(`Fount closed socket [account=${account}, cluster=${cluster}]`);
- });
- }
-
- pushInitialData(sock) {
- // Send initial data.
- }
-
- emitNotification(sock) {
- sock.emit('user:notifications', this.notification);
- }
-
- /**
- * @param {String} notification Notification message.
- */
- updateNotification(notification) {
- this.notification = notification;
-
- for (const socks of this._browserSockets.sockets.values()) {
- for (const sock of socks)
- this.emitNotification(sock);
- }
- }
-
- executeOnAgent(account, demo, event, ...args) {
- const cb = _.last(args);
-
- return this._agentHnd.agent(account, demo)
- .then((agentSock) => agentSock.emitEvent(event, ..._.dropRight(args)))
- .then((res) => cb(null, res))
- .catch((err) => cb(this.errorTransformer(err)));
- }
-
- agentListeners(sock) {
- const demo = sock.request._query.IgniteDemoMode === 'true';
- const account = () => sock.request.user;
-
- // Return available drivers to browser.
- sock.on('schemaImport:drivers', (...args) => {
- this.executeOnAgent(account(), demo, 'schemaImport:drivers', ...args);
- });
-
- // Return schemas from database to browser.
- sock.on('schemaImport:schemas', (...args) => {
- this.executeOnAgent(account(), demo, 'schemaImport:schemas', ...args);
- });
-
- // Return tables from database to browser.
- sock.on('schemaImport:metadata', (...args) => {
- this.executeOnAgent(account(), demo, 'schemaImport:metadata', ...args);
- });
- }
-
- /**
- * @param {Promise.<AgentSocket>} agent
- * @param {Boolean} demo
- * @param {{sessionId: String}|{'login': String, 'password': String}} credentials
- * @param {Object.<String, String>} params
- * @return {Promise.<T>}
- */
- executeOnNode(agent, token, demo, credentials, params) {
- return agent
- .then((agentSock) => agentSock.emitEvent('node:rest',
- {uri: 'ignite', token, demo, params: _.merge({}, credentials, params)}));
- }
-
- registerVisorTask(taskId, taskCls, ...argCls) {
- this._visorTasks.set(taskId, {
- taskCls,
- argCls
- });
- }
-
- nodeListeners(sock) {
- // Return command result from grid to browser.
- sock.on('node:rest', (arg, cb) => {
- const {clusterId, params, credentials} = arg || {};
-
- if (!_.isFunction(cb))
- cb = console.log;
-
- const demo = _.get(sock, 'request._query.IgniteDemoMode') === 'true';
-
- if ((_.isNil(clusterId) && !demo) || _.isNil(params)) {
- console.log('Received invalid message: "node:rest" on socket:', JSON.stringify(sock.handshake));
-
- return cb('Invalid format of message: "node:rest"');
- }
-
- const agent = this._agentHnd.agent(sock.request.user, demo, clusterId);
-
- const token = sock.request.user.token;
-
- this.executeOnNode(agent, token, demo, credentials, params)
- .then((data) => cb(null, data))
- .catch((err) => cb(this.errorTransformer(err)));
- });
-
- const internalVisor = (postfix) => `org.apache.ignite.internal.visor.${postfix}`;
-
- this.registerVisorTask('querySql', internalVisor('query.VisorQueryTask'), internalVisor('query.VisorQueryArg'));
- this.registerVisorTask('querySqlV2', internalVisor('query.VisorQueryTask'), internalVisor('query.VisorQueryArgV2'));
- this.registerVisorTask('querySqlV3', internalVisor('query.VisorQueryTask'), internalVisor('query.VisorQueryArgV3'));
- this.registerVisorTask('querySqlX2', internalVisor('query.VisorQueryTask'), internalVisor('query.VisorQueryTaskArg'));
-
- this.registerVisorTask('queryScanX2', internalVisor('query.VisorScanQueryTask'), internalVisor('query.VisorScanQueryTaskArg'));
-
- this.registerVisorTask('queryFetch', internalVisor('query.VisorQueryNextPageTask'), 'org.apache.ignite.lang.IgniteBiTuple', 'java.lang.String', 'java.lang.Integer');
- this.registerVisorTask('queryFetchX2', internalVisor('query.VisorQueryNextPageTask'), internalVisor('query.VisorQueryNextPageTaskArg'));
-
- this.registerVisorTask('queryFetchFirstPage', internalVisor('query.VisorQueryFetchFirstPageTask'), internalVisor('query.VisorQueryNextPageTaskArg'));
- this.registerVisorTask('queryPing', internalVisor('query.VisorQueryPingTask'), internalVisor('query.VisorQueryNextPageTaskArg'));
-
- this.registerVisorTask('queryClose', internalVisor('query.VisorQueryCleanupTask'), 'java.util.Map', 'java.util.UUID', 'java.util.Set');
- this.registerVisorTask('queryCloseX2', internalVisor('query.VisorQueryCleanupTask'), internalVisor('query.VisorQueryCleanupTaskArg'));
-
- this.registerVisorTask('toggleClusterState', internalVisor('misc.VisorChangeGridActiveStateTask'), internalVisor('misc.VisorChangeGridActiveStateTaskArg'));
-
- this.registerVisorTask('cacheNamesCollectorTask', internalVisor('cache.VisorCacheNamesCollectorTask'), 'java.lang.Void');
-
- this.registerVisorTask('cacheNodesTask', internalVisor('cache.VisorCacheNodesTask'), 'java.lang.String');
- this.registerVisorTask('cacheNodesTaskX2', internalVisor('cache.VisorCacheNodesTask'), internalVisor('cache.VisorCacheNodesTaskArg'));
-
- // Return command result from grid to browser.
- sock.on('node:visor', (arg, cb) => {
- const {clusterId, params, credentials} = arg || {};
-
- if (!_.isFunction(cb))
- cb = console.log;
-
- const demo = _.get(sock, 'request._query.IgniteDemoMode') === 'true';
-
- if ((_.isNil(clusterId) && !demo) || _.isNil(params)) {
- console.log('Received invalid message: "node:visor" on socket:', JSON.stringify(sock.handshake));
-
- return cb('Invalid format of message: "node:visor"');
- }
-
- const {taskId, nids, args = []} = params;
-
- const desc = this._visorTasks.get(taskId);
-
- if (_.isNil(desc))
- return cb(this.errorTransformer(new errors.IllegalArgumentException(`Failed to find Visor task for id: ${taskId}`)));
-
- const exeParams = {
- cmd: 'exe',
- name: 'org.apache.ignite.internal.visor.compute.VisorGatewayTask',
- p1: nids,
- p2: desc.taskCls
- };
-
- _.forEach(_.concat(desc.argCls, args), (param, idx) => { exeParams[`p${idx + 3}`] = param; });
-
- const agent = this._agentHnd.agent(sock.request.user, demo, clusterId);
-
- const token = sock.request.user.token;
-
- this.executeOnNode(agent, token, demo, credentials, exeParams)
- .then((data) => {
- if (data.finished && !data.zipped)
- return cb(null, data.result);
-
- return cb(null, data);
- })
- .catch((err) => cb(this.errorTransformer(err)));
- });
- }
-
- /**
- *
- * @param server
- * @param {AgentsHandler} agentHnd
- */
- attach(server, agentHnd) {
- this._agentHnd = agentHnd;
-
- if (this.io)
- throw 'Browser server already started!';
-
- mongo.Notifications.findOne().sort('-date').exec()
- .then((notification) => {
- this.notification = notification;
- })
- .then(() => {
- const io = socketio(server);
-
- configure.socketio(io);
-
- // Handle browser connect event.
- io.sockets.on('connection', (sock) => {
- this._browserSockets.add(sock);
-
- // Handle browser disconnect event.
- sock.on('disconnect', () => {
- this._browserSockets.remove(sock);
- });
-
- this.agentListeners(sock);
- this.nodeListeners(sock);
-
- this.pushInitialData(sock);
- this.agentStats(sock.request.user, [sock]);
- this.emitNotification(sock);
- });
- });
- }
- }
-
- return new BrowsersHandler();
- }
-};
diff --git a/modules/web-console/backend/app/configure.js b/modules/web-console/backend/app/configure.js
deleted file mode 100644
index b907a1e..0000000
--- a/modules/web-console/backend/app/configure.js
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const _ = require('lodash');
-const logger = require('morgan');
-const cookieParser = require('cookie-parser');
-const bodyParser = require('body-parser');
-const session = require('express-session');
-const MongoDBStore = require('connect-mongodb-session');
-const passport = require('passport');
-const passportSocketIo = require('passport.socketio');
-const mongoSanitize = require('express-mongo-sanitize');
-
-// Fire me up!
-
-/**
- * Module for configuration express and websocket server.
- */
-module.exports = {
- implements: 'configure',
- inject: ['settings', 'mongo', 'middlewares:*']
-};
-
-module.exports.factory = function(settings, mongo, apis) {
- const _sessionStore = new (MongoDBStore(session))({uri: settings.mongoUrl});
-
- return {
- express: (app) => {
- app.use(logger('dev', {
- skip: (req, res) => res.statusCode < 400
- }));
-
- _.forEach(apis, (api) => app.use(api));
-
- app.use(bodyParser.json({limit: '50mb'}));
- app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
-
-
- app.use(mongoSanitize({replaceWith: '_'}));
-
- app.use(session({
- secret: settings.sessionSecret,
- resave: false,
- saveUninitialized: true,
- unset: 'destroy',
- cookie: {
- expires: new Date(Date.now() + settings.cookieTTL),
- maxAge: settings.cookieTTL
- },
- store: _sessionStore
- }));
-
- app.use(passport.initialize());
- app.use(passport.session());
-
- passport.serializeUser((user, done) => done(null, user._id));
-
- passport.deserializeUser((id, done) => {
- if (mongo.ObjectId.isValid(id))
- return mongo.Account.findById(id, done);
-
- // Invalidates the existing login session.
- done(null, false);
- });
-
- passport.use(mongo.Account.createStrategy());
- },
- socketio: (io) => {
- const _onAuthorizeSuccess = (data, accept) => accept();
-
- const _onAuthorizeFail = (data, message, error, accept) => {
- if (error)
- accept(new Error(message));
-
- return accept(new Error(message));
- };
-
- io.use(passportSocketIo.authorize({
- cookieParser,
- key: 'connect.sid', // the name of the cookie where express/connect stores its session_id
- secret: settings.sessionSecret, // the session_secret to parse the cookie
- store: _sessionStore, // we NEED to use a sessionstore. no memorystore please
- success: _onAuthorizeSuccess, // *optional* callback on success - read more below
- fail: _onAuthorizeFail // *optional* callback on fail/error - read more below
- }));
- }
- };
-};
diff --git a/modules/web-console/backend/app/mongo.js b/modules/web-console/backend/app/mongo.js
deleted file mode 100644
index b9ee9de..0000000
--- a/modules/web-console/backend/app/mongo.js
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const fs = require('fs');
-const _ = require('lodash');
-const mongoose = require('mongoose');
-
-// Fire me up!
-
-/**
- * Module mongo schema.
- */
-module.exports = {
- implements: 'mongo',
- inject: ['settings', 'schemas']
-};
-
-const defineSchema = (schemas) => {
- const result = { connection: mongoose.connection };
-
- result.ObjectId = mongoose.Types.ObjectId;
-
- result.errCodes = {
- DUPLICATE_KEY_ERROR: 11000,
- DUPLICATE_KEY_UPDATE_ERROR: 11001
- };
-
- // Define models.
- _.forEach(schemas, (schema, name) => {
- result[name] = mongoose.model(name, schema);
- });
-
- result.handleError = function(res, err) {
- // TODO IGNITE-843 Send error to admin
- res.status(err.code || 500).send(err.message);
- };
-
- return result;
-};
-
-const upgradeAccounts = (mongo, activation) => {
- if (activation) {
- return mongo.Account.find({
- $or: [{activated: false}, {activated: {$exists: false}}],
- activationToken: {$exists: false}
- }, '_id').lean().exec()
- .then((accounts) => {
- const conditions = _.map(accounts, (account) => ({session: {$regex: `"${account._id}"`}}));
-
- return mongoose.connection.db.collection('sessions').deleteMany({$or: conditions});
- });
- }
-
- return mongo.Account.updateMany({activated: false}, {$unset: {activationSentAt: '', activationToken: ''}}).exec();
-};
-
-module.exports.factory = function(settings, schemas) {
- // Use native promises
- mongoose.Promise = global.Promise;
-
- console.log(settings.mongoUrl, 'Trying to connect to local MongoDB...');
-
- // Connect to mongoDB database.
- return mongoose.connect(settings.mongoUrl, {useNewUrlParser: true, useCreateIndex: true})
- .then(() => defineSchema(schemas))
- .catch(() => {
- console.log(`Failed to connect to MongoDB with connection string: "${settings.mongoUrl}", will try to download and start embedded MongoDB`);
-
- const dbDir = `${process.cwd()}/user_data`;
-
- if (!fs.existsSync(dbDir))
- fs.mkdirSync(dbDir);
-
- const {MongodHelper} = require('mongodb-prebuilt');
- const {MongoDBDownload} = require('mongodb-download');
-
- const helper = new MongodHelper(['--port', '27017', '--dbpath', dbDir]);
-
- helper.mongoBin.mongoDBPrebuilt.mongoDBDownload = new MongoDBDownload({
- downloadDir: `${process.cwd()}/libs/mongodb`,
- version: '4.0.9'
- });
-
- let mongodRun;
-
- if (settings.packaged) {
- mongodRun = new Promise((resolve, reject) => {
- helper.resolveLink = resolve;
- helper.rejectLink = reject;
-
- helper.mongoBin.runCommand()
- .then(() => {
- helper.mongoBin.childProcess.removeAllListeners('close');
-
- helper.mongoBin.childProcess.stderr.on('data', (data) => helper.stderrHandler(data));
- helper.mongoBin.childProcess.stdout.on('data', (data) => helper.stdoutHandler(data));
- helper.mongoBin.childProcess.on('close', (code) => helper.closeHandler(code));
- });
- });
- }
- else
- mongodRun = helper.run();
-
- return mongodRun
- .catch((err) => {
- console.log('Failed to start embedded MongoDB', err);
-
- return Promise.reject(err);
- })
- .then(() => {
- console.log('Embedded MongoDB successfully started');
-
- return mongoose.connect(settings.mongoUrl, {useNewUrlParser: true, useCreateIndex: true})
- .catch((err) => {
- console.log('Failed to connect to embedded MongoDB', err);
-
- return Promise.reject(err);
- });
- })
- .then(() => defineSchema(schemas))
- .then((mongo) => {
- if (settings.packaged) {
- return mongo.Account.count()
- .then((count) => {
- if (count === 0) {
- return Promise.all([
- mongo.Account.create({
- _id: '59fc0c25e145c32be0f83b33',
- salt: '7b4ccb9e375508a8f87c8f347083ce98cb8785d857dd18208f9a480e992a26bb',
- hash: '909d5ed6e0b0a656ef542e2e8e851e9eb00cfb77984e0a6b4597c335d1436a577b3b289601eb8d1f3646e488cd5ea2bbb3e97fcc131cd6a9571407a45b1817bf1af1dd0ccdd070f07733da19e636ff9787369c5f38f86075f78c60809fe4a52288a68ca38aae0ad2bd0cc77b4cae310abf260e9523d361fd9be60e823a7d8e73954ddb18091e668acd3f57baf9fa7db4267e198d829761997a4741734335589ab62793ceb089e8fffe6e5b0e86f332b33a3011ba44e6efd29736f31cbd2b2023e5173baf517f337eb7a4321ea2b67ec827cffa271d26d3f2def93b5ef [...]
- email: 'admin@admin',
- firstName: 'admin',
- lastName: 'admin',
- company: 'admin',
- country: 'United States',
- admin: true,
- token: 'ruQvlWff09zqoVYyh6WJ',
- attempts: 0,
- resetPasswordToken: 'O2GWgOkKkhqpDcxjYnSP',
- activated: true
- }),
- mongo.Space.create({
- _id: '59fc0c26e145c32be0f83b34',
- name: 'Personal space',
- owner: '59fc0c25e145c32be0f83b33',
- usedBy: [],
- demo: false
- })
- ]);
- }
- })
- .then(() => mongo)
- .catch(() => mongo);
- }
-
- return mongo;
- });
- })
- .then((mongo) => {
- return upgradeAccounts(mongo, settings.activation.enabled)
- .then(() => mongo)
- .catch(() => mongo);
- });
-};
diff --git a/modules/web-console/backend/app/nconf.js b/modules/web-console/backend/app/nconf.js
deleted file mode 100644
index 3f5d7d1..0000000
--- a/modules/web-console/backend/app/nconf.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const fs = require('fs');
-const nconf = require('nconf');
-
-// Fire me up!
-
-/**
- * Module with server-side configuration.
- */
-module.exports = {
- implements: 'nconf',
- factory() {
- nconf.env({separator: '_'}).argv();
-
- const dfltFile = 'config/settings.json';
- const customFile = nconf.get('settings') || dfltFile;
-
- try {
- fs.accessSync(customFile, fs.F_OK);
-
- nconf.file({file: customFile});
- }
- catch (ignored) {
- try {
- fs.accessSync(dfltFile, fs.F_OK);
-
- nconf.file({file: dfltFile});
- }
- catch (ignored2) {
- // No-op.
- }
- }
-
- return nconf;
- }
-};
diff --git a/modules/web-console/backend/app/routes.js b/modules/web-console/backend/app/routes.js
deleted file mode 100644
index ce7b5d8..0000000
--- a/modules/web-console/backend/app/routes.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-// Fire me up!
-
-module.exports = {
- implements: 'routes',
- inject: ['routes/public', 'routes/admin', 'routes/profiles', 'routes/demo', 'routes/clusters', 'routes/domains',
- 'routes/caches', 'routes/igfss', 'routes/notebooks', 'routes/downloads', 'routes/configurations', 'routes/activities']
-};
-
-module.exports.factory = function(publicRoute, adminRoute, profilesRoute, demoRoute,
- clustersRoute, domainsRoute, cachesRoute, igfssRoute, notebooksRoute, downloadsRoute, configurationsRoute, activitiesRoute) {
- return {
- register: (app) => {
- const _mustAuthenticated = (req, res, next) => {
- if (req.isAuthenticated())
- return next();
-
- res.status(401).send('Access denied. You are not authorized to access this page.');
- };
-
- const _adminOnly = (req, res, next) => {
- if (req.isAuthenticated() && req.user.admin)
- return next();
-
- res.status(401).send('Access denied. You are not authorized to access this page.');
- };
-
- // Registering the standard routes.
- // NOTE: Order is important!
- app.use('/api/v1/', publicRoute);
- app.use('/api/v1/admin', _mustAuthenticated, _adminOnly, adminRoute);
- app.use('/api/v1/profile', _mustAuthenticated, profilesRoute);
- app.use('/api/v1/demo', _mustAuthenticated, demoRoute);
-
- app.all('/api/v1/configuration/*', _mustAuthenticated);
-
- app.use('/api/v1/configuration/clusters', clustersRoute);
- app.use('/api/v1/configuration/domains', domainsRoute);
- app.use('/api/v1/configuration/caches', cachesRoute);
- app.use('/api/v1/configuration/igfs', igfssRoute);
- app.use('/api/v1/configuration', configurationsRoute);
-
- app.use('/api/v1/notebooks', _mustAuthenticated, notebooksRoute);
- app.use('/api/v1/downloads', _mustAuthenticated, downloadsRoute);
- app.use('/api/v1/activities', _mustAuthenticated, activitiesRoute);
- }
- };
-};
diff --git a/modules/web-console/backend/app/schemas.js b/modules/web-console/backend/app/schemas.js
deleted file mode 100644
index 21c8120..0000000
--- a/modules/web-console/backend/app/schemas.js
+++ /dev/null
@@ -1,1323 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const mongoose = require('mongoose');
-const passportMongo = require('passport-local-mongoose');
-
-// Fire me up!
-
-/**
- * Module mongo schema.
- */
-module.exports = {
- implements: 'schemas',
- inject: []
-};
-
-module.exports.factory = function() {
- const Schema = mongoose.Schema;
- const ObjectId = mongoose.Schema.Types.ObjectId;
-
- // Define Account schema.
- const Account = new Schema({
- firstName: String,
- lastName: String,
- email: {type: String, unique: true},
- phone: String,
- company: String,
- country: String,
- registered: Date,
- lastLogin: Date,
- lastActivity: Date,
- admin: Boolean,
- token: String,
- resetPasswordToken: String,
- activated: {type: Boolean, default: false},
- activationSentAt: Date,
- activationToken: String
- });
-
- // Install passport plugin.
- Account.plugin(passportMongo, {
- usernameField: 'email', limitAttempts: true, lastLoginField: 'lastLogin',
- usernameLowerCase: true,
- errorMessages: {
- UserExistsError: 'A user with the given email is already registered'
- }
- });
-
- const transform = (doc, ret) => {
- return {
- _id: ret._id,
- email: ret.email,
- phone: ret.phone,
- firstName: ret.firstName,
- lastName: ret.lastName,
- company: ret.company,
- country: ret.country,
- admin: ret.admin,
- token: ret.token,
- registered: ret.registered,
- lastLogin: ret.lastLogin,
- lastActivity: ret.lastActivity
- };
- };
-
- // Configure transformation to JSON.
- Account.set('toJSON', {transform});
-
- // Configure transformation to JSON.
- Account.set('toObject', {transform});
-
- // Define Space schema.
- const Space = new Schema({
- name: String,
- owner: {type: ObjectId, ref: 'Account'},
- demo: {type: Boolean, default: false},
- usedBy: [{
- permission: {type: String, enum: ['VIEW', 'FULL']},
- account: {type: ObjectId, ref: 'Account'}
- }]
- });
-
- // Define Domain model schema.
- const DomainModel = new Schema({
- space: {type: ObjectId, ref: 'Space', index: true, required: true},
- clusters: [{type: ObjectId, ref: 'Cluster'}],
- caches: [{type: ObjectId, ref: 'Cache'}],
- queryMetadata: {type: String, enum: ['Annotations', 'Configuration']},
- kind: {type: String, enum: ['query', 'store', 'both']},
- tableName: String,
- keyFieldName: String,
- valueFieldName: String,
- databaseSchema: String,
- databaseTable: String,
- keyType: String,
- valueType: {type: String},
- keyFields: [{
- databaseFieldName: String,
- databaseFieldType: String,
- javaFieldName: String,
- javaFieldType: String
- }],
- valueFields: [{
- databaseFieldName: String,
- databaseFieldType: String,
- javaFieldName: String,
- javaFieldType: String
- }],
- queryKeyFields: [String],
- fields: [{
- name: String,
- className: String,
- notNull: Boolean,
- defaultValue: String,
- precision: Number,
- scale: Number
- }],
- aliases: [{field: String, alias: String}],
- indexes: [{
- name: String,
- indexType: {type: String, enum: ['SORTED', 'FULLTEXT', 'GEOSPATIAL']},
- fields: [{name: String, direction: Boolean}],
- inlineSizeType: Number,
- inlineSize: Number
- }],
- generatePojo: Boolean
- });
-
- DomainModel.index({valueType: 1, space: 1, clusters: 1}, {unique: true});
-
- // Define Cache schema.
- const Cache = new Schema({
- space: {type: ObjectId, ref: 'Space', index: true, required: true},
- name: {type: String},
- groupName: {type: String},
- clusters: [{type: ObjectId, ref: 'Cluster'}],
- domains: [{type: ObjectId, ref: 'DomainModel'}],
- cacheMode: {type: String, enum: ['PARTITIONED', 'REPLICATED', 'LOCAL']},
- atomicityMode: {type: String, enum: ['ATOMIC', 'TRANSACTIONAL', 'TRANSACTIONAL_SNAPSHOT']},
- partitionLossPolicy: {
- type: String,
- enum: ['READ_ONLY_SAFE', 'READ_ONLY_ALL', 'READ_WRITE_SAFE', 'READ_WRITE_ALL', 'IGNORE']
- },
-
- affinity: {
- kind: {type: String, enum: ['Default', 'Rendezvous', 'Fair', 'Custom']},
- Rendezvous: {
- affinityBackupFilter: String,
- partitions: Number,
- excludeNeighbors: Boolean
- },
- Fair: {
- affinityBackupFilter: String,
- partitions: Number,
- excludeNeighbors: Boolean
- },
- Custom: {
- className: String
- }
- },
-
- affinityMapper: String,
-
- nodeFilter: {
- kind: {type: String, enum: ['Default', 'Exclude', 'IGFS', 'OnNodes', 'Custom']},
- Exclude: {
- nodeId: String
- },
- IGFS: {
- igfs: {type: ObjectId, ref: 'Igfs'}
- },
- Custom: {
- className: String
- }
- },
-
- backups: Number,
- memoryMode: {type: String, enum: ['ONHEAP_TIERED', 'OFFHEAP_TIERED', 'OFFHEAP_VALUES']},
- offHeapMode: Number,
- offHeapMaxMemory: Number,
- startSize: Number,
- swapEnabled: Boolean,
- cacheWriterFactory: String,
- cacheLoaderFactory: String,
- expiryPolicyFactory: String,
- interceptor: String,
- storeByValue: Boolean,
- eagerTtl: {type: Boolean, default: true},
- encryptionEnabled: Boolean,
- eventsDisabled: Boolean,
-
- keyConfiguration: [{
- typeName: String,
- affinityKeyFieldName: String
- }],
-
- cacheStoreSessionListenerFactories: [String],
-
- onheapCacheEnabled: Boolean,
-
- evictionPolicy: {
- kind: {type: String, enum: ['LRU', 'FIFO', 'SORTED']},
- LRU: {
- batchSize: Number,
- maxMemorySize: Number,
- maxSize: Number
- },
- FIFO: {
- batchSize: Number,
- maxMemorySize: Number,
- maxSize: Number
- },
- SORTED: {
- batchSize: Number,
- maxMemorySize: Number,
- maxSize: Number
- }
- },
-
- rebalanceMode: {type: String, enum: ['SYNC', 'ASYNC', 'NONE']},
- rebalanceBatchSize: Number,
- rebalanceBatchesPrefetchCount: Number,
- rebalanceOrder: Number,
- rebalanceDelay: Number,
- rebalanceTimeout: Number,
- rebalanceThrottle: Number,
-
- cacheStoreFactory: {
- kind: {
- type: String,
- enum: ['CacheJdbcPojoStoreFactory', 'CacheJdbcBlobStoreFactory', 'CacheHibernateBlobStoreFactory']
- },
- CacheJdbcPojoStoreFactory: {
- dataSourceBean: String,
- dialect: {
- type: String,
- enum: ['Generic', 'Oracle', 'DB2', 'SQLServer', 'MySQL', 'PostgreSQL', 'H2']
- },
- implementationVersion: String,
- batchSize: Number,
- maximumPoolSize: Number,
- maximumWriteAttempts: Number,
- parallelLoadCacheMinimumThreshold: Number,
- hasher: String,
- transformer: String,
- sqlEscapeAll: Boolean
- },
- CacheJdbcBlobStoreFactory: {
- connectVia: {type: String, enum: ['URL', 'DataSource']},
- connectionUrl: String,
- user: String,
- dataSourceBean: String,
- dialect: {
- type: String,
- enum: ['Generic', 'Oracle', 'DB2', 'SQLServer', 'MySQL', 'PostgreSQL', 'H2']
- },
- initSchema: Boolean,
- createTableQuery: String,
- loadQuery: String,
- insertQuery: String,
- updateQuery: String,
- deleteQuery: String
- },
- CacheHibernateBlobStoreFactory: {
- hibernateProperties: [{name: String, value: String}]
- }
- },
- storeConcurrentLoadAllThreshold: Number,
- maxQueryIteratorsCount: Number,
- storeKeepBinary: Boolean,
- loadPreviousValue: Boolean,
- readThrough: Boolean,
- writeThrough: Boolean,
-
- writeBehindEnabled: Boolean,
- writeBehindBatchSize: Number,
- writeBehindFlushSize: Number,
- writeBehindFlushFrequency: Number,
- writeBehindFlushThreadCount: Number,
- writeBehindCoalescing: {type: Boolean, default: true},
-
- isInvalidate: Boolean,
- defaultLockTimeout: Number,
- atomicWriteOrderMode: {type: String, enum: ['CLOCK', 'PRIMARY']},
- writeSynchronizationMode: {type: String, enum: ['FULL_SYNC', 'FULL_ASYNC', 'PRIMARY_SYNC']},
-
- sqlEscapeAll: Boolean,
- sqlSchema: String,
- sqlOnheapRowCacheSize: Number,
- longQueryWarningTimeout: Number,
- sqlFunctionClasses: [String],
- snapshotableIndex: Boolean,
- queryDetailMetricsSize: Number,
- queryParallelism: Number,
- statisticsEnabled: Boolean,
- managementEnabled: Boolean,
- readFromBackup: Boolean,
- copyOnRead: Boolean,
- maxConcurrentAsyncOperations: Number,
- nearConfiguration: {
- enabled: Boolean,
- nearStartSize: Number,
- nearEvictionPolicy: {
- kind: {type: String, enum: ['LRU', 'FIFO', 'SORTED']},
- LRU: {
- batchSize: Number,
- maxMemorySize: Number,
- maxSize: Number
- },
- FIFO: {
- batchSize: Number,
- maxMemorySize: Number,
- maxSize: Number
- },
- SORTED: {
- batchSize: Number,
- maxMemorySize: Number,
- maxSize: Number
- }
- }
- },
- clientNearConfiguration: {
- enabled: Boolean,
- nearStartSize: Number,
- nearEvictionPolicy: {
- kind: {type: String, enum: ['LRU', 'FIFO', 'SORTED']},
- LRU: {
- batchSize: Number,
- maxMemorySize: Number,
- maxSize: Number
- },
- FIFO: {
- batchSize: Number,
- maxMemorySize: Number,
- maxSize: Number
- },
- SORTED: {
- batchSize: Number,
- maxMemorySize: Number,
- maxSize: Number
- }
- }
- },
- evictionFilter: String,
- memoryPolicyName: String,
- dataRegionName: String,
- sqlIndexMaxInlineSize: Number,
- topologyValidator: String,
- diskPageCompression: {type: String, enum: ['SKIP_GARBAGE', 'ZSTD', 'LZ4', 'SNAPPY']},
- diskPageCompressionLevel: Number
- });
-
- Cache.index({name: 1, space: 1, clusters: 1}, {unique: true});
-
- const Igfs = new Schema({
- space: {type: ObjectId, ref: 'Space', index: true, required: true},
- name: {type: String},
- clusters: [{type: ObjectId, ref: 'Cluster'}],
- affinnityGroupSize: Number,
- blockSize: Number,
- streamBufferSize: Number,
- dataCacheName: String,
- metaCacheName: String,
- defaultMode: {type: String, enum: ['PRIMARY', 'PROXY', 'DUAL_SYNC', 'DUAL_ASYNC']},
- dualModeMaxPendingPutsSize: Number,
- dualModePutExecutorService: String,
- dualModePutExecutorServiceShutdown: Boolean,
- fragmentizerConcurrentFiles: Number,
- fragmentizerEnabled: Boolean,
- fragmentizerThrottlingBlockLength: Number,
- fragmentizerThrottlingDelay: Number,
- ipcEndpointConfiguration: {
- type: {type: String, enum: ['SHMEM', 'TCP']},
- host: String,
- port: Number,
- memorySize: Number,
- tokenDirectoryPath: String,
- threadCount: Number
- },
- ipcEndpointEnabled: Boolean,
- maxSpaceSize: Number,
- maximumTaskRangeLength: Number,
- managementPort: Number,
- pathModes: [{path: String, mode: {type: String, enum: ['PRIMARY', 'PROXY', 'DUAL_SYNC', 'DUAL_ASYNC']}}],
- perNodeBatchSize: Number,
- perNodeParallelBatchCount: Number,
- prefetchBlocks: Number,
- sequentialReadsBeforePrefetch: Number,
- trashPurgeTimeout: Number,
- secondaryFileSystemEnabled: Boolean,
- secondaryFileSystem: {
- userName: String,
- kind: {type: String, enum: ['Caching', 'Kerberos', 'Custom'], default: 'Caching'},
- uri: String,
- cfgPath: String,
- cfgPaths: [String],
- userNameMapper: {
- kind: {type: String, enum: ['Chained', 'Basic', 'Kerberos', 'Custom']},
- Chained: {
- mappers: [{
- kind: {type: String, enum: ['Basic', 'Kerberos', 'Custom']},
- Basic: {
- defaultUserName: String,
- useDefaultUserName: Boolean,
- mappings: [{
- name: String,
- value: String
- }]
- },
- Kerberos: {
- instance: String,
- realm: String
- },
- Custom: {
- className: String,
- }
- }]
- },
- Basic: {
- defaultUserName: String,
- useDefaultUserName: Boolean,
- mappings: [{
- name: String,
- value: String
- }]
- },
- Kerberos: {
- instance: String,
- realm: String
- },
- Custom: {
- className: String,
- }
- },
- Kerberos: {
- keyTab: String,
- keyTabPrincipal: String,
- reloginInterval: Number
- },
- Custom: {
- className: String
- }
- },
- colocateMetadata: Boolean,
- relaxedConsistency: Boolean,
- updateFileLengthOnFlush: Boolean
- });
-
- Igfs.index({name: 1, space: 1, clusters: 1}, {unique: true});
-
-
- // Define Cluster schema.
- const Cluster = new Schema({
- space: {type: ObjectId, ref: 'Space', index: true, required: true},
- name: {type: String},
- activeOnStart: {type: Boolean, default: true},
- localHost: String,
- discovery: {
- localAddress: String,
- localPort: Number,
- localPortRange: Number,
- addressResolver: String,
- socketTimeout: Number,
- ackTimeout: Number,
- maxAckTimeout: Number,
- networkTimeout: Number,
- joinTimeout: Number,
- threadPriority: Number,
- heartbeatFrequency: Number,
- maxMissedHeartbeats: Number,
- maxMissedClientHeartbeats: Number,
- topHistorySize: Number,
- listener: String,
- dataExchange: String,
- metricsProvider: String,
- reconnectCount: Number,
- statisticsPrintFrequency: Number,
- ipFinderCleanFrequency: Number,
- authenticator: String,
- forceServerMode: Boolean,
- clientReconnectDisabled: Boolean,
- connectionRecoveryTimeout: Number,
- reconnectDelay: Number,
- soLinger: Number,
- kind: {
- type: String,
- enum: ['Vm', 'Multicast', 'S3', 'Cloud', 'GoogleStorage', 'Jdbc', 'SharedFs', 'ZooKeeper', 'Kubernetes']
- },
- Vm: {
- addresses: [String]
- },
- Multicast: {
- multicastGroup: String,
- multicastPort: Number,
- responseWaitTime: Number,
- addressRequestAttempts: Number,
- localAddress: String,
- addresses: [String]
- },
- S3: {
- bucketName: String,
- bucketEndpoint: String,
- SSEAlgorithm: String,
- clientConfiguration: {
- protocol: {type: String, enum: ['HTTP', 'HTTPS']},
- maxConnections: Number,
- userAgentPrefix: String,
- userAgentSuffix: String,
- localAddress: String,
- proxyHost: String,
- proxyPort: Number,
- proxyUsername: String,
- proxyDomain: String,
- proxyWorkstation: String,
- retryPolicy: {
- kind: {
- type: String,
- enum: ['Default', 'DefaultMaxRetries', 'DynamoDB', 'DynamoDBMaxRetries', 'Custom', 'CustomClass']
- },
- DefaultMaxRetries: {
- maxErrorRetry: Number
- },
- DynamoDBMaxRetries: {
- maxErrorRetry: Number
- },
- Custom: {
- retryCondition: String,
- backoffStrategy: String,
- maxErrorRetry: Number,
- honorMaxErrorRetryInClientConfig: Boolean
- },
- CustomClass: {
- className: String
- }
- },
- maxErrorRetry: Number,
- socketTimeout: Number,
- connectionTimeout: Number,
- requestTimeout: Number,
- useReaper: Boolean,
- useGzip: Boolean,
- signerOverride: String,
- preemptiveBasicProxyAuth: Boolean,
- connectionTTL: Number,
- connectionMaxIdleMillis: Number,
- useTcpKeepAlive: Boolean,
- dnsResolver: String,
- responseMetadataCacheSize: Number,
- secureRandom: String,
- cacheResponseMetadata: {type: Boolean, default: true},
- clientExecutionTimeout: Number,
- nonProxyHosts: String,
- socketSendBufferSizeHint: Number,
- socketReceiveBufferSizeHint: Number,
- useExpectContinue: {type: Boolean, default: true},
- useThrottleRetries: {type: Boolean, default: true}
- }
- },
- Cloud: {
- credential: String,
- credentialPath: String,
- identity: String,
- provider: String,
- regions: [String],
- zones: [String]
- },
- GoogleStorage: {
- projectName: String,
- bucketName: String,
- serviceAccountP12FilePath: String,
- serviceAccountId: String,
- addrReqAttempts: String
- },
- Jdbc: {
- initSchema: Boolean,
- dataSourceBean: String,
- dialect: {
- type: String,
- enum: ['Generic', 'Oracle', 'DB2', 'SQLServer', 'MySQL', 'PostgreSQL', 'H2']
- }
- },
- SharedFs: {
- path: String
- },
- ZooKeeper: {
- curator: String,
- zkConnectionString: String,
- retryPolicy: {
- kind: {
- type: String, enum: ['ExponentialBackoff', 'BoundedExponentialBackoff', 'UntilElapsed',
- 'NTimes', 'OneTime', 'Forever', 'Custom']
- },
- ExponentialBackoff: {
- baseSleepTimeMs: Number,
- maxRetries: Number,
- maxSleepMs: Number
- },
- BoundedExponentialBackoff: {
- baseSleepTimeMs: Number,
- maxSleepTimeMs: Number,
- maxRetries: Number
- },
- UntilElapsed: {
- maxElapsedTimeMs: Number,
- sleepMsBetweenRetries: Number
- },
- NTimes: {
- n: Number,
- sleepMsBetweenRetries: Number
- },
- OneTime: {
- sleepMsBetweenRetry: Number
- },
- Forever: {
- retryIntervalMs: Number
- },
- Custom: {
- className: String
- }
- },
- basePath: String,
- serviceName: String,
- allowDuplicateRegistrations: Boolean
- },
- Kubernetes: {
- serviceName: String,
- namespace: String,
- masterUrl: String,
- accountToken: String
- }
- },
- atomicConfiguration: {
- backups: Number,
- cacheMode: {type: String, enum: ['LOCAL', 'REPLICATED', 'PARTITIONED']},
- atomicSequenceReserveSize: Number,
- affinity: {
- kind: {type: String, enum: ['Default', 'Rendezvous', 'Custom']},
- Rendezvous: {
- affinityBackupFilter: String,
- partitions: Number,
- excludeNeighbors: Boolean
- },
- Custom: {
- className: String
- }
- },
- groupName: String
- },
- binaryConfiguration: {
- idMapper: String,
- nameMapper: String,
- serializer: String,
- typeConfigurations: [{
- typeName: String,
- idMapper: String,
- nameMapper: String,
- serializer: String,
- enum: Boolean,
- enumValues: [String]
- }],
- compactFooter: Boolean
- },
- caches: [{type: ObjectId, ref: 'Cache'}],
- models: [{type: ObjectId, ref: 'DomainModel'}],
- clockSyncSamples: Number,
- clockSyncFrequency: Number,
- deploymentMode: {type: String, enum: ['PRIVATE', 'ISOLATED', 'SHARED', 'CONTINUOUS']},
- discoveryStartupDelay: Number,
- igfsThreadPoolSize: Number,
- igfss: [{type: ObjectId, ref: 'Igfs'}],
- includeEventTypes: [String],
- eventStorage: {
- kind: {type: String, enum: ['Memory', 'Custom']},
- Memory: {
- expireAgeMs: Number,
- expireCount: Number,
- filter: String
- },
- Custom: {
- className: String
- }
- },
- managementThreadPoolSize: Number,
- marshaller: {
- kind: {type: String, enum: ['OptimizedMarshaller', 'JdkMarshaller']},
- OptimizedMarshaller: {
- poolSize: Number,
- requireSerializable: Boolean
- }
- },
- marshalLocalJobs: Boolean,
- marshallerCacheKeepAliveTime: Number,
- marshallerCacheThreadPoolSize: Number,
- metricsExpireTime: Number,
- metricsHistorySize: Number,
- metricsLogFrequency: Number,
- metricsUpdateFrequency: Number,
- networkTimeout: Number,
- networkSendRetryDelay: Number,
- networkSendRetryCount: Number,
- communication: {
- listener: String,
- localAddress: String,
- localPort: Number,
- localPortRange: Number,
- sharedMemoryPort: Number,
- directBuffer: Boolean,
- directSendBuffer: Boolean,
- idleConnectionTimeout: Number,
- connectTimeout: Number,
- maxConnectTimeout: Number,
- reconnectCount: Number,
- socketSendBuffer: Number,
- socketReceiveBuffer: Number,
- messageQueueLimit: Number,
- slowClientQueueLimit: Number,
- tcpNoDelay: Boolean,
- ackSendThreshold: Number,
- unacknowledgedMessagesBufferSize: Number,
- socketWriteTimeout: Number,
- selectorsCount: Number,
- addressResolver: String,
- selectorSpins: Number,
- connectionsPerNode: Number,
- usePairedConnections: Boolean,
- filterReachableAddresses: Boolean
- },
- connector: {
- enabled: Boolean,
- jettyPath: String,
- host: String,
- port: Number,
- portRange: Number,
- idleTimeout: Number,
- idleQueryCursorTimeout: Number,
- idleQueryCursorCheckFrequency: Number,
- receiveBufferSize: Number,
- sendBufferSize: Number,
- sendQueueLimit: Number,
- directBuffer: Boolean,
- noDelay: Boolean,
- selectorCount: Number,
- threadPoolSize: Number,
- messageInterceptor: String,
- secretKey: String,
- sslEnabled: Boolean,
- sslClientAuth: Boolean,
- sslFactory: String
- },
- peerClassLoadingEnabled: Boolean,
- peerClassLoadingLocalClassPathExclude: [String],
- peerClassLoadingMissedResourcesCacheSize: Number,
- peerClassLoadingThreadPoolSize: Number,
- publicThreadPoolSize: Number,
- swapSpaceSpi: {
- kind: {type: String, enum: ['FileSwapSpaceSpi']},
- FileSwapSpaceSpi: {
- baseDirectory: String,
- readStripesNumber: Number,
- maximumSparsity: Number,
- maxWriteQueueSize: Number,
- writeBufferSize: Number
- }
- },
- systemThreadPoolSize: Number,
- timeServerPortBase: Number,
- timeServerPortRange: Number,
- transactionConfiguration: {
- defaultTxConcurrency: {type: String, enum: ['OPTIMISTIC', 'PESSIMISTIC']},
- defaultTxIsolation: {type: String, enum: ['READ_COMMITTED', 'REPEATABLE_READ', 'SERIALIZABLE']},
- defaultTxTimeout: Number,
- pessimisticTxLogLinger: Number,
- pessimisticTxLogSize: Number,
- txSerializableEnabled: Boolean,
- txManagerFactory: String,
- useJtaSynchronization: Boolean,
- txTimeoutOnPartitionMapExchange: Number, // 2.5
- deadlockTimeout: Number // 2.8
- },
- sslEnabled: Boolean,
- sslContextFactory: {
- keyAlgorithm: String,
- keyStoreFilePath: String,
- keyStoreType: String,
- protocol: String,
- trustStoreFilePath: String,
- trustStoreType: String,
- trustManagers: [String],
- cipherSuites: [String],
- protocols: [String]
- },
- rebalanceThreadPoolSize: Number,
- odbc: {
- odbcEnabled: Boolean,
- endpointAddress: String,
- socketSendBufferSize: Number,
- socketReceiveBufferSize: Number,
- maxOpenCursors: Number,
- threadPoolSize: Number
- },
- attributes: [{name: String, value: String}],
- collision: {
- kind: {type: String, enum: ['Noop', 'PriorityQueue', 'FifoQueue', 'JobStealing', 'Custom']},
- PriorityQueue: {
- parallelJobsNumber: Number,
- waitingJobsNumber: Number,
- priorityAttributeKey: String,
- jobPriorityAttributeKey: String,
- defaultPriority: Number,
- starvationIncrement: Number,
- starvationPreventionEnabled: Boolean
- },
- FifoQueue: {
- parallelJobsNumber: Number,
- waitingJobsNumber: Number
- },
- JobStealing: {
- activeJobsThreshold: Number,
- waitJobsThreshold: Number,
- messageExpireTime: Number,
- maximumStealingAttempts: Number,
- stealingEnabled: Boolean,
- stealingAttributes: [{name: String, value: String}],
- externalCollisionListener: String
- },
- Custom: {
- class: String
- }
- },
- failoverSpi: [{
- kind: {type: String, enum: ['JobStealing', 'Never', 'Always', 'Custom']},
- JobStealing: {
- maximumFailoverAttempts: Number
- },
- Always: {
- maximumFailoverAttempts: Number
- },
- Custom: {
- class: String
- }
- }],
- logger: {
- kind: {type: 'String', enum: ['Log4j2', 'Null', 'Java', 'JCL', 'SLF4J', 'Log4j', 'Custom']},
- Log4j2: {
- level: {type: String, enum: ['OFF', 'FATAL', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE', 'ALL']},
- path: String
- },
- Log4j: {
- mode: {type: String, enum: ['Default', 'Path']},
- level: {type: String, enum: ['OFF', 'FATAL', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE', 'ALL']},
- path: String
- },
- Custom: {
- class: String
- }
- },
- cacheKeyConfiguration: [{
- typeName: String,
- affinityKeyFieldName: String
- }],
- checkpointSpi: [{
- kind: {type: String, enum: ['FS', 'Cache', 'S3', 'JDBC', 'Custom']},
- FS: {
- directoryPaths: [String],
- checkpointListener: String
- },
- Cache: {
- cache: {type: ObjectId, ref: 'Cache'},
- checkpointListener: String
- },
- S3: {
- awsCredentials: {
- kind: {type: String, enum: ['Basic', 'Properties', 'Anonymous', 'BasicSession', 'Custom']},
- Properties: {
- path: String
- },
- Custom: {
- className: String
- }
- },
- bucketNameSuffix: String,
- bucketEndpoint: String,
- SSEAlgorithm: String,
- clientConfiguration: {
- protocol: {type: String, enum: ['HTTP', 'HTTPS']},
- maxConnections: Number,
- userAgentPrefix: String,
- userAgentSuffix: String,
- localAddress: String,
- proxyHost: String,
- proxyPort: Number,
- proxyUsername: String,
- proxyDomain: String,
- proxyWorkstation: String,
- retryPolicy: {
- kind: {
- type: String,
- enum: ['Default', 'DefaultMaxRetries', 'DynamoDB', 'DynamoDBMaxRetries', 'Custom']
- },
- DefaultMaxRetries: {
- maxErrorRetry: Number
- },
- DynamoDBMaxRetries: {
- maxErrorRetry: Number
- },
- Custom: {
- retryCondition: String,
- backoffStrategy: String,
- maxErrorRetry: Number,
- honorMaxErrorRetryInClientConfig: Boolean
- }
- },
- maxErrorRetry: Number,
- socketTimeout: Number,
- connectionTimeout: Number,
- requestTimeout: Number,
- useReaper: Boolean,
- useGzip: Boolean,
- signerOverride: String,
- preemptiveBasicProxyAuth: Boolean,
- connectionTTL: Number,
- connectionMaxIdleMillis: Number,
- useTcpKeepAlive: Boolean,
- dnsResolver: String,
- responseMetadataCacheSize: Number,
- secureRandom: String,
- cacheResponseMetadata: {type: Boolean, default: true},
- clientExecutionTimeout: Number,
- nonProxyHosts: String,
- socketSendBufferSizeHint: Number,
- socketReceiveBufferSizeHint: Number,
- useExpectContinue: {type: Boolean, default: true},
- useThrottleRetries: {type: Boolean, default: true}
- },
- checkpointListener: String
- },
- JDBC: {
- dataSourceBean: String,
- dialect: {
- type: String,
- enum: ['Generic', 'Oracle', 'DB2', 'SQLServer', 'MySQL', 'PostgreSQL', 'H2']
- },
- user: String,
- checkpointTableName: String,
- keyFieldName: String,
- keyFieldType: String,
- valueFieldName: String,
- valueFieldType: String,
- expireDateFieldName: String,
- expireDateFieldType: String,
- numberOfRetries: Number,
- checkpointListener: String
- },
- Custom: {
- className: String
- }
- }],
- clientConnectorConfiguration: {
- enabled: Boolean,
- host: String,
- port: Number,
- portRange: Number,
- socketSendBufferSize: Number,
- socketReceiveBufferSize: Number,
- tcpNoDelay: {type: Boolean, default: true},
- maxOpenCursorsPerConnection: Number,
- threadPoolSize: Number,
- idleTimeout: Number,
- jdbcEnabled: {type: Boolean, default: true},
- odbcEnabled: {type: Boolean, default: true},
- thinClientEnabled: {type: Boolean, default: true},
- sslEnabled: Boolean,
- useIgniteSslContextFactory: {type: Boolean, default: true},
- sslClientAuth: Boolean,
- sslContextFactory: String
- },
- loadBalancingSpi: [{
- kind: {type: String, enum: ['RoundRobin', 'Adaptive', 'WeightedRandom', 'Custom']},
- RoundRobin: {
- perTask: Boolean
- },
- Adaptive: {
- loadProbe: {
- kind: {type: String, enum: ['Job', 'CPU', 'ProcessingTime', 'Custom']},
- Job: {
- useAverage: Boolean
- },
- CPU: {
- useAverage: Boolean,
- useProcessors: Boolean,
- processorCoefficient: Number
- },
- ProcessingTime: {
- useAverage: Boolean
- },
- Custom: {
- className: String
- }
- }
- },
- WeightedRandom: {
- nodeWeight: Number,
- useWeights: Boolean
- },
- Custom: {
- className: String
- }
- }],
- deploymentSpi: {
- kind: {type: String, enum: ['URI', 'Local', 'Custom']},
- URI: {
- uriList: [String],
- temporaryDirectoryPath: String,
- scanners: [String],
- listener: String,
- checkMd5: Boolean,
- encodeUri: Boolean
- },
- Local: {
- listener: String
- },
- Custom: {
- className: String
- }
- },
- warmupClosure: String,
- hadoopConfiguration: {
- mapReducePlanner: {
- kind: {type: String, enum: ['Weighted', 'Custom']},
- Weighted: {
- localMapperWeight: Number,
- remoteMapperWeight: Number,
- localReducerWeight: Number,
- remoteReducerWeight: Number,
- preferLocalReducerThresholdWeight: Number
- },
- Custom: {
- className: String
- }
- },
- finishedJobInfoTtl: Number,
- maxParallelTasks: Number,
- maxTaskQueueSize: Number,
- nativeLibraryNames: [String]
- },
- serviceConfigurations: [{
- name: String,
- service: String,
- maxPerNodeCount: Number,
- totalCount: Number,
- nodeFilter: {
- kind: {type: String, enum: ['Default', 'Exclude', 'IGFS', 'OnNodes', 'Custom']},
- Exclude: {
- nodeId: String
- },
- IGFS: {
- igfs: {type: ObjectId, ref: 'Igfs'}
- },
- Custom: {
- className: String
- }
- },
- cache: {type: ObjectId, ref: 'Cache'},
- affinityKey: String
- }],
- cacheSanityCheckEnabled: {type: Boolean, default: true},
- classLoader: String,
- consistentId: String,
- failureDetectionTimeout: Number,
- clientFailureDetectionTimeout: Number,
- systemWorkerBlockedTimeout: Number,
- workDirectory: String,
- igniteHome: String,
- lateAffinityAssignment: Boolean,
- utilityCacheKeepAliveTime: Number,
- asyncCallbackPoolSize: Number,
- dataStreamerThreadPoolSize: Number,
- queryThreadPoolSize: Number,
- stripedPoolSize: Number,
- serviceThreadPoolSize: Number,
- utilityCacheThreadPoolSize: Number,
- executorConfiguration: [{
- name: String,
- size: Number
- }],
- dataStorageConfiguration: {
- systemRegionInitialSize: Number,
- systemRegionMaxSize: Number,
- pageSize: Number,
- concurrencyLevel: Number,
- defaultDataRegionConfiguration: {
- name: String,
- initialSize: Number,
- maxSize: Number,
- swapPath: String,
- pageEvictionMode: {type: String, enum: ['DISABLED', 'RANDOM_LRU', 'RANDOM_2_LRU']},
- evictionThreshold: Number,
- emptyPagesPoolSize: Number,
- metricsEnabled: Boolean,
- metricsSubIntervalCount: Number,
- metricsRateTimeInterval: Number,
- persistenceEnabled: Boolean,
- checkpointPageBufferSize: Number
- },
- dataRegionConfigurations: [{
- name: String,
- initialSize: Number,
- maxSize: Number,
- swapPath: String,
- pageEvictionMode: {type: String, enum: ['DISABLED', 'RANDOM_LRU', 'RANDOM_2_LRU']},
- evictionThreshold: Number,
- emptyPagesPoolSize: Number,
- metricsEnabled: Boolean,
- metricsSubIntervalCount: Number,
- metricsRateTimeInterval: Number,
- persistenceEnabled: Boolean,
- checkpointPageBufferSize: Number
- }],
- storagePath: String,
- metricsEnabled: Boolean,
- alwaysWriteFullPages: Boolean,
- checkpointFrequency: Number,
- checkpointThreads: Number,
- checkpointWriteOrder: {type: String, enum: ['RANDOM', 'SEQUENTIAL']},
- walPath: String,
- walArchivePath: String,
- walMode: {type: String, enum: ['DEFAULT', 'LOG_ONLY', 'BACKGROUND', 'NONE']},
- walSegments: Number,
- walSegmentSize: Number,
- walHistorySize: Number,
- walFlushFrequency: Number,
- walFsyncDelayNanos: Number,
- walRecordIteratorBufferSize: Number,
- lockWaitTime: Number,
- walBufferSize: Number,
- walThreadLocalBufferSize: Number,
- metricsSubIntervalCount: Number,
- metricsRateTimeInterval: Number,
- fileIOFactory: {type: String, enum: ['RANDOM', 'ASYNC']},
- walAutoArchiveAfterInactivity: Number,
- writeThrottlingEnabled: Boolean,
- walCompactionEnabled: Boolean,
- checkpointReadLockTimeout: Number,
- maxWalArchiveSize: Number,
- walCompactionLevel: Number
- },
- memoryConfiguration: {
- systemCacheInitialSize: Number,
- systemCacheMaxSize: Number,
- pageSize: Number,
- concurrencyLevel: Number,
- defaultMemoryPolicyName: String,
- defaultMemoryPolicySize: Number,
- memoryPolicies: [{
- name: String,
- initialSize: Number,
- maxSize: Number,
- swapFilePath: String,
- pageEvictionMode: {type: String, enum: ['DISABLED', 'RANDOM_LRU', 'RANDOM_2_LRU']},
- evictionThreshold: Number,
- emptyPagesPoolSize: Number,
- metricsEnabled: Boolean,
- subIntervals: Number,
- rateTimeInterval: Number
- }]
- },
- longQueryWarningTimeout: Number,
- sqlConnectorConfiguration: {
- enabled: Boolean,
- host: String,
- port: Number,
- portRange: Number,
- socketSendBufferSize: Number,
- socketReceiveBufferSize: Number,
- tcpNoDelay: {type: Boolean, default: true},
- maxOpenCursorsPerConnection: Number,
- threadPoolSize: Number
- },
- persistenceStoreConfiguration: {
- enabled: Boolean,
- persistentStorePath: String,
- metricsEnabled: Boolean,
- alwaysWriteFullPages: Boolean,
- checkpointingFrequency: Number,
- checkpointingPageBufferSize: Number,
- checkpointingThreads: Number,
- walStorePath: String,
- walArchivePath: String,
- walMode: {type: String, enum: ['DEFAULT', 'LOG_ONLY', 'BACKGROUND', 'NONE']},
- walSegments: Number,
- walSegmentSize: Number,
- walHistorySize: Number,
- walFlushFrequency: Number,
- walFsyncDelayNanos: Number,
- walRecordIteratorBufferSize: Number,
- lockWaitTime: Number,
- rateTimeInterval: Number,
- tlbSize: Number,
- subIntervals: Number,
- walAutoArchiveAfterInactivity: Number
- },
- encryptionSpi: {
- kind: {type: String, enum: ['Noop', 'Keystore', 'Custom']},
- Keystore: {
- keySize: Number,
- masterKeyName: String,
- keyStorePath: String
- },
- Custom: {
- className: String
- }
- },
- failureHandler: {
- kind: {type: String, enum: ['RestartProcess', 'StopNodeOnHalt', 'StopNode', 'Noop', 'Custom']},
- ignoredFailureTypes: [{type: String, enum: ['SEGMENTATION', 'SYSTEM_WORKER_TERMINATION',
- 'SYSTEM_WORKER_BLOCKED', 'CRITICAL_ERROR', 'SYSTEM_CRITICAL_OPERATION_TIMEOUT']}],
- StopNodeOnHalt: {
- tryStop: Boolean,
- timeout: Number
- },
- Custom: {
- className: String
- }
- },
- localEventListeners: [{
- className: String,
- eventTypes: [String]
- }],
- mvccVacuumThreadCount: Number,
- mvccVacuumFrequency: Number,
- authenticationEnabled: Boolean,
- sqlQueryHistorySize: Number,
- lifecycleBeans: [String],
- addressResolver: String,
- mBeanServer: String,
- networkCompressionLevel: Number,
- includeProperties: [String],
- cacheStoreSessionListenerFactories: [String],
- autoActivationEnabled: {type: Boolean, default: true},
- sqlSchemas: [String],
- communicationFailureResolver: String
- });
-
- Cluster.index({name: 1, space: 1}, {unique: true});
-
- // Define Notebook schema.
- const Notebook = new Schema({
- space: {type: ObjectId, ref: 'Space', index: true, required: true},
- name: String,
- expandedParagraphs: [Number],
- paragraphs: [{
- name: String,
- query: String,
- editor: Boolean,
- result: {type: String, enum: ['none', 'table', 'bar', 'pie', 'line', 'area']},
- pageSize: Number,
- timeLineSpan: String,
- maxPages: Number,
- hideSystemColumns: Boolean,
- cacheName: String,
- useAsDefaultSchema: Boolean,
- chartsOptions: {barChart: {stacked: Boolean}, areaChart: {style: String}},
- rate: {
- value: Number,
- unit: Number
- },
- qryType: String,
- nonCollocatedJoins: {type: Boolean, default: false},
- enforceJoinOrder: {type: Boolean, default: false},
- lazy: {type: Boolean, default: false},
- collocated: Boolean
- }]
- });
-
- Notebook.index({name: 1, space: 1}, {unique: true});
-
- // Define Activities schema.
- const Activities = new Schema({
- owner: {type: ObjectId, ref: 'Account'},
- date: Date,
- group: String,
- action: String,
- amount: {type: Number, default: 0}
- });
-
- Activities.index({owner: 1, group: 1, action: 1, date: 1}, {unique: true});
-
- // Define Notifications schema.
- const Notifications = new Schema({
- owner: {type: ObjectId, ref: 'Account'},
- date: Date,
- message: String,
- isShown: Boolean
- });
-
- return {
- Space,
- Account,
- DomainModel,
- Cache,
- Igfs,
- Cluster,
- Notebook,
- Activities,
- Notifications
- };
-};
diff --git a/modules/web-console/backend/app/settings.js b/modules/web-console/backend/app/settings.js
deleted file mode 100644
index 0079788..0000000
--- a/modules/web-console/backend/app/settings.js
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const fs = require('fs');
-const _ = require('lodash');
-
-// Fire me up!
-
-/**
- * Module with server-side configuration.
- */
-module.exports = {
- implements: 'settings',
- inject: ['nconf'],
- factory(nconf) {
- /**
- * Normalize a port into a number, string, or false.
- */
- const _normalizePort = function(val) {
- const port = parseInt(val, 10);
-
- // named pipe
- if (isNaN(port))
- return val;
-
- // port number
- if (port >= 0)
- return port;
-
- return false;
- };
-
- const mail = nconf.get('mail') || {};
-
- const packaged = __dirname.startsWith('/snapshot/') || __dirname.startsWith('C:\\snapshot\\');
-
- const dfltAgentDists = packaged ? 'libs/agent_dists' : 'agent_dists';
- const dfltHost = packaged ? '0.0.0.0' : '127.0.0.1';
- const dfltPort = packaged ? 80 : 3000;
-
- // We need this function because nconf() can return String or Boolean.
- // And in JS we cannot compare String with Boolean.
- const _isTrue = (confParam) => {
- const v = nconf.get(confParam);
-
- return v === 'true' || v === true;
- };
-
- let activationEnabled = _isTrue('activation:enabled');
-
- if (activationEnabled && _.isEmpty(mail)) {
- activationEnabled = false;
-
- console.warn('Mail server settings are required for account confirmation!');
- }
-
- const settings = {
- agent: {
- dists: nconf.get('agent:dists') || dfltAgentDists
- },
- packaged,
- server: {
- host: nconf.get('server:host') || dfltHost,
- port: _normalizePort(nconf.get('server:port') || dfltPort),
- disableSignup: _isTrue('server:disable:signup')
- },
- mail,
- activation: {
- enabled: activationEnabled,
- timeout: nconf.get('activation:timeout') || 1800000,
- sendTimeout: nconf.get('activation:sendTimeout') || 180000
- },
- mongoUrl: nconf.get('mongodb:url') || 'mongodb://127.0.0.1/console',
- cookieTTL: 3600000 * 24 * 30,
- sessionSecret: nconf.get('server:sessionSecret') || 'keyboard cat',
- tokenLength: 20
- };
-
- // Configure SSL options.
- if (_isTrue('server:ssl')) {
- const sslOptions = {
- enable301Redirects: true,
- trustXFPHeader: true,
- isServer: true
- };
-
- const setSslOption = (name, fromFile = false) => {
- const v = nconf.get(`server:${name}`);
-
- const hasOption = !!v;
-
- if (hasOption)
- sslOptions[name] = fromFile ? fs.readFileSync(v) : v;
-
- return hasOption;
- };
-
- const setSslOptionBoolean = (name) => {
- const v = nconf.get(`server:${name}`);
-
- if (v)
- sslOptions[name] = v === 'true' || v === true;
- };
-
- setSslOption('key', true);
- setSslOption('cert', true);
- setSslOption('ca', true);
- setSslOption('passphrase');
- setSslOption('ciphers');
- setSslOption('secureProtocol');
- setSslOption('clientCertEngine');
- setSslOption('pfx', true);
- setSslOption('crl');
- setSslOption('dhparam');
- setSslOption('ecdhCurve');
- setSslOption('maxVersion');
- setSslOption('minVersion');
- setSslOption('secureOptions');
- setSslOption('sessionIdContext');
-
- setSslOptionBoolean('honorCipherOrder');
- setSslOptionBoolean('requestCert');
- setSslOptionBoolean('rejectUnauthorized');
-
- // Special care for case, when user set password for something like "123456".
- if (sslOptions.passphrase)
- sslOptions.passphrase = sslOptions.passphrase.toString();
-
- settings.server.SSLOptions = sslOptions;
- }
-
- return settings;
- }
-};
diff --git a/modules/web-console/backend/config/settings.json.sample b/modules/web-console/backend/config/settings.json.sample
deleted file mode 100644
index 02bc327..0000000
--- a/modules/web-console/backend/config/settings.json.sample
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "server": {
- "port": 3000,
- "sessionSecret": "CHANGE ME",
- "ssl": false,
- "key": "path to file with server.key",
- "cert": "path to file with server.crt",
- "ca": "path to file with ca.crt",
- "passphrase": "password",
- "ciphers": "ECDHE-RSA-AES128-GCM-SHA256",
- "secureProtocol": "TLSv1_2_method",
- "requestCert": false,
- "rejectUnauthorized": false,
- "disable": {
- "signup": false
- }
- },
- "mongodb": {
- "url": "mongodb://localhost/console"
- },
- "activation": {
- "enabled": false,
- "timeout": 1800000,
- "sendTimeout": 180000
- },
- "mail": {
- "service": "gmail",
- "from": "Some Company Web Console <so...@some_company.com>",
- "greeting": "Some Company Web Console",
- "sign": "Kind regards,<br>Some Company Team",
- "auth": {
- "user": "some_username@some_company.com",
- "pass": "CHANGE ME"
- }
- }
-}
diff --git a/modules/web-console/backend/errors/AppErrorException.js b/modules/web-console/backend/errors/AppErrorException.js
deleted file mode 100644
index 19a9b0d..0000000
--- a/modules/web-console/backend/errors/AppErrorException.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-class AppErrorException extends Error {
- constructor(message) {
- super(message);
-
- this.name = this.constructor.name;
- this.code = 400;
-
- if (typeof Error.captureStackTrace === 'function')
- Error.captureStackTrace(this, this.constructor);
- else
- this.stack = (new Error(message)).stack;
- }
-}
-
-module.exports = AppErrorException;
diff --git a/modules/web-console/backend/errors/AuthFailedException.js b/modules/web-console/backend/errors/AuthFailedException.js
deleted file mode 100644
index 9cab6ac..0000000
--- a/modules/web-console/backend/errors/AuthFailedException.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const AppErrorException = require('./AppErrorException');
-
-class AuthFailedException extends AppErrorException {
- constructor(message) {
- super(message);
-
- this.code = 401;
- }
-}
-
-module.exports = AuthFailedException;
diff --git a/modules/web-console/backend/errors/DuplicateKeyException.js b/modules/web-console/backend/errors/DuplicateKeyException.js
deleted file mode 100644
index 536d53d..0000000
--- a/modules/web-console/backend/errors/DuplicateKeyException.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const AppErrorException = require('./AppErrorException');
-
-class DuplicateKeyException extends AppErrorException {
- constructor(message) {
- super(message);
- }
-}
-
-module.exports = DuplicateKeyException;
diff --git a/modules/web-console/backend/errors/IllegalAccessError.js b/modules/web-console/backend/errors/IllegalAccessError.js
deleted file mode 100644
index 7de9bb1..0000000
--- a/modules/web-console/backend/errors/IllegalAccessError.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const AppErrorException = require('./AppErrorException');
-
-class IllegalAccessError extends AppErrorException {
- constructor(message) {
- super(message);
-
- this.code = 403;
- }
-}
-
-module.exports = IllegalAccessError;
diff --git a/modules/web-console/backend/errors/IllegalArgumentException.js b/modules/web-console/backend/errors/IllegalArgumentException.js
deleted file mode 100644
index aeb4187..0000000
--- a/modules/web-console/backend/errors/IllegalArgumentException.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const AppErrorException = require('./AppErrorException');
-
-class IllegalArgumentException extends AppErrorException {
- constructor(message) {
- super(message);
- }
-}
-
-module.exports = IllegalArgumentException;
diff --git a/modules/web-console/backend/errors/MissingConfirmRegistrationException.js b/modules/web-console/backend/errors/MissingConfirmRegistrationException.js
deleted file mode 100644
index a094a67..0000000
--- a/modules/web-console/backend/errors/MissingConfirmRegistrationException.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const IllegalAccessError = require('./IllegalAccessError');
-
-class MissingConfirmRegistrationException extends IllegalAccessError {
- constructor(email) {
- super('User account email not activated');
-
- this.data = {
- errorCode: 10104,
- message: this.message,
- email
- };
- }
-}
-
-module.exports = MissingConfirmRegistrationException;
diff --git a/modules/web-console/backend/errors/MissingResourceException.js b/modules/web-console/backend/errors/MissingResourceException.js
deleted file mode 100644
index aeac70e..0000000
--- a/modules/web-console/backend/errors/MissingResourceException.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const AppErrorException = require('./AppErrorException');
-
-class MissingResourceException extends AppErrorException {
- constructor(message) {
- super(message);
-
- this.code = 404;
- }
-}
-
-module.exports = MissingResourceException;
diff --git a/modules/web-console/backend/errors/ServerErrorException.js b/modules/web-console/backend/errors/ServerErrorException.js
deleted file mode 100644
index c2edb7f..0000000
--- a/modules/web-console/backend/errors/ServerErrorException.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-class ServerErrorException extends Error {
- constructor(message) {
- super(message);
-
- this.name = this.constructor.name;
- this.code = 500;
- this.message = message;
-
- if (typeof Error.captureStackTrace === 'function')
- Error.captureStackTrace(this, this.constructor);
- else
- this.stack = (new Error(message)).stack;
- }
-}
-
-module.exports = ServerErrorException;
diff --git a/modules/web-console/backend/errors/index.js b/modules/web-console/backend/errors/index.js
deleted file mode 100644
index cb8f043..0000000
--- a/modules/web-console/backend/errors/index.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-// Fire me up!
-
-const AppErrorException = require('./AppErrorException');
-const IllegalArgumentException = require('./IllegalArgumentException');
-const IllegalAccessError = require('./IllegalAccessError');
-const DuplicateKeyException = require('./DuplicateKeyException');
-const ServerErrorException = require('./ServerErrorException');
-const MissingConfirmRegistrationException = require('./MissingConfirmRegistrationException');
-const MissingResourceException = require('./MissingResourceException');
-const AuthFailedException = require('./AuthFailedException');
-
-module.exports = {
- implements: 'errors',
- factory: () => ({
- AppErrorException,
- IllegalAccessError,
- IllegalArgumentException,
- DuplicateKeyException,
- ServerErrorException,
- MissingConfirmRegistrationException,
- MissingResourceException,
- AuthFailedException
- })
-};
diff --git a/modules/web-console/backend/index.js b/modules/web-console/backend/index.js
deleted file mode 100755
index 26584bc..0000000
--- a/modules/web-console/backend/index.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const path = require('path');
-
-const appPath = require('app-module-path');
-appPath.addPath(__dirname);
-appPath.addPath(path.join(__dirname, 'node_modules'));
-
-const { migrate, init } = require('./launch-tools');
-
-const injector = require('./injector');
-
-injector.log.info = () => {};
-injector.log.debug = () => {};
-
-injector('mongo')
- .then((mongo) => migrate(mongo.connection, 'Ignite', path.join(__dirname, 'migrations')))
- .then(() => Promise.all([injector('settings'), injector('api-server'), injector('agents-handler'), injector('browsers-handler')]))
- .then(init)
- .catch((err) => {
- console.error(err);
-
- process.exit(1);
- });
diff --git a/modules/web-console/backend/injector.js b/modules/web-console/backend/injector.js
deleted file mode 100644
index c30609a..0000000
--- a/modules/web-console/backend/injector.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const fireUp = require('fire-up');
-
-module.exports = fireUp.newInjector({
- basePath: __dirname,
- modules: [
- './app/**/*.js',
- './errors/**/*.js',
- './middlewares/**/*.js',
- './routes/**/*.js',
- './services/**/*.js'
- ]
-});
diff --git a/modules/web-console/backend/launch-tools.js b/modules/web-console/backend/launch-tools.js
deleted file mode 100644
index 7b44aca..0000000
--- a/modules/web-console/backend/launch-tools.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-const _ = require('lodash');
-const http = require('http');
-const https = require('https');
-const MigrateMongoose = require('migrate-mongoose-typescript');
-
-/**
- * Event listener for HTTP server "error" event.
- */
-const _onError = (addr, error) => {
- if (error.syscall !== 'listen')
- throw error;
-
- // Handle specific listen errors with friendly messages.
- switch (error.code) {
- case 'EACCES':
- console.error(`Requires elevated privileges for bind to ${addr}`);
- process.exit(1);
-
- break;
- case 'EADDRINUSE':
- console.error(`${addr} is already in use`);
- process.exit(1);
-
- break;
- default:
- throw error;
- }
-};
-
-/**
- * @param settings
- * @param {ApiServer} apiSrv
- * @param {AgentsHandler} agentsHnd
- * @param {BrowsersHandler} browsersHnd
- */
-const init = ([settings, apiSrv, agentsHnd, browsersHnd]) => {
- // Start rest server.
- const sslOptions = settings.server.SSLOptions;
-
- console.log(`Starting ${sslOptions ? 'HTTPS' : 'HTTP'} server`);
-
- const srv = sslOptions ? https.createServer(sslOptions) : http.createServer();
-
- srv.listen(settings.server.port, settings.server.host);
-
- const addr = `${settings.server.host}:${settings.server.port}`;
-
- srv.on('error', _onError.bind(null, addr));
- srv.on('listening', () => console.log(`Start listening on ${addr}`));
-
- apiSrv.attach(srv);
-
- agentsHnd.attach(srv, browsersHnd);
- browsersHnd.attach(srv, agentsHnd);
-
- // Used for automated test.
- if (process.send)
- process.send('running');
-};
-
-/**
- * Run mongo model migration.
- *
- * @param connection Mongo connection.
- * @param group Migrations group.
- * @param migrationsPath Migrations path.
- * @param collectionName Name of collection where migrations write info about applied scripts.
- */
-const migrate = (connection, group, migrationsPath, collectionName) => {
- const migrator = new MigrateMongoose({
- migrationsPath,
- connection,
- collectionName,
- autosync: true
- });
-
- console.log(`Running ${group} migrations...`);
-
- return migrator.run('up')
- .then(() => console.log(`All ${group} migrations finished successfully.`))
- .catch((err) => {
- const msg = _.get(err, 'message');
-
- if (_.startsWith(msg, 'There are no migrations to run') || _.startsWith(msg, 'There are no pending migrations.')) {
- console.log(`There are no ${group} migrations to run.`);
-
- return;
- }
-
- throw err;
- });
-};
-
-module.exports = { migrate, init };
diff --git a/modules/web-console/backend/middlewares/api.js b/modules/web-console/backend/middlewares/api.js
deleted file mode 100644
index d4d832b..0000000
--- a/modules/web-console/backend/middlewares/api.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-// Fire me up!
-
-const _ = require('lodash');
-
-module.exports = {
- implements: 'middlewares:api'
-};
-
-module.exports.factory = () => {
- return (req, res, next) => {
- // Set headers to avoid API caching in browser (esp. IE)
- res.header('Cache-Control', 'must-revalidate');
- res.header('Expires', '-1');
- res.header('Last-Modified', new Date().toUTCString());
-
- res.api = {
- error(err) {
- if (_.includes(['MongoError', 'MongooseError'], err.name))
- return res.status(500).send(err.message);
-
- if (_.isObject(err.data))
- return res.status(err.httpCode || err.code || 500).json(err.data);
-
- res.status(err.httpCode || err.code || 500).send(err.message);
- },
-
- ok(data) {
- if (_.isNil(data))
- return res.sendStatus(404);
-
- res.status(200).json(data);
- },
-
- done() {
- res.sendStatus(200);
- }
- };
-
- next();
- };
-};
diff --git a/modules/web-console/backend/middlewares/demo.js b/modules/web-console/backend/middlewares/demo.js
deleted file mode 100644
index 537ede1..0000000
--- a/modules/web-console/backend/middlewares/demo.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-// Fire me up!
-
-module.exports = {
- implements: 'middlewares:demo',
- factory: () => {
- return (req, res, next) => {
- req.demo = () => req.header('IgniteDemoMode');
-
- next();
- };
- }
-};
diff --git a/modules/web-console/backend/middlewares/host.js b/modules/web-console/backend/middlewares/host.js
deleted file mode 100644
index 4c21da2..0000000
--- a/modules/web-console/backend/middlewares/host.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-// Fire me up!
-
-module.exports = {
- implements: 'middlewares:host',
- factory: () => {
- return (req, res, next) => {
- req.origin = function() {
- if (req.headers.origin)
- return req.headers.origin;
-
- const proto = req.headers['x-forwarded-proto'] || req.protocol;
-
- const host = req.headers['x-forwarded-host'] || req.get('host');
-
- return `${proto}://${host}`;
- };
-
- next();
- };
- }
-};
diff --git a/modules/web-console/backend/middlewares/user.js b/modules/web-console/backend/middlewares/user.js
deleted file mode 100644
index 8923211..0000000
--- a/modules/web-console/backend/middlewares/user.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-'use strict';
-
-// Fire me up!
-
-module.exports = {
- implements: 'middlewares:user',
- factory: () => {
- return (req, res, next) => {
- req.currentUserId = function() {
- if (req.session.viewedUser && req.user.admin)
- return req.session.viewedUser._id;
-
- return req.user._id;
- };
-
- next();
- };
- }
-};
diff --git a/modules/web-console/backend/migrations/1502249492000-invalidate_rename.js b/modules/web-console/backend/migrations/1502249492000-invalidate_rename.js
deleted file mode 100644
index 50b1438..0000000
--- a/modules/web-console/backend/migrations/1502249492000-invalidate_rename.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-exports.up = function up(done) {
- this('Cache').updateMany({}, { $rename: {invalidate: 'isInvalidate'}})
- .then(() => done())
- .catch(done);
-};
-
-exports.down = function down(done) {
- this('Cache').updateMany({}, { $rename: {isInvalidate: 'invalidate'}})
- .then(() => done())
- .catch(done);
-};
diff --git a/modules/web-console/backend/migrations/1502432624000-cache-index.js b/modules/web-console/backend/migrations/1502432624000-cache-index.js
deleted file mode 100644
index 147e2ad..0000000
--- a/modules/web-console/backend/migrations/1502432624000-cache-index.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const recreateIndex = require('./migration-utils').recreateIndex;
-
-exports.up = function up(done) {
- recreateIndex(done, this('Cache').collection,
- 'name_1_space_1',
- {name: 1, space: 1},
- {name: 1, space: 1, clusters: 1});
-};
-
-exports.down = function down(done) {
- recreateIndex(done, this('Cache').collection,
- 'name_1_space_1_clusters_1',
- {name: 1, space: 1, clusters: 1},
- {name: 1, space: 1});
-};
diff --git a/modules/web-console/backend/migrations/1504672035000-igfs-index.js b/modules/web-console/backend/migrations/1504672035000-igfs-index.js
deleted file mode 100644
index e802ca9..0000000
--- a/modules/web-console/backend/migrations/1504672035000-igfs-index.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const recreateIndex = require('./migration-utils').recreateIndex;
-
-exports.up = function up(done) {
- recreateIndex(done, this('Igfs').collection,
- 'name_1_space_1',
- {name: 1, space: 1},
- {name: 1, space: 1, clusters: 1});
-};
-
-exports.down = function down(done) {
- recreateIndex(done, this('Igfs').collection,
- 'name_1_space_1_clusters_1',
- {name: 1, space: 1, clusters: 1},
- {name: 1, space: 1});
-};
diff --git a/modules/web-console/backend/migrations/1505114649000-models-index.js b/modules/web-console/backend/migrations/1505114649000-models-index.js
deleted file mode 100644
index c007b01..0000000
--- a/modules/web-console/backend/migrations/1505114649000-models-index.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const recreateIndex = require('./migration-utils').recreateIndex;
-
-exports.up = function up(done) {
- recreateIndex(done, this('DomainModel').collection,
- 'valueType_1_space_1',
- {valueType: 1, space: 1},
- {valueType: 1, space: 1, clusters: 1});
-};
-
-exports.down = function down(done) {
- recreateIndex(done, this('DomainModel').collection,
- 'valueType_1_space_1_clusters_1',
- {valueType: 1, space: 1, clusters: 1},
- {valueType: 1, space: 1});
-};
diff --git a/modules/web-console/backend/migrations/1508395969410-init-registered-date.js b/modules/web-console/backend/migrations/1508395969410-init-registered-date.js
deleted file mode 100644
index 227d743..0000000
--- a/modules/web-console/backend/migrations/1508395969410-init-registered-date.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const _ = require('lodash');
-
-exports.up = function up(done) {
- const accountsModel = this('Account');
-
- accountsModel.find({}).lean().exec()
- .then((accounts) => _.reduce(accounts, (start, account) => start
- .then(() => accountsModel.updateOne({_id: account._id}, {$set: {registered: account.lastLogin}}).exec()), Promise.resolve()))
- .then(() => done())
- .catch(done);
-};
-
-exports.down = function down(done) {
- this('Account').updateMany({}, {$unset: {registered: 1}}).exec()
- .then(() => done())
- .catch(done);
-};
diff --git a/modules/web-console/backend/migrations/1516948939797-migrate-configs.js b/modules/web-console/backend/migrations/1516948939797-migrate-configs.js
deleted file mode 100644
index c5bd619..0000000
--- a/modules/web-console/backend/migrations/1516948939797-migrate-configs.js
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const _ = require('lodash');
-
-const log = require('./migration-utils').log;
-const error = require('./migration-utils').error;
-
-const getClusterForMigration = require('./migration-utils').getClusterForMigration;
-const getCacheForMigration = require('./migration-utils').getCacheForMigration;
-
-const _debug = false;
-const DUPLICATE_KEY_ERROR = 11000;
-
-let dup = 1;
-
-function makeDup(name) {
- return name + `_dup_${dup++}`;
-}
-
-function linkCacheToCluster(clustersModel, cluster, cachesModel, cache, domainsModel) {
- return clustersModel.updateOne({_id: cluster._id}, {$addToSet: {caches: cache._id}}).exec()
- .then(() => cachesModel.updateOne({_id: cache._id}, {clusters: [cluster._id]}).exec())
- .then(() => {
- if (_.isEmpty(cache.domains))
- return Promise.resolve();
-
- return _.reduce(cache.domains, (start, domain) => start.then(() => {
- return domainsModel.updateOne({_id: domain}, {clusters: [cluster._id]}).exec()
- .then(() => clustersModel.updateOne({_id: cluster._id}, {$addToSet: {models: domain}}).exec());
- }), Promise.resolve());
- })
- .catch((err) => error(`Failed link cache to cluster [cache=${cache.name}, cluster=${cluster.name}]`, err));
-}
-
-function cloneCache(clustersModel, cachesModel, domainsModel, cache) {
- const cacheId = cache._id;
- const clusters = cache.clusters;
-
- cache.clusters = [];
-
- if (cache.cacheStoreFactory && cache.cacheStoreFactory.kind === null)
- delete cache.cacheStoreFactory.kind;
-
- return _.reduce(clusters, (start, cluster, idx) => start.then(() => {
- if (idx > 0) {
- delete cache._id;
-
- const newCache = _.clone(cache);
- const domainIds = newCache.domains;
-
- newCache.clusters = [cluster];
- newCache.domains = [];
-
- return clustersModel.updateMany({_id: {$in: newCache.clusters}}, {$pull: {caches: cacheId}}).exec()
- .then(() => cachesModel.create(newCache))
- .catch((err) => {
- if (err.code === DUPLICATE_KEY_ERROR) {
- const retryWith = makeDup(newCache.name);
-
- error(`Failed to clone cache, will change cache name and retry [cache=${newCache.name}, retryWith=${retryWith}]`);
-
- newCache.name = retryWith;
-
- return cachesModel.create(newCache);
- }
-
- return Promise.reject(err);
- })
- .then((clone) => clustersModel.updateMany({_id: {$in: newCache.clusters}}, {$addToSet: {caches: clone._id}}).exec()
- .then(() => clone))
- .then((clone) => {
- if (_.isEmpty(domainIds))
- return Promise.resolve();
-
- return _.reduce(domainIds, (start, domainId) => start.then(() => {
- return domainsModel.findOne({_id: domainId}).lean().exec()
- .then((domain) => {
- delete domain._id;
-
- const newDomain = _.clone(domain);
-
- newDomain.caches = [clone._id];
- newDomain.clusters = [cluster];
-
- return domainsModel.create(newDomain)
- .catch((err) => {
- if (err.code === DUPLICATE_KEY_ERROR) {
- const retryWith = makeDup(newDomain.valueType);
-
- error(`Failed to clone domain, will change type name and retry [cache=${newCache.name}, valueType=${newDomain.valueType}, retryWith=${retryWith}]`);
-
- newDomain.valueType = retryWith;
-
- return domainsModel.create(newDomain);
- }
- })
- .then((createdDomain) => {
- return clustersModel.updateOne({_id: cluster}, {$addToSet: {models: createdDomain._id}}).exec()
- .then(() => cachesModel.updateOne({_id: clone.id}, {$addToSet: {domains: createdDomain._id}}));
- })
- .catch((err) => error('Failed to clone domain during cache clone', err));
- })
- .catch((err) => error(`Failed to duplicate domain model[domain=${domainId}], cache=${clone.name}]`, err));
- }), Promise.resolve());
- })
- .catch((err) => error(`Failed to clone cache[id=${cacheId}, name=${cache.name}]`, err));
- }
-
- return cachesModel.updateOne({_id: cacheId}, {clusters: [cluster]}).exec()
- .then(() => clustersModel.updateOne({_id: cluster}, {$addToSet: {models: {$each: cache.domains}}}).exec());
- }), Promise.resolve());
-}
-
-function migrateCache(clustersModel, cachesModel, domainsModel, cache) {
- const clustersCnt = _.size(cache.clusters);
-
- if (clustersCnt < 1) {
- if (_debug)
- log(`Found cache not linked to cluster [cache=${cache.name}]`);
-
- return getClusterForMigration(clustersModel, cache.space)
- .then((clusterLostFound) => linkCacheToCluster(clustersModel, clusterLostFound, cachesModel, cache, domainsModel));
- }
-
- if (clustersCnt > 1) {
- if (_debug)
- log(`Found cache linked to many clusters [cache=${cache.name}, clustersCnt=${clustersCnt}]`);
-
- return cloneCache(clustersModel, cachesModel, domainsModel, cache);
- }
-
- // Nothing to migrate, cache linked to cluster 1-to-1.
- return Promise.resolve();
-}
-
-function migrateCaches(clustersModel, cachesModel, domainsModel) {
- return cachesModel.find({}).lean().exec()
- .then((caches) => {
- const cachesCnt = _.size(caches);
-
- if (cachesCnt > 0) {
- log(`Caches to migrate: ${cachesCnt}`);
-
- return _.reduce(caches, (start, cache) => start.then(() => migrateCache(clustersModel, cachesModel, domainsModel, cache)), Promise.resolve())
- .then(() => log('Caches migration finished.'));
- }
-
- return Promise.resolve();
-
- })
- .catch((err) => error('Caches migration failed', err));
-}
-
-function linkIgfsToCluster(clustersModel, cluster, igfsModel, igfs) {
- return clustersModel.updateOne({_id: cluster._id}, {$addToSet: {igfss: igfs._id}}).exec()
- .then(() => igfsModel.updateOne({_id: igfs._id}, {clusters: [cluster._id]}).exec())
- .catch((err) => error(`Failed link IGFS to cluster [IGFS=${igfs.name}, cluster=${cluster.name}]`, err));
-}
-
-function cloneIgfs(clustersModel, igfsModel, igfs) {
- const igfsId = igfs._id;
- const clusters = igfs.clusters;
-
- delete igfs._id;
- igfs.clusters = [];
-
- return _.reduce(clusters, (start, cluster, idx) => start.then(() => {
- const newIgfs = _.clone(igfs);
-
- newIgfs.clusters = [cluster];
-
- if (idx > 0) {
- return clustersModel.updateMany({_id: {$in: newIgfs.clusters}}, {$pull: {igfss: igfsId}}).exec()
- .then(() => igfsModel.create(newIgfs))
- .then((clone) => clustersModel.updateMany({_id: {$in: newIgfs.clusters}}, {$addToSet: {igfss: clone._id}}).exec())
- .catch((err) => error(`Failed to clone IGFS: id=${igfsId}, name=${igfs.name}]`, err));
- }
-
- return igfsModel.updateOne({_id: igfsId}, {clusters: [cluster]}).exec();
- }), Promise.resolve());
-}
-
-function migrateIgfs(clustersModel, igfsModel, igfs) {
- const clustersCnt = _.size(igfs.clusters);
-
- if (clustersCnt < 1) {
- if (_debug)
- log(`Found IGFS not linked to cluster [IGFS=${igfs.name}]`);
-
- return getClusterForMigration(clustersModel, igfs.space)
- .then((clusterLostFound) => linkIgfsToCluster(clustersModel, clusterLostFound, igfsModel, igfs));
- }
-
- if (clustersCnt > 1) {
- if (_debug)
- log(`Found IGFS linked to many clusters [IGFS=${igfs.name}, clustersCnt=${clustersCnt}]`);
-
- return cloneIgfs(clustersModel, igfsModel, igfs);
- }
-
- // Nothing to migrate, IGFS linked to cluster 1-to-1.
- return Promise.resolve();
-}
-
-function migrateIgfss(clustersModel, igfsModel) {
- return igfsModel.find({}).lean().exec()
- .then((igfss) => {
- const igfsCnt = _.size(igfss);
-
- if (igfsCnt > 0) {
- log(`IGFS to migrate: ${igfsCnt}`);
-
- return _.reduce(igfss, (start, igfs) => start.then(() => migrateIgfs(clustersModel, igfsModel, igfs)), Promise.resolve())
- .then(() => log('IGFS migration finished.'));
- }
-
- return Promise.resolve();
- })
- .catch((err) => error('IGFS migration failed', err));
-}
-
-function linkDomainToCluster(clustersModel, cluster, domainsModel, domain) {
- return clustersModel.updateOne({_id: cluster._id}, {$addToSet: {models: domain._id}}).exec()
- .then(() => domainsModel.updateOne({_id: domain._id}, {clusters: [cluster._id]}).exec())
- .catch((err) => error(`Failed link domain model to cluster [domain=${domain._id}, cluster=${cluster.name}]`, err));
-}
-
-function linkDomainToCache(cachesModel, cache, domainsModel, domain) {
- return cachesModel.updateOne({_id: cache._id}, {$addToSet: {domains: domain._id}}).exec()
- .then(() => domainsModel.updateOne({_id: domain._id}, {caches: [cache._id]}).exec())
- .catch((err) => error(`Failed link domain model to cache [cache=${cache.name}, domain=${domain._id}]`, err));
-}
-
-function migrateDomain(clustersModel, cachesModel, domainsModel, domain) {
- const cachesCnt = _.size(domain.caches);
-
- if (cachesCnt < 1) {
- if (_debug)
- log(`Found domain model not linked to cache [domain=${domain._id}]`);
-
- return getClusterForMigration(clustersModel, domain.space)
- .then((clusterLostFound) => linkDomainToCluster(clustersModel, clusterLostFound, domainsModel, domain))
- .then(() => getCacheForMigration(clustersModel, cachesModel, domain.space))
- .then((cacheLostFound) => linkDomainToCache(cachesModel, cacheLostFound, domainsModel, domain))
- .catch((err) => error(`Failed to migrate not linked domain [domain=${domain._id}]`, err));
- }
-
- if (_.isEmpty(domain.clusters)) {
- const cachesCnt = _.size(domain.caches);
-
- if (_debug)
- log(`Found domain model without cluster: [domain=${domain._id}, cachesCnt=${cachesCnt}]`);
-
- const grpByClusters = {};
-
- return cachesModel.find({_id: {$in: domain.caches}}).lean().exec()
- .then((caches) => {
- if (caches) {
- _.forEach(caches, (cache) => {
- const c = _.get(grpByClusters, cache.clusters[0]);
-
- if (c)
- c.push(cache._id);
- else
- grpByClusters[cache.clusters[0]] = [cache._id];
- });
-
- return _.reduce(_.keys(grpByClusters), (start, cluster, idx) => start.then(() => {
- const domainId = domain._id;
-
- const clusterCaches = grpByClusters[cluster];
-
- if (idx > 0) {
- delete domain._id;
- domain.caches = clusterCaches;
-
- return domainsModel.create(domain)
- .then((clonedDomain) => {
- return cachesModel.updateOne({_id: {$in: clusterCaches}}, {$addToSet: {domains: clonedDomain._id}}).exec()
- .then(() => clonedDomain);
- })
- .then((clonedDomain) => linkDomainToCluster(clustersModel, {_id: cluster, name: `stub${idx}`}, domainsModel, clonedDomain))
- .then(() => {
- return cachesModel.updateMany({_id: {$in: clusterCaches}}, {$pull: {domains: domainId}}).exec();
- });
- }
-
- return domainsModel.updateOne({_id: domainId}, {caches: clusterCaches}).exec()
- .then(() => linkDomainToCluster(clustersModel, {_id: cluster, name: `stub${idx}`}, domainsModel, domain));
- }), Promise.resolve());
- }
-
- error(`Found domain with orphaned caches: [domain=${domain._id}, caches=${domain.caches}]`);
-
- return Promise.resolve();
- })
- .catch((err) => error(`Failed to migrate domain [domain=${domain._id}]`, err));
- }
-
- // Nothing to migrate, other domains will be migrated with caches.
- return Promise.resolve();
-}
-
-function migrateDomains(clustersModel, cachesModel, domainsModel) {
- return domainsModel.find({}).lean().exec()
- .then((domains) => {
- const domainsCnt = _.size(domains);
-
- if (domainsCnt > 0) {
- log(`Domain models to migrate: ${domainsCnt}`);
-
- return _.reduce(domains, (start, domain) => start.then(() => migrateDomain(clustersModel, cachesModel, domainsModel, domain)), Promise.resolve())
- .then(() => log('Domain models migration finished.'));
- }
-
- return Promise.resolve();
- })
- .catch((err) => error('Domain models migration failed', err));
-}
-
-function deduplicate(title, model, name) {
- return model.find({}).lean().exec()
- .then((items) => {
- const sz = _.size(items);
-
- if (sz > 0) {
- log(`Deduplication of ${title} started...`);
-
- let cnt = 0;
-
- return _.reduce(items, (start, item) => start.then(() => {
- const data = item[name];
-
- const dataSz = _.size(data);
-
- if (dataSz < 2)
- return Promise.resolve();
-
- const deduped = _.uniqWith(data, _.isEqual);
-
- if (dataSz !== _.size(deduped)) {
- return model.updateOne({_id: item._id}, {$set: {[name]: deduped}})
- .then(() => cnt++);
- }
-
- return Promise.resolve();
- }), Promise.resolve())
- .then(() => log(`Deduplication of ${title} finished: ${cnt}.`));
- }
-
- return Promise.resolve();
- });
-}
-
-exports.up = function up(done) {
- const clustersModel = this('Cluster');
- const cachesModel = this('Cache');
- const domainsModel = this('DomainModel');
- const igfsModel = this('Igfs');
-
- process.on('unhandledRejection', function(reason, p) {
- console.log('Unhandled rejection at:', p, 'reason:', reason);
- });
-
- Promise.resolve()
- .then(() => deduplicate('Cluster caches', clustersModel, 'caches'))
- .then(() => deduplicate('Cluster IGFS', clustersModel, 'igfss'))
- .then(() => deduplicate('Cache clusters', cachesModel, 'clusters'))
- .then(() => deduplicate('Cache domains', cachesModel, 'domains'))
- .then(() => deduplicate('IGFS clusters', igfsModel, 'clusters'))
- .then(() => deduplicate('Domain model caches', domainsModel, 'caches'))
- .then(() => migrateCaches(clustersModel, cachesModel, domainsModel))
- .then(() => migrateIgfss(clustersModel, igfsModel))
- .then(() => migrateDomains(clustersModel, cachesModel, domainsModel))
- .then(() => log(`Duplicates counter: ${dup}`))
- .then(() => done())
- .catch(done);
-};
-
-exports.down = function down(done) {
- log('Model migration can not be reverted');
-
- done();
-};
diff --git a/modules/web-console/backend/migrations/1547440382485-account-make-email-unique.js b/modules/web-console/backend/migrations/1547440382485-account-make-email-unique.js
deleted file mode 100644
index 3a6e453..0000000
--- a/modules/web-console/backend/migrations/1547440382485-account-make-email-unique.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const _ = require('lodash');
-
-const log = require('./migration-utils').log;
-
-function deduplicateAccounts(model) {
- const accountsModel = model('Account');
- const spaceModel = model('Space');
-
- return accountsModel.aggregate([
- {$group: {_id: '$email', count: {$sum: 1}}},
- {$match: {count: {$gt: 1}}}
- ]).exec()
- .then((accounts) => _.map(accounts, '_id'))
- .then((emails) => Promise.all(
- _.map(emails, (email) => accountsModel.find({email}, {_id: 1, email: 1, lastActivity: 1, lastLogin: 1}).lean().exec())
- ))
- .then((promises) => {
- const duplicates = _.flatMap(promises, (accounts) => _.sortBy(accounts, [(a) => a.lastActivity || '', 'lastLogin']).slice(0, -1));
-
- if (_.isEmpty(duplicates))
- log('Duplicates not found!');
- else {
- log(`Duplicates found: ${_.size(duplicates)}`);
-
- _.forEach(duplicates, (dup) => log(` ID: ${dup._id}, e-mail: ${dup.email}`));
- }
-
- return _.map(duplicates, '_id');
- })
- .then((accountIds) => {
- if (_.isEmpty(accountIds))
- return Promise.resolve();
-
- return spaceModel.find({owner: {$in: accountIds}}, {_id: 1}).lean().exec()
- .then((spaces) => _.map(spaces, '_id'))
- .then((spaceIds) =>
- Promise.all([
- model('Cluster').deleteMany({space: {$in: spaceIds}}).exec(),
- model('Cache').deleteMany({space: {$in: spaceIds}}).exec(),
- model('DomainModel').deleteMany({space: {$in: spaceIds}}).exec(),
- model('Igfs').deleteMany({space: {$in: spaceIds}}).exec(),
- model('Notebook').deleteMany({space: {$in: spaceIds}}).exec(),
- model('Activities').deleteMany({owner: accountIds}).exec(),
- model('Notifications').deleteMany({owner: accountIds}).exec(),
- spaceModel.deleteMany({owner: accountIds}).exec(),
- accountsModel.deleteMany({_id: accountIds}).exec()
- ])
- )
- .then(() => {
- const conditions = _.map(accountIds, (accountId) => ({session: {$regex: `"${accountId}"`}}));
-
- return accountsModel.db.collection('sessions').deleteMany({$or: conditions});
- });
- });
-}
-
-exports.up = function up(done) {
- deduplicateAccounts((name) => this(name))
- .then(() => this('Account').collection.createIndex({email: 1}, {unique: true, background: false}))
- .then(() => done())
- .catch(done);
-};
-
-exports.down = function down(done) {
- log('Account migration can not be reverted');
-
- done();
-};
diff --git a/modules/web-console/backend/migrations/README.txt b/modules/web-console/backend/migrations/README.txt
deleted file mode 100644
index e907fad..0000000
--- a/modules/web-console/backend/migrations/README.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Ignite Web Console
-======================================
-
-This folder contains scripts for model migration.
diff --git a/modules/web-console/backend/migrations/migration-utils.js b/modules/web-console/backend/migrations/migration-utils.js
deleted file mode 100644
index 81c9095..0000000
--- a/modules/web-console/backend/migrations/migration-utils.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-function log(msg) {
- console.log(`[${new Date().toISOString()}] [INFO ] ${msg}`);
-}
-
-function error(msg, err) {
- console.log(`[${new Date().toISOString()}] [ERROR] ${msg}.` + (err ? ` Error: ${err}` : ''));
-}
-
-function recreateIndex0(done, model, oldIdxName, oldIdx, newIdx) {
- return model.indexExists(oldIdxName)
- .then((exists) => {
- if (exists) {
- return model.dropIndex(oldIdx)
- .then(() => model.createIndex(newIdx, {unique: true, background: false}));
- }
- })
- .then(() => done())
- .catch((err) => {
- if (err.code === 12587) {
- log(`Background operation in progress for: ${oldIdxName}, will retry in 3 seconds.`);
-
- setTimeout(() => recreateIndex0(done, model, oldIdxName, oldIdx, newIdx), 3000);
- }
- else {
- log(`Failed to recreate index: ${err}`);
-
- done();
- }
- });
-}
-
-function recreateIndex(done, model, oldIdxName, oldIdx, newIdx) {
- setTimeout(() => recreateIndex0(done, model, oldIdxName, oldIdx, newIdx), 1000);
-}
-
-const LOST_AND_FOUND = 'LOST_AND_FOUND';
-
-function getClusterForMigration(clustersModel, space) {
- return clustersModel.findOne({space, name: LOST_AND_FOUND}).lean().exec()
- .then((cluster) => {
- if (cluster)
- return cluster;
-
- return clustersModel.create({
- space,
- name: LOST_AND_FOUND,
- connector: {noDelay: true},
- communication: {tcpNoDelay: true},
- igfss: [],
- caches: [],
- binaryConfiguration: {
- compactFooter: true,
- typeConfigurations: []
- },
- discovery: {
- kind: 'Multicast',
- Multicast: {addresses: ['127.0.0.1:47500..47510']},
- Vm: {addresses: ['127.0.0.1:47500..47510']}
- }
- });
- });
-}
-
-function getCacheForMigration(clustersModel, cachesModel, space) {
- return cachesModel.findOne({space, name: LOST_AND_FOUND})
- .then((cache) => {
- if (cache)
- return cache;
-
- return getClusterForMigration(clustersModel, space)
- .then((cluster) => {
- return cachesModel.create({
- space,
- name: LOST_AND_FOUND,
- clusters: [cluster._id],
- domains: [],
- cacheMode: 'PARTITIONED',
- atomicityMode: 'ATOMIC',
- readFromBackup: true,
- copyOnRead: true,
- readThrough: false,
- writeThrough: false,
- sqlFunctionClasses: [],
- writeBehindCoalescing: true,
- cacheStoreFactory: {
- CacheHibernateBlobStoreFactory: {hibernateProperties: []},
- CacheJdbcBlobStoreFactory: {connectVia: 'DataSource'}
- },
- nearConfiguration: {},
- evictionPolicy: {}
- });
- })
- .then((cache) => {
- return clustersModel.updateOne({_id: cache.clusters[0]}, {$addToSet: {caches: cache._id}}).exec()
- .then(() => cache);
- });
- });
-}
-
-module.exports = {
- log,
- error,
- recreateIndex,
- getClusterForMigration,
- getCacheForMigration
-};
-
-
-
-
diff --git a/modules/web-console/backend/package-lock.json b/modules/web-console/backend/package-lock.json
deleted file mode 100644
index 28051fa..0000000
--- a/modules/web-console/backend/package-lock.json
+++ /dev/null
@@ -1,8115 +0,0 @@
-{
- "name": "ignite-web-console",
- "version": "8.7.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@babel/code-frame": {
- "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"
- }
- },
- "@babel/highlight": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
- "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/parser": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz",
- "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA=="
- },
- "@mrmlnc/readdir-enhanced": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
- "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
- "requires": {
- "call-me-maybe": "^1.0.1",
- "glob-to-regexp": "^0.3.0"
- }
- },
- "@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=="
- },
- "accepts": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
- "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
- "requires": {
- "mime-types": "~2.1.18",
- "negotiator": "0.6.1"
- }
- },
- "acorn": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
- "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
- "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
- "dev": true
- },
- "after": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
- "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
- },
- "agent-base": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
- "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
- "dev": true,
- "requires": {
- "es6-promisify": "^5.0.0"
- }
- },
- "ajv": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
- "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
- "requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-colors": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
- "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
- "dev": true
- },
- "ansi-escapes": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
- "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
- },
- "anymatch": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
- "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
- "optional": true,
- "requires": {
- "micromatch": "^2.1.5",
- "normalize-path": "^2.0.0"
- }
- },
- "app-module-path": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz",
- "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU="
- },
- "archetype": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/archetype/-/archetype-0.8.8.tgz",
- "integrity": "sha512-isdIbFfT3zXVan34hmxIwI8A5/8lo9MaYmwXF1iYWCnJS1GvKKnZ4GrXoOUgKdUMCiB/wdguRXeStCUQhFjexg==",
- "requires": {
- "lodash.clonedeep": "4.x",
- "lodash.set": "4.x",
- "lodash.unset": "4.x",
- "mpath": "0.5.1",
- "standard-error": "1.1.0"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "optional": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
- },
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "optional": true
- },
- "arraybuffer.slice": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
- "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
- },
- "astral-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
- "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
- "dev": true
- },
- "async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
- "requires": {
- "lodash": "^4.17.10"
- }
- },
- "async-each": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
- "optional": true
- },
- "async-limiter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
- "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
- },
- "aws4": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
- "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
- },
- "babel-cli": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz",
- "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
- "requires": {
- "babel-core": "^6.26.0",
- "babel-polyfill": "^6.26.0",
- "babel-register": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "chokidar": "^1.6.1",
- "commander": "^2.11.0",
- "convert-source-map": "^1.5.0",
- "fs-readdir-recursive": "^1.0.0",
- "glob": "^7.1.2",
- "lodash": "^4.17.4",
- "output-file-sync": "^1.1.2",
- "path-is-absolute": "^1.0.1",
- "slash": "^1.0.0",
- "source-map": "^0.5.6",
- "v8flags": "^2.1.1"
- }
- },
- "babel-code-frame": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
- "requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
- }
- },
- "babel-core": {
- "version": "6.26.3",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
- "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
- "requires": {
- "babel-code-frame": "^6.26.0",
- "babel-generator": "^6.26.0",
- "babel-helpers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-register": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "convert-source-map": "^1.5.1",
- "debug": "^2.6.9",
- "json5": "^0.5.1",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.4",
- "path-is-absolute": "^1.0.1",
- "private": "^0.1.8",
- "slash": "^1.0.0",
- "source-map": "^0.5.7"
- },
- "dependencies": {
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
- }
- },
- "babel-generator": {
- "version": "6.26.1",
- "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
- "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
- "requires": {
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "detect-indent": "^4.0.0",
- "jsesc": "^1.3.0",
- "lodash": "^4.17.4",
- "source-map": "^0.5.7",
- "trim-right": "^1.0.1"
- }
- },
- "babel-helper-builder-binary-assignment-operator-visitor": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
- "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
- "requires": {
- "babel-helper-explode-assignable-expression": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-call-delegate": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
- "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
- "requires": {
- "babel-helper-hoist-variables": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-define-map": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
- "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
- "requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-helper-explode-assignable-expression": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
- "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-function-name": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
- "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
- "requires": {
- "babel-helper-get-function-arity": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-get-function-arity": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
- "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-hoist-variables": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
- "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-optimise-call-expression": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
- "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-regex": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
- "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-helper-remap-async-to-generator": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
- "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
- "requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helper-replace-supers": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
- "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
- "requires": {
- "babel-helper-optimise-call-expression": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-helpers": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
- "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-messages": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
- "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-check-es2015-constants": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
- "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-syntax-async-functions": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
- "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU="
- },
- "babel-plugin-syntax-exponentiation-operator": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
- "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4="
- },
- "babel-plugin-syntax-trailing-function-commas": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
- "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM="
- },
- "babel-plugin-transform-async-to-generator": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
- "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
- "requires": {
- "babel-helper-remap-async-to-generator": "^6.24.1",
- "babel-plugin-syntax-async-functions": "^6.8.0",
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-arrow-functions": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
- "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-block-scoped-functions": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
- "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-block-scoping": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
- "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-plugin-transform-es2015-classes": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
- "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
- "requires": {
- "babel-helper-define-map": "^6.24.1",
- "babel-helper-function-name": "^6.24.1",
- "babel-helper-optimise-call-expression": "^6.24.1",
- "babel-helper-replace-supers": "^6.24.1",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-computed-properties": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
- "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-destructuring": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
- "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-duplicate-keys": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
- "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-for-of": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
- "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-function-name": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
- "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
- "requires": {
- "babel-helper-function-name": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-literals": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
- "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-modules-amd": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
- "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
- "requires": {
- "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-modules-commonjs": {
- "version": "6.26.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
- "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
- "requires": {
- "babel-plugin-transform-strict-mode": "^6.24.1",
- "babel-runtime": "^6.26.0",
- "babel-template": "^6.26.0",
- "babel-types": "^6.26.0"
- }
- },
- "babel-plugin-transform-es2015-modules-systemjs": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
- "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
- "requires": {
- "babel-helper-hoist-variables": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-modules-umd": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
- "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
- "requires": {
- "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-object-super": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
- "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
- "requires": {
- "babel-helper-replace-supers": "^6.24.1",
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-parameters": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
- "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
- "requires": {
- "babel-helper-call-delegate": "^6.24.1",
- "babel-helper-get-function-arity": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-template": "^6.24.1",
- "babel-traverse": "^6.24.1",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-shorthand-properties": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
- "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-spread": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
- "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-sticky-regex": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
- "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
- "requires": {
- "babel-helper-regex": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-plugin-transform-es2015-template-literals": {
- "version": "6.22.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
- "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-typeof-symbol": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
- "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-es2015-unicode-regex": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
- "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
- "requires": {
- "babel-helper-regex": "^6.24.1",
- "babel-runtime": "^6.22.0",
- "regexpu-core": "^2.0.0"
- }
- },
- "babel-plugin-transform-exponentiation-operator": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
- "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
- "requires": {
- "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1",
- "babel-plugin-syntax-exponentiation-operator": "^6.8.0",
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-regenerator": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
- "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
- "requires": {
- "regenerator-transform": "^0.10.0"
- }
- },
- "babel-plugin-transform-runtime": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz",
- "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
- "requires": {
- "babel-runtime": "^6.22.0"
- }
- },
- "babel-plugin-transform-strict-mode": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
- "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "babel-types": "^6.24.1"
- }
- },
- "babel-polyfill": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
- "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
- "requires": {
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "regenerator-runtime": "^0.10.5"
- },
- "dependencies": {
- "regenerator-runtime": {
- "version": "0.10.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
- "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
- }
- }
- },
- "babel-preset-es2015": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
- "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
- "requires": {
- "babel-plugin-check-es2015-constants": "^6.22.0",
- "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
- "babel-plugin-transform-es2015-block-scoping": "^6.24.1",
- "babel-plugin-transform-es2015-classes": "^6.24.1",
- "babel-plugin-transform-es2015-computed-properties": "^6.24.1",
- "babel-plugin-transform-es2015-destructuring": "^6.22.0",
- "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1",
- "babel-plugin-transform-es2015-for-of": "^6.22.0",
- "babel-plugin-transform-es2015-function-name": "^6.24.1",
- "babel-plugin-transform-es2015-literals": "^6.22.0",
- "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
- "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
- "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
- "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
- "babel-plugin-transform-es2015-object-super": "^6.24.1",
- "babel-plugin-transform-es2015-parameters": "^6.24.1",
- "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
- "babel-plugin-transform-es2015-spread": "^6.22.0",
- "babel-plugin-transform-es2015-sticky-regex": "^6.24.1",
- "babel-plugin-transform-es2015-template-literals": "^6.22.0",
- "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
- "babel-plugin-transform-es2015-unicode-regex": "^6.24.1",
- "babel-plugin-transform-regenerator": "^6.24.1"
- }
- },
- "babel-preset-es2016": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz",
- "integrity": "sha1-+QC/k+LrwNJ235uKtZck6/2Vn4s=",
- "requires": {
- "babel-plugin-transform-exponentiation-operator": "^6.24.1"
- }
- },
- "babel-preset-es2017": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz",
- "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=",
- "requires": {
- "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
- "babel-plugin-transform-async-to-generator": "^6.24.1"
- }
- },
- "babel-preset-latest": {
- "version": "6.24.1",
- "resolved": "https://registry.npmjs.org/babel-preset-latest/-/babel-preset-latest-6.24.1.tgz",
- "integrity": "sha1-Z33gaRVKdIXC0lxXfAL2JLhbheg=",
- "requires": {
- "babel-preset-es2015": "^6.24.1",
- "babel-preset-es2016": "^6.24.1",
- "babel-preset-es2017": "^6.24.1"
- }
- },
- "babel-register": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
- "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
- "requires": {
- "babel-core": "^6.26.0",
- "babel-runtime": "^6.26.0",
- "core-js": "^2.5.0",
- "home-or-tmp": "^2.0.0",
- "lodash": "^4.17.4",
- "mkdirp": "^0.5.1",
- "source-map-support": "^0.4.15"
- }
- },
- "babel-runtime": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
- "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
- "requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
- }
- },
- "babel-template": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
- "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
- "requires": {
- "babel-runtime": "^6.26.0",
- "babel-traverse": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "lodash": "^4.17.4"
- }
- },
- "babel-traverse": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
- "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
- "requires": {
- "babel-code-frame": "^6.26.0",
- "babel-messages": "^6.23.0",
- "babel-runtime": "^6.26.0",
- "babel-types": "^6.26.0",
- "babylon": "^6.18.0",
- "debug": "^2.6.8",
- "globals": "^9.18.0",
- "invariant": "^2.2.2",
- "lodash": "^4.17.4"
- }
- },
- "babel-types": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
- "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
- "requires": {
- "babel-runtime": "^6.26.0",
- "esutils": "^2.0.2",
- "lodash": "^4.17.4",
- "to-fast-properties": "^1.0.3"
- }
- },
- "babylon": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
- "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
- },
- "backo2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
- }
- }
- },
- "base64-arraybuffer": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
- "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
- },
- "base64-js": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
- "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw=="
- },
- "base64id": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
- "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY="
- },
- "basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "better-assert": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
- "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
- "requires": {
- "callsite": "1.0.0"
- }
- },
- "binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "optional": true
- },
- "bl": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
- "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
- "requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- }
- },
- "blob": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
- "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
- },
- "bluebird": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz",
- "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw=="
- },
- "body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "requires": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "optional": true,
- "requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
- }
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "bson": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz",
- "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg=="
- },
- "buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
- "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4"
- }
- },
- "buffer-alloc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
- "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
- "requires": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
- }
- },
- "buffer-alloc-unsafe": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
- },
- "buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
- },
- "buffer-fill": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
- },
- "byline": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
- "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE="
- },
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
- }
- }
- },
- "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="
- },
- "callsite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
- "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "chai": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
- "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "pathval": "^1.1.0",
- "type-detect": "^4.0.5"
- }
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "chardet": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
- "dev": true
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true
- },
- "chokidar": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
- "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
- "optional": true,
- "requires": {
- "anymatch": "^1.3.0",
- "async-each": "^1.0.0",
- "fsevents": "^1.0.0",
- "glob-parent": "^2.0.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^2.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0"
- }
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
- }
- }
- },
- "cli-cursor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
- "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
- "requires": {
- "restore-cursor": "^1.0.1"
- }
- },
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "colors": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
- "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg=="
- },
- "combined-stream": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
- "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
- "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "component-bind": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
- "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
- },
- "component-inherit": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
- "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "connect-mongodb-session": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/connect-mongodb-session/-/connect-mongodb-session-2.1.1.tgz",
- "integrity": "sha512-k8NF+C32tJZuR3sSFfdz56e1NKzxejWlD/X5PVYBIZQ8/dzqkMGTKxcdGXsBreU5M48WZ+vYGrJSruSRTzFu4Q==",
- "requires": {
- "archetype": "0.8.x",
- "mongodb": "~3.1.8"
- }
- },
- "content-disposition": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
- "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
- },
- "convert-source-map": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
- "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
- },
- "cookie-parser": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.4.tgz",
- "integrity": "sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==",
- "requires": {
- "cookie": "0.3.1",
- "cookie-signature": "1.0.6"
- }
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "cookiejar": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
- "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==",
- "dev": true
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
- },
- "core-js": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz",
- "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A=="
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "cross-env": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz",
- "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.5",
- "is-windows": "^1.0.0"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
- },
- "decompress": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz",
- "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=",
- "requires": {
- "decompress-tar": "^4.0.0",
- "decompress-tarbz2": "^4.0.0",
- "decompress-targz": "^4.0.0",
- "decompress-unzip": "^4.0.1",
- "graceful-fs": "^4.1.10",
- "make-dir": "^1.0.0",
- "pify": "^2.3.0",
- "strip-dirs": "^2.0.0"
- }
- },
- "decompress-tar": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
- "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
- "requires": {
- "file-type": "^5.2.0",
- "is-stream": "^1.1.0",
- "tar-stream": "^1.5.2"
- }
- },
- "decompress-tarbz2": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
- "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
- "requires": {
- "decompress-tar": "^4.1.0",
- "file-type": "^6.1.0",
- "is-stream": "^1.1.0",
- "seek-bzip": "^1.0.5",
- "unbzip2-stream": "^1.0.9"
- },
- "dependencies": {
- "file-type": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
- "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg=="
- }
- }
- },
- "decompress-targz": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
- "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
- "requires": {
- "decompress-tar": "^4.1.1",
- "file-type": "^5.2.0",
- "is-stream": "^1.1.0"
- }
- },
- "decompress-unzip": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
- "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
- "requires": {
- "file-type": "^3.8.0",
- "get-stream": "^2.2.0",
- "pify": "^2.3.0",
- "yauzl": "^2.4.2"
- },
- "dependencies": {
- "file-type": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
- "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek="
- }
- }
- },
- "dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
- "dev": true
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
- }
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "detect-indent": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
- "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
- "requires": {
- "repeating": "^2.0.0"
- }
- },
- "diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
- },
- "dir-glob": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
- "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
- "requires": {
- "arrify": "^1.0.1",
- "path-type": "^3.0.0"
- },
- "dependencies": {
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
- }
- }
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "dotenv": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
- "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow=="
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
- },
- "end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
- "requires": {
- "once": "^1.4.0"
- }
- },
- "engine.io": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
- "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==",
- "requires": {
- "accepts": "~1.3.4",
- "base64id": "1.0.0",
- "cookie": "0.3.1",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.0",
- "ws": "~3.3.1"
- },
- "dependencies": {
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "engine.io-client": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
- "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
- "requires": {
- "component-emitter": "1.2.1",
- "component-inherit": "0.0.3",
- "debug": "~3.1.0",
- "engine.io-parser": "~2.1.1",
- "has-cors": "1.1.0",
- "indexof": "0.0.1",
- "parseqs": "0.0.5",
- "parseuri": "0.0.5",
- "ws": "~3.3.1",
- "xmlhttprequest-ssl": "~1.5.4",
- "yeast": "0.1.2"
- },
- "dependencies": {
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "engine.io-parser": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
- "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
- "requires": {
- "after": "0.8.2",
- "arraybuffer.slice": "~0.0.7",
- "base64-arraybuffer": "0.1.5",
- "blob": "0.0.5",
- "has-binary2": "~1.0.2"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es-abstract": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
- "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
- "dev": true,
- "requires": {
- "es-to-primitive": "^1.2.0",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "is-callable": "^1.1.4",
- "is-regex": "^1.0.4",
- "object-keys": "^1.0.12"
- }
- },
- "es-to-primitive": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
- "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "es6-promise": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz",
- "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==",
- "dev": true
- },
- "es6-promisify": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
- "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
- "dev": true,
- "requires": {
- "es6-promise": "^4.0.3"
- }
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- },
- "escodegen": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
- "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
- "requires": {
- "esprima": "^3.1.3",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "optional": true
- }
- }
- },
- "eslint": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
- "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "ajv": "^6.9.1",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "eslint-scope": "^4.0.3",
- "eslint-utils": "^1.3.1",
- "eslint-visitor-keys": "^1.0.0",
- "espree": "^5.0.1",
- "esquery": "^1.0.1",
- "esutils": "^2.0.2",
- "file-entry-cache": "^5.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob": "^7.1.2",
- "globals": "^11.7.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "inquirer": "^6.2.2",
- "js-yaml": "^3.13.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.11",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.2",
- "path-is-inside": "^1.0.2",
- "progress": "^2.0.0",
- "regexpp": "^2.0.1",
- "semver": "^5.5.1",
- "strip-ansi": "^4.0.0",
- "strip-json-comments": "^2.0.1",
- "table": "^5.2.3",
- "text-table": "^0.2.0"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
- "dev": true
- },
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "cli-cursor": {
- "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"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "figures": {
- "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"
- }
- },
- "globals": {
- "version": "11.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
- "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
- "dev": true
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "inquirer": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz",
- "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^3.2.0",
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^3.0.3",
- "figures": "^2.0.0",
- "lodash": "^4.17.11",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rxjs": "^6.4.0",
- "string-width": "^2.1.0",
- "strip-ansi": "^5.1.0",
- "through": "^2.3.6"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
- "dev": true
- },
- "onetime": {
- "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"
- }
- },
- "restore-cursor": {
- "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"
- }
- },
- "run-async": {
- "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"
- }
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "eslint-formatter-friendly": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/eslint-formatter-friendly/-/eslint-formatter-friendly-6.0.0.tgz",
- "integrity": "sha512-fOBwGn2r8BPQ1KSKyVzjXP8VFxJ2tWKxxn2lIF+k1ezN/pFB44HDlrn5kBm1vxbyyRa/LC+1vHJwc7WETUAZ2Q==",
- "dev": true,
- "requires": {
- "babel-code-frame": "6.26.0",
- "chalk": "^2.0.1",
- "extend": "^3.0.0",
- "strip-ansi": "^4.0.0",
- "text-table": "^0.2.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
- "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
- "dev": true
- },
- "eslint-visitor-keys": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
- "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
- "dev": true
- },
- "espree": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
- "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
- "dev": true,
- "requires": {
- "acorn": "^6.0.7",
- "acorn-jsx": "^5.0.0",
- "eslint-visitor-keys": "^1.0.0"
- }
- },
- "esprima": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
- "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
- },
- "esquery": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
- "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
- "dev": true,
- "requires": {
- "estraverse": "^4.0.0"
- }
- },
- "esrecurse": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
- "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
- "dev": true,
- "requires": {
- "estraverse": "^4.1.0"
- }
- },
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
- },
- "esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- }
- }
- },
- "exit-hook": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
- "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g="
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "optional": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "expand-range": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
- "optional": true,
- "requires": {
- "fill-range": "^2.1.0"
- }
- },
- "expand-template": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz",
- "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg=="
- },
- "express": {
- "version": "4.16.4",
- "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
- "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
- "requires": {
- "accepts": "~1.3.5",
- "array-flatten": "1.1.1",
- "body-parser": "1.18.3",
- "content-disposition": "0.5.2",
- "content-type": "~1.0.4",
- "cookie": "0.3.1",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "1.1.1",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.4",
- "qs": "6.5.2",
- "range-parser": "~1.2.0",
- "safe-buffer": "5.1.2",
- "send": "0.16.2",
- "serve-static": "1.13.2",
- "setprototypeof": "1.1.0",
- "statuses": "~1.4.0",
- "type-is": "~1.6.16",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "dependencies": {
- "body-parser": {
- "version": "1.18.3",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
- "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
- "requires": {
- "bytes": "3.0.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "~1.6.3",
- "iconv-lite": "0.4.23",
- "on-finished": "~2.3.0",
- "qs": "6.5.2",
- "raw-body": "2.3.3",
- "type-is": "~1.6.16"
- }
- },
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
- },
- "http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- }
- },
- "iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
- },
- "raw-body": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
- "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
- "requires": {
- "bytes": "3.0.0",
- "http-errors": "1.6.3",
- "iconv-lite": "0.4.23",
- "unpipe": "1.0.0"
- }
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
- },
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
- }
- }
- },
- "express-mongo-sanitize": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/express-mongo-sanitize/-/express-mongo-sanitize-1.3.2.tgz",
- "integrity": "sha1-+6QE9sBBV3y+7sTdkFfO+7Q53lo="
- },
- "express-session": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.16.1.tgz",
- "integrity": "sha512-pWvUL8Tl5jUy1MLH7DhgUlpoKeVPUTe+y6WQD9YhcN0C5qAhsh4a8feVjiUXo3TFhIy191YGZ4tewW9edbl2xQ==",
- "requires": {
- "cookie": "0.3.1",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-headers": "~1.0.2",
- "parseurl": "~1.3.2",
- "safe-buffer": "5.1.2",
- "uid-safe": "~2.1.5"
- },
- "dependencies": {
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
- }
- },
- "external-editor": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
- "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
- "dev": true,
- "requires": {
- "chardet": "^0.7.0",
- "iconv-lite": "^0.4.24",
- "tmp": "^0.0.33"
- }
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "optional": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
- },
- "fast-glob": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz",
- "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==",
- "requires": {
- "@mrmlnc/readdir-enhanced": "^2.2.1",
- "@nodelib/fs.stat": "^1.1.2",
- "glob-parent": "^3.1.0",
- "is-glob": "^4.0.0",
- "merge2": "^1.2.3",
- "micromatch": "^3.1.10"
- },
- "dependencies": {
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
- }
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
- },
- "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==",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
- },
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- }
- }
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
- },
- "fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
- "requires": {
- "pend": "~1.2.0"
- }
- },
- "figures": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
- "requires": {
- "escape-string-regexp": "^1.0.5",
- "object-assign": "^4.1.0"
- }
- },
- "file-entry-cache": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
- "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
- "dev": true,
- "requires": {
- "flat-cache": "^2.0.1"
- }
- },
- "file-type": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
- "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY="
- },
- "filename-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
- "optional": true
- },
- "fill-range": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
- "optional": true,
- "requires": {
- "is-number": "^2.1.0",
- "isobject": "^2.0.0",
- "randomatic": "^3.0.0",
- "repeat-element": "^1.1.2",
- "repeat-string": "^1.5.2"
- }
- },
- "finalhandler": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
- "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.4.0",
- "unpipe": "~1.0.0"
- },
- "dependencies": {
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
- }
- }
- },
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- },
- "dependencies": {
- "make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- }
- },
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- }
- }
- },
- "find-package-json": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/find-package-json/-/find-package-json-1.2.0.tgz",
- "integrity": "sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==",
- "dev": true
- },
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "fire-up": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fire-up/-/fire-up-1.0.0.tgz",
- "integrity": "sha1-cyXaXgqCyH77X39wM6uil1EB/0I=",
- "requires": {
- "bluebird": "^3.3.4",
- "lodash": "^4.7.0",
- "simple-glob": "0.1.1"
- }
- },
- "flat": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
- "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
- "dev": true,
- "requires": {
- "is-buffer": "~2.0.3"
- },
- "dependencies": {
- "is-buffer": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
- "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==",
- "dev": true
- }
- }
- },
- "flat-cache": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
- "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
- "dev": true,
- "requires": {
- "flatted": "^2.0.0",
- "rimraf": "2.6.3",
- "write": "1.0.3"
- }
- },
- "flatted": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
- "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==",
- "dev": true
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
- },
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
- "optional": true,
- "requires": {
- "for-in": "^1.0.1"
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "formidable": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz",
- "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==",
- "dev": true
- },
- "forwarded": {
- "version": "0.1.2",
- "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="
- },
- "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-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
- },
- "fs-extra": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",
- "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0"
- }
- },
- "fs-readdir-recursive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
- "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA=="
- },
- "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.8",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz",
- "integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==",
- "optional": true,
- "requires": {
- "nan": "^2.12.1",
- "node-pre-gyp": "^0.12.0"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": 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
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.1",
- "bundled": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true
- },
- "debug": {
- "version": "4.1.1",
- "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.5",
- "bundled": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "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.3",
- "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.1",
- "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.3",
- "bundled": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true
- },
- "minipass": {
- "version": "2.3.5",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.2.1",
- "bundled": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.1.1",
... 116673 lines suppressed ...