From 0d643f88c9e03d34113d29074f8758226fb26156 Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Wed, 18 Mar 2020 18:27:48 -0700 Subject: [PATCH 01/73] Item 6642: Starter files DatasetDesigner react app --- .gitignore | 5 + study/.npmrc | 2 + study/README.md | 17 + study/build.gradle | 3 + study/package-lock.json | 6825 +++++++++++++++++ study/package.json | 45 + .../DatasetDesigner/DatasetDesigner.tsx | 31 + study/src/client/DatasetDesigner/app.tsx | 24 + study/src/client/DatasetDesigner/dev.tsx | 38 + study/src/client/entryPoints.js | 13 + study/src/client/typings/main.d.ts | 7 + .../study/controllers/StudyController.java | 9 +- study/tsconfig.json | 7 + 13 files changed, 7019 insertions(+), 7 deletions(-) create mode 100644 study/.npmrc create mode 100644 study/README.md create mode 100644 study/package-lock.json create mode 100644 study/package.json create mode 100644 study/src/client/DatasetDesigner/DatasetDesigner.tsx create mode 100644 study/src/client/DatasetDesigner/app.tsx create mode 100644 study/src/client/DatasetDesigner/dev.tsx create mode 100644 study/src/client/entryPoints.js create mode 100644 study/src/client/typings/main.d.ts create mode 100644 study/tsconfig.json diff --git a/.gitignore b/.gitignore index 4860c073f3a..d278a587ca5 100644 --- a/.gitignore +++ b/.gitignore @@ -58,6 +58,11 @@ query/resources/views/queryMetadataEditor.view.xml query/resources/views/queryMetadataEditorDev.html query/resources/views/queryMetadataEditorDev.view.xml +study/resources/views/datasetDesigner.html +study/resources/views/datasetDesigner.view.xml +study/resources/views/datasetDesignerDev.html +study/resources/views/datasetDesignerDev.view.xml + list/resources/web/list/gen list/resources/views/designer.html list/resources/views/designer.view.xml diff --git a/study/.npmrc b/study/.npmrc new file mode 100644 index 00000000000..78963f84f41 --- /dev/null +++ b/study/.npmrc @@ -0,0 +1,2 @@ +# Set registry for @labkey scopes +@labkey:registry=https://artifactory.labkey.com/artifactory/api/npm/libs-client/ \ No newline at end of file diff --git a/study/README.md b/study/README.md new file mode 100644 index 00000000000..056dc61fb35 --- /dev/null +++ b/study/README.md @@ -0,0 +1,17 @@ +# LabKey Query Module + +The Study module .. + +### LabKey React pages + +This module is setup to use `webpack` to build client application pages, mostly for developing +with `React` components and `@labkey/components` shared components. The artifacts will be generated +and placed into the standard LabKey view locations to make the pages available to the server through +the `query` controller. The generated `.html` and `.view.xml` files will +be placed in the `study/resources/views` directory and the generated JS/CSS artifacts will be +placed in the `study/resources/web/experiment/gen` directory. + +For further details about developing React based pages in this module see the following documentation: +[LabKey React Page Development]. + +[LabKey React Page Development]: https://github.com/LabKey/platform/tree/develop/webpack \ No newline at end of file diff --git a/study/build.gradle b/study/build.gradle index 5377e24d5ac..a3cc5313668 100644 --- a/study/build.gradle +++ b/study/build.gradle @@ -20,3 +20,6 @@ dependencies { BuildUtils.addLabKeyDependency(project: project, config: "modules", depProjectPath: BuildUtils.getPlatformModuleProjectPath(project.gradle, "query"), depProjectConfig: "published", depExtension: "module") BuildUtils.addLabKeyDependency(project: project, config: "modules", depProjectPath: BuildUtils.getPlatformModuleProjectPath(project.gradle, "assay"), depProjectConfig: "published", depExtension: "module") } + +project.evaluationDependsOn(BuildUtils.getPlatformProjectPath(project.gradle)) +project.tasks.npmInstall.dependsOn(project.project(BuildUtils.getPlatformProjectPath(project.gradle)).tasks.npmInstall) \ No newline at end of file diff --git a/study/package-lock.json b/study/package-lock.json new file mode 100644 index 00000000000..c95e1a836d1 --- /dev/null +++ b/study/package-lock.json @@ -0,0 +1,6825 @@ +{ + "name": "study", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", + "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/runtime": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", + "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs2": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.8.7.tgz", + "integrity": "sha512-R8zbPiv25S0pGfMqAr55dRRxWB8vUeo3wicI4g9PFVBKmsy/9wmQUV1AaYW/kxRHUhx42TTh6F0+QO+4pwfYWg==", + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/types": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", + "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@emotion/cache": { + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", + "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", + "requires": { + "@emotion/sheet": "0.9.4", + "@emotion/stylis": "0.8.5", + "@emotion/utils": "0.11.3", + "@emotion/weak-memoize": "0.2.5" + } + }, + "@emotion/core": { + "version": "10.0.28", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.28.tgz", + "integrity": "sha512-pH8UueKYO5jgg0Iq+AmCLxBsvuGtvlmiDCOuv8fGNYn3cowFpLN98L8zO56U0H1PjDIyAlXymgL3Wu7u7v6hbA==", + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/cache": "^10.0.27", + "@emotion/css": "^10.0.27", + "@emotion/serialize": "^0.11.15", + "@emotion/sheet": "0.9.4", + "@emotion/utils": "0.11.3" + } + }, + "@emotion/css": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", + "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", + "requires": { + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3", + "babel-plugin-emotion": "^10.0.27" + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "requires": { + "@emotion/memoize": "0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "requires": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + }, + "@emotion/sheet": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", + "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==" + }, + "@emotion/styled": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz", + "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==", + "requires": { + "@emotion/styled-base": "^10.0.27", + "babel-plugin-emotion": "^10.0.27" + } + }, + "@emotion/styled-base": { + "version": "10.0.31", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.31.tgz", + "integrity": "sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==", + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/is-prop-valid": "0.8.8", + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3" + } + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==" + }, + "@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" + }, + "@fortawesome/fontawesome-common-types": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.27.tgz", + "integrity": "sha512-97GaByGaXDGMkzcJX7VmR/jRJd8h1mfhtA7RsxDBN61GnWE/PPCZhOdwG/8OZYktiRUF0CvFOr+VgRkJrt6TWg==" + }, + "@fortawesome/fontawesome-free": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.9.0.tgz", + "integrity": "sha512-g795BBEzM/Hq2SYNPm/NQTIp3IWd4eXSH0ds87Na2jnrAUFX3wkyZAI4Gwj9DOaWMuz2/01i8oWI7P7T/XLkhg==" + }, + "@fortawesome/fontawesome-svg-core": { + "version": "1.2.19", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.19.tgz", + "integrity": "sha512-D4ICXg9oU08eF9o7Or392gPpjmwwgJu8ecCFusthbID95CLVXOgIyd4mOKD9Nud5Ckz+Ty59pqkNtThDKR0erA==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.19" + } + }, + "@fortawesome/free-regular-svg-icons": { + "version": "5.11.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.11.2.tgz", + "integrity": "sha512-k0vbThRv9AvnXYBWi1gn1rFW4X7co/aFkbm0ZNmAR5PoWb9vY9EDDDobg8Ay4ISaXtCPypvJ0W1FWkSpLQwZ6w==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.25" + } + }, + "@fortawesome/free-solid-svg-icons": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.9.0.tgz", + "integrity": "sha512-U8YXPfWcSozsCW0psCtlRGKjjRs5+Am5JJwLOUmVHFZbIEWzaz4YbP84EoPwUsVmSAKrisu3QeNcVOtmGml0Xw==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.19" + } + }, + "@fortawesome/react-fontawesome": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.4.tgz", + "integrity": "sha512-GwmxQ+TK7PEdfSwvxtGnMCqrfEm0/HbRHArbUudsYiy9KzVCwndxa2KMcfyTQ8El0vROrq8gOOff09RF1oQe8g==", + "requires": { + "humps": "^2.0.1", + "prop-types": "^15.5.10" + } + }, + "@hot-loader/react-dom": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/@hot-loader/react-dom/-/react-dom-16.9.0.tgz", + "integrity": "sha512-MsOdCBB7c5YNyB4iDDct+tS7AihvYyfwZVV+z/QnbTjPgxH98kqIDXO92nU7tLXp0OtYFErHZfcWjtszP/572w==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.15.0" + }, + "dependencies": { + "scheduler": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", + "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, + "@icons/material": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", + "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" + }, + "@labkey/api": { + "version": "0.0.40", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.0.40.tgz", + "integrity": "sha1-/i+rmsb1E4MQ2XA6zGLVyJovDag=" + }, + "@labkey/components": { + "version": "0.35.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.35.0.tgz", + "integrity": "sha1-rNg6fup7KkUcGiQGQYI6YrlyJro=", + "requires": { + "@fortawesome/fontawesome-free": "5.9.0", + "@fortawesome/fontawesome-svg-core": "1.2.19", + "@fortawesome/free-regular-svg-icons": "5.11.2", + "@fortawesome/free-solid-svg-icons": "5.9.0", + "@fortawesome/react-fontawesome": "0.1.4", + "@labkey/api": "0.0.40", + "bootstrap": "3.4.1", + "classnames": "2.2.6", + "font-awesome": "4.7.0", + "formsy-react": "1.1.5", + "formsy-react-components": "1.1.0", + "history": "4.7.2", + "immutable": "3.8.2", + "jquery": "3.4.1", + "moment": "2.24.0", + "moment-jdateformatparser": "1.1.0", + "moment-timezone": "^0.5.27", + "normalizr": "3.4.0", + "numeral": "2.0.6", + "react": "16.8.6", + "react-beautiful-dnd": "11.0.3", + "react-bootstrap": "0.32.4", + "react-bootstrap-toggle": "2.3.2", + "react-color": "2.17.3", + "react-datepicker": "2.9.6", + "react-dom": "16.8.6", + "react-input-autosize": "2.2.1", + "react-router": "3.2.1", + "react-select": "1.0.0-rc.10", + "react-sticky": "6.0.3", + "react-treebeard": "3.2.4", + "reactn": "2.2.4", + "vis": "4.21.0" + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "13.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.2.tgz", + "integrity": "sha512-bnoqK579sAYrQbp73wwglccjJ4sfRdKU7WNEZ5FW4K2U6Kc0/eZ5kvXG0JKsEKFB50zrFmfFt52/cvBbZa7eXg==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", + "dev": true + }, + "@types/react": { + "version": "16.9.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", + "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "csstype": "^2.2.0" + } + }, + "@types/react-hot-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@types/react-hot-loader/-/react-hot-loader-4.1.0.tgz", + "integrity": "sha512-N/+Ua6kSrehJ5vpu4b2tAG4NjMcXQPlStnkUzjNlPokae97sUDtj096WlgN3ApefCvggPjJPP5iutyZ5dKBNPQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/react": "*" + } + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true + }, + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "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=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "babel-plugin-emotion": { + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.29.tgz", + "integrity": "sha512-7Jpi1OCxjyz0k163lKtqP+LHMg5z3S6A7vMBfHnF06l2unmtsOmFDzZBpGf0CWo1G4m8UACfVcDJiSiRuu/cSw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/serialize": "^0.11.16", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + } + } + }, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.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=", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "better-npm-run": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/better-npm-run/-/better-npm-run-0.1.1.tgz", + "integrity": "sha512-SBBYsUsb6bYcUMF9QUWy39GX5kzD4CoRBP11gx/k5jYkUr4Tr+irAokIeQX5FgfCRz0Q27rt8U0J4D2TlRgQFA==", + "dev": true, + "requires": { + "commander": "^2.9.0", + "dotenv": "^2.0.0", + "object-assign": "^4.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "bootstrap": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz", + "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "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==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.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" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.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=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "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=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.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=" + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-react-class": { + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", + "requires": { + "fbjs": "^0.8.9", + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "create-react-context": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz", + "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==", + "requires": { + "gud": "^1.0.0", + "warning": "^4.0.3" + }, + "dependencies": { + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^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" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-box-model": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.0.tgz", + "integrity": "sha512-lri0br+jSNV0kkkiGEp9y9y3Njq2PmpqbeGWRFQJuZteZzY9iC9GZhQ8Y4WpPwM/2YocjHePxy14igJY7YKzkA==", + "requires": { + "tiny-invariant": "^1.0.6" + } + }, + "csstype": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz", + "integrity": "sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==" + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "date-fns": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.0.tgz", + "integrity": "sha512-8P1cDi8ebZyDxUyUprBXwidoEtiQAawYPGvpfb+Dg0G6JrQ+VozwOmm91xYC0vAv1+0VmLehEPb+isg4BGUFfA==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "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==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", + "dev": true + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "dotenv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-2.0.0.tgz", + "integrity": "sha1-vXWcNXqqcDZeAclrewvsCKbg2Uk=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "elliptic": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emitter-component": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.1.1.tgz", + "integrity": "sha1-Bl4tvtaVm/RwZ57avq95gdEAOrY=" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", + "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "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.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "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" + } + }, + "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.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "dev": true + }, + "events": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", + "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "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" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.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=", + "dev": true, + "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=", + "dev": true, + "requires": { + "is-extendable": "^0.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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + } + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "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" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz", + "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==", + "dev": true, + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "form-data-to-object": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/form-data-to-object/-/form-data-to-object-0.2.0.tgz", + "integrity": "sha1-96jmjd2RChEApl4lrGpIQUP/gWg=" + }, + "formsy-react": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/formsy-react/-/formsy-react-1.1.5.tgz", + "integrity": "sha512-nNWe4Vbp6aDQ/zSxJ7gVQgD5+avFRVbydcjA2Om42flxpQFrKE54AAbuyEj3Jvv+2b9LVl+WLMAPalyvLjwNcQ==", + "requires": { + "form-data-to-object": "^0.2.0", + "prop-types": "^15.5.10" + } + }, + "formsy-react-components": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/formsy-react-components/-/formsy-react-components-1.1.0.tgz", + "integrity": "sha512-GUgnIqXbXNPf7auP4nwk5PF6477r5UhdQoO1aNCvQajLarUu/Jj8PaxTCHu56tNGSlewACqRV44m8MrYOMzdTQ==", + "requires": { + "classnames": "^2.2.5", + "prop-types": "^15.5.10" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": 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, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "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" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": 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" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "gud": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", + "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "history": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", + "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", + "requires": { + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "resolve-pathname": "^2.2.0", + "value-equal": "^0.4.0", + "warning": "^3.0.0" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "humps": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz", + "integrity": "sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=" + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + } + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "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 + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "jquery": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "keycharm": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/keycharm/-/keycharm-0.2.0.tgz", + "integrity": "sha1-+m6i5DuQpoAohD0n8gddNajD5vk=" + }, + "keycode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", + "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=" + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "loglevel": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.7.tgz", + "integrity": "sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "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" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memoize-one": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", + "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==" + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.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" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "dev": true, + "requires": { + "mime-db": "1.43.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "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" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", + "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "moment-jdateformatparser": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/moment-jdateformatparser/-/moment-jdateformatparser-1.1.0.tgz", + "integrity": "sha1-TGuuM+IJDONS05uHfpsxcJkoscc=", + "requires": { + "moment": ">=1.5.0" + } + }, + "moment-timezone": { + "version": "0.5.28", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz", + "integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalizr": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/normalizr/-/normalizr-3.4.0.tgz", + "integrity": "sha512-0dQLKpvsSb2f+vZwj78L855OMn9aeMQ0dQhduRqX3GkJh+k6rN9kcftxBV/VkW1n4q9OuV6F43Angn+pNbjg9w==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "numeral": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", + "integrity": "sha1-StCAk21EPCVhrtnyGX7//iX05QY=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "object-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" + }, + "portfinder": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", + "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "prop-types-extra": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "requires": { + "react-is": "^16.3.2", + "warning": "^4.0.0" + }, + "dependencies": { + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, + "propagating-hammerjs": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/propagating-hammerjs/-/propagating-hammerjs-1.4.7.tgz", + "integrity": "sha512-oW9Wd+W2Tp5uOz6Fh4mEU7p+FoyU85smLH/mPga83Loh0pHa6AH4ZHGywvwMk3TWP31l7iUsvJyW265p4Ipwrg==", + "requires": { + "hammerjs": "^2.0.8" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "raf-schd": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.2.tgz", + "integrity": "sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "react": { + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", + "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.13.6" + } + }, + "react-beautiful-dnd": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-11.0.3.tgz", + "integrity": "sha512-2FX2SnOlKMmfn90xUHCav7cxRWXwY7FeRa6TzdxWeX7DdP5JTvVQcsWgiOkdbJSj+J+1q1nA9QO4/HQ52D0DAA==", + "requires": { + "@babel/runtime-corejs2": "^7.4.4", + "css-box-model": "^1.1.2", + "memoize-one": "^5.0.4", + "raf-schd": "^4.0.0", + "react-redux": "^7.0.3", + "redux": "^4.0.1", + "tiny-invariant": "^1.0.4", + "use-memo-one": "^1.1.0" + } + }, + "react-bootstrap": { + "version": "0.32.4", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.32.4.tgz", + "integrity": "sha512-xj+JfaPOvnvr3ow0aHC7Y3HaBKZNR1mm361hVxVzVX3fcdJNIrfiodbQ0m9nLBpNxiKG6FTU2lq/SbTDYT2vew==", + "requires": { + "@babel/runtime-corejs2": "^7.0.0", + "classnames": "^2.2.5", + "dom-helpers": "^3.2.0", + "invariant": "^2.2.4", + "keycode": "^2.2.0", + "prop-types": "^15.6.1", + "prop-types-extra": "^1.0.1", + "react-overlays": "^0.8.0", + "react-prop-types": "^0.4.0", + "react-transition-group": "^2.0.0", + "uncontrollable": "^5.0.0", + "warning": "^3.0.0" + } + }, + "react-bootstrap-toggle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/react-bootstrap-toggle/-/react-bootstrap-toggle-2.3.2.tgz", + "integrity": "sha512-OPoPt+z0uu0Y96RXJ57Hq71VJna+RVtCviRsAMu/5OFS7bO80qVhoASuxK/kNsclSrSpHAaBfygHjpf6sd6CLQ==", + "requires": { + "classnames": "^2.2.5", + "prop-types": "^15.5.10", + "resize-observer-polyfill": "^1.5.0" + } + }, + "react-color": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.17.3.tgz", + "integrity": "sha512-1dtO8LqAVotPIChlmo6kLtFS1FP89ll8/OiA8EcFRDR+ntcK+0ukJgByuIQHRtzvigf26dV5HklnxDIvhON9VQ==", + "requires": { + "@icons/material": "^0.2.4", + "lodash": "^4.17.11", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + } + }, + "react-datepicker": { + "version": "2.9.6", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-2.9.6.tgz", + "integrity": "sha512-PLiVhyAr567gWuLMZwIH9WpTIZOZVLhEFyuUzSx3kmQdiikjrYpdNlxsfbbgaxRnee5y08KJZequaqRsNySXmw==", + "requires": { + "classnames": "^2.2.6", + "date-fns": "^2.0.1", + "prop-types": "^15.7.2", + "react-onclickoutside": "^6.9.0", + "react-popper": "^1.3.4" + } + }, + "react-dom": { + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", + "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.13.6" + } + }, + "react-hot-loader": { + "version": "4.8.8", + "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.8.8.tgz", + "integrity": "sha512-58bgeS7So8V93MhhnKogbraor8xdrTncil+b6IoIXkTIr3blJNAE7bU4tn/iJvy2J7rjxQmKFRaxKrWdKUZpqg==", + "dev": true, + "requires": { + "fast-levenshtein": "^2.0.6", + "global": "^4.3.0", + "hoist-non-react-statics": "^3.3.0", + "loader-utils": "^1.1.0", + "lodash": "^4.17.11", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.0.2", + "source-map": "^0.7.3" + } + }, + "react-input-autosize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.1.tgz", + "integrity": "sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA==", + "requires": { + "prop-types": "^15.5.8" + } + }, + "react-is": { + "version": "16.13.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.0.tgz", + "integrity": "sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-onclickoutside": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.9.0.tgz", + "integrity": "sha512-8ltIY3bC7oGhj2nPAvWOGi+xGFybPNhJM0V1H8hY/whNcXgmDeaeoCMPPd8VatrpTsUWjb/vGzrmu6SrXVty3A==" + }, + "react-overlays": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.8.3.tgz", + "integrity": "sha512-h6GT3jgy90PgctleP39Yu3eK1v9vaJAW73GOA/UbN9dJ7aAN4BTZD6793eI1D5U+ukMk17qiqN/wl3diK1Z5LA==", + "requires": { + "classnames": "^2.2.5", + "dom-helpers": "^3.2.1", + "prop-types": "^15.5.10", + "prop-types-extra": "^1.0.1", + "react-transition-group": "^2.2.0", + "warning": "^3.0.0" + } + }, + "react-popper": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.7.tgz", + "integrity": "sha512-nmqYTx7QVjCm3WUZLeuOomna138R1luC4EqkW3hxJUrAe+3eNz3oFCLYdnPwILfn0mX1Ew2c3wctrjlUMYYUww==", + "requires": { + "@babel/runtime": "^7.1.2", + "create-react-context": "^0.3.0", + "deep-equal": "^1.1.1", + "popper.js": "^1.14.4", + "prop-types": "^15.6.1", + "typed-styles": "^0.0.7", + "warning": "^4.0.2" + }, + "dependencies": { + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, + "react-prop-types": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/react-prop-types/-/react-prop-types-0.4.0.tgz", + "integrity": "sha1-+ZsL+0AGkpya8gUefBQUpcdbk9A=", + "requires": { + "warning": "^3.0.0" + } + }, + "react-redux": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz", + "integrity": "sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==", + "requires": { + "@babel/runtime": "^7.5.5", + "hoist-non-react-statics": "^3.3.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.9.0" + } + }, + "react-router": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-3.2.1.tgz", + "integrity": "sha512-SXkhC0nr3G0ltzVU07IN8jYl0bB6FsrDIqlLC9dK3SITXqyTJyM7yhXlUqs89w3Nqi5OkXsfRUeHX+P874HQrg==", + "requires": { + "create-react-class": "^15.5.1", + "history": "^3.0.0", + "hoist-non-react-statics": "^2.3.1", + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "prop-types": "^15.5.6", + "warning": "^3.0.0" + }, + "dependencies": { + "history": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-3.3.0.tgz", + "integrity": "sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw=", + "requires": { + "invariant": "^2.2.1", + "loose-envify": "^1.2.0", + "query-string": "^4.2.2", + "warning": "^3.0.0" + } + }, + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "react-select": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-1.0.0-rc.10.tgz", + "integrity": "sha1-8Tc0YlD5JVyXn7+iGGCJmSh3I1A=", + "requires": { + "classnames": "^2.2.4", + "prop-types": "^15.5.8", + "react-input-autosize": "^2.0.1" + } + }, + "react-sticky": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/react-sticky/-/react-sticky-6.0.3.tgz", + "integrity": "sha512-LNH4UJlRatOqo29/VHxDZOf6fwbgfgcHO4mkEFvrie5FuaZCSTGtug5R8NGqJ0kSnX8gHw8qZN37FcvnFBJpTQ==", + "requires": { + "prop-types": "^15.5.8", + "raf": "^3.3.0" + } + }, + "react-transition-group": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "requires": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + } + }, + "react-treebeard": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/react-treebeard/-/react-treebeard-3.2.4.tgz", + "integrity": "sha512-TsvdUq2kbLavRXa8k4mmqfPse8HmSA9G9s1SZUtIpiYSccSwa0Tm6miMgx7DZ5gpKofQ+j/3Ua0rjsahM3/FQg==", + "requires": { + "@emotion/core": "^10.0.10", + "@emotion/styled": "^10.0.10", + "deep-equal": "^1.0.1", + "shallowequal": "^1.1.0", + "velocity-react": "^1.4.1" + } + }, + "reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", + "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "requires": { + "lodash": "^4.0.1" + } + }, + "reactn": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/reactn/-/reactn-2.2.4.tgz", + "integrity": "sha512-ROZGocaVrunwcyxmmi7tQWk0/NhersX55Zh0yInDXxD2sc7L4iriSu6oG0Cmq2QcwfEJTFXIEL+ASBpDgAYywQ==", + "requires": { + "use-force-update": "^1.0.5" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "redux": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", + "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-pathname": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", + "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.1.tgz", + "integrity": "sha512-IQ4ikL8SjBiEDZfk+DFVwqRK8md24RWMEJkdSlgNLkyyAImcjf8SWvU1qFMDOb4igBClbTQ/ugPqXcRwdFTxZw==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scheduler": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "dev": true, + "requires": { + "node-forge": "0.9.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^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=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdy": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "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" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "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" + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.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" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "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==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.7.tgz", + "integrity": "sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "tinycolor2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", + "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.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=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tslib": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-styles": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", + "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.21", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", + "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==" + }, + "uncontrollable": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-5.1.0.tgz", + "integrity": "sha512-5FXYaFANKaafg4IVZXUNtGyzsnYEvqlr9wQ3WpZxFpEUxl29A3H6Q4G1Dnnorvq9TGOGATBApWR4YpLAh+F5hw==", + "requires": { + "invariant": "^2.2.4" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "use-force-update": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/use-force-update/-/use-force-update-1.0.7.tgz", + "integrity": "sha512-k5dppYhO+I5X/cd7ildbrzeMZJkWwdAh5adaIk0qKN2euh7J0h2GBGBcB4QZ385eyHHnp7LIygvebdRx3XKdwA==" + }, + "use-memo-one": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.1.tgz", + "integrity": "sha512-oFfsyun+bP7RX8X2AskHNTxu+R3QdE/RC5IefMbqptmACAA/gfol1KDD5KRzPsGMa62sWxGZw+Ui43u6x4ddoQ==" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, + "value-equal": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", + "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "velocity-animate": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/velocity-animate/-/velocity-animate-1.5.2.tgz", + "integrity": "sha512-m6EXlCAMetKztO1ppBhGU1/1MR3IiEevO6ESq6rcrSQ3Q77xYSW13jkfXW88o4xMrkXJhy/U7j4wFR/twMB0Eg==" + }, + "velocity-react": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/velocity-react/-/velocity-react-1.4.3.tgz", + "integrity": "sha512-zvefGm85A88S3KdF9/dz5vqyFLAiwKYlXGYkHH2EbXl+CZUD1OT0a0aS1tkX/WXWTa/FUYqjBaAzAEFYuSobBQ==", + "requires": { + "lodash": "^4.17.5", + "prop-types": "^15.5.8", + "react-transition-group": "^2.0.0", + "velocity-animate": "^1.4.0" + } + }, + "vis": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/vis/-/vis-4.21.0.tgz", + "integrity": "sha1-3XFji/9/ZJXQC8n0DCU1JhM97Ws=", + "requires": { + "emitter-component": "^1.1.1", + "hammerjs": "^2.0.8", + "keycharm": "^0.2.0", + "moment": "^2.18.1", + "propagating-hammerjs": "^1.4.6" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.33.0.tgz", + "integrity": "sha512-ggWMb0B2QUuYso6FPZKUohOgfm+Z0sVFs8WwWuSH1IAvkWs428VDNmOlAxvHGTB9Dm/qOB/qtE5cRx5y01clxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.0.5", + "acorn-dynamic-import": "^4.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^1.0.0", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" + } + }, + "webpack-cli": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.2.tgz", + "integrity": "sha512-FLkobnaJJ+03j5eplxlI0TUxhGCOdfewspIGuvDVtpOlrAuKMFC57K42Ukxqs1tn8947/PM6tP95gQc0DCzRYA==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.0", + "findup-sync": "^2.0.0", + "global-modules": "^1.0.0", + "import-local": "^2.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.5.0", + "v8-compile-cache": "^2.0.2", + "yargs": "^12.0.5" + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.6.0.tgz", + "integrity": "sha512-49CWhocbMzjNW2Dzo3ETnxtzifcKGx4Pa3Hx+sl0hBU5/t7zJTkOvMP1sCnu9/qGNDYW1PKCuszYQn5r2g5Sww==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.6", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "^0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "killable": "^1.0.1", + "loglevel": "^1.6.2", + "opn": "^5.5.0", + "portfinder": "^1.0.20", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.4", + "semver": "^6.1.1", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "^4.0.0", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.0", + "webpack-log": "^2.0.0", + "yargs": "12.0.5" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "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==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", + "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", + "requires": { + "@babel/runtime": "^7.8.7" + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} diff --git a/study/package.json b/study/package.json new file mode 100644 index 00000000000..3aee7de5e4c --- /dev/null +++ b/study/package.json @@ -0,0 +1,45 @@ +{ + "name": "study", + "version": "0.0.1", + "private": true, + "scripts": { + "setup": "npm install", + "build": "npm run clean && better-npm-run build:prod", + "start": "better-npm-run build:watch", + "build-prod": "npm run build", + "clean": "better-npm-run clean" + }, + "betterScripts": { + "build:watch": { + "command": "webpack-dev-server --config ../webpack/dev.config.js", + "env": { + "LK_MODULE": "study", + "NODE_ENV": "development" + } + }, + "build:prod": { + "command": "webpack --config ../webpack/prod.config.js --progress --profile --colors", + "env": { + "LK_MODULE": "study", + "NODE_ENV": "production" + } + }, + "clean": { + "command": "rimraf resources/web/query/gen && rimraf resources/views/datasetDesigner*" + } + }, + "dependencies": { + "@labkey/components": "0.35.0" + }, + "devDependencies": { + "@hot-loader/react-dom": "16.9.0", + "@types/react-hot-loader": "4.1.0", + "better-npm-run": "0.1.1", + "react-hot-loader": "4.8.8", + "rimraf": "3.0.1", + "webpack": "4.33.0", + "webpack-cli": "3.3.2", + "webpack-dev-server": "3.6.0" + }, + "typings": "./src/client/typings/main.d.ts" +} diff --git a/study/src/client/DatasetDesigner/DatasetDesigner.tsx b/study/src/client/DatasetDesigner/DatasetDesigner.tsx new file mode 100644 index 00000000000..a4291c2e983 --- /dev/null +++ b/study/src/client/DatasetDesigner/DatasetDesigner.tsx @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2020 LabKey Corporation + * + * Licensed 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. + */ + +import React, {PureComponent} from "react"; +import {LoadingSpinner} from "@labkey/components"; + + +export class App extends PureComponent { + constructor(props) { + super(props); + } + + render() { + return ( + + ) + } +} \ No newline at end of file diff --git a/study/src/client/DatasetDesigner/app.tsx b/study/src/client/DatasetDesigner/app.tsx new file mode 100644 index 00000000000..c112cbdfd62 --- /dev/null +++ b/study/src/client/DatasetDesigner/app.tsx @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2020 LabKey Corporation + * + * Licensed 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. + */ +import * as React from 'react' +import * as ReactDOM from 'react-dom' +import { App } from './DatasetDesigner' + +// Need to wait for container element to be available in labkey wrapper before render +window.addEventListener('DOMContentLoaded', (event) => { + ReactDOM.render(, document.getElementById('app')); +}); + diff --git a/study/src/client/DatasetDesigner/dev.tsx b/study/src/client/DatasetDesigner/dev.tsx new file mode 100644 index 00000000000..f52fbd39fd0 --- /dev/null +++ b/study/src/client/DatasetDesigner/dev.tsx @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2020 LabKey Corporation + * + * Licensed 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. + */ +import * as React from 'react' +import * as ReactDOM from 'react-dom' +import { AppContainer } from 'react-hot-loader' + +import { App } from './DatasetDesigner' + +const render = () => { + ReactDOM.render( + + + , + document.getElementById('app') + ) +}; + +declare const module: any; + +if (module.hot) { + module.hot.accept(); +} + + +render(); \ No newline at end of file diff --git a/study/src/client/entryPoints.js b/study/src/client/entryPoints.js new file mode 100644 index 00000000000..998248b6cb3 --- /dev/null +++ b/study/src/client/entryPoints.js @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2020 LabKey Corporation + * + * Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 + */ +module.exports = { + apps: [{ + name: 'datasetDesigner', + title: 'Dataset Designer', + permission: 'admin', // this is admin so that direct access to this view has highest level perm, see StudyController.Action for main usage + path: './src/client/DatasetDesigner' + }] +}; \ No newline at end of file diff --git a/study/src/client/typings/main.d.ts b/study/src/client/typings/main.d.ts new file mode 100644 index 00000000000..6decdb61b39 --- /dev/null +++ b/study/src/client/typings/main.d.ts @@ -0,0 +1,7 @@ +type LabKey = { + container: any + contextPath: string +}; + +/* App globals */ +declare const LABKEY: LabKey; \ No newline at end of file diff --git a/study/src/org/labkey/study/controllers/StudyController.java b/study/src/org/labkey/study/controllers/StudyController.java index e57891b90ea..c4148ea9d28 100644 --- a/study/src/org/labkey/study/controllers/StudyController.java +++ b/study/src/org/labkey/study/controllers/StudyController.java @@ -463,13 +463,8 @@ public boolean handlePost(ImportTypeForm form, BindException derrors) else _def = AssayPublishManager.getInstance().createAssayDataset(getUser(), getStudyThrowIfNull(), form.getTypeName(), null, datasetId, false, null); - - if (_def != null) - { - ((DatasetDefinition)_def).provisionTable(); - return true; - } - return false; + ((DatasetDefinition)_def).provisionTable(); + return true; } @Override diff --git a/study/tsconfig.json b/study/tsconfig.json new file mode 100644 index 00000000000..c8218b2c5d0 --- /dev/null +++ b/study/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "exclude": [ + "node_modules", + "resources" + ] +} From bb91bd0c7e523a88b41922c7c87845e51f94df0b Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Wed, 1 Apr 2020 16:29:20 -0700 Subject: [PATCH 02/73] Work on moving functionality to DatasetDomainKind --- .../org/labkey/api/study/StudyService.java | 9 + core/package-lock.json | 2 +- .../experiment/api/DataClassDomainKind.java | 2 +- .../DatasetDesigner/DatasetDesigner.tsx | 17 ++ study/src/org/labkey/study/StudyModule.java | 4 +- .../study/controllers/StudyController.java | 96 ++++---- .../labkey/study/model/DatasetDomainKind.java | 127 +++++++++- .../model/DatasetDomainKindProperties.java | 217 ++++++++++++++++++ .../labkey/study/model/DatasetManager.java | 30 +++ .../org/labkey/study/model/StudyManager.java | 3 +- 10 files changed, 461 insertions(+), 46 deletions(-) create mode 100644 study/src/org/labkey/study/model/DatasetDomainKindProperties.java diff --git a/api/src/org/labkey/api/study/StudyService.java b/api/src/org/labkey/api/study/StudyService.java index fb0f40cfc10..2502a2b1bbf 100644 --- a/api/src/org/labkey/api/study/StudyService.java +++ b/api/src/org/labkey/api/study/StudyService.java @@ -28,6 +28,8 @@ import org.labkey.api.dataiterator.DataIteratorContext; import org.labkey.api.exp.api.ExpProtocol; import org.labkey.api.exp.api.ExpRun; +import org.labkey.api.gwt.client.model.GWTDomain; +import org.labkey.api.gwt.client.model.GWTPropertyDescriptor; import org.labkey.api.pipeline.PipeRoot; import org.labkey.api.pipeline.PipelineJob; import org.labkey.api.query.QuerySchema; @@ -88,6 +90,13 @@ static StudyService get() */ Dataset createDataset(Container container, User user, String name, @Nullable Integer datasetId, boolean isDemographic); + // todo RP +// ValidationException updateDataset(@NotNull Container c, @NotNull User u, @NotNull Dataset dataset, +// @Nullable DatasetDomainKindProperties options, +// GWTDomain original, +// GWTDomain update); +// + /** * Finds a study by either Container id or study label. * @param studyReference Container instance, GUID instance, or String representing container id, container path, or study label. diff --git a/core/package-lock.json b/core/package-lock.json index 8fc58f54e4c..c0b8a676efe 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -11009,7 +11009,7 @@ }, "rgba-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, diff --git a/experiment/src/org/labkey/experiment/api/DataClassDomainKind.java b/experiment/src/org/labkey/experiment/api/DataClassDomainKind.java index c526d573ec8..50902048acd 100644 --- a/experiment/src/org/labkey/experiment/api/DataClassDomainKind.java +++ b/experiment/src/org/labkey/experiment/api/DataClassDomainKind.java @@ -308,7 +308,7 @@ public UpdateableTableInfo.ObjectUriType getObjectUriColumn() @Override public DataClassDomainKindProperties getDomainKindProperties(@NotNull GWTDomain domain, Container container, User user) { - ExpDataClass dc = ExperimentService.get().getDataClass(domain.getDomainURI()); + ExpDataClass dc = ExperimentService.get().getDataClass(domain.getDomainURI()); // bookmark. Check out studyservice return new DataClassDomainKindProperties(dc); } } diff --git a/study/src/client/DatasetDesigner/DatasetDesigner.tsx b/study/src/client/DatasetDesigner/DatasetDesigner.tsx index a4291c2e983..add162bfe5b 100644 --- a/study/src/client/DatasetDesigner/DatasetDesigner.tsx +++ b/study/src/client/DatasetDesigner/DatasetDesigner.tsx @@ -16,6 +16,7 @@ import React, {PureComponent} from "react"; import {LoadingSpinner} from "@labkey/components"; +import { ActionURL, Ajax, Utils } from "@labkey/api"; export class App extends PureComponent { @@ -24,6 +25,22 @@ export class App extends PureComponent { } render() { + const datasetId = 5004; + Ajax.request({ + url: ActionURL.buildURL('study', 'GetDataset'), + method: 'GET', + params: {datasetId}, + scope: this, + success: Utils.getCallbackWrapper((data) => { + console.log("success", data); + // resolve(console.log("success", data)); + }), + failure: Utils.getCallbackWrapper((error) => { + console.log("failure", error); + // reject(error); + }) + }); + return ( ) diff --git a/study/src/org/labkey/study/StudyModule.java b/study/src/org/labkey/study/StudyModule.java index b5580ffb5a9..905df18971c 100644 --- a/study/src/org/labkey/study/StudyModule.java +++ b/study/src/org/labkey/study/StudyModule.java @@ -402,6 +402,7 @@ protected void startupAfterSpringConfig(ModuleContext moduleContext) "Adds a button to the specimen request details page that creates a new child study containing the selected specimens, associated participants, and selected datasets.", false); AdminConsole.addExperimentalFeatureFlag(StudyQuerySchema.EXPERIMENTAL_STUDY_SUBSCHEMAS, "Use sub-schemas in Study", "Separate study tables into three groups 'datasets', 'specimens', and 'design'", false); + AdminConsole.addExperimentalFeatureFlag(StudyManager.EXPERIMENTAL_DATASET_DESIGNER, "Dataset Designer", "Displays remodeled Dataset Designer page.", false); ReportAndDatasetChangeDigestProvider.get().addNotificationInfoProvider(new DatasetNotificationInfoProvider()); @@ -766,7 +767,7 @@ public JSONObject getPageContextJson(ContainerUser context) { Container c = context.getContainer(); Map moduleProperties = getDefaultPageContextJson(c); - Study study = StudyManager.getInstance().getStudy(c); + StudyImpl study = StudyManager.getInstance().getStudy(c); StudyService studyService = StudyService.get(); JSONObject ret = new JSONObject(moduleProperties); @@ -780,6 +781,7 @@ public JSONObject getPageContextJson(ContainerUser context) ret.put("subject", subject); ret.put("timepointType", study.getTimepointType().name()); + ret.put("studyId", study.getRowId()); } return ret; diff --git a/study/src/org/labkey/study/controllers/StudyController.java b/study/src/org/labkey/study/controllers/StudyController.java index c4148ea9d28..1022e8567ad 100644 --- a/study/src/org/labkey/study/controllers/StudyController.java +++ b/study/src/org/labkey/study/controllers/StudyController.java @@ -31,25 +31,7 @@ import org.jetbrains.annotations.Nullable; import org.json.JSONArray; import org.json.JSONObject; -import org.labkey.api.action.ApiResponse; -import org.labkey.api.action.ApiSimpleResponse; -import org.labkey.api.action.ConfirmAction; -import org.labkey.api.action.CustomApiForm; -import org.labkey.api.action.FormApiAction; -import org.labkey.api.action.FormHandlerAction; -import org.labkey.api.action.FormViewAction; -import org.labkey.api.action.GWTServiceAction; -import org.labkey.api.action.HasViewContext; -import org.labkey.api.action.Marshal; -import org.labkey.api.action.Marshaller; -import org.labkey.api.action.MutatingApiAction; -import org.labkey.api.action.QueryViewAction; -import org.labkey.api.action.ReturnUrlForm; -import org.labkey.api.action.SimpleApiJsonForm; -import org.labkey.api.action.SimpleErrorView; -import org.labkey.api.action.SimpleRedirectAction; -import org.labkey.api.action.SimpleViewAction; -import org.labkey.api.action.SpringActionController; +import org.labkey.api.action.*; import org.labkey.api.admin.AdminUrls; import org.labkey.api.admin.ImportException; import org.labkey.api.admin.ImportOptions; @@ -76,6 +58,8 @@ import org.labkey.api.exp.property.Domain; import org.labkey.api.gwt.server.BaseRemoteService; import org.labkey.api.module.FolderTypeManager; +import org.labkey.api.module.ModuleHtmlView; +import org.labkey.api.module.ModuleLoader; import org.labkey.api.pipeline.PipeRoot; import org.labkey.api.pipeline.PipelineJob; import org.labkey.api.pipeline.PipelineService; @@ -138,6 +122,7 @@ import org.labkey.api.security.permissions.QCAnalystPermission; import org.labkey.api.security.permissions.ReadPermission; import org.labkey.api.security.permissions.UpdatePermission; +import org.labkey.api.settings.AppProps; import org.labkey.api.study.Dataset; import org.labkey.api.study.Dataset.KeyManagementType; import org.labkey.api.study.MasterPatientIndexService; @@ -420,10 +405,18 @@ protected void renderInternal(Object model, PrintWriter out) throws Exception public class DefineDatasetTypeAction extends FormViewAction { private Dataset _def; + boolean experimentalFlagEnabled = AppProps.getInstance().isExperimentalFeatureEnabled(StudyManager.EXPERIMENTAL_DATASET_DESIGNER); @Override public ModelAndView getView(ImportTypeForm form, boolean reshow, BindException errors) { - return new StudyJspView<>(getStudyRedirectIfNull(), "importDataType.jsp", form, errors); + if (experimentalFlagEnabled) + { + return ModuleHtmlView.get(ModuleLoader.getInstance().getModule("study"), "datasetDesigner"); + } + else + { + return new StudyJspView<>(getStudyRedirectIfNull(), "importDataType.jsp", form, errors); + } } @Override @@ -495,17 +488,33 @@ public NavTree appendNavTrail(NavTree root) } } + @Marshal(Marshaller.Jackson) + @RequiresPermission(ReadPermission.class) + public class GetDatasetAction extends ReadOnlyApiAction + { + @Override + public Object execute(DatasetForm form, BindException errors) throws Exception + { + DatasetDomainKindProperties properties = DatasetManager.get().getDatasetDomainKindProperties(getContainer(), form.getDatasetId()); + if (properties != null) + return properties; + else + throw new NotFoundException("Dataset does not exist in this container for datasetId " + form.getDatasetIdStr() + "."); + } + } + @RequiresPermission(AdminPermission.class) @SuppressWarnings("unchecked") public class EditTypeAction extends SimpleViewAction { private Dataset _def; + boolean experimentalFlagEnabled = AppProps.getInstance().isExperimentalFeatureEnabled(StudyManager.EXPERIMENTAL_DATASET_DESIGNER); @Override public ModelAndView getView(DatasetForm form, BindException errors) { StudyImpl study = getStudyRedirectIfNull(); - DatasetDefinition def = study.getDataset(form.getDatasetId()); + DatasetDefinition def = study.getDataset(form.getDatasetId()); //bookmark _def = def; if (null == def) { @@ -516,31 +525,38 @@ public ModelAndView getView(DatasetForm form, BindException errors) ActionURL details = new ActionURL(DatasetDetailsAction.class,getContainer()).addParameter("id",def.getDatasetId()); throw new RedirectException(details); } - if (null == def.getTypeURI()) + if (experimentalFlagEnabled) { - def = def.createMutable(); - String domainURI = StudyManager.getInstance().getDomainURI(study.getContainer(), getUser(), def); - OntologyManager.ensureDomainDescriptor(domainURI, def.getName(), study.getContainer()); - def.setTypeURI(domainURI); + return ModuleHtmlView.get(ModuleLoader.getInstance().getModule("study"), "datasetDesigner"); } - Map props = PageFlowUtil.map( - "studyId", ""+study.getRowId(), - "datasetId", ""+form.getDatasetId(), - "typeURI", def.getTypeURI(), - "timepointType", ""+study.getTimepointType(), - ActionURL.Param.returnUrl.name(), new ActionURL(DatasetDetailsAction.class, getContainer()).addParameter("id", form.getDatasetId()).toString()); + else + { + if (null == def.getTypeURI()) + { + def = def.createMutable(); + String domainURI = StudyManager.getInstance().getDomainURI(study.getContainer(), getUser(), def); + OntologyManager.ensureDomainDescriptor(domainURI, def.getName(), study.getContainer()); + def.setTypeURI(domainURI); + } + Map props = PageFlowUtil.map( + "studyId", ""+study.getRowId(), + "datasetId", ""+form.getDatasetId(), + "typeURI", def.getTypeURI(), + "timepointType", ""+study.getTimepointType(), + ActionURL.Param.returnUrl.name(), new ActionURL(DatasetDetailsAction.class, getContainer()).addParameter("id", form.getDatasetId()).toString()); - String cancelUrl = getViewContext().getActionURL().getParameter(ActionURL.Param.cancelUrl.name()); - if (cancelUrl != null) - props.put(ActionURL.Param.cancelUrl.name(), cancelUrl); + String cancelUrl = getViewContext().getActionURL().getParameter(ActionURL.Param.cancelUrl.name()); + if (cancelUrl != null) + props.put(ActionURL.Param.cancelUrl.name(), cancelUrl); - HtmlView text = new HtmlView("Modify the properties and schema (form fields/properties) for this dataset."); - HttpView view = new StudyGWTView(Designer.class, props); + HtmlView text = new HtmlView("Modify the properties and schema (form fields/properties) for this dataset."); + HttpView view = new StudyGWTView(Designer.class, props); - // hack for 4404 : Lookup picker performance is terrible when there are many containers - ContainerManager.getAllChildren(ContainerManager.getRoot()); + // hack for 4404 : Lookup picker performance is terrible when there are many containers + ContainerManager.getAllChildren(ContainerManager.getRoot()); - return new VBox(text, view); + return new VBox(text, view); + } } @Override diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 4662977f4b3..cad09d6d160 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -30,35 +30,45 @@ import org.labkey.api.data.TableInfo; import org.labkey.api.exp.Lsid; import org.labkey.api.exp.PropertyDescriptor; +import org.labkey.api.exp.PropertyType; import org.labkey.api.exp.TemplateInfo; import org.labkey.api.exp.api.ExperimentService; +import org.labkey.api.exp.property.AbstractDomainKind; import org.labkey.api.exp.property.BaseAbstractDomainKind; import org.labkey.api.exp.property.Domain; import org.labkey.api.exp.property.DomainProperty; import org.labkey.api.exp.property.DomainUtil; +import org.labkey.api.exp.property.PropertyService; import org.labkey.api.gwt.client.model.GWTDomain; import org.labkey.api.gwt.client.model.GWTIndex; import org.labkey.api.gwt.client.model.GWTPropertyDescriptor; +import org.labkey.api.query.ValidationException; import org.labkey.api.reports.model.ViewCategory; import org.labkey.api.reports.model.ViewCategoryManager; +import org.labkey.api.security.SettingsField; import org.labkey.api.security.User; import org.labkey.api.security.permissions.AdminPermission; import org.labkey.api.study.Dataset; import org.labkey.api.study.Dataset.KeyManagementType; import org.labkey.api.study.Study; +import org.labkey.api.study.StudyService; import org.labkey.api.study.TimepointType; import org.labkey.api.view.ActionURL; import org.labkey.api.view.NotFoundException; import org.labkey.api.writer.ContainerUser; import org.labkey.study.StudySchema; +import org.labkey.study.StudyServiceImpl; import org.labkey.study.assay.AssayPublishManager; +import org.labkey.study.controllers.DatasetServiceImpl; import org.labkey.study.controllers.StudyController; import org.labkey.study.query.DatasetTableImpl; import org.labkey.study.query.StudyQuerySchema; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -69,7 +79,7 @@ * Date: May 4, 2007 * Time: 1:01:43 PM */ -public abstract class DatasetDomainKind extends BaseAbstractDomainKind +public abstract class DatasetDomainKind extends AbstractDomainKind { public final static String LSID_PREFIX = "StudyDataset"; @@ -244,7 +254,7 @@ public boolean showDefaultValueSettings() DatasetDefinition getDatasetDefinition(String domainURI) { - return StudyManager.getInstance().getDatasetDefinition(domainURI); + return StudyManager.getInstance().getDatasetDefinition(domainURI); // bookmark } @@ -435,6 +445,119 @@ else if (categoryId != null) } } + // todo rp: should these two helper functions be moved somewhere else? + private ValidationException checkCanUpdate(Dataset ds, ValidationException exception, Container container, int datasetId, User user, GWTDomain original, GWTDomain update) + { + if (!container.hasPermission(user, AdminPermission.class)) + return exception.addGlobalError("Unauthorized"); + + Study study = StudyService.get().getStudy(container); + if (null == study) + return exception.addGlobalError("Study not found in current container"); + + DatasetDefinition def = (DatasetDefinition)study.getDataset(datasetId); + if (null == def) + return exception.addGlobalError("Dataset not found"); + + if (!def.canUpdateDefinition(user)) + return exception.addGlobalError("Shared dataset can not be edited in this folder."); + + + Domain d = PropertyService.get().getDomain(container, update.getDomainURI()); + if (null == d) + return exception.addGlobalError("Domain not found: " + update.getDomainURI()); + + if (!ds.getTypeURI().equals(original.getDomainURI()) || + !ds.getTypeURI().equals(update.getDomainURI())) + return exception.addGlobalError("Illegal Argument"); + + return exception; + } + +// in progress +// private ValidationException updateDataset(Dataset ds, String domainURI) +// { +// try +// { +// DatasetDefinition def = ds +// +// } +// } + + @Override + public ValidationException updateDomain(GWTDomain original, GWTDomain update, + DatasetDomainKindProperties datasetProperties, Container container, User user, boolean includeWarnings) + { + assert original.getDomainURI().equals(update.getDomainURI()); + ValidationException exception; + + int datasetId = StudyService.get().getDatasetIdByName(container, original.getName()); + Dataset ds = StudyService.get().getDataset(container, datasetId); + + // temp notes: error checking -- from checkCanUpdate and updateDatasetDefinition + exception = new ValidationException(); + if (checkCanUpdate(ds, exception, container, datasetId, user, original, update).hasGlobalErrors()) + return exception; + + // Remove any fields that are duplicates of the default dataset fields. + // e.g. participantid, etc. + + List updatedProps = update.getFields(); + + for (Iterator iter = updatedProps.iterator(); iter.hasNext();) + { + // in progress +// GWTPropertyDescriptor prop = iter.next(); +// if (DatasetDefinition.isDefaultFieldName(prop.getName(), study)) // oh boy +// iter.remove(); +// else if (DatasetDomainKind.DATE.equalsIgnoreCase(prop.getName())) +// prop.setRangeURI(PropertyType.DATE_TIME.getTypeUri()); + } +// update.setFields(updatedProps); // oh boy + + try (DbScope.Transaction transaction = StudySchema.getInstance().getScope().ensureTransaction()) + { + if (ds instanceof DatasetDefinition) + { + // + DatasetDefinition dsd = (DatasetDefinition) ds; + +// if (!exception.hasErrors()) +// ds.getSt +// +// DatasetDefinition def = +// +// transaction.commit(); + + } + + + return exception; + } + + + + + + + + // DatasetServiceImpl datasetService = new DatasetServiceImpl() + + + + + // check for errors. Can use ListDomainKind.updateDomain() and ExperimentServiceImp.updateDataClass() as examples for errors to catch. + // if there are any errors, return the exception instead of continuing with save. + + // update properties -- if it's not null, pass to an updateDatasetProperties helper function, which will fetch the existing properties from the table, + // merge the properties to obtain the updated ListDomainKindProperties, and then call DatasetManager's update(). (Use ListManager.update as example) + + // update domain design. List has example in ListDomainKind, line 511. Don't really understand how it's happening in Dataclass, while looking at updateDataClass() + + + + } + @Override public void deleteDomain(User user, Domain domain) { diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java new file mode 100644 index 00000000000..4cf7a98f504 --- /dev/null +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -0,0 +1,217 @@ +package org.labkey.study.model; + +import org.labkey.api.reports.model.ViewCategory; +import org.labkey.api.study.Dataset; + +public class DatasetDomainKindProperties +{ + protected int _datasetId; + protected String _name; + protected String _description; + protected ViewCategory _category; + protected String _label; + + protected String _typeURI; + protected String _visitDatePropertyName; + protected String _keyPropertyName; + protected Dataset.KeyManagementType _keyPropertyManaged; + protected boolean _isDemographicData; + protected int _cohortId; + protected String _tag; + protected boolean _showByDefault = true; + protected String _sourceAssayName; + protected String _sourceAssayUrl; + protected String _dataSharing; // todo RP: to finalize + + public DatasetDomainKindProperties() + { + } + + public DatasetDomainKindProperties(Dataset ds) + { + _datasetId = ds.getDatasetId(); + _name = ds.getName(); + _description = ds.getDescription(); + _category = ds.getViewCategory(); + _label = ds.getLabel(); + _typeURI = ds.getTypeURI(); + _visitDatePropertyName = ds.getKeyPropertyName(); // Check if this is correct + _keyPropertyName = ds.getKeyPropertyName(); + _keyPropertyManaged = ds.getKeyManagementType(); // what is this? + _isDemographicData = ds.isDemographicData(); + + _cohortId = 1; + _tag = ""; // what is this? + _showByDefault = true; // make this + _sourceAssayName = "name"; + _sourceAssayUrl = "url"; + _dataSharing = "whelp"; + +// _cohortId = ds.getCohortId(); +// _tag = ds._tag; // what is this? +// _showByDefault = ds._showByDefault; // make this +// _sourceAssayName = ds._sourceAssayName; +// _sourceAssayUrl = ds._sourceAssayUrl; +// _dataSharing = ds.getData; + } + + public int getDatasetId() + { + return _datasetId; + } + + public void setDatasetId(int datasetId) + { + _datasetId = datasetId; + } + + public String getName() + { + return _name; + } + + public void setName(String name) + { + _name = name; + } + + public String getDescription() + { + return _description; + } + + public void setDescription(String description) + { + _description = description; + } + + public ViewCategory getCategory() + { + return _category; + } + + public void setCategory(ViewCategory category) + { + _category = category; + } + + public String getLabel() + { + return _label; + } + + public void setLabel(String label) + { + _label = label; + } + + public String getTypeURI() + { + return _typeURI; + } + + public void setTypeURI(String typeURI) + { + _typeURI = typeURI; + } + + public String getVisitDatePropertyName() + { + return _visitDatePropertyName; + } + + public void setVisitDatePropertyName(String visitDatePropertyName) + { + _visitDatePropertyName = visitDatePropertyName; + } + + public String getKeyPropertyName() + { + return _keyPropertyName; + } + + public void setKeyPropertyName(String keyPropertyName) + { + _keyPropertyName = keyPropertyName; + } + + public Dataset.KeyManagementType isKeyPropertyManaged() + { + return _keyPropertyManaged; + } + + public void setKeyPropertyManaged(Dataset.KeyManagementType keyPropertyManaged) + { + _keyPropertyManaged = keyPropertyManaged; + } + + public boolean isDemographicData() + { + return _isDemographicData; + } + + public void setDemographicData(boolean demographicData) + { + _isDemographicData = demographicData; + } + + public int getCohortId() + { + return _cohortId; + } + + public void setCohortId(int cohortId) + { + _cohortId = cohortId; + } + + public String getTag() + { + return _tag; + } + + public void setTag(String tag) + { + _tag = tag; + } + + public boolean isShowByDefault() + { + return _showByDefault; + } + + public void setShowByDefault(boolean showByDefault) + { + _showByDefault = showByDefault; + } + + public String getSourceAssayName() + { + return _sourceAssayName; + } + + public void setSourceAssayName(String sourceAssayName) + { + _sourceAssayName = sourceAssayName; + } + + public String getSourceAssayUrl() + { + return _sourceAssayUrl; + } + + public void setSourceAssayUrl(String sourceAssayUrl) + { + _sourceAssayUrl = sourceAssayUrl; + } + + public String getDataSharing() + { + return _dataSharing; + } + + public void setDataSharing(String dataSharing) + { + _dataSharing = dataSharing; + } +} diff --git a/study/src/org/labkey/study/model/DatasetManager.java b/study/src/org/labkey/study/model/DatasetManager.java index 76195231a65..6f114f30a59 100644 --- a/study/src/org/labkey/study/model/DatasetManager.java +++ b/study/src/org/labkey/study/model/DatasetManager.java @@ -15,6 +15,7 @@ */ package org.labkey.study.model; +import org.labkey.api.data.Container; import org.labkey.api.study.Dataset; import java.util.List; @@ -30,6 +31,8 @@ public class DatasetManager // Thread-safe list implementation that allows iteration and modifications without external synchronization private static final List _listeners = new CopyOnWriteArrayList<>(); + private static final DatasetManager INSTANCE = new DatasetManager(); + public static void addDatasetListener(DatasetListener listener) { _listeners.add(listener); @@ -40,6 +43,33 @@ public static List getListeners() return _listeners; } + public static DatasetManager get () + { + return INSTANCE; + } + + // todo rp + public DatasetDomainKindProperties getDatasetDomainKindProperties(Container container, Integer datasetId) + { + if (null == datasetId) + { + return new DatasetDomainKindProperties(); + } + else + { +// filter for our given datasetId + +// create DatasetDomainKindProperties from what is found + StudyImpl study = StudyManager.getInstance().getStudy(container); + Dataset fuck = StudyManager.getInstance().getDatasetDefinition(study, datasetId); + + + + return new DatasetDomainKindProperties(fuck); + } + + } + public interface DatasetListener { void datasetChanged(Dataset def); diff --git a/study/src/org/labkey/study/model/StudyManager.java b/study/src/org/labkey/study/model/StudyManager.java index c5aa281e246..3f5c5e5b3a8 100644 --- a/study/src/org/labkey/study/model/StudyManager.java +++ b/study/src/org/labkey/study/model/StudyManager.java @@ -191,6 +191,7 @@ public class StudyManager { public static final SearchService.SearchCategory datasetCategory = new SearchService.SearchCategory("dataset", "Study Dataset"); public static final SearchService.SearchCategory subjectCategory = new SearchService.SearchCategory("subject", "Study Subject"); + public static final String EXPERIMENTAL_DATASET_DESIGNER = "experimental-reactdesigner"; private static final Logger _log = Logger.getLogger(StudyManager.class); private static final StudyManager _instance = new StudyManager(); @@ -2441,7 +2442,7 @@ public Set getSharedProperties(Study study) @Nullable - public DatasetDefinition getDatasetDefinition(Study s, int id) + public DatasetDefinition getDatasetDefinition(Study s, int id) // bookmark { DatasetDefinition ds = _datasetHelper.get(s.getContainer(), id); // update old rows w/o entityid From d27f87c7c72f2f5fd90e6803b7ed7d5eb9e6e25a Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Mon, 6 Apr 2020 18:39:32 -0700 Subject: [PATCH 03/73] Progress on managers, DDK, and DDKP --- .../dataset/client/model/GWTDataset.java | 2 +- .../labkey/study/model/DatasetDomainKind.java | 224 +++++++++++++----- .../model/DatasetDomainKindProperties.java | 34 ++- .../labkey/study/model/DatasetManager.java | 4 +- 4 files changed, 181 insertions(+), 83 deletions(-) diff --git a/study/gwtsrc/gwt/client/org/labkey/study/dataset/client/model/GWTDataset.java b/study/gwtsrc/gwt/client/org/labkey/study/dataset/client/model/GWTDataset.java index 7d8485b334f..4d48881de62 100644 --- a/study/gwtsrc/gwt/client/org/labkey/study/dataset/client/model/GWTDataset.java +++ b/study/gwtsrc/gwt/client/org/labkey/study/dataset/client/model/GWTDataset.java @@ -35,7 +35,7 @@ public class GWTDataset implements IsSerializable private StringProperty _typeURI = new StringProperty(); private StringProperty _category = new StringProperty(); private StringProperty _visitDatePropertyName = new StringProperty(); - private StringProperty _keyPropertyName = new StringProperty(); + private StringProperty _keyPropertyName = new StringProperty();oDCDKP private BooleanProperty _keyPropertyManaged = new BooleanProperty(); private BooleanProperty _isDemographicData = new BooleanProperty(); private StringProperty _label = new StringProperty(); diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index cad09d6d160..82fd89ee30c 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -16,6 +16,7 @@ package org.labkey.study.model; +import org.apache.commons.beanutils.BeanUtils; import org.jetbrains.annotations.Nullable; import org.json.JSONObject; import org.labkey.api.data.BaseColumnInfo; @@ -25,6 +26,7 @@ import org.labkey.api.data.DbScope; import org.labkey.api.data.JdbcType; import org.labkey.api.data.PropertyStorageSpec; +import org.labkey.api.data.RuntimeSQLException; import org.labkey.api.data.SQLFragment; import org.labkey.api.data.SchemaTableInfo; import org.labkey.api.data.TableInfo; @@ -42,10 +44,10 @@ import org.labkey.api.gwt.client.model.GWTDomain; import org.labkey.api.gwt.client.model.GWTIndex; import org.labkey.api.gwt.client.model.GWTPropertyDescriptor; +import org.labkey.api.query.QueryService; import org.labkey.api.query.ValidationException; import org.labkey.api.reports.model.ViewCategory; import org.labkey.api.reports.model.ViewCategoryManager; -import org.labkey.api.security.SettingsField; import org.labkey.api.security.User; import org.labkey.api.security.permissions.AdminPermission; import org.labkey.api.study.Dataset; @@ -53,13 +55,12 @@ import org.labkey.api.study.Study; import org.labkey.api.study.StudyService; import org.labkey.api.study.TimepointType; +import org.labkey.api.util.UnexpectedException; import org.labkey.api.view.ActionURL; import org.labkey.api.view.NotFoundException; import org.labkey.api.writer.ContainerUser; import org.labkey.study.StudySchema; -import org.labkey.study.StudyServiceImpl; import org.labkey.study.assay.AssayPublishManager; -import org.labkey.study.controllers.DatasetServiceImpl; import org.labkey.study.controllers.StudyController; import org.labkey.study.query.DatasetTableImpl; import org.labkey.study.query.StudyQuerySchema; @@ -74,6 +75,8 @@ import java.util.Set; import java.util.stream.Collectors; +import static org.labkey.study.controllers.BaseStudyController.getStudy; + /** * User: matthewb * Date: May 4, 2007 @@ -168,6 +171,11 @@ protected DatasetDomainKind() abstract public String getKindName(); + @Override + public Class getTypeClass() + { + return DatasetDomainKindProperties.class; + } public String getTypeLabel(Domain domain) { @@ -324,7 +332,6 @@ public boolean canCreateDefinition(User user, Container container) return container.hasPermission(user, AdminPermission.class); } - @Override public Domain createDomain(GWTDomain domain, JSONObject arguments, Container container, User user, @Nullable TemplateInfo templateInfo) { @@ -446,7 +453,8 @@ else if (categoryId != null) } // todo rp: should these two helper functions be moved somewhere else? - private ValidationException checkCanUpdate(Dataset ds, ValidationException exception, Container container, int datasetId, User user, GWTDomain original, GWTDomain update) + private ValidationException checkCanUpdate(Dataset ds, ValidationException exception, Container container, User user, + GWTDomain original, GWTDomain update) { if (!container.hasPermission(user, AdminPermission.class)) return exception.addGlobalError("Unauthorized"); @@ -455,13 +463,12 @@ private ValidationException checkCanUpdate(Dataset ds, ValidationException excep if (null == study) return exception.addGlobalError("Study not found in current container"); - DatasetDefinition def = (DatasetDefinition)study.getDataset(datasetId); + DatasetDefinition def = (DatasetDefinition)study.getDataset(ds.getDatasetId()); if (null == def) return exception.addGlobalError("Dataset not found"); if (!def.canUpdateDefinition(user)) - return exception.addGlobalError("Shared dataset can not be edited in this folder."); - + return exception.addGlobalError("Shared dataset can not be edited in this folder"); Domain d = PropertyService.get().getDomain(container, update.getDomainURI()); if (null == d) @@ -474,88 +481,181 @@ private ValidationException checkCanUpdate(Dataset ds, ValidationException excep return exception; } -// in progress -// private ValidationException updateDataset(Dataset ds, String domainURI) -// { -// try -// { -// DatasetDefinition def = ds -// -// } -// } - - @Override - public ValidationException updateDomain(GWTDomain original, GWTDomain update, - DatasetDomainKindProperties datasetProperties, Container container, User user, boolean includeWarnings) + private ValidationException updateDomainDescriptor(GWTDomain original, GWTDomain update, + Container container, User user, DatasetDefinition def) { - assert original.getDomainURI().equals(update.getDomainURI()); - ValidationException exception; - - int datasetId = StudyService.get().getDatasetIdByName(container, original.getName()); - Dataset ds = StudyService.get().getDataset(container, datasetId); + ValidationException exception = new ValidationException(); + if (def == null) + exception.addGlobalError("Could not find dataset: " + original.getName()); - // temp notes: error checking -- from checkCanUpdate and updateDatasetDefinition - exception = new ValidationException(); - if (checkCanUpdate(ds, exception, container, datasetId, user, original, update).hasGlobalErrors()) + try + { + List allErrors = DomainUtil.updateDomainDescriptor(original, update, container, user).getAllErrors(); + for (String str : allErrors) { + exception.addGlobalError(str); + } return exception; - - // Remove any fields that are duplicates of the default dataset fields. - // e.g. participantid, etc. - - List updatedProps = update.getFields(); - - for (Iterator iter = updatedProps.iterator(); iter.hasNext();) + } + finally { - // in progress -// GWTPropertyDescriptor prop = iter.next(); -// if (DatasetDefinition.isDefaultFieldName(prop.getName(), study)) // oh boy -// iter.remove(); -// else if (DatasetDomainKind.DATE.equalsIgnoreCase(prop.getName())) -// prop.setRangeURI(PropertyType.DATE_TIME.getTypeUri()); + StudyManager.getInstance().uncache(def); } -// update.setFields(updatedProps); // oh boy + } - try (DbScope.Transaction transaction = StudySchema.getInstance().getScope().ensureTransaction()) + // getdomainkindproperties (or something) should exist here and is the analogy to DatasetServiceImpl.getDataset + +// in progress + private ValidationException updateDataset(DatasetDomainKindProperties datasetProperties, String domainURI, ValidationException exception, StudyManager studyManager, StudyImpl study, Container container, User user, DatasetDefinition def) + { + try { - if (ds instanceof DatasetDefinition) - { - // - DatasetDefinition dsd = (DatasetDefinition) ds; + if (null == def) + return exception.addGlobalError("Dataset not found"); -// if (!exception.hasErrors()) -// ds.getSt -// -// DatasetDefinition def = -// -// transaction.commit(); + // Q: So, I believe the original is validating for, if isDemoData has been toggled on, the ds obeys the constraints of demo ds. + // RP Q: Do we have the old isDemoData in def? + if ( datasetProperties.isDemographicData() && !def.isDemographicData() && !StudyManager.getInstance().isDataUniquePerParticipant(def)) + { + return exception.addGlobalError("This dataset currently contains more than one row of data per " + StudyService.get().getSubjectNounSingular(container) + + ". Demographic data includes one row of data per " + StudyService.get().getSubjectNounSingular(container) + "."); + } + if (datasetProperties.isDemographicData()) + { + datasetProperties.setKeyPropertyName(null); + datasetProperties.setKeyPropertyManaged(false); } + /* IGNORE illegal shareDataset values */ + if (!study.getShareVisitDefinitions()) + datasetProperties.setDataSharing("NONE"); - return exception; - } + // Default is no key management + Dataset.KeyManagementType keyType = Dataset.KeyManagementType.None; + String keyPropertyName = null; + boolean useTimeKeyField = false; + DatasetDefinition updated = def.createMutable(); + // Clear the category ID so that it gets regenerated based on the new string - see issue 19649 + updated.setCategoryId(null); + // Use Time as Key Field + if (DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(datasetProperties.getKeyPropertyName())) + { + datasetProperties.setKeyPropertyName(null); + useTimeKeyField = true; + } + // RP temp notes: copy everything from datasetProperties into updated. Maybe ask if there's a helper for this + BeanUtils.copyProperties(updated, datasetProperties); + if (datasetProperties.getKeyPropertyName() != null) + { + Domain domain = PropertyService.get().getDomain(container, domainURI); + // RP Q: how to guard against this nullpointer? + for (DomainProperty dp : domain.getProperties()) + { + if (dp.getName().equalsIgnoreCase(datasetProperties.getKeyPropertyName())) + { + keyPropertyName = dp.getName(); + // Be sure that the user really wants a managed key, not just that disabled select box still had a value + if (datasetProperties.isKeyPropertyManaged()) + { + keyType = Dataset.KeyManagementType.getManagementTypeFromProp(dp.getPropertyDescriptor().getPropertyType()); + } + break; + } + } + } + updated.setKeyPropertyName(keyPropertyName); + updated.setKeyManagementType(keyType); + updated.setUseTimeKeyField(useTimeKeyField); + if (!def.getLabel().equals(updated.getLabel())) + { + Dataset existing = studyManager.getDatasetDefinitionByLabel(study, updated.getLabel()); + if (existing != null && existing.getDatasetId() != datasetProperties.getDatasetId()) + return exception.addGlobalError("A Dataset or Query already exists with the name \"" + updated.getName() +"\""); + } - // DatasetServiceImpl datasetService = new DatasetServiceImpl() + if (!def.getName().equals(updated.getName())) + { + // issue 17766: check if dataset or query exist with this name + Dataset existing = studyManager.getDatasetDefinitionByName(study, updated.getName()); + if ((null != existing && existing.getDatasetId() != datasetProperties.getDatasetId()) + || null != QueryService.get().getQueryDef(user, container, "study", updated.getName())) + { + return exception.addGlobalError("A Dataset or Query already exists with the name \"" + updated.getName() +"\""); + } + } + List errors = new ArrayList<>(); + studyManager.updateDatasetDefinition(user, updated, errors); + for (String errorMsg: errors) + { + exception.addGlobalError(errorMsg); // RP TODO: will have to see what these errors are. Perhaps globalError will be inappropriate + } + return exception; + } + catch (RuntimeSQLException e) + { + return exception.addGlobalError("Additional key column must have unique values."); + } + catch (Exception x) + { + throw UnexpectedException.wrap(x); + } + } + @Override + public ValidationException updateDomain(GWTDomain original, GWTDomain update, + DatasetDomainKindProperties datasetProperties, Container container, User user, boolean includeWarnings) + { + assert original.getDomainURI().equals(update.getDomainURI()); + ValidationException exception = new ValidationException(); - // check for errors. Can use ListDomainKind.updateDomain() and ExperimentServiceImp.updateDataClass() as examples for errors to catch. - // if there are any errors, return the exception instead of continuing with save. + // RP Q: how to do null checks for this scenario? Where is the potential null happening, if the .get() is unsuccessful..? + int datasetId = StudyService.get().getDatasetIdByName(container, original.getName()); - // update properties -- if it's not null, pass to an updateDatasetProperties helper function, which will fetch the existing properties from the table, - // merge the properties to obtain the updated ListDomainKindProperties, and then call DatasetManager's update(). (Use ListManager.update as example) + // RP TODO: Some of these initializations may error out. You should check for them and add to exception. + DatasetDefinition def = new DatasetDefinition(getStudy(container), datasetId); +// RP Q: Below adds check, but this wouldn't address the potential nullpointer that is flagged +// if (datasetId == -1) +// return exception.addGlobalError("Something to the effect that a dataset of that name does not exist here?"); + StudyImpl study = new StudyImpl(container, container.getTitle()); + StudyManager studyManager = new StudyManager(); - // update domain design. List has example in ListDomainKind, line 511. Don't really understand how it's happening in Dataclass, while looking at updateDataClass() + if (checkCanUpdate(def, exception, container, user, original, update).hasGlobalErrors()) + return exception; + // Temp note RP: comment carried over from DatasetServiceImpl.java + // Remove any fields that are duplicates of the default dataset fields. + // e.g. participantid, etc. + List updatedProps = update.getFields(); + for (Iterator iter = updatedProps.iterator(); iter.hasNext();) + { + GWTPropertyDescriptor prop = iter.next(); + if (DatasetDefinition.isDefaultFieldName(prop.getName(), study)) + iter.remove(); + else if (DatasetDomainKind.DATE.equalsIgnoreCase(prop.getName())) + prop.setRangeURI(PropertyType.DATE_TIME.getTypeUri()); + } + try (DbScope.Transaction transaction = StudySchema.getInstance().getScope().ensureTransaction()) + { + exception = updateDomainDescriptor(original, update, container, user, def); + if (!exception.hasErrors()) + { + // RP Q: This feels like a lot of params. Should I be putting some in the instance variables, like DatasetServiceImpl does? + exception = updateDataset(datasetProperties, original.getDomainURI(), exception, studyManager, study, container, user, def); + if (!exception.hasErrors()) + transaction.commit(); + } + } + return exception; } @Override diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 4cf7a98f504..4c112311868 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -14,7 +14,7 @@ public class DatasetDomainKindProperties protected String _typeURI; protected String _visitDatePropertyName; protected String _keyPropertyName; - protected Dataset.KeyManagementType _keyPropertyManaged; + protected Boolean _keyPropertyManaged; protected boolean _isDemographicData; protected int _cohortId; protected String _tag; @@ -23,10 +23,14 @@ public class DatasetDomainKindProperties protected String _sourceAssayUrl; protected String _dataSharing; // todo RP: to finalize + // read-only + public static final String TIME_KEY_FIELD_KEY = "_Special$Time_"; + public DatasetDomainKindProperties() { } + // wait. Do I need this at all? public DatasetDomainKindProperties(Dataset ds) { _datasetId = ds.getDatasetId(); @@ -35,24 +39,18 @@ public DatasetDomainKindProperties(Dataset ds) _category = ds.getViewCategory(); _label = ds.getLabel(); _typeURI = ds.getTypeURI(); - _visitDatePropertyName = ds.getKeyPropertyName(); // Check if this is correct _keyPropertyName = ds.getKeyPropertyName(); - _keyPropertyManaged = ds.getKeyManagementType(); // what is this? _isDemographicData = ds.isDemographicData(); + _cohortId = ds.getCohortId(); - _cohortId = 1; - _tag = ""; // what is this? - _showByDefault = true; // make this - _sourceAssayName = "name"; - _sourceAssayUrl = "url"; - _dataSharing = "whelp"; - -// _cohortId = ds.getCohortId(); -// _tag = ds._tag; // what is this? -// _showByDefault = ds._showByDefault; // make this -// _sourceAssayName = ds._sourceAssayName; -// _sourceAssayUrl = ds._sourceAssayUrl; -// _dataSharing = ds.getData; + // RP TODO: Have to figure out these, because they don't come from ds. Pending understanding of what this constructor is for + _visitDatePropertyName = ""; + _keyPropertyManaged = false; + _tag = ""; + _showByDefault = true; + _sourceAssayName = ""; + _sourceAssayUrl = ""; + _dataSharing = ""; } public int getDatasetId() @@ -135,12 +133,12 @@ public void setKeyPropertyName(String keyPropertyName) _keyPropertyName = keyPropertyName; } - public Dataset.KeyManagementType isKeyPropertyManaged() + public boolean isKeyPropertyManaged() { return _keyPropertyManaged; } - public void setKeyPropertyManaged(Dataset.KeyManagementType keyPropertyManaged) + public void setKeyPropertyManaged(Boolean keyPropertyManaged) { _keyPropertyManaged = keyPropertyManaged; } diff --git a/study/src/org/labkey/study/model/DatasetManager.java b/study/src/org/labkey/study/model/DatasetManager.java index 6f114f30a59..ba2e93ac690 100644 --- a/study/src/org/labkey/study/model/DatasetManager.java +++ b/study/src/org/labkey/study/model/DatasetManager.java @@ -61,11 +61,11 @@ public DatasetDomainKindProperties getDatasetDomainKindProperties(Container cont // create DatasetDomainKindProperties from what is found StudyImpl study = StudyManager.getInstance().getStudy(container); - Dataset fuck = StudyManager.getInstance().getDatasetDefinition(study, datasetId); + Dataset ds = StudyManager.getInstance().getDatasetDefinition(study, datasetId); - return new DatasetDomainKindProperties(fuck); + return new DatasetDomainKindProperties(ds); } } From 6a98ff27f120e7c750e1fb3276eed3272acb56b2 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Tue, 7 Apr 2020 09:20:31 -0700 Subject: [PATCH 04/73] Fix typo --- .../org/labkey/study/dataset/client/model/GWTDataset.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/study/gwtsrc/gwt/client/org/labkey/study/dataset/client/model/GWTDataset.java b/study/gwtsrc/gwt/client/org/labkey/study/dataset/client/model/GWTDataset.java index 4d48881de62..7d8485b334f 100644 --- a/study/gwtsrc/gwt/client/org/labkey/study/dataset/client/model/GWTDataset.java +++ b/study/gwtsrc/gwt/client/org/labkey/study/dataset/client/model/GWTDataset.java @@ -35,7 +35,7 @@ public class GWTDataset implements IsSerializable private StringProperty _typeURI = new StringProperty(); private StringProperty _category = new StringProperty(); private StringProperty _visitDatePropertyName = new StringProperty(); - private StringProperty _keyPropertyName = new StringProperty();oDCDKP + private StringProperty _keyPropertyName = new StringProperty(); private BooleanProperty _keyPropertyManaged = new BooleanProperty(); private BooleanProperty _isDemographicData = new BooleanProperty(); private StringProperty _label = new StringProperty(); From b58997f9287dd8e1c55a9c0cd427c2808a5c80b4 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Thu, 9 Apr 2020 10:27:04 -0700 Subject: [PATCH 05/73] Gets callable; update written and to be tested --- api/src/org/labkey/api/study/Dataset.java | 13 ++++ .../study/controllers/StudyController.java | 6 +- .../labkey/study/model/DatasetDefinition.java | 22 +++--- .../labkey/study/model/DatasetDomainKind.java | 36 ++++++--- .../model/DatasetDomainKindProperties.java | 77 +++++++++++++------ .../labkey/study/model/DatasetManager.java | 9 +-- 6 files changed, 106 insertions(+), 57 deletions(-) diff --git a/api/src/org/labkey/api/study/Dataset.java b/api/src/org/labkey/api/study/Dataset.java index 075430d6af3..97e9d396a67 100644 --- a/api/src/org/labkey/api/study/Dataset.java +++ b/api/src/org/labkey/api/study/Dataset.java @@ -42,6 +42,13 @@ */ public interface Dataset extends StudyEntity, StudyCachable { + enum DataSharing + { + NONE, + ALL, + PTID + } + Set getDefaultFieldNames(); /** @@ -101,6 +108,12 @@ public interface Dataset extends StudyEntity, StudyCachable im private boolean _useTimeKeyField = false; - public enum DataSharing - { - NONE, - ALL, - PTID - } + private static final String[] BASE_DEFAULT_FIELD_NAMES_ARRAY = new String[] @@ -492,6 +487,7 @@ public void setDataSharing(@NotNull String datasharing) throw new IllegalStateException(); } + @Override public DataSharing getDataSharingEnum() { if (!isDemographicData()) @@ -537,6 +533,7 @@ public static void updateModified(DatasetDefinition def, Date modified) modifiedDates.remove(def.getEntityId()); } + @Override public String getTag() { return _tag; @@ -794,7 +791,7 @@ public int deleteRows(@Nullable Date cutoff) return count; } - + @Override public boolean isDemographicData() { return _demographicData; @@ -1108,7 +1105,7 @@ public String getVisitDateColumnName() return _visitDatePropertyName; } - + @Override public String getVisitDatePropertyName() { return _visitDatePropertyName; @@ -1120,12 +1117,13 @@ public void setVisitDatePropertyName(String visitDatePropertyName) _visitDatePropertyName = visitDatePropertyName; } - + @Override public String getKeyPropertyName() { return _keyPropertyName; } + @Override public void setKeyPropertyName(String keyPropertyName) { verifyMutability(); @@ -1772,9 +1770,11 @@ protected boolean supportsPolicyUpdate() return true; } + @Override public Integer getCohortId() { - return _cohortId; +// return _cohortId; + return null; } public void setCohortId(Integer cohortId) @@ -1783,6 +1783,7 @@ public void setCohortId(Integer cohortId) } @Nullable + @Override public CohortImpl getCohort() { if (_cohortId == null) @@ -1795,6 +1796,7 @@ public Integer getProtocolId() return _protocolId; } + @Override public ExpProtocol getAssayProtocol() { return _protocolId == null ? null : ExperimentService.get().getExpProtocol(_protocolId.intValue()); diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 82fd89ee30c..0fa5527b101 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -332,18 +332,31 @@ public boolean canCreateDefinition(User user, Container container) return container.hasPermission(user, AdminPermission.class); } - public Domain createDomain(GWTDomain domain, JSONObject arguments, Container container, User user, - @Nullable TemplateInfo templateInfo) +// TODO RP: Check if this works as desired + @Override + public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties arguments, Container container, User user, + @Nullable TemplateInfo templateInfo) { String name = domain.getName(); - Integer datasetId = arguments.containsKey("datasetId") ? (Integer)arguments.get("datasetId") : null; - Integer categoryId = arguments.containsKey("categoryId") ? (Integer)arguments.get("categoryId") : null; - String categoryName = arguments.containsKey("categoryName") ? (String)arguments.get("categoryName") : null; - boolean demographics = arguments.containsKey("demographics") ? (Boolean)arguments.get("demographics") : false; - String keyPropertyName = arguments.containsKey("keyPropertyName") ? (String)arguments.get("keyPropertyName") : null; - boolean useTimeKeyField = arguments.containsKey("useTimeKeyField") ? (Boolean)arguments.get("useTimeKeyField") : false; - boolean strictFieldValidation = arguments.containsKey("strictFieldValidation") ? (Boolean)arguments.get("strictFieldValidation") : true; - boolean isManagedField = arguments.containsKey("isManagedField") ? (Boolean)arguments.get("isManagedField") : false; + Integer datasetId = arguments.getDatasetId(); + Integer categoryId = arguments.getCategoryId(); + String categoryName = arguments.getCategory(); + boolean demographics = arguments.isDemographicData(); + String keyPropertyName = arguments.getKeyPropertyName(); + + // RP TODO: Looks like this exists on DatasetDefinition and defaults to false. Is it determinable from DatasetDomainKindProperties..? + // Maybe whether the additional key column name is time..? Or..? +// boolean useTimeKeyField = arguments.containsKey("useTimeKeyField") ? (Boolean)arguments.get("useTimeKeyField") : false; + boolean useTimeKeyField = false; + + // RP TODO: Not sure where this should come from +// boolean strictFieldValidation = arguments.containsKey("strictFieldValidation") ? (Boolean)arguments.get("strictFieldValidation") : true; + boolean strictFieldValidation = true; + +// RP TODO: Check if this is accurate +// boolean isManagedField = arguments.containsKey("isManagedField") ? (Boolean)arguments.get("isManagedField") : false; + boolean isManagedField = arguments.isKeyPropertyManaged(); + if (name == null) throw new IllegalArgumentException("Dataset name must not be null"); @@ -504,7 +517,8 @@ private ValidationException updateDomainDescriptor(GWTDomain _cohortMap; + + private Map _visitDateMap; public DatasetDomainKindProperties() { + // This does not give a default typeURI, or dataSharing value, or datasetId, as GWTDataset does in getDataset() } - // wait. Do I need this at all? public DatasetDomainKindProperties(Dataset ds) { _datasetId = ds.getDatasetId(); _name = ds.getName(); _description = ds.getDescription(); - _category = ds.getViewCategory(); + if (ds.getViewCategory() != null) + { + _category = ds.getViewCategory().getLabel(); + _categoryId = ds.getViewCategory().getRowId(); // Is this the correct id + } _label = ds.getLabel(); _typeURI = ds.getTypeURI(); _keyPropertyName = ds.getKeyPropertyName(); _isDemographicData = ds.isDemographicData(); + _showByDefault = ds.isShowByDefault(); _cohortId = ds.getCohortId(); + _visitDatePropertyName = ds.getVisitDatePropertyName(); + _tag = ds.getTag(); + _dataSharing = ds.getDataSharingEnum().name(); - // RP TODO: Have to figure out these, because they don't come from ds. Pending understanding of what this constructor is for - _visitDatePropertyName = ""; - _keyPropertyManaged = false; - _tag = ""; - _showByDefault = true; - _sourceAssayName = ""; - _sourceAssayUrl = ""; - _dataSharing = ""; + // Might have to verify below + _keyPropertyManaged = (ds.getKeyManagementType() != Dataset.KeyManagementType.None); + ExpProtocol protocol = ds.getAssayProtocol(); + if (protocol != null) + { + _sourceAssayName = protocol.getName(); + _sourceAssayUrl = PageFlowUtil.urlProvider(AssayUrls.class).getAssayResultsURL(protocol.getContainer(), protocol).getLocalURIString(); + } } - public int getDatasetId() + public Integer getDatasetId() { return _datasetId; } - public void setDatasetId(int datasetId) + public void setDatasetId(Integer datasetId) { _datasetId = datasetId; } @@ -83,12 +105,12 @@ public void setDescription(String description) _description = description; } - public ViewCategory getCategory() + public String getCategory() { return _category; } - public void setCategory(ViewCategory category) + public void setCategory(String category) { _category = category; } @@ -138,7 +160,7 @@ public boolean isKeyPropertyManaged() return _keyPropertyManaged; } - public void setKeyPropertyManaged(Boolean keyPropertyManaged) + public void setKeyPropertyManaged(boolean keyPropertyManaged) { _keyPropertyManaged = keyPropertyManaged; } @@ -153,7 +175,7 @@ public void setDemographicData(boolean demographicData) _isDemographicData = demographicData; } - public int getCohortId() + public Integer getCohortId() { return _cohortId; } @@ -212,4 +234,9 @@ public void setDataSharing(String dataSharing) { _dataSharing = dataSharing; } + + public Integer getCategoryId() + { + return _categoryId; + } } diff --git a/study/src/org/labkey/study/model/DatasetManager.java b/study/src/org/labkey/study/model/DatasetManager.java index ba2e93ac690..407ac99fc1e 100644 --- a/study/src/org/labkey/study/model/DatasetManager.java +++ b/study/src/org/labkey/study/model/DatasetManager.java @@ -51,23 +51,16 @@ public static DatasetManager get () // todo rp public DatasetDomainKindProperties getDatasetDomainKindProperties(Container container, Integer datasetId) { - if (null == datasetId) + if (datasetId == null || datasetId == 0 ) { return new DatasetDomainKindProperties(); } else { -// filter for our given datasetId - -// create DatasetDomainKindProperties from what is found StudyImpl study = StudyManager.getInstance().getStudy(container); Dataset ds = StudyManager.getInstance().getDatasetDefinition(study, datasetId); - - - return new DatasetDomainKindProperties(ds); } - } public interface DatasetListener From 0028ac31213d84dd6f202be299311d2ad0b82654 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Thu, 9 Apr 2020 13:53:56 -0700 Subject: [PATCH 06/73] Fix bugs in create and get --- .../org/labkey/api/study/StudyService.java | 7 ------ .../experiment/api/DataClassDomainKind.java | 2 +- .../study/controllers/StudyController.java | 2 +- .../labkey/study/model/DatasetDefinition.java | 3 +-- .../labkey/study/model/DatasetDomainKind.java | 23 +++++++++++++++---- .../model/DatasetDomainKindProperties.java | 4 ++-- .../labkey/study/model/DatasetManager.java | 1 - .../org/labkey/study/model/StudyManager.java | 2 +- 8 files changed, 24 insertions(+), 20 deletions(-) diff --git a/api/src/org/labkey/api/study/StudyService.java b/api/src/org/labkey/api/study/StudyService.java index 2502a2b1bbf..5a88fbdc196 100644 --- a/api/src/org/labkey/api/study/StudyService.java +++ b/api/src/org/labkey/api/study/StudyService.java @@ -90,13 +90,6 @@ static StudyService get() */ Dataset createDataset(Container container, User user, String name, @Nullable Integer datasetId, boolean isDemographic); - // todo RP -// ValidationException updateDataset(@NotNull Container c, @NotNull User u, @NotNull Dataset dataset, -// @Nullable DatasetDomainKindProperties options, -// GWTDomain original, -// GWTDomain update); -// - /** * Finds a study by either Container id or study label. * @param studyReference Container instance, GUID instance, or String representing container id, container path, or study label. diff --git a/experiment/src/org/labkey/experiment/api/DataClassDomainKind.java b/experiment/src/org/labkey/experiment/api/DataClassDomainKind.java index 50902048acd..c526d573ec8 100644 --- a/experiment/src/org/labkey/experiment/api/DataClassDomainKind.java +++ b/experiment/src/org/labkey/experiment/api/DataClassDomainKind.java @@ -308,7 +308,7 @@ public UpdateableTableInfo.ObjectUriType getObjectUriColumn() @Override public DataClassDomainKindProperties getDomainKindProperties(@NotNull GWTDomain domain, Container container, User user) { - ExpDataClass dc = ExperimentService.get().getDataClass(domain.getDomainURI()); // bookmark. Check out studyservice + ExpDataClass dc = ExperimentService.get().getDataClass(domain.getDomainURI()); return new DataClassDomainKindProperties(dc); } } diff --git a/study/src/org/labkey/study/controllers/StudyController.java b/study/src/org/labkey/study/controllers/StudyController.java index 7d66487e34a..d46e5aa6419 100644 --- a/study/src/org/labkey/study/controllers/StudyController.java +++ b/study/src/org/labkey/study/controllers/StudyController.java @@ -514,7 +514,7 @@ public class EditTypeAction extends SimpleViewAction public ModelAndView getView(DatasetForm form, BindException errors) { StudyImpl study = getStudyRedirectIfNull(); - DatasetDefinition def = study.getDataset(form.getDatasetId()); //bookmark + DatasetDefinition def = study.getDataset(form.getDatasetId()); _def = def; if (null == def) { diff --git a/study/src/org/labkey/study/model/DatasetDefinition.java b/study/src/org/labkey/study/model/DatasetDefinition.java index f956931f114..faf3e8c4de4 100644 --- a/study/src/org/labkey/study/model/DatasetDefinition.java +++ b/study/src/org/labkey/study/model/DatasetDefinition.java @@ -1773,8 +1773,7 @@ protected boolean supportsPolicyUpdate() @Override public Integer getCohortId() { -// return _cohortId; - return null; + return _cohortId; } public void setCohortId(Integer cohortId) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 0fa5527b101..73bdb71ba8b 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -17,6 +17,7 @@ package org.labkey.study.model; import org.apache.commons.beanutils.BeanUtils; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.json.JSONObject; import org.labkey.api.data.BaseColumnInfo; @@ -332,7 +333,17 @@ public boolean canCreateDefinition(User user, Container container) return container.hasPermission(user, AdminPermission.class); } -// TODO RP: Check if this works as desired + @Nullable + @Override + public DatasetDomainKindProperties getDomainKindProperties(@NotNull GWTDomain domain, Container container, User user) + { +// RP Q: is this the correct approach here? How to guard against these nullpointers? + int id = StudyService.get().getDatasetIdByName(container, domain.getName()); + Dataset ds = StudyService.get().getDataset(container, id); + return new DatasetDomainKindProperties(ds); + } + + // TODO RP: Check if this works as desired @Override public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties arguments, Container container, User user, @Nullable TemplateInfo templateInfo) @@ -487,9 +498,10 @@ private ValidationException checkCanUpdate(Dataset ds, ValidationException excep if (null == d) return exception.addGlobalError("Domain not found: " + update.getDomainURI()); - if (!ds.getTypeURI().equals(original.getDomainURI()) || - !ds.getTypeURI().equals(update.getDomainURI())) - return exception.addGlobalError("Illegal Argument"); + // TODO RP: ds.getTypeURI is returning as null, which is probably not desired behavior. +// if (!ds.getTypeURI().equals(original.getDomainURI()) || +// !ds.getTypeURI().equals(update.getDomainURI())) +// return exception.addGlobalError("Illegal Argument"); return exception; } @@ -559,7 +571,6 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro datasetProperties.setKeyPropertyName(null); useTimeKeyField = true; } - // RP temp notes: copy everything from datasetProperties into updated. Maybe ask if there's a helper for this BeanUtils.copyProperties(updated, datasetProperties); if (datasetProperties.getKeyPropertyName() != null) @@ -638,6 +649,8 @@ public ValidationException updateDomain(GWTDomain getSharedProperties(Study study) @Nullable - public DatasetDefinition getDatasetDefinition(Study s, int id) // bookmark + public DatasetDefinition getDatasetDefinition(Study s, int id) { DatasetDefinition ds = _datasetHelper.get(s.getContainer(), id); // update old rows w/o entityid From b84c4f31f0adee62cea00646b51896fb0e52fb49 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Fri, 10 Apr 2020 11:30:26 -0700 Subject: [PATCH 07/73] Debugging update --- .../labkey/study/model/DatasetDomainKind.java | 22 ++++++++++--------- .../model/DatasetDomainKindProperties.java | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 73bdb71ba8b..ff9a02451d3 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -530,21 +530,24 @@ private ValidationException updateDomainDescriptor(GWTDomain errors = new ArrayList<>(); - studyManager.updateDatasetDefinition(user, updated, errors); + studyManager.updateDatasetDefinition(user, updated, errors); // Issue here is with cohortId=0 for (String errorMsg: errors) { exception.addGlobalError(errorMsg); // RP TODO: will have to see what these errors are. Perhaps globalError will be inappropriate @@ -650,8 +653,7 @@ public ValidationException updateDomain(GWTDomain Date: Mon, 13 Apr 2020 13:19:43 -0700 Subject: [PATCH 08/73] Save, create, and get actions working. Continues work on validation --- .../study/controllers/DatasetServiceImpl.java | 2 +- .../labkey/study/model/DatasetDomainKind.java | 20 ++++++++++++++++++- .../model/DatasetDomainKindProperties.java | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/study/src/org/labkey/study/controllers/DatasetServiceImpl.java b/study/src/org/labkey/study/controllers/DatasetServiceImpl.java index 285d7c76166..d12b1a8c0ce 100644 --- a/study/src/org/labkey/study/controllers/DatasetServiceImpl.java +++ b/study/src/org/labkey/study/controllers/DatasetServiceImpl.java @@ -245,7 +245,7 @@ private List updateDataset(GWTDataset ds, String domainURI) ds.setKeyPropertyName(null); useTimeKeyField = true; } - BeanUtils.copyProperties(updated, ds); + BeanUtils.copyProperties(updated, ds); // updated already has displayOrder, entityId, but not category or categoryId. Category exists on ds if (ds.getKeyPropertyName() != null) { diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index ff9a02451d3..1d2a781f174 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -549,6 +549,23 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro // ". Demographic data includes one row of data per " + StudyService.get().getSubjectNounSingular(container) + "."); // } + // Temp note: Taken from study/gwtsrc/gwt/client/org/labkey/study/dataset/client/Designer.java, starting line 1120 + if (datasetProperties.getName() == null || datasetProperties.getName().length() == 0) + exception.addFieldError("Name", "Dataset name cannot be empty."); + + if (datasetProperties.getLabel() == null || datasetProperties.getLabel().length() == 0) + exception.addFieldError("Label", "Dataset label cannot be empty."); + + if ("".equals(datasetProperties.getKeyPropertyName())) + exception.addFieldError("Additional Key Field", "Please select a field name for the additional key."); + + // TODO RP: Make sure this covers intended cases + if (datasetProperties.isKeyPropertyManaged() && (datasetProperties.getKeyPropertyName() == null || datasetProperties.getName().length() == 0)) + exception.addFieldError("Additional Key Field", "Please select a field name for the additional key."); + + if (exception.hasErrors()) + return exception; + if (datasetProperties.isDemographicData()) { datasetProperties.setKeyPropertyName(null); @@ -648,12 +665,13 @@ public ValidationException updateDomain(GWTDomain Date: Mon, 13 Apr 2020 14:44:31 -0700 Subject: [PATCH 09/73] Item 7066: partial wrapper around DatasetDesigner --- .gitignore | 1 + study/package-lock.json | 140 +++++++----------- study/package.json | 2 +- .../DatasetDesigner/DatasetDesigner.tsx | 109 +++++++++++--- 4 files changed, 147 insertions(+), 105 deletions(-) diff --git a/.gitignore b/.gitignore index 4e1eba5da57..1227bf95d6f 100644 --- a/.gitignore +++ b/.gitignore @@ -67,6 +67,7 @@ query/resources/views/queryMetadataEditor.view.xml query/resources/views/queryMetadataEditorDev.html query/resources/views/queryMetadataEditorDev.view.xml +study/resources/web/study/gen study/resources/views/datasetDesigner.html study/resources/views/datasetDesigner.view.xml study/resources/views/datasetDesignerDev.html diff --git a/study/package-lock.json b/study/package-lock.json index c95e1a836d1..f9883a80074 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -20,39 +20,44 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==" + }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/runtime": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", - "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", + "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs2": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.8.7.tgz", - "integrity": "sha512-R8zbPiv25S0pGfMqAr55dRRxWB8vUeo3wicI4g9PFVBKmsy/9wmQUV1AaYW/kxRHUhx42TTh6F0+QO+4pwfYWg==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.9.2.tgz", + "integrity": "sha512-ayjSOxuK2GaSDJFCtLgHnYjuMyIpViNujWrZo8GUpN60/n7juzJKK5yOo6RFVb0zdU9ACJFK+MsZrUnj3OmXMw==", "requires": { "core-js": "^2.6.5", "regenerator-runtime": "^0.13.4" } }, "@babel/types": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.7.tgz", - "integrity": "sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", + "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.5", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -167,9 +172,9 @@ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, "@fortawesome/fontawesome-common-types": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.27.tgz", - "integrity": "sha512-97GaByGaXDGMkzcJX7VmR/jRJd8h1mfhtA7RsxDBN61GnWE/PPCZhOdwG/8OZYktiRUF0CvFOr+VgRkJrt6TWg==" + "version": "0.2.28", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.28.tgz", + "integrity": "sha512-gtis2/5yLdfI6n0ia0jH7NJs5i/Z/8M/ZbQL6jXQhCthEOe5Cr5NcQPhgTvFxNOtURE03/ZqUcEskdn2M+QaBg==" }, "@fortawesome/fontawesome-free": { "version": "5.9.0", @@ -239,27 +244,28 @@ "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" }, "@labkey/api": { - "version": "0.0.40", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.0.40.tgz", - "integrity": "sha1-/i+rmsb1E4MQ2XA6zGLVyJovDag=" + "version": "0.1.1", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.1.1.tgz", + "integrity": "sha1-OKBFHbzPMekCqNW7raEq+FtBzOA=" }, "@labkey/components": { - "version": "0.35.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.35.0.tgz", - "integrity": "sha1-rNg6fup7KkUcGiQGQYI6YrlyJro=", + "version": "0.48.2-fb-datasetDesigner.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.48.2-fb-datasetDesigner.0.tgz", + "integrity": "sha1-xaax3Sd49+cK4+LEVqxnTLQh6ZU=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", "@fortawesome/free-regular-svg-icons": "5.11.2", "@fortawesome/free-solid-svg-icons": "5.9.0", "@fortawesome/react-fontawesome": "0.1.4", - "@labkey/api": "0.0.40", + "@labkey/api": "0.1.1", "bootstrap": "3.4.1", "classnames": "2.2.6", "font-awesome": "4.7.0", "formsy-react": "1.1.5", "formsy-react-components": "1.1.0", "history": "4.7.2", + "immer": "6.0.3", "immutable": "3.8.2", "jquery": "3.4.1", "moment": "2.24.0", @@ -279,8 +285,8 @@ "react-select": "1.0.0-rc.10", "react-sticky": "6.0.3", "react-treebeard": "3.2.4", - "reactn": "2.2.4", - "vis": "4.21.0" + "reactn": "2.2.6", + "vis-network": "6.5.2" } }, "@types/events": { @@ -746,9 +752,9 @@ "dev": true }, "babel-plugin-emotion": { - "version": "10.0.29", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.29.tgz", - "integrity": "sha512-7Jpi1OCxjyz0k163lKtqP+LHMg5z3S6A7vMBfHnF06l2unmtsOmFDzZBpGf0CWo1G4m8UACfVcDJiSiRuu/cSw==", + "version": "10.0.33", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz", + "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==", "requires": { "@babel/helper-module-imports": "^7.0.0", "@emotion/hash": "0.8.0", @@ -1388,13 +1394,6 @@ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "requires": { "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } } }, "cookie": { @@ -1581,9 +1580,9 @@ "dev": true }, "date-fns": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.11.0.tgz", - "integrity": "sha512-8P1cDi8ebZyDxUyUprBXwidoEtiQAawYPGvpfb+Dg0G6JrQ+VozwOmm91xYC0vAv1+0VmLehEPb+isg4BGUFfA==" + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.12.0.tgz", + "integrity": "sha512-qJgn99xxKnFgB1qL4jpxU7Q2t0LOn1p8KMIveef3UZD7kqjT3tpFNNdXJelEHhE+rUgffriXriw/sOSU+cS1Hw==" }, "debug": { "version": "2.6.9", @@ -1833,11 +1832,6 @@ "minimalistic-crypto-utils": "^1.0.0" } }, - "emitter-component": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.1.1.tgz", - "integrity": "sha1-Bl4tvtaVm/RwZ57avq95gdEAOrY=" - }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -1971,11 +1965,6 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -3155,11 +3144,6 @@ "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" }, - "hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" - }, "handle-thing": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", @@ -3381,6 +3365,11 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "immer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-6.0.3.tgz", + "integrity": "sha512-12VvNrfSrXZdm/BJgi/KDW2soq5freVSf3I1+4CLunUM8mAGx2/0Njy0xBVzi5zewQZiwM7z1/1T+8VaI7NkmQ==" + }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", @@ -3764,11 +3753,6 @@ "minimist": "^1.2.0" } }, - "keycharm": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/keycharm/-/keycharm-0.2.0.tgz", - "integrity": "sha1-+m6i5DuQpoAohD0n8gddNajD5vk=" - }, "keycode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", @@ -4749,14 +4733,6 @@ } } }, - "propagating-hammerjs": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/propagating-hammerjs/-/propagating-hammerjs-1.4.7.tgz", - "integrity": "sha512-oW9Wd+W2Tp5uOz6Fh4mEU7p+FoyU85smLH/mPga83Loh0pHa6AH4ZHGywvwMk3TWP31l7iUsvJyW265p4Ipwrg==", - "requires": { - "hammerjs": "^2.0.8" - } - }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -5188,9 +5164,9 @@ } }, "reactn": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/reactn/-/reactn-2.2.4.tgz", - "integrity": "sha512-ROZGocaVrunwcyxmmi7tQWk0/NhersX55Zh0yInDXxD2sc7L4iriSu6oG0Cmq2QcwfEJTFXIEL+ASBpDgAYywQ==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/reactn/-/reactn-2.2.6.tgz", + "integrity": "sha512-xYE6agye3WVetZdYY8cUWDLnAIV/z/74lUDc8TPd3UobQGKTvwH3Z6or6+Whart6uwb6ml1MhCHv9e5ipLx3MQ==", "requires": { "use-force-update": "^1.0.5" } @@ -5376,8 +5352,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -6435,17 +6410,10 @@ "velocity-animate": "^1.4.0" } }, - "vis": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/vis/-/vis-4.21.0.tgz", - "integrity": "sha1-3XFji/9/ZJXQC8n0DCU1JhM97Ws=", - "requires": { - "emitter-component": "^1.1.1", - "hammerjs": "^2.0.8", - "keycharm": "^0.2.0", - "moment": "^2.18.1", - "propagating-hammerjs": "^1.4.6" - } + "vis-network": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/vis-network/-/vis-network-6.5.2.tgz", + "integrity": "sha512-Dj5oEtZMUWuhq7D7dwdmxmtJgrK3kwfV4Ov/ePSrhPZgNdJlXzpeDZU/Eq0pKGyOAPLClemgVImc0bZpZ4Yafw==" }, "vm-browserify": { "version": "1.1.2", @@ -6784,9 +6752,9 @@ "dev": true }, "yaml": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.2.tgz", - "integrity": "sha512-omakb0d7FjMo3R1D2EbTKVIk6dAVLRxFXdLZMEUToeAvuqgG/YuHMuQOZ5fgk+vQ8cx+cnGKwyg+8g8PNT0xQg==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", + "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", "requires": { "@babel/runtime": "^7.8.7" } diff --git a/study/package.json b/study/package.json index 3aee7de5e4c..c81092e5524 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.35.0" + "@labkey/components": "0.48.2-fb-datasetDesigner.0" }, "devDependencies": { "@hot-loader/react-dom": "16.9.0", diff --git a/study/src/client/DatasetDesigner/DatasetDesigner.tsx b/study/src/client/DatasetDesigner/DatasetDesigner.tsx index add162bfe5b..1228e1c949d 100644 --- a/study/src/client/DatasetDesigner/DatasetDesigner.tsx +++ b/study/src/client/DatasetDesigner/DatasetDesigner.tsx @@ -15,34 +15,107 @@ */ import React, {PureComponent} from "react"; -import {LoadingSpinner} from "@labkey/components"; -import { ActionURL, Ajax, Utils } from "@labkey/api"; +import {Alert, DatasetDesignerPanels, fetchDatasetDesign, getDatasetProperties, LoadingSpinner} from "@labkey/components"; +import { ActionURL, getServerContext } from "@labkey/api"; +import {DatasetModel} from "@labkey/components/dist/components/domainproperties/dataset/models"; +import "@labkey/components/dist/components.css" -export class App extends PureComponent { +interface State { + datasetId: number, + model: DatasetModel, + isLoadingModel: boolean, + message?: string, + dirty: boolean, + hasDatasetDesignPermission?: boolean, + returnUrl: string, +} + +export class App extends PureComponent { constructor(props) { super(props); + + this.state = { + model: undefined, + datasetId : undefined, + returnUrl : undefined, + isLoadingModel: true, + dirty: false + }; } - render() { - const datasetId = 5004; - Ajax.request({ - url: ActionURL.buildURL('study', 'GetDataset'), - method: 'GET', - params: {datasetId}, - scope: this, - success: Utils.getCallbackWrapper((data) => { - console.log("success", data); - // resolve(console.log("success", data)); - }), - failure: Utils.getCallbackWrapper((error) => { - console.log("failure", error); - // reject(error); + componentDidMount() { + const { datasetId } = this.state; + + if (datasetId) { + this.loadExistingDataset(); + } + else { + this.createNewDataset(); + } + } + + handleWindowBeforeUnload = (event) => { + if (this.state.dirty) { + event.returnValue = 'Changes you made may not be saved.'; + } + }; + + loadExistingDataset() { + const { datasetId } = this.state; + + fetchDatasetDesign(datasetId) + .then((model: DatasetModel) => { + this.setState(() => ({model, isLoadingModel: false})); + }) + .catch((error) => { + this.setState(() => ({message: error.exception, isLoadingModel: false})); + }); + } + + createNewDataset() { + getDatasetProperties() + .then((model: DatasetModel) => { + this.setState(() => ({model, isLoadingModel: false})) }) + .catch((error) => { + this.setState(() => ({message: error.exception, isLoadingModel: false})); + }) + } + + navigate(defaultUrl: string) { + const { returnUrl } = this.state; + + this.setState(() => ({dirty: false}), () => { + window.location.href = returnUrl || defaultUrl; }); + } + + onCancel = () => { + this.navigate(ActionURL.buildURL('study', 'begin', getServerContext().container.path)); + }; + + render() { + const { isLoadingModel, message, model } = this.state; + + if (message) { + return {message} + } + + if (isLoadingModel) { + return + } return ( - + <> + + ) } } \ No newline at end of file From 09fbf8b28efb5fa4b320915a783c3879156979e1 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Mon, 13 Apr 2020 20:05:54 -0700 Subject: [PATCH 10/73] Adds read-only properties to getDomainKindProperties. Addresses areas flagged by me --- .../labkey/study/model/DatasetDomainKind.java | 75 +++++++++++++------ .../model/DatasetDomainKindProperties.java | 45 ++++++++++- 2 files changed, 95 insertions(+), 25 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 1d2a781f174..c88f569212c 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -19,7 +19,6 @@ import org.apache.commons.beanutils.BeanUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.json.JSONObject; import org.labkey.api.data.BaseColumnInfo; import org.labkey.api.data.ColumnInfo; import org.labkey.api.data.Container; @@ -37,7 +36,6 @@ import org.labkey.api.exp.TemplateInfo; import org.labkey.api.exp.api.ExperimentService; import org.labkey.api.exp.property.AbstractDomainKind; -import org.labkey.api.exp.property.BaseAbstractDomainKind; import org.labkey.api.exp.property.Domain; import org.labkey.api.exp.property.DomainProperty; import org.labkey.api.exp.property.DomainUtil; @@ -68,6 +66,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -338,12 +337,52 @@ public boolean canCreateDefinition(User user, Container container) public DatasetDomainKindProperties getDomainKindProperties(@NotNull GWTDomain domain, Container container, User user) { // RP Q: is this the correct approach here? How to guard against these nullpointers? +// temp note: read-only properties set, code as seen in DatasetServiceImpl.getDataset() int id = StudyService.get().getDatasetIdByName(container, domain.getName()); Dataset ds = StudyService.get().getDataset(container, id); - return new DatasetDomainKindProperties(ds); + + DatasetDomainKindProperties datasetProperties = new DatasetDomainKindProperties(ds); + + + if (container.isProject() && StudyService.get().getStudy(container).isDataspaceStudy()) + { + datasetProperties.setDefinitionIsShared(true); + if (StudyService.get().getStudy(container).getShareVisitDefinitions()) + datasetProperties.setVisitMapShared(true); + } + + List cohorts = StudyManager.getInstance().getCohorts(container, user); + Map cohortMap = new HashMap<>(); + if (cohorts != null && cohorts.size() > 0) + { + cohortMap.put("All", ""); + for (CohortImpl cohort : cohorts) + cohortMap.put(cohort.getLabel(), String.valueOf(cohort.getRowId())); + } + datasetProperties.setCohortMap(cohortMap); + + Map visitDateMap = new HashMap<>(); + TableInfo tinfo = ds.getTableInfo(user, false); + for (ColumnInfo col : tinfo.getColumns()) + { + if (!Date.class.isAssignableFrom(col.getJavaClass())) + continue; + if (col.getName().equalsIgnoreCase("visitdate")) + continue; + if (col.getName().equalsIgnoreCase("modified")) + continue; + if (col.getName().equalsIgnoreCase("created")) + continue; + if (visitDateMap.isEmpty()) + visitDateMap.put("", ""); + visitDateMap.put(col.getName(), col.getName()); + } + datasetProperties.setVisitDateMap(visitDateMap); + + return datasetProperties; } - // TODO RP: Check if this works as desired + // TODO RP: Test thoroughly @Override public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties arguments, Container container, User user, @Nullable TemplateInfo templateInfo) @@ -364,11 +403,8 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen // boolean strictFieldValidation = arguments.containsKey("strictFieldValidation") ? (Boolean)arguments.get("strictFieldValidation") : true; boolean strictFieldValidation = true; -// RP TODO: Check if this is accurate -// boolean isManagedField = arguments.containsKey("isManagedField") ? (Boolean)arguments.get("isManagedField") : false; boolean isManagedField = arguments.isKeyPropertyManaged(); - if (name == null) throw new IllegalArgumentException("Dataset name must not be null"); @@ -498,10 +534,9 @@ private ValidationException checkCanUpdate(Dataset ds, ValidationException excep if (null == d) return exception.addGlobalError("Domain not found: " + update.getDomainURI()); - // TODO RP: ds.getTypeURI is returning as null, which is probably not desired behavior. -// if (!ds.getTypeURI().equals(original.getDomainURI()) || -// !ds.getTypeURI().equals(update.getDomainURI())) -// return exception.addGlobalError("Illegal Argument"); + if (!ds.getTypeURI().equals(original.getDomainURI()) || + !ds.getTypeURI().equals(update.getDomainURI())) + return exception.addGlobalError("Illegal Argument"); return exception; } @@ -527,29 +562,25 @@ private ValidationException updateDomainDescriptor(GWTDomain errors = new ArrayList<>(); - studyManager.updateDatasetDefinition(user, updated, errors); // Issue here is with cohortId=0 + studyManager.updateDatasetDefinition(user, updated, errors); for (String errorMsg: errors) { exception.addGlobalError(errorMsg); // RP TODO: will have to see what these errors are. Perhaps globalError will be inappropriate diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 7b3bb3f69fc..8ddfe2173dc 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -14,7 +14,7 @@ public class DatasetDomainKindProperties protected String _name; protected String _description; protected String _category; - protected Integer _categoryId; // To check: Should add this here? Not a field element, but necessary for other processing + protected Integer _categoryId; protected String _label; protected String _typeURI; @@ -53,7 +53,7 @@ public DatasetDomainKindProperties(Dataset ds) if (ds.getViewCategory() != null) { _category = ds.getViewCategory().getLabel(); - _categoryId = ds.getViewCategory().getRowId(); // To check: Is this the correct id + _categoryId = ds.getViewCategory().getRowId(); } _label = ds.getLabel(); _typeURI = ds.getTypeURI(); @@ -65,7 +65,6 @@ public DatasetDomainKindProperties(Dataset ds) _tag = ds.getTag(); _dataSharing = ds.getDataSharingEnum().name(); - // Might have to verify below _keyPropertyManaged = (ds.getKeyManagementType() != Dataset.KeyManagementType.None); ExpProtocol protocol = ds.getAssayProtocol(); if (protocol != null) @@ -75,6 +74,46 @@ public DatasetDomainKindProperties(Dataset ds) } } + public Map getVisitDateMap() + { + return _visitDateMap; + } + + public void setVisitDateMap(Map visitDateMap) + { + _visitDateMap = visitDateMap; + } + + public boolean isVisitMapShared() + { + return _visitMapShared; + } + + public void setVisitMapShared(boolean visitMapShared) + { + _visitMapShared = visitMapShared; + } + + public boolean isDefinitionIsShared() + { + return _definitionIsShared; + } + + public void setDefinitionIsShared(boolean definitionIsShared) + { + _definitionIsShared = definitionIsShared; + } + + public Map getCohortMap() + { + return _cohortMap; + } + + public void setCohortMap(Map cohortMap) + { + _cohortMap = cohortMap; + } + public Integer getDatasetId() { return _datasetId; From 76fae0f586e1fcb1dafe1ce45dc7c5587b63339b Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 14 Apr 2020 10:37:28 -0500 Subject: [PATCH 11/73] Study module package.json updates to match version and other minor updates made to related platform modules --- study/package-lock.json | 645 ++++++++++++++--------- study/package.json | 17 +- study/src/client/DatasetDesigner/app.tsx | 4 +- study/src/client/DatasetDesigner/dev.tsx | 4 +- study/src/client/entryPoints.js | 2 +- study/src/client/typings/main.d.ts | 7 - 6 files changed, 423 insertions(+), 256 deletions(-) delete mode 100644 study/src/client/typings/main.d.ts diff --git a/study/package-lock.json b/study/package-lock.json index f9883a80074..76597a7c85f 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -215,21 +215,21 @@ } }, "@hot-loader/react-dom": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/@hot-loader/react-dom/-/react-dom-16.9.0.tgz", - "integrity": "sha512-MsOdCBB7c5YNyB4iDDct+tS7AihvYyfwZVV+z/QnbTjPgxH98kqIDXO92nU7tLXp0OtYFErHZfcWjtszP/572w==", + "version": "16.13.0", + "resolved": "https://registry.npmjs.org/@hot-loader/react-dom/-/react-dom-16.13.0.tgz", + "integrity": "sha512-lJZrmkucz2MrQJTQtJobx5MICXcfQvKihszqv655p557HPi0hMOWxrNpiHv3DWD8ugNWjtWcVWqRnFvwsHq1mQ==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "scheduler": "^0.15.0" + "scheduler": "^0.19.0" }, "dependencies": { "scheduler": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", - "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "dev": true, "requires": { "loose-envify": "^1.1.0", @@ -553,12 +553,6 @@ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true - }, "ajv": { "version": "6.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", @@ -596,9 +590,9 @@ "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { @@ -745,6 +739,12 @@ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -1111,9 +1111,9 @@ "dev": true }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -1256,14 +1256,14 @@ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, "code-point-at": { @@ -1782,9 +1782,9 @@ } }, "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "dev": true }, "domain-browser": { @@ -1832,6 +1832,12 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "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 + }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -2242,9 +2248,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, "file-uri-to-path": { @@ -2318,26 +2324,15 @@ } }, "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", + "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } } }, "flush-write-stream": { @@ -2351,9 +2346,9 @@ } }, "follow-redirects": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz", - "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", + "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", "dev": true, "requires": { "debug": "^3.0.0" @@ -2460,9 +2455,9 @@ "dev": true }, "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", "dev": true, "optional": true, "requires": { @@ -2516,7 +2511,7 @@ } }, "chownr": { - "version": "1.1.3", + "version": "1.1.4", "bundled": true, "dev": true, "optional": true @@ -2688,7 +2683,7 @@ } }, "minimist": { - "version": "0.0.8", + "version": "1.2.5", "bundled": true, "dev": true, "optional": true @@ -2713,12 +2708,12 @@ } }, "mkdirp": { - "version": "0.5.1", + "version": "0.5.3", "bundled": true, "dev": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "ms": { @@ -2728,7 +2723,7 @@ "optional": true }, "needle": { - "version": "2.4.0", + "version": "2.3.3", "bundled": true, "dev": true, "optional": true, @@ -2757,7 +2752,7 @@ } }, "nopt": { - "version": "4.0.1", + "version": "4.0.3", "bundled": true, "dev": true, "optional": true, @@ -2782,13 +2777,14 @@ "optional": true }, "npm-packlist": { - "version": "1.4.7", + "version": "1.4.8", "bundled": true, "dev": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npmlog": { @@ -2868,18 +2864,10 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } } }, "readable-stream": { - "version": "2.3.6", + "version": "2.3.7", "bundled": true, "dev": true, "optional": true, @@ -3023,9 +3011,9 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-stream": { @@ -3089,14 +3077,25 @@ } }, "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } } }, "global-prefix": { @@ -3145,9 +3144,9 @@ "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, "has": { @@ -3273,9 +3272,9 @@ } }, "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", "dev": true }, "http-deceiver": { @@ -3483,6 +3482,12 @@ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -3817,9 +3822,9 @@ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "loglevel": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.7.tgz", - "integrity": "sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", "dev": true }, "loose-envify": { @@ -4073,9 +4078,9 @@ } }, "mkdirp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" @@ -4442,9 +4447,9 @@ "dev": true }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -4465,6 +4470,15 @@ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -4985,19 +4999,18 @@ } }, "react-hot-loader": { - "version": "4.8.8", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.8.8.tgz", - "integrity": "sha512-58bgeS7So8V93MhhnKogbraor8xdrTncil+b6IoIXkTIr3blJNAE7bU4tn/iJvy2J7rjxQmKFRaxKrWdKUZpqg==", + "version": "4.12.20", + "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.20.tgz", + "integrity": "sha512-lPlv1HVizi0lsi+UFACBJaydtRYILWkfHAC/lyCs6ZlAxlOZRQIfYHDqiGaRvL/GF7zyti+Qn9XpnDAUvdFA4A==", "dev": true, "requires": { "fast-levenshtein": "^2.0.6", "global": "^4.3.0", "hoist-non-react-statics": "^3.3.0", "loader-utils": "^1.1.0", - "lodash": "^4.17.11", "prop-types": "^15.6.1", "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.0.2", + "shallowequal": "^1.1.0", "source-map": "^0.7.3" } }, @@ -5255,9 +5268,9 @@ "dev": true }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "requires-port": { @@ -5296,6 +5309,19 @@ "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } } }, "resolve-from": { @@ -5321,10 +5347,16 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, "rimraf": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.1.tgz", - "integrity": "sha512-IQ4ikL8SjBiEDZfk+DFVwqRK8md24RWMEJkdSlgNLkyyAImcjf8SWvU1qFMDOb4igBClbTQ/ugPqXcRwdFTxZw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -5568,9 +5600,9 @@ "dev": true }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "snapdragon": { @@ -5697,9 +5729,9 @@ } }, "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "dev": true, "requires": { "debug": "^3.2.5", @@ -5786,9 +5818,9 @@ "dev": true }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -5947,13 +5979,14 @@ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "string.prototype.trimleft": { @@ -5984,12 +6017,12 @@ } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "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": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "strip-eof": { @@ -6018,9 +6051,9 @@ "dev": true }, "terser": { - "version": "4.6.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.7.tgz", - "integrity": "sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g==", + "version": "4.6.11", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.11.tgz", + "integrity": "sha512-76Ynm7OXUG5xhOpblhytE7X58oeNSmC8xnNhjWVo8CksHit0U0kO4hfNbPrrYwowLWFgM2n9L176VNx2QaHmtA==", "dev": true, "requires": { "commander": "^2.20.0", @@ -6378,9 +6411,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", "dev": true }, "value-equal": { @@ -6430,12 +6463,12 @@ } }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "dev": true, "requires": { - "chokidar": "^2.0.2", + "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" } @@ -6450,54 +6483,92 @@ } }, "webpack": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.33.0.tgz", - "integrity": "sha512-ggWMb0B2QUuYso6FPZKUohOgfm+Z0sVFs8WwWuSH1IAvkWs428VDNmOlAxvHGTB9Dm/qOB/qtE5cRx5y01clxw==", + "version": "4.42.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", + "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", "dev": true, "requires": { "@webassemblyjs/ast": "1.8.5", "@webassemblyjs/helper-module-context": "1.8.5", "@webassemblyjs/wasm-edit": "1.8.5", "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.0.5", - "acorn-dynamic-import": "^4.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", + "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" } }, "webpack-cli": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.2.tgz", - "integrity": "sha512-FLkobnaJJ+03j5eplxlI0TUxhGCOdfewspIGuvDVtpOlrAuKMFC57K42Ukxqs1tn8947/PM6tP95gQc0DCzRYA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.5" + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz", + "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" + }, + "dependencies": { + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "webpack-dev-middleware": { @@ -6522,40 +6593,43 @@ } }, "webpack-dev-server": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.6.0.tgz", - "integrity": "sha512-49CWhocbMzjNW2Dzo3ETnxtzifcKGx4Pa3Hx+sl0hBU5/t7zJTkOvMP1sCnu9/qGNDYW1PKCuszYQn5r2g5Sww==", + "version": "3.10.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz", + "integrity": "sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ==", "dev": true, "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.1.6", + "chokidar": "^2.1.8", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", "debug": "^4.1.1", "del": "^4.1.1", "express": "^4.17.1", "html-entities": "^1.2.1", - "http-proxy-middleware": "^0.19.1", + "http-proxy-middleware": "0.19.1", "import-local": "^2.0.0", "internal-ip": "^4.3.0", "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", "killable": "^1.0.1", - "loglevel": "^1.6.2", + "loglevel": "^1.6.6", "opn": "^5.5.0", - "portfinder": "^1.0.20", + "p-retry": "^3.0.1", + "portfinder": "^1.0.25", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.4", - "semver": "^6.1.1", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", "serve-index": "^1.9.1", "sockjs": "0.3.19", - "sockjs-client": "1.3.0", - "spdy": "^4.0.0", + "sockjs-client": "1.4.0", + "spdy": "^4.0.1", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.0", + "webpack-dev-middleware": "^3.7.2", "webpack-log": "^2.0.0", + "ws": "^6.2.1", "yargs": "12.0.5" }, "dependencies": { @@ -6565,6 +6639,34 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.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 + }, + "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" + } + } + } + }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", @@ -6574,18 +6676,57 @@ "ms": "^2.1.1" } }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "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" + }, + "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 + }, + "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" + } + } + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -6603,6 +6744,68 @@ "requires": { "has-flag": "^3.0.0" } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -6681,50 +6884,14 @@ } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" } }, "wrappy": { @@ -6733,6 +6900,15 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -6760,29 +6936,28 @@ } }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/study/package.json b/study/package.json index c81092e5524..9709b000847 100644 --- a/study/package.json +++ b/study/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "scripts": { - "setup": "npm install", + "setup": "npm ci", "build": "npm run clean && better-npm-run build:prod", "start": "better-npm-run build:watch", "build-prod": "npm run build", @@ -32,14 +32,13 @@ "@labkey/components": "0.48.2-fb-datasetDesigner.0" }, "devDependencies": { - "@hot-loader/react-dom": "16.9.0", + "@hot-loader/react-dom": "16.13.0", "@types/react-hot-loader": "4.1.0", "better-npm-run": "0.1.1", - "react-hot-loader": "4.8.8", - "rimraf": "3.0.1", - "webpack": "4.33.0", - "webpack-cli": "3.3.2", - "webpack-dev-server": "3.6.0" - }, - "typings": "./src/client/typings/main.d.ts" + "react-hot-loader": "4.12.20", + "rimraf": "3.0.2", + "webpack": "4.42.0", + "webpack-cli": "3.3.11", + "webpack-dev-server": "3.10.3" + } } diff --git a/study/src/client/DatasetDesigner/app.tsx b/study/src/client/DatasetDesigner/app.tsx index c112cbdfd62..4def1a6137f 100644 --- a/study/src/client/DatasetDesigner/app.tsx +++ b/study/src/client/DatasetDesigner/app.tsx @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as React from 'react' -import * as ReactDOM from 'react-dom' +import React from 'react' +import ReactDOM from 'react-dom' import { App } from './DatasetDesigner' // Need to wait for container element to be available in labkey wrapper before render diff --git a/study/src/client/DatasetDesigner/dev.tsx b/study/src/client/DatasetDesigner/dev.tsx index f52fbd39fd0..0a05f555504 100644 --- a/study/src/client/DatasetDesigner/dev.tsx +++ b/study/src/client/DatasetDesigner/dev.tsx @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import * as React from 'react' -import * as ReactDOM from 'react-dom' +import React from 'react' +import ReactDOM from 'react-dom' import { AppContainer } from 'react-hot-loader' import { App } from './DatasetDesigner' diff --git a/study/src/client/entryPoints.js b/study/src/client/entryPoints.js index 998248b6cb3..f93c30c3090 100644 --- a/study/src/client/entryPoints.js +++ b/study/src/client/entryPoints.js @@ -7,7 +7,7 @@ module.exports = { apps: [{ name: 'datasetDesigner', title: 'Dataset Designer', - permission: 'admin', // this is admin so that direct access to this view has highest level perm, see StudyController.Action for main usage + permission: 'admin', // this is admin so that direct access to this view has highest level perm, see StudyController.EditTypeAction for main usage path: './src/client/DatasetDesigner' }] }; \ No newline at end of file diff --git a/study/src/client/typings/main.d.ts b/study/src/client/typings/main.d.ts deleted file mode 100644 index 6decdb61b39..00000000000 --- a/study/src/client/typings/main.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -type LabKey = { - container: any - contextPath: string -}; - -/* App globals */ -declare const LABKEY: LabKey; \ No newline at end of file From 3fa967ff1b224a2e7c7e8889dcd2b4efd6dcc8e2 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Tue, 14 Apr 2020 12:12:54 -0700 Subject: [PATCH 12/73] Applies feedback from question-review round --- .../labkey/study/model/DatasetDomainKind.java | 52 +++++-------------- .../model/DatasetDomainKindProperties.java | 1 - 2 files changed, 13 insertions(+), 40 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index c88f569212c..c3e838fe138 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -75,8 +75,6 @@ import java.util.Set; import java.util.stream.Collectors; -import static org.labkey.study.controllers.BaseStudyController.getStudy; - /** * User: matthewb * Date: May 4, 2007 @@ -336,14 +334,11 @@ public boolean canCreateDefinition(User user, Container container) @Override public DatasetDomainKindProperties getDomainKindProperties(@NotNull GWTDomain domain, Container container, User user) { -// RP Q: is this the correct approach here? How to guard against these nullpointers? // temp note: read-only properties set, code as seen in DatasetServiceImpl.getDataset() - int id = StudyService.get().getDatasetIdByName(container, domain.getName()); - Dataset ds = StudyService.get().getDataset(container, id); + Dataset ds = getDatasetDefinition(domain.getDomainURI()); DatasetDomainKindProperties datasetProperties = new DatasetDomainKindProperties(ds); - if (container.isProject() && StudyService.get().getStudy(container).isDataspaceStudy()) { datasetProperties.setDefinitionIsShared(true); @@ -394,12 +389,9 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen boolean demographics = arguments.isDemographicData(); String keyPropertyName = arguments.getKeyPropertyName(); - // RP TODO: Looks like this exists on DatasetDefinition and defaults to false. Is it determinable from DatasetDomainKindProperties..? - // Maybe whether the additional key column name is time..? Or..? -// boolean useTimeKeyField = arguments.containsKey("useTimeKeyField") ? (Boolean)arguments.get("useTimeKeyField") : false; - boolean useTimeKeyField = false; + boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(arguments.getKeyPropertyName()); - // RP TODO: Not sure where this should come from + // RP TODO: Not sure where this should come from // boolean strictFieldValidation = arguments.containsKey("strictFieldValidation") ? (Boolean)arguments.get("strictFieldValidation") : true; boolean strictFieldValidation = true; @@ -512,9 +504,8 @@ else if (categoryId != null) } } - // todo rp: should these two helper functions be moved somewhere else? - private ValidationException checkCanUpdate(Dataset ds, ValidationException exception, Container container, User user, - GWTDomain original, GWTDomain update) + private ValidationException validateDatasetProperties(Dataset ds, ValidationException exception, Container container, User user, + GWTDomain original, GWTDomain update) { if (!container.hasPermission(user, AdminPermission.class)) return exception.addGlobalError("Unauthorized"); @@ -562,17 +553,14 @@ private ValidationException updateDomainDescriptor(GWTDomain Date: Tue, 14 Apr 2020 17:04:13 -0700 Subject: [PATCH 13/73] Item 7066: partially working dataset designer wrapper to view existing properties of dataset --- study/package-lock.json | 6 +++--- study/package.json | 2 +- .../client/DatasetDesigner/DatasetDesigner.tsx | 4 +++- .../study/controllers/StudyController.java | 2 ++ .../study/model/DatasetDomainKindProperties.java | 16 ++++++++++++++++ 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/study/package-lock.json b/study/package-lock.json index 76597a7c85f..4d05296b86f 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-OKBFHbzPMekCqNW7raEq+FtBzOA=" }, "@labkey/components": { - "version": "0.48.2-fb-datasetDesigner.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.48.2-fb-datasetDesigner.0.tgz", - "integrity": "sha1-xaax3Sd49+cK4+LEVqxnTLQh6ZU=", + "version": "0.48.2-fb-datasetDesigner.1", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.48.2-fb-datasetDesigner.1.tgz", + "integrity": "sha1-zN0QMiO061DQ57D66QlNnHWnxoQ=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index 9709b000847..c72a2c57418 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.48.2-fb-datasetDesigner.0" + "@labkey/components": "0.48.2-fb-datasetDesigner.1" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/src/client/DatasetDesigner/DatasetDesigner.tsx b/study/src/client/DatasetDesigner/DatasetDesigner.tsx index 1228e1c949d..0b994c9e296 100644 --- a/study/src/client/DatasetDesigner/DatasetDesigner.tsx +++ b/study/src/client/DatasetDesigner/DatasetDesigner.tsx @@ -35,9 +35,11 @@ export class App extends PureComponent { constructor(props) { super(props); + const { datasetId } = ActionURL.getParameters(); + this.state = { model: undefined, - datasetId : undefined, + datasetId : datasetId, returnUrl : undefined, isLoadingModel: true, dirty: false diff --git a/study/src/org/labkey/study/controllers/StudyController.java b/study/src/org/labkey/study/controllers/StudyController.java index d46e5aa6419..47ec5916f75 100644 --- a/study/src/org/labkey/study/controllers/StudyController.java +++ b/study/src/org/labkey/study/controllers/StudyController.java @@ -56,6 +56,8 @@ import org.labkey.api.exp.api.ExperimentService; import org.labkey.api.exp.api.ProvenanceService; import org.labkey.api.exp.property.Domain; +import org.labkey.api.exp.property.DomainUtil; +import org.labkey.api.gwt.client.model.GWTDomain; import org.labkey.api.gwt.server.BaseRemoteService; import org.labkey.api.module.FolderTypeManager; import org.labkey.api.module.ModuleHtmlView; diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 7e745f26d3c..8f721be1473 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -28,6 +28,8 @@ public class DatasetDomainKindProperties protected String _sourceAssayUrl; protected String _dataSharing; + protected int _domainId; + // read-only (not changed in the editor) private boolean _definitionIsShared = false; private boolean _visitMapShared = false; @@ -71,6 +73,10 @@ public DatasetDomainKindProperties(Dataset ds) _sourceAssayName = protocol.getName(); _sourceAssayUrl = PageFlowUtil.urlProvider(AssayUrls.class).getAssayResultsURL(protocol.getContainer(), protocol).getLocalURIString(); } + if (null != ds.getDomain()) + { + _domainId = ds.getDomain().getTypeId(); + } } public Map getVisitDateMap() @@ -277,4 +283,14 @@ public Integer getCategoryId() { return _categoryId; } + + public int getDomainId() + { + return _domainId; + } + + public void setDomainId(int domainId) + { + _domainId = domainId; + } } From d0dae01ff5f0507f1577a931cb5ba9292b0f49bc Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Wed, 15 Apr 2020 09:33:30 -0700 Subject: [PATCH 14/73] Item 7066: partially working save dataset designer --- study/package-lock.json | 6 +-- study/package.json | 2 +- .../DatasetDesigner/DatasetDesigner.tsx | 41 ++++++++++++++++--- .../model/DatasetDomainKindProperties.java | 30 +++++++------- 4 files changed, 55 insertions(+), 24 deletions(-) diff --git a/study/package-lock.json b/study/package-lock.json index 4d05296b86f..4b4f84381f5 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-OKBFHbzPMekCqNW7raEq+FtBzOA=" }, "@labkey/components": { - "version": "0.48.2-fb-datasetDesigner.1", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.48.2-fb-datasetDesigner.1.tgz", - "integrity": "sha1-zN0QMiO061DQ57D66QlNnHWnxoQ=", + "version": "0.48.2-fb-datasetDesigner.2", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.48.2-fb-datasetDesigner.2.tgz", + "integrity": "sha1-TnYepgt1aLhrVsc9O/qT/nNgBMQ=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index c72a2c57418..b5a4ad9905d 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.48.2-fb-datasetDesigner.1" + "@labkey/components": "0.48.2-fb-datasetDesigner.2" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/src/client/DatasetDesigner/DatasetDesigner.tsx b/study/src/client/DatasetDesigner/DatasetDesigner.tsx index 0b994c9e296..c25a2d558bf 100644 --- a/study/src/client/DatasetDesigner/DatasetDesigner.tsx +++ b/study/src/client/DatasetDesigner/DatasetDesigner.tsx @@ -15,10 +15,8 @@ */ import React, {PureComponent} from "react"; -import {Alert, DatasetDesignerPanels, fetchDatasetDesign, getDatasetProperties, LoadingSpinner} from "@labkey/components"; -import { ActionURL, getServerContext } from "@labkey/api"; -import {DatasetModel} from "@labkey/components/dist/components/domainproperties/dataset/models"; - +import {Alert, DatasetDesignerPanels, DatasetModel, fetchDatasetDesign, getDatasetProperties, LoadingSpinner} from "@labkey/components"; +import { ActionURL, Domain, getServerContext } from "@labkey/api"; import "@labkey/components/dist/components.css" interface State { @@ -29,6 +27,7 @@ interface State { dirty: boolean, hasDatasetDesignPermission?: boolean, returnUrl: string, + fileImportError: string } export class App extends PureComponent { @@ -42,7 +41,8 @@ export class App extends PureComponent { datasetId : datasetId, returnUrl : undefined, isLoadingModel: true, - dirty: false + dirty: false, + fileImportError: undefined }; } @@ -93,6 +93,36 @@ export class App extends PureComponent { }); } + navigateOnComplete(model: DatasetModel) { + // if the model comes back to here without the newly saved datasetId, query to get it + if (model.datasetId && model.datasetId > 0) { + this.navigate(ActionURL.buildURL('study', 'datasetDetails', getServerContext().container.path, {id: model.datasetId})); + } + else { + Domain.getDomainDetails({ + containerPath: getServerContext().container.path, + domainId: model.domain.domainId, + success: (data) => { + const newModel = DatasetModel.create(undefined, data); + this.navigate(ActionURL.buildURL('study', 'datasetDetails', getServerContext().container.path, {id: newModel.datasetId})); + }, + failure: (error) => { + // bail out and go to the study-begin page + this.navigate(ActionURL.buildURL('study', 'begin', getServerContext().container.path)); + } + }); + } + } + + onComplete = (model: DatasetModel, fileImportError?: string) => { + if (fileImportError) { + this.setState(() => ({fileImportError, model})); + } + else { + this.navigateOnComplete(model); + } + }; + onCancel = () => { this.navigate(ActionURL.buildURL('study', 'begin', getServerContext().container.path)); }; @@ -116,6 +146,7 @@ export class App extends PureComponent { showDataSpace={false} showVisitDate={true} useTheme={true} + onComplete={this.onComplete} /> ) diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 8f721be1473..70485eacf40 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -7,16 +7,16 @@ import java.util.Map; -public class DatasetDomainKindProperties +public class DatasetDomainKindProperties implements Cloneable { protected Integer _datasetId; protected String _name; protected String _description; protected String _category; - protected Integer _categoryId; + protected Integer categoryId; protected String _label; - protected String _typeURI; +// protected String _typeURI; protected String _visitDatePropertyName; protected String _keyPropertyName; protected boolean _keyPropertyManaged = false; @@ -54,10 +54,10 @@ public DatasetDomainKindProperties(Dataset ds) if (ds.getViewCategory() != null) { _category = ds.getViewCategory().getLabel(); - _categoryId = ds.getViewCategory().getRowId(); + categoryId = ds.getViewCategory().getRowId(); } _label = ds.getLabel(); - _typeURI = ds.getTypeURI(); +// _typeURI = ds.getTypeURI(); _keyPropertyName = ds.getKeyPropertyName(); _isDemographicData = ds.isDemographicData(); _showByDefault = ds.isShowByDefault(); @@ -169,15 +169,15 @@ public void setLabel(String label) _label = label; } - public String getTypeURI() - { - return _typeURI; - } - - public void setTypeURI(String typeURI) - { - _typeURI = typeURI; - } +// public String getTypeURI() +// { +// return _typeURI; +// } +// +// public void setTypeURI(String typeURI) +// { +// _typeURI = typeURI; +// } public String getVisitDatePropertyName() { @@ -281,7 +281,7 @@ public void setDataSharing(String dataSharing) public Integer getCategoryId() { - return _categoryId; + return categoryId; } public int getDomainId() From 80233a9d6acfa60f28b3b371f45273a1c67aec4c Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Wed, 15 Apr 2020 12:53:14 -0700 Subject: [PATCH 15/73] Handles more edge cases for create and update --- .../study/controllers/DatasetServiceImpl.java | 2 +- .../labkey/study/model/DatasetDefinition.java | 3 - .../labkey/study/model/DatasetDomainKind.java | 68 ++++++------------- .../model/DatasetDomainKindProperties.java | 24 ------- 4 files changed, 21 insertions(+), 76 deletions(-) diff --git a/study/src/org/labkey/study/controllers/DatasetServiceImpl.java b/study/src/org/labkey/study/controllers/DatasetServiceImpl.java index d12b1a8c0ce..285d7c76166 100644 --- a/study/src/org/labkey/study/controllers/DatasetServiceImpl.java +++ b/study/src/org/labkey/study/controllers/DatasetServiceImpl.java @@ -245,7 +245,7 @@ private List updateDataset(GWTDataset ds, String domainURI) ds.setKeyPropertyName(null); useTimeKeyField = true; } - BeanUtils.copyProperties(updated, ds); // updated already has displayOrder, entityId, but not category or categoryId. Category exists on ds + BeanUtils.copyProperties(updated, ds); if (ds.getKeyPropertyName() != null) { diff --git a/study/src/org/labkey/study/model/DatasetDefinition.java b/study/src/org/labkey/study/model/DatasetDefinition.java index faf3e8c4de4..793c2b33978 100644 --- a/study/src/org/labkey/study/model/DatasetDefinition.java +++ b/study/src/org/labkey/study/model/DatasetDefinition.java @@ -166,9 +166,6 @@ public class DatasetDefinition extends AbstractStudyEntity im private boolean _useTimeKeyField = false; - - - private static final String[] BASE_DEFAULT_FIELD_NAMES_ARRAY = new String[] { "Container", diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index c3e838fe138..c46fd8d66b9 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -334,8 +334,6 @@ public boolean canCreateDefinition(User user, Container container) @Override public DatasetDomainKindProperties getDomainKindProperties(@NotNull GWTDomain domain, Container container, User user) { -// temp note: read-only properties set, code as seen in DatasetServiceImpl.getDataset() - Dataset ds = getDatasetDefinition(domain.getDomainURI()); DatasetDomainKindProperties datasetProperties = new DatasetDomainKindProperties(ds); @@ -346,38 +344,9 @@ public DatasetDomainKindProperties getDomainKindProperties(@NotNull GWTDomain do datasetProperties.setVisitMapShared(true); } - List cohorts = StudyManager.getInstance().getCohorts(container, user); - Map cohortMap = new HashMap<>(); - if (cohorts != null && cohorts.size() > 0) - { - cohortMap.put("All", ""); - for (CohortImpl cohort : cohorts) - cohortMap.put(cohort.getLabel(), String.valueOf(cohort.getRowId())); - } - datasetProperties.setCohortMap(cohortMap); - - Map visitDateMap = new HashMap<>(); - TableInfo tinfo = ds.getTableInfo(user, false); - for (ColumnInfo col : tinfo.getColumns()) - { - if (!Date.class.isAssignableFrom(col.getJavaClass())) - continue; - if (col.getName().equalsIgnoreCase("visitdate")) - continue; - if (col.getName().equalsIgnoreCase("modified")) - continue; - if (col.getName().equalsIgnoreCase("created")) - continue; - if (visitDateMap.isEmpty()) - visitDateMap.put("", ""); - visitDateMap.put(col.getName(), col.getName()); - } - datasetProperties.setVisitDateMap(visitDateMap); - return datasetProperties; } - // TODO RP: Test thoroughly @Override public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties arguments, Container container, User user, @Nullable TemplateInfo templateInfo) @@ -388,28 +357,35 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen String categoryName = arguments.getCategory(); boolean demographics = arguments.isDemographicData(); String keyPropertyName = arguments.getKeyPropertyName(); - - boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(arguments.getKeyPropertyName()); - - // RP TODO: Not sure where this should come from -// boolean strictFieldValidation = arguments.containsKey("strictFieldValidation") ? (Boolean)arguments.get("strictFieldValidation") : true; - boolean strictFieldValidation = true; - boolean isManagedField = arguments.isKeyPropertyManaged(); + String label = arguments.getLabel(); + boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(arguments.getKeyPropertyName()); - if (name == null) - throw new IllegalArgumentException("Dataset name must not be null"); + if (name == null || name.length() == 0) + throw new IllegalArgumentException("Dataset name must not be empty"); StudyImpl study = StudyManager.getInstance().getStudy(container); if (study == null) throw new IllegalArgumentException("A study does not exist for this folder"); + if (null != StudyManager.getInstance().getDatasetDefinitionByName(study, name) || null != QueryService.get().getQueryDef(user, container, "study", name)) + throw new IllegalArgumentException("A Dataset or Query already exists with the name \"" + name +"\""); + + if (null != StudyManager.getInstance().getDatasetDefinitionByLabel(study, label)) + throw new IllegalArgumentException("A Dataset already exists with the label \"" + label +"\""); + + if (null != datasetId && null != study.getDataset(datasetId)) + throw new IllegalArgumentException("A Dataset already exists with the datasetId \"" + datasetId +"\""); + if (categoryId != null && categoryName != null) throw new IllegalArgumentException("Category ID and category name cannot both be specified"); if (isManagedField && keyPropertyName == null) throw new IllegalArgumentException("KeyPropertyName must be specified if isManagedField is true"); + if (null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) + throw new IllegalArgumentException("\"KeyPropertyName \"" + keyPropertyName +"\" must be the name of a column"); + // make sure the domain matches the timepoint type TimepointType timepointType = study.getTimepointType(); if (timepointType.isVisitBased() && getKindName().equals(DateDatasetDomainKind.KIND_NAME)) @@ -476,8 +452,7 @@ else if (categoryId != null) { if (lowerReservedNames.contains(pd.getName().toLowerCase()) || existingProperties.contains(pd.getName().toLowerCase())) { - if (strictFieldValidation) - throw new IllegalArgumentException("Property: " + pd.getName() + " is reserved or exists in the current domain."); + throw new IllegalArgumentException("Property: " + pd.getName() + " is reserved or exists in the current domain."); } else DomainUtil.addProperty(newDomain, pd, defaultValues, propertyUris, null); @@ -504,7 +479,7 @@ else if (categoryId != null) } } - private ValidationException validateDatasetProperties(Dataset ds, ValidationException exception, Container container, User user, + private ValidationException validateDatasetProperties(DatasetDefinition def, ValidationException exception, Container container, User user, GWTDomain original, GWTDomain update) { if (!container.hasPermission(user, AdminPermission.class)) @@ -514,7 +489,6 @@ private ValidationException validateDatasetProperties(Dataset ds, ValidationExce if (null == study) return exception.addGlobalError("Study not found in current container"); - DatasetDefinition def = (DatasetDefinition)study.getDataset(ds.getDatasetId()); if (null == def) return exception.addGlobalError("Dataset not found"); @@ -525,8 +499,8 @@ private ValidationException validateDatasetProperties(Dataset ds, ValidationExce if (null == d) return exception.addGlobalError("Domain not found: " + update.getDomainURI()); - if (!ds.getTypeURI().equals(original.getDomainURI()) || - !ds.getTypeURI().equals(update.getDomainURI())) + if (!def.getTypeURI().equals(original.getDomainURI()) || + !def.getTypeURI().equals(update.getDomainURI())) return exception.addGlobalError("Illegal Argument"); return exception; @@ -567,7 +541,6 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro ". Demographic data includes one row of data per " + StudyService.get().getSubjectNounSingular(container) + "."); } - // Temp note: Taken from study/gwtsrc/gwt/client/org/labkey/study/dataset/client/Designer.java, starting line 1120 if (datasetProperties.getName() == null || datasetProperties.getName().length() == 0) exception.addGlobalError("Dataset name cannot be empty."); @@ -577,7 +550,6 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro if ("".equals(datasetProperties.getKeyPropertyName())) exception.addGlobalError("Please select a field name for the additional key."); - // TODO RP: Make sure this covers intended cases if (datasetProperties.isKeyPropertyManaged() && (datasetProperties.getKeyPropertyName() == null || datasetProperties.getName().length() == 0)) exception.addGlobalError("Please select a field name for the additional key."); diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 70485eacf40..79e90fc5316 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -37,10 +37,6 @@ public class DatasetDomainKindProperties implements Cloneable public static final String TIME_KEY_FIELD_KEY = "_Special$Time_"; public static final String TIME_KEY_FIELD_DISPLAY = "Time (from Date/Time)"; - private Map _cohortMap; - - private Map _visitDateMap; - public DatasetDomainKindProperties() { // This does not give a default typeURI, or dataSharing value, or datasetId, as GWTDataset does in getDataset() @@ -79,16 +75,6 @@ public DatasetDomainKindProperties(Dataset ds) } } - public Map getVisitDateMap() - { - return _visitDateMap; - } - - public void setVisitDateMap(Map visitDateMap) - { - _visitDateMap = visitDateMap; - } - public boolean isVisitMapShared() { return _visitMapShared; @@ -109,16 +95,6 @@ public void setDefinitionIsShared(boolean definitionIsShared) _definitionIsShared = definitionIsShared; } - public Map getCohortMap() - { - return _cohortMap; - } - - public void setCohortMap(Map cohortMap) - { - _cohortMap = cohortMap; - } - public Integer getDatasetId() { return _datasetId; From 9367e8b6927a1e898bae08fb1fa9ebd60d1f4aa0 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Wed, 15 Apr 2020 13:21:26 -0700 Subject: [PATCH 16/73] Removes temp notes to myself --- .../model/DatasetDomainKindProperties.java | 23 ++++--------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 79e90fc5316..55779ef20fe 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -5,25 +5,22 @@ import org.labkey.api.study.Dataset; import org.labkey.api.util.PageFlowUtil; -import java.util.Map; - public class DatasetDomainKindProperties implements Cloneable { protected Integer _datasetId; protected String _name; protected String _description; protected String _category; - protected Integer categoryId; + protected Integer _categoryId; protected String _label; -// protected String _typeURI; protected String _visitDatePropertyName; protected String _keyPropertyName; protected boolean _keyPropertyManaged = false; protected boolean _isDemographicData = false; protected Integer _cohortId = null; protected String _tag; - protected boolean _showByDefault = true; // Temp note RP: This is the 'showInOverview' property + protected boolean _showByDefault = true; protected String _sourceAssayName; protected String _sourceAssayUrl; protected String _dataSharing; @@ -39,7 +36,6 @@ public class DatasetDomainKindProperties implements Cloneable public DatasetDomainKindProperties() { - // This does not give a default typeURI, or dataSharing value, or datasetId, as GWTDataset does in getDataset() } public DatasetDomainKindProperties(Dataset ds) @@ -50,10 +46,9 @@ public DatasetDomainKindProperties(Dataset ds) if (ds.getViewCategory() != null) { _category = ds.getViewCategory().getLabel(); - categoryId = ds.getViewCategory().getRowId(); + _categoryId = ds.getViewCategory().getRowId(); } _label = ds.getLabel(); -// _typeURI = ds.getTypeURI(); _keyPropertyName = ds.getKeyPropertyName(); _isDemographicData = ds.isDemographicData(); _showByDefault = ds.isShowByDefault(); @@ -145,16 +140,6 @@ public void setLabel(String label) _label = label; } -// public String getTypeURI() -// { -// return _typeURI; -// } -// -// public void setTypeURI(String typeURI) -// { -// _typeURI = typeURI; -// } - public String getVisitDatePropertyName() { return _visitDatePropertyName; @@ -257,7 +242,7 @@ public void setDataSharing(String dataSharing) public Integer getCategoryId() { - return categoryId; + return _categoryId; } public int getDomainId() From 02edfc90febea384aea3f2e840917bfc146b0d3a Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Wed, 15 Apr 2020 16:43:49 -0700 Subject: [PATCH 17/73] Tweaks exception catching. Changes isDemographicData to demographicData for consistency --- .../org/labkey/study/model/DatasetDomainKind.java | 15 ++++++++++++--- .../study/model/DatasetDomainKindProperties.java | 9 ++++----- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index c46fd8d66b9..13d9fc1609b 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -361,6 +361,9 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen String label = arguments.getLabel(); boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(arguments.getKeyPropertyName()); + if (useTimeKeyField) + keyPropertyName = null; + if (name == null || name.length() == 0) throw new IllegalArgumentException("Dataset name must not be empty"); @@ -381,10 +384,13 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen throw new IllegalArgumentException("Category ID and category name cannot both be specified"); if (isManagedField && keyPropertyName == null) - throw new IllegalArgumentException("KeyPropertyName must be specified if isManagedField is true"); + throw new IllegalArgumentException("Additional Key Column must be specified if it is a managed field"); + + if (!useTimeKeyField && null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) + throw new IllegalArgumentException("\"Additional Key Column name \"" + keyPropertyName +"\" must be the name of a column"); - if (null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) - throw new IllegalArgumentException("\"KeyPropertyName \"" + keyPropertyName +"\" must be the name of a column"); + if (demographics && (isManagedField || keyPropertyName != null)) + throw new IllegalArgumentException("There can not be an Additional Key Column if the dataset is Demographic Data"); // make sure the domain matches the timepoint type TimepointType timepointType = study.getTimepointType(); @@ -553,6 +559,9 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro if (datasetProperties.isKeyPropertyManaged() && (datasetProperties.getKeyPropertyName() == null || datasetProperties.getName().length() == 0)) exception.addGlobalError("Please select a field name for the additional key."); + if (DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(datasetProperties.getKeyPropertyName()) && datasetProperties.isKeyPropertyManaged()) + exception.addGlobalError("Additional key cannot be a managed field if KeyPropertyName is Time (from Date/Time)"); + if (exception.hasErrors()) return exception; diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 55779ef20fe..ce07e2150dd 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -17,7 +17,7 @@ public class DatasetDomainKindProperties implements Cloneable protected String _visitDatePropertyName; protected String _keyPropertyName; protected boolean _keyPropertyManaged = false; - protected boolean _isDemographicData = false; + protected boolean _demographicData = false; protected Integer _cohortId = null; protected String _tag; protected boolean _showByDefault = true; @@ -32,7 +32,6 @@ public class DatasetDomainKindProperties implements Cloneable private boolean _visitMapShared = false; public static final String TIME_KEY_FIELD_KEY = "_Special$Time_"; - public static final String TIME_KEY_FIELD_DISPLAY = "Time (from Date/Time)"; public DatasetDomainKindProperties() { @@ -50,7 +49,7 @@ public DatasetDomainKindProperties(Dataset ds) } _label = ds.getLabel(); _keyPropertyName = ds.getKeyPropertyName(); - _isDemographicData = ds.isDemographicData(); + _demographicData = ds.isDemographicData(); _showByDefault = ds.isShowByDefault(); _cohortId = ds.getCohortId(); _visitDatePropertyName = ds.getVisitDatePropertyName(); @@ -172,12 +171,12 @@ public void setKeyPropertyManaged(boolean keyPropertyManaged) public boolean isDemographicData() { - return _isDemographicData; + return _demographicData; } public void setDemographicData(boolean demographicData) { - _isDemographicData = demographicData; + _demographicData = demographicData; } public Integer getCohortId() From 1b9c9095cf8a90dfb474083c6d1f507afca432bd Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Wed, 15 Apr 2020 17:31:54 -0700 Subject: [PATCH 18/73] Fixes category issue --- .../src/org/labkey/study/model/DatasetDomainKind.java | 11 +---------- .../study/model/DatasetDomainKindProperties.java | 7 ------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 13d9fc1609b..a2abf854233 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -353,12 +353,12 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen { String name = domain.getName(); Integer datasetId = arguments.getDatasetId(); - Integer categoryId = arguments.getCategoryId(); String categoryName = arguments.getCategory(); boolean demographics = arguments.isDemographicData(); String keyPropertyName = arguments.getKeyPropertyName(); boolean isManagedField = arguments.isKeyPropertyManaged(); String label = arguments.getLabel(); + Integer categoryId = null; boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(arguments.getKeyPropertyName()); if (useTimeKeyField) @@ -380,9 +380,6 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen if (null != datasetId && null != study.getDataset(datasetId)) throw new IllegalArgumentException("A Dataset already exists with the datasetId \"" + datasetId +"\""); - if (categoryId != null && categoryName != null) - throw new IllegalArgumentException("Category ID and category name cannot both be specified"); - if (isManagedField && keyPropertyName == null) throw new IllegalArgumentException("Additional Key Column must be specified if it is a managed field"); @@ -407,12 +404,6 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai else throw new IllegalArgumentException("Unable to find a category named : " + categoryName + " in this folder."); } - else if (categoryId != null) - { - // validate the category ID - if (ViewCategoryManager.getInstance().getCategory(container, categoryId) == null) - throw new IllegalArgumentException("Unable to find a category with the ID : " + categoryId + " in this folder."); - } try (DbScope.Transaction transaction = ExperimentService.get().ensureTransaction()) { diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index ce07e2150dd..a9d24b61ed9 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -11,7 +11,6 @@ public class DatasetDomainKindProperties implements Cloneable protected String _name; protected String _description; protected String _category; - protected Integer _categoryId; protected String _label; protected String _visitDatePropertyName; @@ -45,7 +44,6 @@ public DatasetDomainKindProperties(Dataset ds) if (ds.getViewCategory() != null) { _category = ds.getViewCategory().getLabel(); - _categoryId = ds.getViewCategory().getRowId(); } _label = ds.getLabel(); _keyPropertyName = ds.getKeyPropertyName(); @@ -239,11 +237,6 @@ public void setDataSharing(String dataSharing) _dataSharing = dataSharing; } - public Integer getCategoryId() - { - return _categoryId; - } - public int getDomainId() { return _domainId; From f293d6d578614ac7070e990ff2ce32afecf1bdd2 Mon Sep 17 00:00:00 2001 From: cnathe Date: Thu, 16 Apr 2020 15:15:53 -0500 Subject: [PATCH 19/73] Item 7066: misc PR cleanup during code review - update README.md with the module description from module.properties file - Clean up imports in StudyController and StudyService --- .../org/labkey/api/study/StudyService.java | 2 - study/README.md | 8 +- .../study/controllers/StudyController.java | 78 ++++++++++++------- 3 files changed, 53 insertions(+), 35 deletions(-) diff --git a/api/src/org/labkey/api/study/StudyService.java b/api/src/org/labkey/api/study/StudyService.java index 5a88fbdc196..fb0f40cfc10 100644 --- a/api/src/org/labkey/api/study/StudyService.java +++ b/api/src/org/labkey/api/study/StudyService.java @@ -28,8 +28,6 @@ import org.labkey.api.dataiterator.DataIteratorContext; import org.labkey.api.exp.api.ExpProtocol; import org.labkey.api.exp.api.ExpRun; -import org.labkey.api.gwt.client.model.GWTDomain; -import org.labkey.api.gwt.client.model.GWTPropertyDescriptor; import org.labkey.api.pipeline.PipeRoot; import org.labkey.api.pipeline.PipelineJob; import org.labkey.api.query.QuerySchema; diff --git a/study/README.md b/study/README.md index 056dc61fb35..d93eb27aa62 100644 --- a/study/README.md +++ b/study/README.md @@ -1,13 +1,15 @@ -# LabKey Query Module +# LabKey Study Module -The Study module .. +The Study module provides a variety of tools for integration of heterogeneous data types, +such as demographic, clinical, and experimental data. Cohorts and participant groups are +also supported by this module. ### LabKey React pages This module is setup to use `webpack` to build client application pages, mostly for developing with `React` components and `@labkey/components` shared components. The artifacts will be generated and placed into the standard LabKey view locations to make the pages available to the server through -the `query` controller. The generated `.html` and `.view.xml` files will +the `study` controller. The generated `.html` and `.view.xml` files will be placed in the `study/resources/views` directory and the generated JS/CSS artifacts will be placed in the `study/resources/web/experiment/gen` directory. diff --git a/study/src/org/labkey/study/controllers/StudyController.java b/study/src/org/labkey/study/controllers/StudyController.java index 47ec5916f75..f059f794930 100644 --- a/study/src/org/labkey/study/controllers/StudyController.java +++ b/study/src/org/labkey/study/controllers/StudyController.java @@ -31,7 +31,26 @@ import org.jetbrains.annotations.Nullable; import org.json.JSONArray; import org.json.JSONObject; -import org.labkey.api.action.*; +import org.labkey.api.action.ApiResponse; +import org.labkey.api.action.ApiSimpleResponse; +import org.labkey.api.action.ConfirmAction; +import org.labkey.api.action.CustomApiForm; +import org.labkey.api.action.FormApiAction; +import org.labkey.api.action.FormHandlerAction; +import org.labkey.api.action.FormViewAction; +import org.labkey.api.action.GWTServiceAction; +import org.labkey.api.action.HasViewContext; +import org.labkey.api.action.Marshal; +import org.labkey.api.action.Marshaller; +import org.labkey.api.action.MutatingApiAction; +import org.labkey.api.action.QueryViewAction; +import org.labkey.api.action.ReadOnlyApiAction; +import org.labkey.api.action.ReturnUrlForm; +import org.labkey.api.action.SimpleApiJsonForm; +import org.labkey.api.action.SimpleErrorView; +import org.labkey.api.action.SimpleRedirectAction; +import org.labkey.api.action.SimpleViewAction; +import org.labkey.api.action.SpringActionController; import org.labkey.api.admin.AdminUrls; import org.labkey.api.admin.ImportException; import org.labkey.api.admin.ImportOptions; @@ -407,12 +426,13 @@ protected void renderInternal(Object model, PrintWriter out) throws Exception public class DefineDatasetTypeAction extends FormViewAction { private Dataset _def; - boolean experimentalFlagEnabled = AppProps.getInstance().isExperimentalFeatureEnabled(StudyManager.EXPERIMENTAL_DATASET_DESIGNER); + @Override public ModelAndView getView(ImportTypeForm form, boolean reshow, BindException errors) { - if (experimentalFlagEnabled) + if (AppProps.getInstance().isExperimentalFeatureEnabled(StudyManager.EXPERIMENTAL_DATASET_DESIGNER)) { + // TODO do we need the getStudyRedirectIfNull() part here? return ModuleHtmlView.get(ModuleLoader.getInstance().getModule("study"), "datasetDesigner"); } else @@ -510,7 +530,6 @@ public Object execute(DatasetForm form, BindException errors) throws Exception public class EditTypeAction extends SimpleViewAction { private Dataset _def; - boolean experimentalFlagEnabled = AppProps.getInstance().isExperimentalFeatureEnabled(StudyManager.EXPERIMENTAL_DATASET_DESIGNER); @Override public ModelAndView getView(DatasetForm form, BindException errors) @@ -527,38 +546,37 @@ public ModelAndView getView(DatasetForm form, BindException errors) ActionURL details = new ActionURL(DatasetDetailsAction.class,getContainer()).addParameter("id",def.getDatasetId()); throw new RedirectException(details); } - if (experimentalFlagEnabled) + + if (null == def.getTypeURI()) { - return ModuleHtmlView.get(ModuleLoader.getInstance().getModule("study"), "datasetDesigner"); + def = def.createMutable(); + String domainURI = StudyManager.getInstance().getDomainURI(study.getContainer(), getUser(), def); + OntologyManager.ensureDomainDescriptor(domainURI, def.getName(), study.getContainer()); + def.setTypeURI(domainURI); } - else - { - if (null == def.getTypeURI()) - { - def = def.createMutable(); - String domainURI = StudyManager.getInstance().getDomainURI(study.getContainer(), getUser(), def); - OntologyManager.ensureDomainDescriptor(domainURI, def.getName(), study.getContainer()); - def.setTypeURI(domainURI); - } - Map props = PageFlowUtil.map( - "studyId", ""+study.getRowId(), - "datasetId", ""+form.getDatasetId(), - "typeURI", def.getTypeURI(), - "timepointType", ""+study.getTimepointType(), - ActionURL.Param.returnUrl.name(), new ActionURL(DatasetDetailsAction.class, getContainer()).addParameter("id", form.getDatasetId()).toString()); - String cancelUrl = getViewContext().getActionURL().getParameter(ActionURL.Param.cancelUrl.name()); - if (cancelUrl != null) - props.put(ActionURL.Param.cancelUrl.name(), cancelUrl); + if (AppProps.getInstance().isExperimentalFeatureEnabled(StudyManager.EXPERIMENTAL_DATASET_DESIGNER)) + return ModuleHtmlView.get(ModuleLoader.getInstance().getModule("study"), "datasetDesigner"); - HtmlView text = new HtmlView("Modify the properties and schema (form fields/properties) for this dataset."); - HttpView view = new StudyGWTView(Designer.class, props); + // TODO to be deleted with GWT version of dataset designer (lines below this to the end of the method) + Map props = PageFlowUtil.map( + "studyId", ""+study.getRowId(), + "datasetId", ""+form.getDatasetId(), + "typeURI", def.getTypeURI(), + "timepointType", ""+study.getTimepointType(), + ActionURL.Param.returnUrl.name(), new ActionURL(DatasetDetailsAction.class, getContainer()).addParameter("id", form.getDatasetId()).toString()); - // hack for 4404 : Lookup picker performance is terrible when there are many containers - ContainerManager.getAllChildren(ContainerManager.getRoot()); + String cancelUrl = getViewContext().getActionURL().getParameter(ActionURL.Param.cancelUrl.name()); + if (cancelUrl != null) + props.put(ActionURL.Param.cancelUrl.name(), cancelUrl); - return new VBox(text, view); - } + HtmlView text = new HtmlView("Modify the properties and schema (form fields/properties) for this dataset."); + HttpView view = new StudyGWTView(Designer.class, props); + + // hack for 4404 : Lookup picker performance is terrible when there are many containers + ContainerManager.getAllChildren(ContainerManager.getRoot()); + + return new VBox(text, view); } @Override From 632759c488f7747bff2fcce362ce2b957678eeec Mon Sep 17 00:00:00 2001 From: cnathe Date: Thu, 16 Apr 2020 17:10:37 -0500 Subject: [PATCH 20/73] Item 7066: misc PR cleanup during code review - DatasetDomainKindProperties constructor reorder for code readability --- .../study/model/DatasetDomainKindProperties.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index a9d24b61ed9..491d97478f5 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -41,10 +41,6 @@ public DatasetDomainKindProperties(Dataset ds) _datasetId = ds.getDatasetId(); _name = ds.getName(); _description = ds.getDescription(); - if (ds.getViewCategory() != null) - { - _category = ds.getViewCategory().getLabel(); - } _label = ds.getLabel(); _keyPropertyName = ds.getKeyPropertyName(); _demographicData = ds.isDemographicData(); @@ -53,14 +49,20 @@ public DatasetDomainKindProperties(Dataset ds) _visitDatePropertyName = ds.getVisitDatePropertyName(); _tag = ds.getTag(); _dataSharing = ds.getDataSharingEnum().name(); - _keyPropertyManaged = (ds.getKeyManagementType() != Dataset.KeyManagementType.None); + + if (ds.getViewCategory() != null) + { + _category = ds.getViewCategory().getLabel(); + } + ExpProtocol protocol = ds.getAssayProtocol(); if (protocol != null) { _sourceAssayName = protocol.getName(); _sourceAssayUrl = PageFlowUtil.urlProvider(AssayUrls.class).getAssayResultsURL(protocol.getContainer(), protocol).getLocalURIString(); } + if (null != ds.getDomain()) { _domainId = ds.getDomain().getTypeId(); From a2ef07f3e4a45ae5f16ef76ecd9ff7317320d49f Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Fri, 17 Apr 2020 07:19:50 -0700 Subject: [PATCH 21/73] Item 7066: set definition shared changes --- study/package-lock.json | 20 ++++++------- study/package.json | 2 +- .../DatasetDesigner/DatasetDesigner.tsx | 1 - .../model/DatasetDomainKindProperties.java | 1 + .../labkey/study/model/DatasetManager.java | 30 ++++++++++++++----- 5 files changed, 34 insertions(+), 20 deletions(-) diff --git a/study/package-lock.json b/study/package-lock.json index 4b4f84381f5..22a7f56d4da 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -244,21 +244,21 @@ "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" }, "@labkey/api": { - "version": "0.1.1", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.1.1.tgz", - "integrity": "sha1-OKBFHbzPMekCqNW7raEq+FtBzOA=" + "version": "0.2.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.0.tgz", + "integrity": "sha1-GjEM55EHaeO/UCvK9OxitjpCQmc=" }, "@labkey/components": { - "version": "0.48.2-fb-datasetDesigner.2", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.48.2-fb-datasetDesigner.2.tgz", - "integrity": "sha1-TnYepgt1aLhrVsc9O/qT/nNgBMQ=", + "version": "0.49.1-fb-datasetDesigner.1", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.49.1-fb-datasetDesigner.1.tgz", + "integrity": "sha1-qn63iepIEJIK2mnIXRLvS746AjA=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", "@fortawesome/free-regular-svg-icons": "5.11.2", "@fortawesome/free-solid-svg-icons": "5.9.0", "@fortawesome/react-fontawesome": "0.1.4", - "@labkey/api": "0.1.1", + "@labkey/api": "0.2.0", "bootstrap": "3.4.1", "classnames": "2.2.6", "font-awesome": "4.7.0", @@ -5285,9 +5285,9 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.0.tgz", + "integrity": "sha512-LarL/PIKJvc09k1jaeT4kQb/8/7P+qV4qSnN2K80AES+OHdfZELAKVOBjxsvtToT/uLOfFbvYvKfZmV8cee7nA==", "requires": { "path-parse": "^1.0.6" } diff --git a/study/package.json b/study/package.json index b5a4ad9905d..5ec9e03da48 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.48.2-fb-datasetDesigner.2" + "@labkey/components": "0.49.1-fb-datasetDesigner.1" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/src/client/DatasetDesigner/DatasetDesigner.tsx b/study/src/client/DatasetDesigner/DatasetDesigner.tsx index c25a2d558bf..12ccbfdbc43 100644 --- a/study/src/client/DatasetDesigner/DatasetDesigner.tsx +++ b/study/src/client/DatasetDesigner/DatasetDesigner.tsx @@ -143,7 +143,6 @@ export class App extends PureComponent { ds = StudyManager.getInstance().getDatasetDefinition(study, datasetId); + if (null != ds) + return new DatasetDomainKindProperties(ds); + } + } } + return null; } public interface DatasetListener From 680a4668671e6e90a9479772538009d79f55361f Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Fri, 17 Apr 2020 07:39:48 -0700 Subject: [PATCH 22/73] Item 7066: handle window before unload --- study/src/client/DatasetDesigner/DatasetDesigner.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/study/src/client/DatasetDesigner/DatasetDesigner.tsx b/study/src/client/DatasetDesigner/DatasetDesigner.tsx index 12ccbfdbc43..76618861a88 100644 --- a/study/src/client/DatasetDesigner/DatasetDesigner.tsx +++ b/study/src/client/DatasetDesigner/DatasetDesigner.tsx @@ -55,6 +55,12 @@ export class App extends PureComponent { else { this.createNewDataset(); } + + window.addEventListener("beforeunload", this.handleWindowBeforeUnload); + } + + componentWillUnmount() { + window.removeEventListener("beforeunload", this.handleWindowBeforeUnload); } handleWindowBeforeUnload = (event) => { From 7c48c6c4358000ef97db2f8965f320cb91bfc7d0 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Fri, 17 Apr 2020 09:07:11 -0700 Subject: [PATCH 23/73] Addresses feedback: modularizes exception checking, favors throwing IllegalArgumentExceptions, and moves initialization of DatasetDomainKindProperties --- .../labkey/study/model/DatasetDomainKind.java | 178 +++++++++--------- .../model/DatasetDomainKindProperties.java | 23 ++- .../labkey/study/model/DatasetManager.java | 2 +- 3 files changed, 108 insertions(+), 95 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index a2abf854233..42938414855 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -66,7 +66,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -335,16 +334,7 @@ public boolean canCreateDefinition(User user, Container container) public DatasetDomainKindProperties getDomainKindProperties(@NotNull GWTDomain domain, Container container, User user) { Dataset ds = getDatasetDefinition(domain.getDomainURI()); - DatasetDomainKindProperties datasetProperties = new DatasetDomainKindProperties(ds); - - if (container.isProject() && StudyService.get().getStudy(container).isDataspaceStudy()) - { - datasetProperties.setDefinitionIsShared(true); - if (StudyService.get().getStudy(container).getShareVisitDefinitions()) - datasetProperties.setVisitMapShared(true); - } - - return datasetProperties; + return new DatasetDomainKindProperties(ds); } @Override @@ -357,39 +347,19 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen boolean demographics = arguments.isDemographicData(); String keyPropertyName = arguments.getKeyPropertyName(); boolean isManagedField = arguments.isKeyPropertyManaged(); - String label = arguments.getLabel(); Integer categoryId = null; boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(arguments.getKeyPropertyName()); if (useTimeKeyField) keyPropertyName = null; - if (name == null || name.length() == 0) - throw new IllegalArgumentException("Dataset name must not be empty"); - StudyImpl study = StudyManager.getInstance().getStudy(container); if (study == null) throw new IllegalArgumentException("A study does not exist for this folder"); - if (null != StudyManager.getInstance().getDatasetDefinitionByName(study, name) || null != QueryService.get().getQueryDef(user, container, "study", name)) - throw new IllegalArgumentException("A Dataset or Query already exists with the name \"" + name +"\""); - - if (null != StudyManager.getInstance().getDatasetDefinitionByLabel(study, label)) - throw new IllegalArgumentException("A Dataset already exists with the label \"" + label +"\""); - - if (null != datasetId && null != study.getDataset(datasetId)) - throw new IllegalArgumentException("A Dataset already exists with the datasetId \"" + datasetId +"\""); - - if (isManagedField && keyPropertyName == null) - throw new IllegalArgumentException("Additional Key Column must be specified if it is a managed field"); - - if (!useTimeKeyField && null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) - throw new IllegalArgumentException("\"Additional Key Column name \"" + keyPropertyName +"\" must be the name of a column"); - - if (demographics && (isManagedField || keyPropertyName != null)) - throw new IllegalArgumentException("There can not be an Additional Key Column if the dataset is Demographic Data"); - - // make sure the domain matches the timepoint type + // general dataset validation + validateDatasetProperties(arguments, container, user, domain); + // create-case specific validation TimepointType timepointType = study.getTimepointType(); if (timepointType.isVisitBased() && getKindName().equals(DateDatasetDomainKind.KIND_NAME)) throw new IllegalArgumentException("Visit based studies require a visit based dataset domain. Please specify a kind name of : " + VisitDatasetDomainKind.KIND_NAME); @@ -476,39 +446,95 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai } } - private ValidationException validateDatasetProperties(DatasetDefinition def, ValidationException exception, Container container, User user, - GWTDomain original, GWTDomain update) + private void validateDatasetProperties(DatasetDomainKindProperties datasetProperties, Container container, User user, GWTDomain domain) + { + String name = datasetProperties.getName(); + String label = datasetProperties.getLabel(); + String keyPropertyName = datasetProperties.getKeyPropertyName(); + Integer datasetId = datasetProperties.getDatasetId(); + boolean isManagedField = datasetProperties.isKeyPropertyManaged(); + boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(name); + boolean isDemographicData = datasetProperties.isDemographicData(); + Study study = StudyService.get().getStudy(container); // calling functions have validated this is not null + + // Name related exceptions + + if (name == null || name.length() == 0) + throw new IllegalArgumentException("Dataset name cannot be empty."); + + if (name.length() > 200) + throw new IllegalArgumentException("Dataset name must be under 200 characters"); + + if (null != StudyManager.getInstance().getDatasetDefinitionByName(study, name) || null != QueryService.get().getQueryDef(user, container, "study", name)) + throw new IllegalArgumentException("A Dataset or Query already exists with the name \"" + name +"\""); + + // Label related exceptions + + if (label == null || label.length() == 0) + throw new IllegalArgumentException("Dataset label cannot be empty."); + + if (null != StudyManager.getInstance().getDatasetDefinitionByLabel(study, label)) + throw new IllegalArgumentException("A Dataset already exists with the label \"" + label +"\""); + + // Additional key related exceptions + + if ("".equals(keyPropertyName)) + throw new IllegalArgumentException("Please select a field name for the additional key."); // PR Note: Alternate existing error message is "Please select a field name for the additional key." + + if (isManagedField && (keyPropertyName == null || keyPropertyName.length() == 0)) + throw new IllegalArgumentException("Additional Key Column name must be specified if field is managed"); + + if (DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(keyPropertyName) && isManagedField) + throw new IllegalArgumentException("Additional key cannot be a managed field if KeyPropertyName is Time (from Date/Time)"); + + if (isDemographicData && (isManagedField || keyPropertyName != null)) + throw new IllegalArgumentException("There cannot be an Additional Key Column if the dataset is Demographic Data"); + + if (domain != null && !useTimeKeyField && null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) + throw new IllegalArgumentException("\"Additional Key Column name \"" + keyPropertyName +"\" must be the name of a column"); + + if (domain != null) + { + String rangeURI = domain.getFieldByName(keyPropertyName).getRangeURI(); + if (isManagedField && !(rangeURI.endsWith("int") || rangeURI.endsWith("double") || rangeURI.endsWith("string"))) + throw new IllegalArgumentException("If Additional Key Column is managed, the column type must be numeric or text-based"); + } + + // Other exception(s) + + if (null != datasetId && null != study.getDataset(datasetId)) + throw new IllegalArgumentException("A Dataset already exists with the datasetId \"" + datasetId +"\""); + } + + private void checkCanUpdate(DatasetDefinition def, Container container, User user, + GWTDomain original, GWTDomain update) { + if (null == def) + throw new IllegalArgumentException("Dataset not found"); + if (!container.hasPermission(user, AdminPermission.class)) - return exception.addGlobalError("Unauthorized"); + throw new IllegalArgumentException("Unauthorized"); Study study = StudyService.get().getStudy(container); if (null == study) - return exception.addGlobalError("Study not found in current container"); - - if (null == def) - return exception.addGlobalError("Dataset not found"); + throw new IllegalArgumentException("Study not found in current container"); // PR Note: Alternate existing error message is 'A study does not exist for this folder' if (!def.canUpdateDefinition(user)) - return exception.addGlobalError("Shared dataset can not be edited in this folder"); + throw new IllegalArgumentException("Shared dataset can not be edited in this folder"); Domain d = PropertyService.get().getDomain(container, update.getDomainURI()); if (null == d) - return exception.addGlobalError("Domain not found: " + update.getDomainURI()); + throw new IllegalArgumentException("Domain not found: " + update.getDomainURI()); if (!def.getTypeURI().equals(original.getDomainURI()) || !def.getTypeURI().equals(update.getDomainURI())) - return exception.addGlobalError("Illegal Argument"); - - return exception; + throw new IllegalArgumentException("Illegal Argument"); } private ValidationException updateDomainDescriptor(GWTDomain original, GWTDomain update, - Container container, User user, DatasetDefinition def) + Container container, User user, DatasetDefinition def, DatasetDomainKindProperties datasetProperties) { ValidationException exception = new ValidationException(); - if (def == null) - exception.addGlobalError("Could not find dataset: " + original.getName()); try { @@ -529,32 +555,16 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro { try { - if (null == def) - return exception.addGlobalError("Dataset not found"); - - if ( datasetProperties.isDemographicData() && !def.isDemographicData() && !StudyManager.getInstance().isDataUniquePerParticipant(def)) + // Update-case specific validation + if ( datasetProperties.isDemographicData() && !datasetProperties.isDemographicData() && !StudyManager.getInstance().isDataUniquePerParticipant(def)) { - return exception.addGlobalError("This dataset currently contains more than one row of data per " + StudyService.get().getSubjectNounSingular(container) + + throw new IllegalArgumentException("This dataset currently contains more than one row of data per " + StudyService.get().getSubjectNounSingular(container) + ". Demographic data includes one row of data per " + StudyService.get().getSubjectNounSingular(container) + "."); } - if (datasetProperties.getName() == null || datasetProperties.getName().length() == 0) - exception.addGlobalError("Dataset name cannot be empty."); - - if (datasetProperties.getLabel() == null || datasetProperties.getLabel().length() == 0) - exception.addGlobalError("Dataset label cannot be empty."); - - if ("".equals(datasetProperties.getKeyPropertyName())) - exception.addGlobalError("Please select a field name for the additional key."); - - if (datasetProperties.isKeyPropertyManaged() && (datasetProperties.getKeyPropertyName() == null || datasetProperties.getName().length() == 0)) - exception.addGlobalError("Please select a field name for the additional key."); - - if (DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(datasetProperties.getKeyPropertyName()) && datasetProperties.isKeyPropertyManaged()) - exception.addGlobalError("Additional key cannot be a managed field if KeyPropertyName is Time (from Date/Time)"); - - if (exception.hasErrors()) - return exception; + // PR Note: is it desired that we check for this at all? +// if (null != datasetProperties.getCategory() && null == ViewCategoryManager.getInstance().getCategory(container, datasetProperties.getCategory())) +// throw new IllegalArgumentException("Unable to find a category named : " + datasetProperties.getCategory() + " in this folder."); if (datasetProperties.isDemographicData()) { @@ -606,24 +616,6 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro updated.setKeyManagementType(keyType); updated.setUseTimeKeyField(useTimeKeyField); - if (!def.getLabel().equals(updated.getLabel())) - { - Dataset existing = studyManager.getDatasetDefinitionByLabel(study, updated.getLabel()); - if (existing != null && existing.getDatasetId() != datasetProperties.getDatasetId()) - return exception.addGlobalError("A Dataset or Query already exists with the name \"" + updated.getName() +"\""); - } - - if (!def.getName().equals(updated.getName())) - { - // issue 17766: check if dataset or query exist with this name - Dataset existing = studyManager.getDatasetDefinitionByName(study, updated.getName()); - if ((null != existing && existing.getDatasetId() != datasetProperties.getDatasetId()) - || null != QueryService.get().getQueryDef(user, container, "study", updated.getName())) - { - return exception.addGlobalError("A Dataset or Query already exists with the name \"" + updated.getName() +"\""); - } - } - List errors = new ArrayList<>(); studyManager.updateDatasetDefinition(user, updated, errors); for (String errorMsg: errors) @@ -653,8 +645,7 @@ public ValidationException updateDomain(GWTDomain Date: Fri, 17 Apr 2020 11:01:07 -0700 Subject: [PATCH 24/73] Undoes breaking changes from last commit. Work ongoing on verifying all validation cases --- .../labkey/study/model/DatasetDomainKind.java | 16 ++++++++++++--- .../model/DatasetDomainKindProperties.java | 20 ++----------------- .../labkey/study/model/DatasetManager.java | 2 +- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 42938414855..51d893118a7 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -334,14 +334,24 @@ public boolean canCreateDefinition(User user, Container container) public DatasetDomainKindProperties getDomainKindProperties(@NotNull GWTDomain domain, Container container, User user) { Dataset ds = getDatasetDefinition(domain.getDomainURI()); - return new DatasetDomainKindProperties(ds); + DatasetDomainKindProperties datasetProperties = new DatasetDomainKindProperties(ds); + + if (container.isProject() && StudyService.get().getStudy(container).isDataspaceStudy()) + { + datasetProperties.setDefinitionIsShared(true); + if (StudyService.get().getStudy(container).getShareVisitDefinitions()) + datasetProperties.setVisitMapShared(true); + } + + return datasetProperties; } @Override public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties arguments, Container container, User user, @Nullable TemplateInfo templateInfo) { - String name = domain.getName(); + arguments.setName(domain.getName()); + String name = arguments.getName(); Integer datasetId = arguments.getDatasetId(); String categoryName = arguments.getCategory(); boolean demographics = arguments.isDemographicData(); @@ -493,7 +503,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (domain != null && !useTimeKeyField && null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) throw new IllegalArgumentException("\"Additional Key Column name \"" + keyPropertyName +"\" must be the name of a column"); - if (domain != null) + if (domain != null && null != keyPropertyName) { String rangeURI = domain.getFieldByName(keyPropertyName).getRangeURI(); if (isManagedField && !(rangeURI.endsWith("int") || rangeURI.endsWith("double") || rangeURI.endsWith("string"))) diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 8d4eafbe62e..d10c183dae6 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -35,14 +35,8 @@ public class DatasetDomainKindProperties implements Cloneable public static final String TIME_KEY_FIELD_KEY = "_Special$Time_"; - public DatasetDomainKindProperties(Container container) + public DatasetDomainKindProperties() { - Study study = StudyService.get().getStudy(container); - if (container.isProject() && study.isDataspaceStudy()) - { - _definitionIsShared = study.getShareDatasetDefinitions(); - _visitMapShared = study.getShareVisitDefinitions(); - } } public DatasetDomainKindProperties(Dataset ds) @@ -50,10 +44,6 @@ public DatasetDomainKindProperties(Dataset ds) _datasetId = ds.getDatasetId(); _name = ds.getName(); _description = ds.getDescription(); - if (ds.getViewCategory() != null) - { - _category = ds.getViewCategory().getLabel(); - } _label = ds.getLabel(); _keyPropertyName = ds.getKeyPropertyName(); _demographicData = ds.isDemographicData(); @@ -80,13 +70,7 @@ public DatasetDomainKindProperties(Dataset ds) { _domainId = ds.getDomain().getTypeId(); } - - Study study = StudyService.get().getStudy(ds.getContainer()); - if (ds.getContainer().isProject() && study.isDataspaceStudy()) - { - _definitionIsShared = study.getShareDatasetDefinitions(); - _visitMapShared = study.getShareVisitDefinitions(); - } + _definitionIsShared = ds.isShared(); } public boolean isVisitMapShared() diff --git a/study/src/org/labkey/study/model/DatasetManager.java b/study/src/org/labkey/study/model/DatasetManager.java index f9678d089eb..f3ebf769e8c 100644 --- a/study/src/org/labkey/study/model/DatasetManager.java +++ b/study/src/org/labkey/study/model/DatasetManager.java @@ -61,7 +61,7 @@ public DatasetDomainKindProperties getDatasetDomainKindProperties(Container cont { if (datasetId == null || datasetId == 0) { - DatasetDomainKindProperties datasetDomainKindProperties = new DatasetDomainKindProperties(container); + DatasetDomainKindProperties datasetDomainKindProperties = new DatasetDomainKindProperties(); datasetDomainKindProperties.setDefinitionIsShared(study.isDataspaceStudy()); return datasetDomainKindProperties; } From 9b28464c209a0f5c71a0a7ee0f27c286946719b1 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Fri, 17 Apr 2020 12:48:06 -0700 Subject: [PATCH 25/73] Fixes validation exceptions --- .../labkey/study/model/DatasetDomainKind.java | 18 +++++++++--------- .../model/DatasetDomainKindProperties.java | 12 ++++++++++++ .../org/labkey/study/model/DatasetManager.java | 2 +- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 51d893118a7..eab9194fb18 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -368,7 +368,7 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen throw new IllegalArgumentException("A study does not exist for this folder"); // general dataset validation - validateDatasetProperties(arguments, container, user, domain); + validateDatasetProperties(arguments, container, user, domain, null); // create-case specific validation TimepointType timepointType = study.getTimepointType(); if (timepointType.isVisitBased() && getKindName().equals(DateDatasetDomainKind.KIND_NAME)) @@ -456,14 +456,14 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai } } - private void validateDatasetProperties(DatasetDomainKindProperties datasetProperties, Container container, User user, GWTDomain domain) + private void validateDatasetProperties(DatasetDomainKindProperties datasetProperties, Container container, User user, GWTDomain domain, DatasetDefinition def) { String name = datasetProperties.getName(); String label = datasetProperties.getLabel(); String keyPropertyName = datasetProperties.getKeyPropertyName(); Integer datasetId = datasetProperties.getDatasetId(); boolean isManagedField = datasetProperties.isKeyPropertyManaged(); - boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(name); + boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(keyPropertyName); boolean isDemographicData = datasetProperties.isDemographicData(); Study study = StudyService.get().getStudy(container); // calling functions have validated this is not null @@ -475,7 +475,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (name.length() > 200) throw new IllegalArgumentException("Dataset name must be under 200 characters"); - if (null != StudyManager.getInstance().getDatasetDefinitionByName(study, name) || null != QueryService.get().getQueryDef(user, container, "study", name)) + if (!name.equals(domain.getName()) && null != StudyManager.getInstance().getDatasetDefinitionByName(study, name) || null != QueryService.get().getQueryDef(user, container, "study", name)) throw new IllegalArgumentException("A Dataset or Query already exists with the name \"" + name +"\""); // Label related exceptions @@ -483,7 +483,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (label == null || label.length() == 0) throw new IllegalArgumentException("Dataset label cannot be empty."); - if (null != StudyManager.getInstance().getDatasetDefinitionByLabel(study, label)) + if (def != null && !def.getLabel().equals(label) && null != StudyManager.getInstance().getDatasetDefinitionByLabel(study, label)) throw new IllegalArgumentException("A Dataset already exists with the label \"" + label +"\""); // Additional key related exceptions @@ -500,10 +500,10 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (isDemographicData && (isManagedField || keyPropertyName != null)) throw new IllegalArgumentException("There cannot be an Additional Key Column if the dataset is Demographic Data"); - if (domain != null && !useTimeKeyField && null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) + if (!useTimeKeyField && null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) throw new IllegalArgumentException("\"Additional Key Column name \"" + keyPropertyName +"\" must be the name of a column"); - if (domain != null && null != keyPropertyName) + if (null != keyPropertyName && !useTimeKeyField) { String rangeURI = domain.getFieldByName(keyPropertyName).getRangeURI(); if (isManagedField && !(rangeURI.endsWith("int") || rangeURI.endsWith("double") || rangeURI.endsWith("string"))) @@ -512,7 +512,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper // Other exception(s) - if (null != datasetId && null != study.getDataset(datasetId)) + if (def != null && null != datasetId && def.getDatasetId() != datasetId && null != study.getDataset(datasetId)) throw new IllegalArgumentException("A Dataset already exists with the datasetId \"" + datasetId +"\""); } @@ -677,7 +677,7 @@ else if (DatasetDomainKind.DATE.equalsIgnoreCase(prop.getName())) { // general dataset validation // PR Note: I think this is the correct place to put this, after we noted the fields are updated in updateDomainDescriptor(). Let me know though if I misapprehended - validateDatasetProperties(datasetProperties, container, user, update); + validateDatasetProperties(datasetProperties, container, user, update, def); exception = updateDataset(datasetProperties, original.getDomainURI(), exception, studyManager, study, container, user, def); if (!exception.hasErrors()) transaction.commit(); diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index d10c183dae6..0719a2e12d8 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -35,12 +35,24 @@ public class DatasetDomainKindProperties implements Cloneable public static final String TIME_KEY_FIELD_KEY = "_Special$Time_"; + // default constructor needed for jackson public DatasetDomainKindProperties() { } + public DatasetDomainKindProperties(Container container) + { + Study study = StudyService.get().getStudy(container); + if (container.isProject() && study.isDataspaceStudy()) + { + setDefinitionIsShared(study.getShareDatasetDefinitions()); + setVisitMapShared(study.getShareVisitDefinitions()); + } + } + public DatasetDomainKindProperties(Dataset ds) { + this(ds.getContainer()); _datasetId = ds.getDatasetId(); _name = ds.getName(); _description = ds.getDescription(); diff --git a/study/src/org/labkey/study/model/DatasetManager.java b/study/src/org/labkey/study/model/DatasetManager.java index f3ebf769e8c..f9678d089eb 100644 --- a/study/src/org/labkey/study/model/DatasetManager.java +++ b/study/src/org/labkey/study/model/DatasetManager.java @@ -61,7 +61,7 @@ public DatasetDomainKindProperties getDatasetDomainKindProperties(Container cont { if (datasetId == null || datasetId == 0) { - DatasetDomainKindProperties datasetDomainKindProperties = new DatasetDomainKindProperties(); + DatasetDomainKindProperties datasetDomainKindProperties = new DatasetDomainKindProperties(container); datasetDomainKindProperties.setDefinitionIsShared(study.isDataspaceStudy()); return datasetDomainKindProperties; } From 28c4ced1120fc63c7c5d0311aa73486ff4fe06f8 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Fri, 17 Apr 2020 13:10:01 -0700 Subject: [PATCH 26/73] One last tweak --- study/src/org/labkey/study/model/DatasetDomainKind.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index eab9194fb18..c3aab500df4 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -506,7 +506,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (null != keyPropertyName && !useTimeKeyField) { String rangeURI = domain.getFieldByName(keyPropertyName).getRangeURI(); - if (isManagedField && !(rangeURI.endsWith("int") || rangeURI.endsWith("double") || rangeURI.endsWith("string"))) + if (!(rangeURI.endsWith("int") || rangeURI.endsWith("double") || rangeURI.endsWith("string"))) throw new IllegalArgumentException("If Additional Key Column is managed, the column type must be numeric or text-based"); } From 82848a437b9d4fa07a2e024e0c8f31da893594b7 Mon Sep 17 00:00:00 2001 From: cnathe Date: Fri, 17 Apr 2020 17:02:12 -0500 Subject: [PATCH 27/73] Item 7066: remove redundant code for setting DatasetDomainKindProperties for study properties --- .../labkey/study/model/DatasetDomainKind.java | 11 +------ .../model/DatasetDomainKindProperties.java | 1 - .../labkey/study/model/DatasetManager.java | 31 +++++++------------ 3 files changed, 12 insertions(+), 31 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index c3aab500df4..54e1bdd7f2e 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -334,16 +334,7 @@ public boolean canCreateDefinition(User user, Container container) public DatasetDomainKindProperties getDomainKindProperties(@NotNull GWTDomain domain, Container container, User user) { Dataset ds = getDatasetDefinition(domain.getDomainURI()); - DatasetDomainKindProperties datasetProperties = new DatasetDomainKindProperties(ds); - - if (container.isProject() && StudyService.get().getStudy(container).isDataspaceStudy()) - { - datasetProperties.setDefinitionIsShared(true); - if (StudyService.get().getStudy(container).getShareVisitDefinitions()) - datasetProperties.setVisitMapShared(true); - } - - return datasetProperties; + return new DatasetDomainKindProperties(ds); } @Override diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 0719a2e12d8..d614d674cf7 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -82,7 +82,6 @@ public DatasetDomainKindProperties(Dataset ds) { _domainId = ds.getDomain().getTypeId(); } - _definitionIsShared = ds.isShared(); } public boolean isVisitMapShared() diff --git a/study/src/org/labkey/study/model/DatasetManager.java b/study/src/org/labkey/study/model/DatasetManager.java index f9678d089eb..8162ea4d3e0 100644 --- a/study/src/org/labkey/study/model/DatasetManager.java +++ b/study/src/org/labkey/study/model/DatasetManager.java @@ -52,28 +52,19 @@ public static DatasetManager get () public DatasetDomainKindProperties getDatasetDomainKindProperties(Container container, Integer datasetId) { - StudyService studyService = StudyService.get(); - - if (null != studyService) + if (datasetId == null || datasetId == 0) + { + return new DatasetDomainKindProperties(container); + } + else { - Study study = studyService.getStudy(container); - if (null != study) - { - if (datasetId == null || datasetId == 0) - { - DatasetDomainKindProperties datasetDomainKindProperties = new DatasetDomainKindProperties(container); - datasetDomainKindProperties.setDefinitionIsShared(study.isDataspaceStudy()); - return datasetDomainKindProperties; - } - else - { - Dataset ds = StudyManager.getInstance().getDatasetDefinition(study, datasetId); - if (null != ds) - return new DatasetDomainKindProperties(ds); - } - } + StudyImpl study = StudyManager.getInstance().getStudy(container); + Dataset ds = StudyManager.getInstance().getDatasetDefinition(study, datasetId); + if (ds != null) + return new DatasetDomainKindProperties(ds); + else + return null; } - return null; } public interface DatasetListener From 86cd07fb98db8a33567b18fe8f361992ebe9d348 Mon Sep 17 00:00:00 2001 From: cnathe Date: Fri, 17 Apr 2020 17:03:34 -0500 Subject: [PATCH 28/73] Item 7066: remove unused imports (missed from last commit) --- study/src/org/labkey/study/model/DatasetManager.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetManager.java b/study/src/org/labkey/study/model/DatasetManager.java index 8162ea4d3e0..1c92c6dc72a 100644 --- a/study/src/org/labkey/study/model/DatasetManager.java +++ b/study/src/org/labkey/study/model/DatasetManager.java @@ -17,8 +17,6 @@ import org.labkey.api.data.Container; import org.labkey.api.study.Dataset; -import org.labkey.api.study.Study; -import org.labkey.api.study.StudyService; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; From cd4cc0047818db0ed4cbba65a3b16ab32e07865d Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Sun, 19 Apr 2020 21:28:05 -0700 Subject: [PATCH 29/73] pulling latest version of shared components --- study/package-lock.json | 20 +++++++++---------- study/package.json | 2 +- .../DatasetDesigner/DatasetDesigner.tsx | 1 - 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/study/package-lock.json b/study/package-lock.json index 22a7f56d4da..96aa8e45f4d 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-GjEM55EHaeO/UCvK9OxitjpCQmc=" }, "@labkey/components": { - "version": "0.49.1-fb-datasetDesigner.1", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.49.1-fb-datasetDesigner.1.tgz", - "integrity": "sha1-qn63iepIEJIK2mnIXRLvS746AjA=", + "version": "0.49.1-fb-datasetDesigner.2", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.49.1-fb-datasetDesigner.2.tgz", + "integrity": "sha1-O68Iu5jChxBbj0xBOTv4ezBZHo0=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -5285,9 +5285,9 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.0.tgz", - "integrity": "sha512-LarL/PIKJvc09k1jaeT4kQb/8/7P+qV4qSnN2K80AES+OHdfZELAKVOBjxsvtToT/uLOfFbvYvKfZmV8cee7nA==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", + "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", "requires": { "path-parse": "^1.0.6" } @@ -6928,11 +6928,11 @@ "dev": true }, "yaml": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", - "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.1.tgz", + "integrity": "sha512-xbWX1ayUVoW8DPM8qxOBowac4XxSTi0mFLbiokRq880ViYglN+F3nJ4Dc2GdypXpykrknKS39d8I3lzFoHv1kA==", "requires": { - "@babel/runtime": "^7.8.7" + "@babel/runtime": "^7.9.2" } }, "yargs": { diff --git a/study/package.json b/study/package.json index 5ec9e03da48..ec83203ce71 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.49.1-fb-datasetDesigner.1" + "@labkey/components": "0.49.1-fb-datasetDesigner.2" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/src/client/DatasetDesigner/DatasetDesigner.tsx b/study/src/client/DatasetDesigner/DatasetDesigner.tsx index 76618861a88..0578ebe1d99 100644 --- a/study/src/client/DatasetDesigner/DatasetDesigner.tsx +++ b/study/src/client/DatasetDesigner/DatasetDesigner.tsx @@ -149,7 +149,6 @@ export class App extends PureComponent { From aadcd96b2d5144c6b896d1ac13ea62c77faee929 Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 20 Apr 2020 09:37:06 -0500 Subject: [PATCH 30/73] Item 7066: add punctuation to error messages --- .../labkey/study/model/DatasetDomainKind.java | 48 +++++++++---------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 54e1bdd7f2e..d4aa585d725 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -259,7 +259,7 @@ public boolean showDefaultValueSettings() DatasetDefinition getDatasetDefinition(String domainURI) { - return StudyManager.getInstance().getDatasetDefinition(domainURI); // bookmark + return StudyManager.getInstance().getDatasetDefinition(domainURI); } @@ -360,12 +360,13 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen // general dataset validation validateDatasetProperties(arguments, container, user, domain, null); + // create-case specific validation TimepointType timepointType = study.getTimepointType(); if (timepointType.isVisitBased() && getKindName().equals(DateDatasetDomainKind.KIND_NAME)) - throw new IllegalArgumentException("Visit based studies require a visit based dataset domain. Please specify a kind name of : " + VisitDatasetDomainKind.KIND_NAME); + throw new IllegalArgumentException("Visit based studies require a visit based dataset domain. Please specify a kind name of : " + VisitDatasetDomainKind.KIND_NAME + "."); else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomainKind.KIND_NAME)) - throw new IllegalArgumentException("Date based studies require a date based dataset domain. Please specify a kind name of : " + DateDatasetDomainKind.KIND_NAME); + throw new IllegalArgumentException("Date based studies require a date based dataset domain. Please specify a kind name of : " + DateDatasetDomainKind.KIND_NAME + "."); if (categoryName != null) { @@ -381,8 +382,6 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai KeyManagementType managementType = KeyManagementType.None; if (isManagedField) { - PropertyDescriptor pd = new PropertyDescriptor(); - String rangeUri = ""; for (GWTPropertyDescriptor a : (List)domain.getFields()) { @@ -394,6 +393,7 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai } + PropertyDescriptor pd = new PropertyDescriptor(); pd.setRangeURI(rangeUri); managementType = KeyManagementType.getManagementTypeFromProp(pd.getPropertyType()); } @@ -419,9 +419,7 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai for (GWTPropertyDescriptor pd : properties) { if (lowerReservedNames.contains(pd.getName().toLowerCase()) || existingProperties.contains(pd.getName().toLowerCase())) - { throw new IllegalArgumentException("Property: " + pd.getName() + " is reserved or exists in the current domain."); - } else DomainUtil.addProperty(newDomain, pd, defaultValues, propertyUris, null); } @@ -436,7 +434,7 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai newDomain.save(user); } else - throw new IllegalArgumentException("Failed to create domain for dataset : " + name); + throw new IllegalArgumentException("Failed to create domain for dataset : " + name + "."); } transaction.commit(); return study.getDataset(def.getDatasetId()).getDomain(); @@ -464,10 +462,10 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper throw new IllegalArgumentException("Dataset name cannot be empty."); if (name.length() > 200) - throw new IllegalArgumentException("Dataset name must be under 200 characters"); + throw new IllegalArgumentException("Dataset name must be under 200 characters."); - if (!name.equals(domain.getName()) && null != StudyManager.getInstance().getDatasetDefinitionByName(study, name) || null != QueryService.get().getQueryDef(user, container, "study", name)) - throw new IllegalArgumentException("A Dataset or Query already exists with the name \"" + name +"\""); + if (!name.equals(domain.getName()) && (null != StudyManager.getInstance().getDatasetDefinitionByName(study, name) || null != QueryService.get().getQueryDef(user, container, "study", name))) + throw new IllegalArgumentException("A Dataset or Query already exists with the name \"" + name +"\"."); // Label related exceptions @@ -475,36 +473,36 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper throw new IllegalArgumentException("Dataset label cannot be empty."); if (def != null && !def.getLabel().equals(label) && null != StudyManager.getInstance().getDatasetDefinitionByLabel(study, label)) - throw new IllegalArgumentException("A Dataset already exists with the label \"" + label +"\""); + throw new IllegalArgumentException("A Dataset already exists with the label \"" + label +"\"."); // Additional key related exceptions if ("".equals(keyPropertyName)) - throw new IllegalArgumentException("Please select a field name for the additional key."); // PR Note: Alternate existing error message is "Please select a field name for the additional key." + throw new IllegalArgumentException("Please select a field name for the additional key."); if (isManagedField && (keyPropertyName == null || keyPropertyName.length() == 0)) - throw new IllegalArgumentException("Additional Key Column name must be specified if field is managed"); + throw new IllegalArgumentException("Additional Key Column name must be specified if field is managed."); if (DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(keyPropertyName) && isManagedField) - throw new IllegalArgumentException("Additional key cannot be a managed field if KeyPropertyName is Time (from Date/Time)"); + throw new IllegalArgumentException("Additional key cannot be a managed field if KeyPropertyName is Time (from Date/Time)."); if (isDemographicData && (isManagedField || keyPropertyName != null)) - throw new IllegalArgumentException("There cannot be an Additional Key Column if the dataset is Demographic Data"); + throw new IllegalArgumentException("There cannot be an Additional Key Column if the dataset is Demographic Data."); if (!useTimeKeyField && null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) - throw new IllegalArgumentException("\"Additional Key Column name \"" + keyPropertyName +"\" must be the name of a column"); + throw new IllegalArgumentException("\"Additional Key Column name \"" + keyPropertyName +"\" must be the name of a column."); if (null != keyPropertyName && !useTimeKeyField) { String rangeURI = domain.getFieldByName(keyPropertyName).getRangeURI(); if (!(rangeURI.endsWith("int") || rangeURI.endsWith("double") || rangeURI.endsWith("string"))) - throw new IllegalArgumentException("If Additional Key Column is managed, the column type must be numeric or text-based"); + throw new IllegalArgumentException("If Additional Key Column is managed, the column type must be numeric or text-based."); } // Other exception(s) if (def != null && null != datasetId && def.getDatasetId() != datasetId && null != study.getDataset(datasetId)) - throw new IllegalArgumentException("A Dataset already exists with the datasetId \"" + datasetId +"\""); + throw new IllegalArgumentException("A Dataset already exists with the datasetId \"" + datasetId +"\"."); } private void checkCanUpdate(DatasetDefinition def, Container container, User user, @@ -521,14 +519,13 @@ private void checkCanUpdate(DatasetDefinition def, Container container, User use throw new IllegalArgumentException("Study not found in current container"); // PR Note: Alternate existing error message is 'A study does not exist for this folder' if (!def.canUpdateDefinition(user)) - throw new IllegalArgumentException("Shared dataset can not be edited in this folder"); + throw new IllegalArgumentException("Shared dataset can not be edited in this folder."); Domain d = PropertyService.get().getDomain(container, update.getDomainURI()); if (null == d) - throw new IllegalArgumentException("Domain not found: " + update.getDomainURI()); + throw new IllegalArgumentException("Domain not found: " + update.getDomainURI() + "."); - if (!def.getTypeURI().equals(original.getDomainURI()) || - !def.getTypeURI().equals(update.getDomainURI())) + if (!def.getTypeURI().equals(original.getDomainURI()) || !def.getTypeURI().equals(update.getDomainURI())) throw new IllegalArgumentException("Illegal Argument"); } @@ -559,8 +556,9 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro // Update-case specific validation if ( datasetProperties.isDemographicData() && !datasetProperties.isDemographicData() && !StudyManager.getInstance().isDataUniquePerParticipant(def)) { - throw new IllegalArgumentException("This dataset currently contains more than one row of data per " + StudyService.get().getSubjectNounSingular(container) + - ". Demographic data includes one row of data per " + StudyService.get().getSubjectNounSingular(container) + "."); + String noun = StudyService.get().getSubjectNounSingular(container); + throw new IllegalArgumentException("This dataset currently contains more than one row of data per " + noun + + ". Demographic data includes one row of data per " + noun + "."); } // PR Note: is it desired that we check for this at all? From cc1b910af7198a01b38145382336c9251f3c8637 Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 20 Apr 2020 10:05:14 -0500 Subject: [PATCH 31/73] Item 7066: add missing @Override annotations --- .../org/labkey/study/model/DatasetDomainKind.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index d4aa585d725..f34183e6cfd 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -166,6 +166,7 @@ protected DatasetDomainKind() { } + @Override abstract public String getKindName(); @Override @@ -173,7 +174,8 @@ public Class getTypeClass() { return DatasetDomainKindProperties.class; } - + + @Override public String getTypeLabel(Domain domain) { DatasetDefinition def = getDatasetDefinition(domain.getTypeURI()); @@ -182,7 +184,7 @@ public String getTypeLabel(Domain domain) return def.getName(); } - + @Override public SQLFragment sqlObjectIdsInDomain(Domain domain) { DatasetDefinition def = getDatasetDefinition(domain.getTypeURI()); @@ -218,7 +220,7 @@ public static String generateDomainURI(String name, String id, Container contain return (new Lsid(LSID_PREFIX, "Folder-" + container.getRowId(), objectid)).toString(); } - + @Override public ActionURL urlShowData(Domain domain, ContainerUser containerUser) { Dataset def = getDatasetDefinition(domain.getTypeURI()); @@ -227,7 +229,7 @@ public ActionURL urlShowData(Domain domain, ContainerUser containerUser) return url; } - + @Override public ActionURL urlEditDefinition(Domain domain, ContainerUser containerUser) { Dataset def = getDatasetDefinition(domain.getTypeURI()); @@ -236,7 +238,6 @@ public ActionURL urlEditDefinition(Domain domain, ContainerUser containerUser) return url; } - @Override public ActionURL urlCreateDefinition(String schemaName, String queryName, Container container, User user) { @@ -262,7 +263,7 @@ DatasetDefinition getDatasetDefinition(String domainURI) return StudyManager.getInstance().getDatasetDefinition(domainURI); } - + @Override public abstract Set getReservedPropertyNames(Domain domain); @Override From 0ffaf3e3eaa5b2afaa827b4674f99dff388cd2fe Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 20 Apr 2020 10:13:55 -0500 Subject: [PATCH 32/73] Item 7066: DatasetDomainKind code rearrangement during code review --- .../labkey/study/model/DatasetDomainKind.java | 88 +++++++++---------- 1 file changed, 40 insertions(+), 48 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index f34183e6cfd..f885416a6cc 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -347,17 +347,8 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen Integer datasetId = arguments.getDatasetId(); String categoryName = arguments.getCategory(); boolean demographics = arguments.isDemographicData(); - String keyPropertyName = arguments.getKeyPropertyName(); boolean isManagedField = arguments.isKeyPropertyManaged(); - Integer categoryId = null; - boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(arguments.getKeyPropertyName()); - - if (useTimeKeyField) - keyPropertyName = null; - StudyImpl study = StudyManager.getInstance().getStudy(container); - if (study == null) - throw new IllegalArgumentException("A study does not exist for this folder"); // general dataset validation validateDatasetProperties(arguments, container, user, domain, null); @@ -369,6 +360,12 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomainKind.KIND_NAME)) throw new IllegalArgumentException("Date based studies require a date based dataset domain. Please specify a kind name of : " + DateDatasetDomainKind.KIND_NAME + "."); + String keyPropertyName = arguments.getKeyPropertyName(); + boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(arguments.getKeyPropertyName()); + if (useTimeKeyField) + keyPropertyName = null; + + Integer categoryId = null; if (categoryName != null) { ViewCategory category = ViewCategoryManager.getInstance().getCategory(container, categoryName); @@ -455,7 +452,13 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper boolean isManagedField = datasetProperties.isKeyPropertyManaged(); boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(keyPropertyName); boolean isDemographicData = datasetProperties.isDemographicData(); - Study study = StudyService.get().getStudy(container); // calling functions have validated this is not null + + if (!container.hasPermission(user, AdminPermission.class)) + throw new IllegalArgumentException("You do not have permissions to edit dataset definitions in this container."); + + Study study = StudyService.get().getStudy(container); + if (study == null) + throw new IllegalArgumentException("A study does not exist for this container."); // Name related exceptions @@ -465,6 +468,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (name.length() > 200) throw new IllegalArgumentException("Dataset name must be under 200 characters."); + // issue 17766: check if dataset or query exist with this name if (!name.equals(domain.getName()) && (null != StudyManager.getInstance().getDatasetDefinitionByName(study, name) || null != QueryService.get().getQueryDef(user, container, "study", name))) throw new IllegalArgumentException("A Dataset or Query already exists with the name \"" + name +"\"."); @@ -484,7 +488,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (isManagedField && (keyPropertyName == null || keyPropertyName.length() == 0)) throw new IllegalArgumentException("Additional Key Column name must be specified if field is managed."); - if (DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(keyPropertyName) && isManagedField) + if (useTimeKeyField && isManagedField) throw new IllegalArgumentException("Additional key cannot be a managed field if KeyPropertyName is Time (from Date/Time)."); if (isDemographicData && (isManagedField || keyPropertyName != null)) @@ -510,20 +514,12 @@ private void checkCanUpdate(DatasetDefinition def, Container container, User use GWTDomain original, GWTDomain update) { if (null == def) - throw new IllegalArgumentException("Dataset not found"); - - if (!container.hasPermission(user, AdminPermission.class)) - throw new IllegalArgumentException("Unauthorized"); - - Study study = StudyService.get().getStudy(container); - if (null == study) - throw new IllegalArgumentException("Study not found in current container"); // PR Note: Alternate existing error message is 'A study does not exist for this folder' + throw new IllegalArgumentException("Dataset not found."); if (!def.canUpdateDefinition(user)) throw new IllegalArgumentException("Shared dataset can not be edited in this folder."); - Domain d = PropertyService.get().getDomain(container, update.getDomainURI()); - if (null == d) + if (null == PropertyService.get().getDomain(container, update.getDomainURI())) throw new IllegalArgumentException("Domain not found: " + update.getDomainURI() + "."); if (!def.getTypeURI().equals(original.getDomainURI()) || !def.getTypeURI().equals(update.getDomainURI())) @@ -531,7 +527,7 @@ private void checkCanUpdate(DatasetDefinition def, Container container, User use } private ValidationException updateDomainDescriptor(GWTDomain original, GWTDomain update, - Container container, User user, DatasetDefinition def, DatasetDomainKindProperties datasetProperties) + Container container, User user, DatasetDefinition def) { ValidationException exception = new ValidationException(); @@ -550,7 +546,7 @@ private ValidationException updateDomainDescriptor(GWTDomain errors = new ArrayList<>(); - studyManager.updateDatasetDefinition(user, updated, errors); + StudyManager.getInstance().updateDatasetDefinition(user, updated, errors); + for (String errorMsg: errors) - { exception.addGlobalError(errorMsg); - } return exception; } catch (RuntimeSQLException e) @@ -639,17 +635,15 @@ public ValidationException updateDomain(GWTDomain updatedProps = update.getFields(); for (Iterator iter = updatedProps.iterator(); iter.hasNext();) { @@ -662,18 +656,16 @@ else if (DatasetDomainKind.DATE.equalsIgnoreCase(prop.getName())) try (DbScope.Transaction transaction = StudySchema.getInstance().getScope().ensureTransaction()) { - exception = updateDomainDescriptor(original, update, container, user, def, datasetProperties); + ValidationException exception = updateDomainDescriptor(original, update, container, user, def); + if (!exception.hasErrors()) - { - // general dataset validation - // PR Note: I think this is the correct place to put this, after we noted the fields are updated in updateDomainDescriptor(). Let me know though if I misapprehended - validateDatasetProperties(datasetProperties, container, user, update, def); - exception = updateDataset(datasetProperties, original.getDomainURI(), exception, studyManager, study, container, user, def); - if (!exception.hasErrors()) - transaction.commit(); - } + exception = updateDataset(datasetProperties, original.getDomainURI(), exception, study, container, user, def); + + if (!exception.hasErrors()) + transaction.commit(); + + return exception; } - return exception; } @Override From 39fe2950fc378d8f8813d0e2902cb8975097d9ed Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 20 Apr 2020 11:05:01 -0500 Subject: [PATCH 33/73] Item 7066: DatasetDomainKind code rearrangement during code review (part 2) --- .../labkey/study/model/DatasetDomainKind.java | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index f885416a6cc..ee07a366c60 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -360,8 +360,9 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomainKind.KIND_NAME)) throw new IllegalArgumentException("Date based studies require a date based dataset domain. Please specify a kind name of : " + DateDatasetDomainKind.KIND_NAME + "."); + // Check for usage of Time as Key Field String keyPropertyName = arguments.getKeyPropertyName(); - boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(arguments.getKeyPropertyName()); + boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(keyPropertyName); if (useTimeKeyField) keyPropertyName = null; @@ -396,7 +397,6 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai managementType = KeyManagementType.getManagementTypeFromProp(pd.getPropertyType()); } - DatasetDefinition def = AssayPublishManager.getInstance().createAssayDataset(user, study, name, keyPropertyName, datasetId, demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType); @@ -429,11 +429,13 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai propertyIndices.add(propIndex); } newDomain.setPropertyIndices(propertyIndices); + newDomain.save(user); } else throw new IllegalArgumentException("Failed to create domain for dataset : " + name + "."); } + transaction.commit(); return study.getDataset(def.getDatasetId()).getDomain(); } @@ -529,14 +531,10 @@ private void checkCanUpdate(DatasetDefinition def, Container container, User use private ValidationException updateDomainDescriptor(GWTDomain original, GWTDomain update, Container container, User user, DatasetDefinition def) { - ValidationException exception = new ValidationException(); - try { - List allErrors = DomainUtil.updateDomainDescriptor(original, update, container, user).getAllErrors(); - for (String str : allErrors) { - exception.addGlobalError(str); - } + ValidationException exception = new ValidationException(); + exception.addErrors(DomainUtil.updateDomainDescriptor(original, update, container, user)); return exception; } finally @@ -572,32 +570,27 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro if (!study.getShareVisitDefinitions()) datasetProperties.setDataSharing("NONE"); - // Default is no key management - Dataset.KeyManagementType keyType = Dataset.KeyManagementType.None; - String keyPropertyName = null; - boolean useTimeKeyField = false; // Check for usage of Time as Key Field - if (DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(datasetProperties.getKeyPropertyName())) - { + boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(datasetProperties.getKeyPropertyName()); + if (useTimeKeyField) datasetProperties.setKeyPropertyName(null); - useTimeKeyField = true; - } + // Default is no key management + KeyManagementType keyType = KeyManagementType.None; + String keyPropertyName = datasetProperties.getKeyPropertyName(); if (datasetProperties.getKeyPropertyName() != null) { Domain domain = PropertyService.get().getDomain(container, domainURI); - for (DomainProperty dp : domain.getProperties()) { if (dp.getName().equalsIgnoreCase(datasetProperties.getKeyPropertyName())) { keyPropertyName = dp.getName(); - // Be sure that the user really wants a managed key, not just that disabled select box still had a value + // Be sure that the user really wants a managed key, not just that disabled select box still had a value if (datasetProperties.isKeyPropertyManaged()) - { - keyType = Dataset.KeyManagementType.getManagementTypeFromProp(dp.getPropertyDescriptor().getPropertyType()); - } + keyType = KeyManagementType.getManagementTypeFromProp(dp.getPropertyDescriptor().getPropertyType()); + break; } } From 834ff12dd1682ca2f3a1700296e9b60d58f523b7 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Mon, 20 Apr 2020 13:47:45 -0700 Subject: [PATCH 34/73] Applying feedback --- .../labkey/study/model/DatasetDomainKind.java | 55 ++++++------------- 1 file changed, 16 insertions(+), 39 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index ee07a366c60..0cdb67c93c5 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -471,7 +471,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper throw new IllegalArgumentException("Dataset name must be under 200 characters."); // issue 17766: check if dataset or query exist with this name - if (!name.equals(domain.getName()) && (null != StudyManager.getInstance().getDatasetDefinitionByName(study, name) || null != QueryService.get().getQueryDef(user, container, "study", name))) + if ((!name.equals(domain.getName()) || def == null) && (null != StudyManager.getInstance().getDatasetDefinitionByName(study, name) || null != QueryService.get().getQueryDef(user, container, "study", name))) throw new IllegalArgumentException("A Dataset or Query already exists with the name \"" + name +"\"."); // Label related exceptions @@ -479,7 +479,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (label == null || label.length() == 0) throw new IllegalArgumentException("Dataset label cannot be empty."); - if (def != null && !def.getLabel().equals(label) && null != StudyManager.getInstance().getDatasetDefinitionByLabel(study, label)) + if ((def != null && !def.getLabel().equals(label) || (def == null)) && null != StudyManager.getInstance().getDatasetDefinitionByLabel(study, label)) throw new IllegalArgumentException("A Dataset already exists with the label \"" + label +"\"."); // Additional key related exceptions @@ -510,9 +510,12 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (def != null && null != datasetId && def.getDatasetId() != datasetId && null != study.getDataset(datasetId)) throw new IllegalArgumentException("A Dataset already exists with the datasetId \"" + datasetId +"\"."); + + if (!study.getShareVisitDefinitions() && null != datasetProperties.getDataSharing() && !datasetProperties.getDataSharing().equals("NONE")) + throw new IllegalArgumentException("Illegal value set for data sharing option."); } - private void checkCanUpdate(DatasetDefinition def, Container container, User user, + private void checkCanUpdate(DatasetDefinition def, Container container, User user, DatasetDomainKindProperties datasetProperties, GWTDomain original, GWTDomain update) { if (null == def) @@ -526,6 +529,13 @@ private void checkCanUpdate(DatasetDefinition def, Container container, User use if (!def.getTypeURI().equals(original.getDomainURI()) || !def.getTypeURI().equals(update.getDomainURI())) throw new IllegalArgumentException("Illegal Argument"); + + if ( datasetProperties.isDemographicData() && !def.isDemographicData() && !StudyManager.getInstance().isDataUniquePerParticipant(def)) + { + String noun = StudyService.get().getSubjectNounSingular(container); + throw new IllegalArgumentException("This dataset currently contains more than one row of data per " + noun + + ". Demographic data includes one row of data per " + noun + "."); + } } private ValidationException updateDomainDescriptor(GWTDomain original, GWTDomain update, @@ -548,28 +558,6 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro { try { - // Update-case specific validation - if ( datasetProperties.isDemographicData() && !datasetProperties.isDemographicData() && !StudyManager.getInstance().isDataUniquePerParticipant(def)) - { - String noun = StudyService.get().getSubjectNounSingular(container); - throw new IllegalArgumentException("This dataset currently contains more than one row of data per " + noun + - ". Demographic data includes one row of data per " + noun + "."); - } - - // PR Note: is it desired that we check for this at all? -// if (null != datasetProperties.getCategory() && null == ViewCategoryManager.getInstance().getCategory(container, datasetProperties.getCategory())) -// throw new IllegalArgumentException("Unable to find a category named : " + datasetProperties.getCategory() + " in this folder."); - - if (datasetProperties.isDemographicData()) - { - datasetProperties.setKeyPropertyName(null); - datasetProperties.setKeyPropertyManaged(false); - } - - /* IGNORE illegal shareDataset values */ - if (!study.getShareVisitDefinitions()) - datasetProperties.setDataSharing("NONE"); - // Check for usage of Time as Key Field boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(datasetProperties.getKeyPropertyName()); if (useTimeKeyField) @@ -617,9 +605,9 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro { return exception.addGlobalError("Additional key column must have unique values."); } - catch (Exception x) + catch (Exception e) { - throw UnexpectedException.wrap(x); + throw new RuntimeException(e); } } @@ -634,18 +622,7 @@ public ValidationException updateDomain(GWTDomain updatedProps = update.getFields(); - for (Iterator iter = updatedProps.iterator(); iter.hasNext();) - { - GWTPropertyDescriptor prop = iter.next(); - if (DatasetDefinition.isDefaultFieldName(prop.getName(), study)) - iter.remove(); - else if (DatasetDomainKind.DATE.equalsIgnoreCase(prop.getName())) - prop.setRangeURI(PropertyType.DATE_TIME.getTypeUri()); - } + checkCanUpdate(def, container, user, datasetProperties, original, update); try (DbScope.Transaction transaction = StudySchema.getInstance().getScope().ensureTransaction()) { From 927c8e2ea22caaaea62bea8c6b2ace8b8d63bfca Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Mon, 20 Apr 2020 14:45:41 -0700 Subject: [PATCH 35/73] Adds category creation for new dataset --- .../labkey/study/model/DatasetDomainKind.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 0cdb67c93c5..5cfa082c49c 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -366,16 +366,6 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai if (useTimeKeyField) keyPropertyName = null; - Integer categoryId = null; - if (categoryName != null) - { - ViewCategory category = ViewCategoryManager.getInstance().getCategory(container, categoryName); - if (category != null) - categoryId = category.getRowId(); - else - throw new IllegalArgumentException("Unable to find a category named : " + categoryName + " in this folder."); - } - try (DbScope.Transaction transaction = ExperimentService.get().ensureTransaction()) { KeyManagementType managementType = KeyManagementType.None; @@ -397,6 +387,21 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai managementType = KeyManagementType.getManagementTypeFromProp(pd.getPropertyType()); } + Integer categoryId = null; + ViewCategory category; + if (categoryName != null) + { + category = ViewCategoryManager.getInstance().getCategory(container, categoryName); + if (category != null) + categoryId = category.getRowId(); + else + { + String[] parts = ViewCategoryManager.getInstance().decode(categoryName); + category = ViewCategoryManager.getInstance().ensureViewCategory(container, user, parts); + categoryId = category.getRowId(); + } + } + DatasetDefinition def = AssayPublishManager.getInstance().createAssayDataset(user, study, name, keyPropertyName, datasetId, demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType); From c866b45f81c78a36653f8567c6896ef2770ca0ce Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Mon, 20 Apr 2020 22:19:17 -0700 Subject: [PATCH 36/73] pulling in new shared components version --- study/package-lock.json | 20 ++++++++++---------- study/package.json | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/study/package-lock.json b/study/package-lock.json index 96aa8e45f4d..50c05289f34 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -244,21 +244,21 @@ "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" }, "@labkey/api": { - "version": "0.2.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.0.tgz", - "integrity": "sha1-GjEM55EHaeO/UCvK9OxitjpCQmc=" + "version": "0.2.2", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.2.tgz", + "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.49.1-fb-datasetDesigner.2", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.49.1-fb-datasetDesigner.2.tgz", - "integrity": "sha1-O68Iu5jChxBbj0xBOTv4ezBZHo0=", + "version": "0.52.1-fb-datasetDesigner.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.0.tgz", + "integrity": "sha1-UF1Uq8arb41sZmee4SWQtPw1V10=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", "@fortawesome/free-regular-svg-icons": "5.11.2", "@fortawesome/free-solid-svg-icons": "5.9.0", "@fortawesome/react-fontawesome": "0.1.4", - "@labkey/api": "0.2.0", + "@labkey/api": "0.2.2", "bootstrap": "3.4.1", "classnames": "2.2.6", "font-awesome": "4.7.0", @@ -6928,9 +6928,9 @@ "dev": true }, "yaml": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.1.tgz", - "integrity": "sha512-xbWX1ayUVoW8DPM8qxOBowac4XxSTi0mFLbiokRq880ViYglN+F3nJ4Dc2GdypXpykrknKS39d8I3lzFoHv1kA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz", + "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==", "requires": { "@babel/runtime": "^7.9.2" } diff --git a/study/package.json b/study/package.json index ec83203ce71..0acb3a6e27f 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.49.1-fb-datasetDesigner.2" + "@labkey/components": "0.52.1-fb-datasetDesigner.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 2df49c1758fc242d82c009b8b68987b9b3b40d3c Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Tue, 21 Apr 2020 08:33:30 -0700 Subject: [PATCH 37/73] upgrading ui version --- study/package-lock.json | 6 +++--- study/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/study/package-lock.json b/study/package-lock.json index 50c05289f34..890af8043aa 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.0.tgz", - "integrity": "sha1-UF1Uq8arb41sZmee4SWQtPw1V10=", + "version": "0.52.1-fb-datasetDesigner.1", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.1.tgz", + "integrity": "sha1-lPeTPpkistCKFJf7WW3tmL7tneg=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index 0acb3a6e27f..0a7c10f0667 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.0" + "@labkey/components": "0.52.1-fb-datasetDesigner.1" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From a72406a00da15ceb20412e2cf003862566df7d11 Mon Sep 17 00:00:00 2001 From: cnathe Date: Wed, 22 Apr 2020 09:19:35 -0500 Subject: [PATCH 38/73] Update to the latest @labkey/components alpha package version --- assay/package-lock.json | 20 ++++++++++---------- assay/package.json | 2 +- core/package-lock.json | 20 ++++++++++---------- core/package.json | 2 +- experiment/package-lock.json | 20 ++++++++++---------- experiment/package.json | 2 +- list/package-lock.json | 20 ++++++++++---------- list/package.json | 2 +- query/package-lock.json | 20 ++++++++++---------- query/package.json | 2 +- 10 files changed, 55 insertions(+), 55 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 76da22bb9f4..1e88aa2ab9f 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -244,21 +244,21 @@ "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" }, "@labkey/api": { - "version": "0.2.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.0.tgz", - "integrity": "sha1-GjEM55EHaeO/UCvK9OxitjpCQmc=" + "version": "0.2.2", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.2.tgz", + "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.0.tgz", - "integrity": "sha1-o7n/jGZ2zGnvaP3M/eY2DvT8feU=", + "version": "0.52.1-fb-datasetDesigner.1", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.1.tgz", + "integrity": "sha1-lPeTPpkistCKFJf7WW3tmL7tneg=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", "@fortawesome/free-regular-svg-icons": "5.11.2", "@fortawesome/free-solid-svg-icons": "5.9.0", "@fortawesome/react-fontawesome": "0.1.4", - "@labkey/api": "0.2.0", + "@labkey/api": "0.2.2", "bootstrap": "3.4.1", "classnames": "2.2.6", "font-awesome": "4.7.0", @@ -6922,9 +6922,9 @@ "dev": true }, "yaml": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.1.tgz", - "integrity": "sha512-xbWX1ayUVoW8DPM8qxOBowac4XxSTi0mFLbiokRq880ViYglN+F3nJ4Dc2GdypXpykrknKS39d8I3lzFoHv1kA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz", + "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==", "requires": { "@babel/runtime": "^7.9.2" } diff --git a/assay/package.json b/assay/package.json index 8e7021fb05c..a3c5397bd12 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.0" + "@labkey/components": "0.52.1-fb-datasetDesigner.1" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index 1c2e40b2a50..246bd489ad7 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,16 +939,16 @@ "integrity": "sha1-nsc4CgHmvONGuau6ZCLid4HA2PU=" }, "@labkey/components": { - "version": "0.52.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.0.tgz", - "integrity": "sha1-o7n/jGZ2zGnvaP3M/eY2DvT8feU=", + "version": "0.52.1-fb-datasetDesigner.1", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.1.tgz", + "integrity": "sha1-lPeTPpkistCKFJf7WW3tmL7tneg=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", "@fortawesome/free-regular-svg-icons": "5.11.2", "@fortawesome/free-solid-svg-icons": "5.9.0", "@fortawesome/react-fontawesome": "0.1.4", - "@labkey/api": "0.2.0", + "@labkey/api": "0.2.2", "bootstrap": "3.4.1", "classnames": "2.2.6", "font-awesome": "4.7.0", @@ -980,9 +980,9 @@ }, "dependencies": { "@labkey/api": { - "version": "0.2.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.0.tgz", - "integrity": "sha1-GjEM55EHaeO/UCvK9OxitjpCQmc=" + "version": "0.2.2", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.2.tgz", + "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" } } }, @@ -13682,9 +13682,9 @@ "dev": true }, "yaml": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.1.tgz", - "integrity": "sha512-xbWX1ayUVoW8DPM8qxOBowac4XxSTi0mFLbiokRq880ViYglN+F3nJ4Dc2GdypXpykrknKS39d8I3lzFoHv1kA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz", + "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==", "requires": { "@babel/runtime": "^7.9.2" } diff --git a/core/package.json b/core/package.json index 73b743d0927..edeaf7c702c 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.1", - "@labkey/components": "0.52.0", + "@labkey/components": "0.52.1-fb-datasetDesigner.1", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index a486fd1cce7..dd183ab7004 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -244,21 +244,21 @@ "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" }, "@labkey/api": { - "version": "0.2.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.0.tgz", - "integrity": "sha1-GjEM55EHaeO/UCvK9OxitjpCQmc=" + "version": "0.2.2", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.2.tgz", + "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.0.tgz", - "integrity": "sha1-o7n/jGZ2zGnvaP3M/eY2DvT8feU=", + "version": "0.52.1-fb-datasetDesigner.1", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.1.tgz", + "integrity": "sha1-lPeTPpkistCKFJf7WW3tmL7tneg=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", "@fortawesome/free-regular-svg-icons": "5.11.2", "@fortawesome/free-solid-svg-icons": "5.9.0", "@fortawesome/react-fontawesome": "0.1.4", - "@labkey/api": "0.2.0", + "@labkey/api": "0.2.2", "bootstrap": "3.4.1", "classnames": "2.2.6", "font-awesome": "4.7.0", @@ -6922,9 +6922,9 @@ "dev": true }, "yaml": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.1.tgz", - "integrity": "sha512-xbWX1ayUVoW8DPM8qxOBowac4XxSTi0mFLbiokRq880ViYglN+F3nJ4Dc2GdypXpykrknKS39d8I3lzFoHv1kA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz", + "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==", "requires": { "@babel/runtime": "^7.9.2" } diff --git a/experiment/package.json b/experiment/package.json index 5006ac4acf1..d4b0f5794f2 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.0" + "@labkey/components": "0.52.1-fb-datasetDesigner.1" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index 7b75beef2d4..9c7a2e13f36 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -244,21 +244,21 @@ "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" }, "@labkey/api": { - "version": "0.2.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.0.tgz", - "integrity": "sha1-GjEM55EHaeO/UCvK9OxitjpCQmc=" + "version": "0.2.2", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.2.tgz", + "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.0.tgz", - "integrity": "sha1-o7n/jGZ2zGnvaP3M/eY2DvT8feU=", + "version": "0.52.1-fb-datasetDesigner.1", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.1.tgz", + "integrity": "sha1-lPeTPpkistCKFJf7WW3tmL7tneg=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", "@fortawesome/free-regular-svg-icons": "5.11.2", "@fortawesome/free-solid-svg-icons": "5.9.0", "@fortawesome/react-fontawesome": "0.1.4", - "@labkey/api": "0.2.0", + "@labkey/api": "0.2.2", "bootstrap": "3.4.1", "classnames": "2.2.6", "font-awesome": "4.7.0", @@ -6922,9 +6922,9 @@ "dev": true }, "yaml": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.1.tgz", - "integrity": "sha512-xbWX1ayUVoW8DPM8qxOBowac4XxSTi0mFLbiokRq880ViYglN+F3nJ4Dc2GdypXpykrknKS39d8I3lzFoHv1kA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz", + "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==", "requires": { "@babel/runtime": "^7.9.2" } diff --git a/list/package.json b/list/package.json index 83f07c864f9..9e6d5a00b68 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.0" + "@labkey/components": "0.52.1-fb-datasetDesigner.1" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index 33e2c814e63..64d26484041 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -244,21 +244,21 @@ "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==" }, "@labkey/api": { - "version": "0.2.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.0.tgz", - "integrity": "sha1-GjEM55EHaeO/UCvK9OxitjpCQmc=" + "version": "0.2.2", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/api/-/@labkey/api-0.2.2.tgz", + "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.0.tgz", - "integrity": "sha1-o7n/jGZ2zGnvaP3M/eY2DvT8feU=", + "version": "0.52.1-fb-datasetDesigner.1", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.1.tgz", + "integrity": "sha1-lPeTPpkistCKFJf7WW3tmL7tneg=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", "@fortawesome/free-regular-svg-icons": "5.11.2", "@fortawesome/free-solid-svg-icons": "5.9.0", "@fortawesome/react-fontawesome": "0.1.4", - "@labkey/api": "0.2.0", + "@labkey/api": "0.2.2", "bootstrap": "3.4.1", "classnames": "2.2.6", "font-awesome": "4.7.0", @@ -6922,9 +6922,9 @@ "dev": true }, "yaml": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.1.tgz", - "integrity": "sha512-xbWX1ayUVoW8DPM8qxOBowac4XxSTi0mFLbiokRq880ViYglN+F3nJ4Dc2GdypXpykrknKS39d8I3lzFoHv1kA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.9.2.tgz", + "integrity": "sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg==", "requires": { "@babel/runtime": "^7.9.2" } diff --git a/query/package.json b/query/package.json index 5e11b5d9787..aa6731b4300 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.0" + "@labkey/components": "0.52.1-fb-datasetDesigner.1" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 4b7ad22ba65459f945fcef355d740f2120af6b2f Mon Sep 17 00:00:00 2001 From: cnathe Date: Wed, 22 Apr 2020 09:19:53 -0500 Subject: [PATCH 39/73] Add study/node_modules to .gitignore at platform --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1227bf95d6f..8ef7bd7b8f0 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ experiment/node_modules assay/node_modules list/node_modules query/node_modules +study/node_modules # These files are copied to this location core/resources/scripts/Ext.js From a5c96d39cb37b01158688551ac1644c70d273a8e Mon Sep 17 00:00:00 2001 From: cnathe Date: Wed, 22 Apr 2020 10:56:55 -0500 Subject: [PATCH 40/73] Remove unused "studyId" prop from the study moduleContext --- study/src/org/labkey/study/StudyModule.java | 1 - .../org/labkey/study/model/DatasetDomainKind.java | 12 +++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/study/src/org/labkey/study/StudyModule.java b/study/src/org/labkey/study/StudyModule.java index 80dda87ecd9..683e9150e2d 100644 --- a/study/src/org/labkey/study/StudyModule.java +++ b/study/src/org/labkey/study/StudyModule.java @@ -774,7 +774,6 @@ public JSONObject getPageContextJson(ContainerUser context) ret.put("subject", subject); ret.put("timepointType", study.getTimepointType().name()); - ret.put("studyId", study.getRowId()); } return ret; diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 5cfa082c49c..ed15febf56f 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -393,13 +393,15 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai { category = ViewCategoryManager.getInstance().getCategory(container, categoryName); if (category != null) + { categoryId = category.getRowId(); + } else - { - String[] parts = ViewCategoryManager.getInstance().decode(categoryName); - category = ViewCategoryManager.getInstance().ensureViewCategory(container, user, parts); - categoryId = category.getRowId(); - } + { + String[] parts = ViewCategoryManager.getInstance().decode(categoryName); + category = ViewCategoryManager.getInstance().ensureViewCategory(container, user, parts); + categoryId = category.getRowId(); + } } DatasetDefinition def = AssayPublishManager.getInstance().createAssayDataset(user, study, name, keyPropertyName, datasetId, From 1fb1401e8382c90fd01e540a8c66a6c49450b255 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Thu, 23 Apr 2020 10:25:10 -0700 Subject: [PATCH 41/73] Fix for description, label, and tag --- .../org/labkey/study/assay/AssayPublishManager.java | 12 ++++++++---- .../labkey/study/controllers/StudyController.java | 9 ++------- .../study/designer/StudyDefinitionServiceImpl.java | 2 +- .../org/labkey/study/model/DatasetDomainKind.java | 10 +++++++++- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/study/src/org/labkey/study/assay/AssayPublishManager.java b/study/src/org/labkey/study/assay/AssayPublishManager.java index a9c58351e5a..70302236cee 100644 --- a/study/src/org/labkey/study/assay/AssayPublishManager.java +++ b/study/src/org/labkey/study/assay/AssayPublishManager.java @@ -682,25 +682,25 @@ private boolean renameRunPropertyToBatch(Domain domain, Map prop @NotNull public DatasetDefinition createDataset(User user, StudyImpl study, String name, @Nullable Integer datasetId, boolean isDemographicData) { - return createAssayDataset(user, study, name, null, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, null, false, KeyManagementType.None); + return createAssayDataset(user, study, name, null, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, null, false, KeyManagementType.None, null, null, null); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, boolean isDemographicData, @Nullable ExpProtocol protocol) { - return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, false, KeyManagementType.None); + return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, false, KeyManagementType.None, null, null, null); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, boolean isDemographicData, @Nullable ExpProtocol protocol, boolean useTimeKeyField) { - return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, useTimeKeyField, KeyManagementType.None); + return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, useTimeKeyField, KeyManagementType.None, null, null, null); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, - boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType) + boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType, @Nullable String description, @Nullable Integer cohortId, @Nullable String tag) { DbSchema schema = StudySchema.getInstance().getSchema(); if (useTimeKeyField && (isDemographicData || keyPropertyName != null)) @@ -724,6 +724,10 @@ public DatasetDefinition createAssayDataset(User user, StudyImpl study, String n newDataset.setUseTimeKeyField(useTimeKeyField); newDataset.setKeyManagementType(managementType); + newDataset.setDescription(description); + newDataset.setCohortId(cohortId); + newDataset.setTag(tag); + StudyManager.getInstance().createDatasetDefinition(user, newDataset); transaction.commit(); diff --git a/study/src/org/labkey/study/controllers/StudyController.java b/study/src/org/labkey/study/controllers/StudyController.java index f059f794930..a41060bab00 100644 --- a/study/src/org/labkey/study/controllers/StudyController.java +++ b/study/src/org/labkey/study/controllers/StudyController.java @@ -68,15 +68,11 @@ import org.labkey.api.data.views.DataViewService; import org.labkey.api.exp.LsidManager; import org.labkey.api.exp.OntologyManager; -import org.labkey.api.exp.OntologyObject; import org.labkey.api.exp.PropertyDescriptor; import org.labkey.api.exp.api.ExpProtocol; import org.labkey.api.exp.api.ExpRun; import org.labkey.api.exp.api.ExperimentService; -import org.labkey.api.exp.api.ProvenanceService; import org.labkey.api.exp.property.Domain; -import org.labkey.api.exp.property.DomainUtil; -import org.labkey.api.gwt.client.model.GWTDomain; import org.labkey.api.gwt.server.BaseRemoteService; import org.labkey.api.module.FolderTypeManager; import org.labkey.api.module.ModuleHtmlView; @@ -129,7 +125,6 @@ import org.labkey.api.reports.report.ReportUrls; import org.labkey.api.search.SearchService; import org.labkey.api.search.SearchUrls; -import org.labkey.api.security.AdminConsoleAction; import org.labkey.api.security.RequiresLogin; import org.labkey.api.security.RequiresNoPermission; import org.labkey.api.security.RequiresPermission; @@ -7211,7 +7206,7 @@ public ApiResponse execute(DefineDatasetForm form, BindException errors) case importFromFile: case defineManually: def = AssayPublishManager.getInstance().createAssayDataset(getUser(), _study, form.getName(), - null, null, false, Dataset.TYPE_STANDARD, categoryId, null, false, KeyManagementType.None); + null, null, false, Dataset.TYPE_STANDARD, categoryId, null, false, KeyManagementType.None, null, null, null); if (def != null) { @@ -7228,7 +7223,7 @@ public ApiResponse execute(DefineDatasetForm form, BindException errors) break; case placeHolder: def = AssayPublishManager.getInstance().createAssayDataset(getUser(), _study, form.getName(), - null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None); + null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None, null, null, null); if (def != null) { def.provisionTable(); diff --git a/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java b/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java index 7f1a0d189bf..27c5a85fb89 100644 --- a/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java +++ b/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java @@ -179,7 +179,7 @@ public GWTStudyDefinition ensureDatasetPlaceholders(GWTStudyDefinition studyDefi if (dsId == -1) { DatasetDefinition datasetDefinition = AssayPublishManager.getInstance().createAssayDataset(getUser(), study, assayDefinition.getAssayName(), - null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None); + null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None, null, null, null); if (datasetDefinition != null) { datasetDefinition.provisionTable(); diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index ed15febf56f..0d2f035bdf9 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -66,6 +66,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -344,6 +345,9 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen { arguments.setName(domain.getName()); String name = arguments.getName(); + String description = arguments.getDescription(); + Integer cohortId = arguments.getCohortId(); + String tag = arguments.getTag(); Integer datasetId = arguments.getDatasetId(); String categoryName = arguments.getCategory(); boolean demographics = arguments.isDemographicData(); @@ -405,7 +409,11 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai } DatasetDefinition def = AssayPublishManager.getInstance().createAssayDataset(user, study, name, keyPropertyName, datasetId, - demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType); + demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType, description, cohortId, tag); +// def.setDescription(arguments.getDescription()); +// def.setCohortId(arguments.getCohortId()); +// def.setTag(arguments.getTag()); +// DatasetDefinition.updateModified(def, new Date()); if (def.getDomain() != null) { From ede1ce746b12fc3d5964f33b756291950a718022 Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Thu, 23 Apr 2020 10:28:35 -0700 Subject: [PATCH 42/73] Pulling in updated ui-components version --- study/package-lock.json | 12 ++++++------ study/package.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/study/package-lock.json b/study/package-lock.json index 890af8043aa..9f2ff29f425 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.1", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.1.tgz", - "integrity": "sha1-lPeTPpkistCKFJf7WW3tmL7tneg=", + "version": "0.52.1-fb-datasetDesigner.2", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.2.tgz", + "integrity": "sha1-5BTAsSjAShNCNCM9XFCVYAcHOKw=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -5285,9 +5285,9 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", - "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } diff --git a/study/package.json b/study/package.json index 0a7c10f0667..1c36fbc57eb 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.1" + "@labkey/components": "0.52.1-fb-datasetDesigner.2" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From dc3169a679cd62bef5c8267e4f6a18073b4d4df7 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Thu, 23 Apr 2020 11:07:05 -0700 Subject: [PATCH 43/73] Fix for Visit Date Column --- .../src/org/labkey/study/assay/AssayPublishManager.java | 9 +++++---- .../org/labkey/study/controllers/StudyController.java | 4 ++-- .../study/designer/StudyDefinitionServiceImpl.java | 2 +- study/src/org/labkey/study/model/DatasetDomainKind.java | 7 ++----- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/study/src/org/labkey/study/assay/AssayPublishManager.java b/study/src/org/labkey/study/assay/AssayPublishManager.java index 70302236cee..91ff76e6cac 100644 --- a/study/src/org/labkey/study/assay/AssayPublishManager.java +++ b/study/src/org/labkey/study/assay/AssayPublishManager.java @@ -682,25 +682,25 @@ private boolean renameRunPropertyToBatch(Domain domain, Map prop @NotNull public DatasetDefinition createDataset(User user, StudyImpl study, String name, @Nullable Integer datasetId, boolean isDemographicData) { - return createAssayDataset(user, study, name, null, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, null, false, KeyManagementType.None, null, null, null); + return createAssayDataset(user, study, name, null, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, null, false, KeyManagementType.None, null, null, null, null); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, boolean isDemographicData, @Nullable ExpProtocol protocol) { - return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, false, KeyManagementType.None, null, null, null); + return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, false, KeyManagementType.None, null, null, null, null); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, boolean isDemographicData, @Nullable ExpProtocol protocol, boolean useTimeKeyField) { - return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, useTimeKeyField, KeyManagementType.None, null, null, null); + return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, useTimeKeyField, KeyManagementType.None, null, null, null, null); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, - boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType, @Nullable String description, @Nullable Integer cohortId, @Nullable String tag) + boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType, @Nullable String description, @Nullable Integer cohortId, @Nullable String tag, String visitDatePropertyName) { DbSchema schema = StudySchema.getInstance().getSchema(); if (useTimeKeyField && (isDemographicData || keyPropertyName != null)) @@ -727,6 +727,7 @@ public DatasetDefinition createAssayDataset(User user, StudyImpl study, String n newDataset.setDescription(description); newDataset.setCohortId(cohortId); newDataset.setTag(tag); + newDataset.setVisitDatePropertyName(visitDatePropertyName); StudyManager.getInstance().createDatasetDefinition(user, newDataset); diff --git a/study/src/org/labkey/study/controllers/StudyController.java b/study/src/org/labkey/study/controllers/StudyController.java index a41060bab00..488fa81fd68 100644 --- a/study/src/org/labkey/study/controllers/StudyController.java +++ b/study/src/org/labkey/study/controllers/StudyController.java @@ -7206,7 +7206,7 @@ public ApiResponse execute(DefineDatasetForm form, BindException errors) case importFromFile: case defineManually: def = AssayPublishManager.getInstance().createAssayDataset(getUser(), _study, form.getName(), - null, null, false, Dataset.TYPE_STANDARD, categoryId, null, false, KeyManagementType.None, null, null, null); + null, null, false, Dataset.TYPE_STANDARD, categoryId, null, false, KeyManagementType.None, null, null, null, null); if (def != null) { @@ -7223,7 +7223,7 @@ public ApiResponse execute(DefineDatasetForm form, BindException errors) break; case placeHolder: def = AssayPublishManager.getInstance().createAssayDataset(getUser(), _study, form.getName(), - null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None, null, null, null); + null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None, null, null, null, null); if (def != null) { def.provisionTable(); diff --git a/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java b/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java index 27c5a85fb89..4901902904b 100644 --- a/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java +++ b/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java @@ -179,7 +179,7 @@ public GWTStudyDefinition ensureDatasetPlaceholders(GWTStudyDefinition studyDefi if (dsId == -1) { DatasetDefinition datasetDefinition = AssayPublishManager.getInstance().createAssayDataset(getUser(), study, assayDefinition.getAssayName(), - null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None, null, null, null); + null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None, null, null, null, null); if (datasetDefinition != null) { datasetDefinition.provisionTable(); diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 0d2f035bdf9..c7749598876 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -32,7 +32,6 @@ import org.labkey.api.data.TableInfo; import org.labkey.api.exp.Lsid; import org.labkey.api.exp.PropertyDescriptor; -import org.labkey.api.exp.PropertyType; import org.labkey.api.exp.TemplateInfo; import org.labkey.api.exp.api.ExperimentService; import org.labkey.api.exp.property.AbstractDomainKind; @@ -54,7 +53,6 @@ import org.labkey.api.study.Study; import org.labkey.api.study.StudyService; import org.labkey.api.study.TimepointType; -import org.labkey.api.util.UnexpectedException; import org.labkey.api.view.ActionURL; import org.labkey.api.view.NotFoundException; import org.labkey.api.writer.ContainerUser; @@ -66,10 +64,8 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -352,6 +348,7 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen String categoryName = arguments.getCategory(); boolean demographics = arguments.isDemographicData(); boolean isManagedField = arguments.isKeyPropertyManaged(); + String visitDatePropertyName = arguments.getVisitDatePropertyName(); StudyImpl study = StudyManager.getInstance().getStudy(container); // general dataset validation @@ -409,7 +406,7 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai } DatasetDefinition def = AssayPublishManager.getInstance().createAssayDataset(user, study, name, keyPropertyName, datasetId, - demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType, description, cohortId, tag); + demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType, description, cohortId, tag, visitDatePropertyName); // def.setDescription(arguments.getDescription()); // def.setCohortId(arguments.getCohortId()); // def.setTag(arguments.getTag()); From 10eb0c7b7b80fdba886585fd61e09813ad6145e3 Mon Sep 17 00:00:00 2001 From: cnathe Date: Thu, 23 Apr 2020 14:35:22 -0500 Subject: [PATCH 44/73] AssayPublishManager.createAssayDataset refactor from previous commit --- .../labkey/study/assay/AssayPublishManager.java | 16 ++++++++++++---- .../study/controllers/StudyController.java | 4 ++-- .../designer/StudyDefinitionServiceImpl.java | 2 +- .../labkey/study/model/DatasetDomainKind.java | 7 ++----- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/study/src/org/labkey/study/assay/AssayPublishManager.java b/study/src/org/labkey/study/assay/AssayPublishManager.java index 91ff76e6cac..208f25535c0 100644 --- a/study/src/org/labkey/study/assay/AssayPublishManager.java +++ b/study/src/org/labkey/study/assay/AssayPublishManager.java @@ -682,25 +682,33 @@ private boolean renameRunPropertyToBatch(Domain domain, Map prop @NotNull public DatasetDefinition createDataset(User user, StudyImpl study, String name, @Nullable Integer datasetId, boolean isDemographicData) { - return createAssayDataset(user, study, name, null, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, null, false, KeyManagementType.None, null, null, null, null); + return createAssayDataset(user, study, name, null, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, null, false, KeyManagementType.None); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, boolean isDemographicData, @Nullable ExpProtocol protocol) { - return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, false, KeyManagementType.None, null, null, null, null); + return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, false, KeyManagementType.None); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, boolean isDemographicData, @Nullable ExpProtocol protocol, boolean useTimeKeyField) { - return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, useTimeKeyField, KeyManagementType.None, null, null, null, null); + return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, Dataset.TYPE_STANDARD, null, protocol, useTimeKeyField, KeyManagementType.None); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, - boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType, @Nullable String description, @Nullable Integer cohortId, @Nullable String tag, String visitDatePropertyName) + boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType) + { + return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, type, categoryId, protocol, useTimeKeyField, managementType, null, null, null, null); + } + + @NotNull + public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, + boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType, + @Nullable String description, @Nullable Integer cohortId, @Nullable String tag, String visitDatePropertyName) { DbSchema schema = StudySchema.getInstance().getSchema(); if (useTimeKeyField && (isDemographicData || keyPropertyName != null)) diff --git a/study/src/org/labkey/study/controllers/StudyController.java b/study/src/org/labkey/study/controllers/StudyController.java index 488fa81fd68..f9445ddabf0 100644 --- a/study/src/org/labkey/study/controllers/StudyController.java +++ b/study/src/org/labkey/study/controllers/StudyController.java @@ -7206,7 +7206,7 @@ public ApiResponse execute(DefineDatasetForm form, BindException errors) case importFromFile: case defineManually: def = AssayPublishManager.getInstance().createAssayDataset(getUser(), _study, form.getName(), - null, null, false, Dataset.TYPE_STANDARD, categoryId, null, false, KeyManagementType.None, null, null, null, null); + null, null, false, Dataset.TYPE_STANDARD, categoryId, null, false, KeyManagementType.None); if (def != null) { @@ -7223,7 +7223,7 @@ public ApiResponse execute(DefineDatasetForm form, BindException errors) break; case placeHolder: def = AssayPublishManager.getInstance().createAssayDataset(getUser(), _study, form.getName(), - null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None, null, null, null, null); + null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None); if (def != null) { def.provisionTable(); diff --git a/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java b/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java index 4901902904b..7f1a0d189bf 100644 --- a/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java +++ b/study/src/org/labkey/study/designer/StudyDefinitionServiceImpl.java @@ -179,7 +179,7 @@ public GWTStudyDefinition ensureDatasetPlaceholders(GWTStudyDefinition studyDefi if (dsId == -1) { DatasetDefinition datasetDefinition = AssayPublishManager.getInstance().createAssayDataset(getUser(), study, assayDefinition.getAssayName(), - null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None, null, null, null, null); + null, null, false, Dataset.TYPE_PLACEHOLDER, categoryId, null, false, KeyManagementType.None); if (datasetDefinition != null) { datasetDefinition.provisionTable(); diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index c7749598876..9afa838dc83 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -406,11 +406,8 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai } DatasetDefinition def = AssayPublishManager.getInstance().createAssayDataset(user, study, name, keyPropertyName, datasetId, - demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType, description, cohortId, tag, visitDatePropertyName); -// def.setDescription(arguments.getDescription()); -// def.setCohortId(arguments.getCohortId()); -// def.setTag(arguments.getTag()); -// DatasetDefinition.updateModified(def, new Date()); + demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType, + description, cohortId, tag, visitDatePropertyName); if (def.getDomain() != null) { From add27a879adb9fbbb56641c147ee5f2c08826876 Mon Sep 17 00:00:00 2001 From: cnathe Date: Thu, 23 Apr 2020 15:40:55 -0500 Subject: [PATCH 45/73] Revert change in DefineDatasetTypeAction.handlePost --- .../src/org/labkey/study/controllers/StudyController.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/study/src/org/labkey/study/controllers/StudyController.java b/study/src/org/labkey/study/controllers/StudyController.java index f9445ddabf0..628b0dda33e 100644 --- a/study/src/org/labkey/study/controllers/StudyController.java +++ b/study/src/org/labkey/study/controllers/StudyController.java @@ -473,8 +473,12 @@ public boolean handlePost(ImportTypeForm form, BindException derrors) else _def = AssayPublishManager.getInstance().createAssayDataset(getUser(), getStudyThrowIfNull(), form.getTypeName(), null, datasetId, false, null); - ((DatasetDefinition)_def).provisionTable(); - return true; + if (_def != null) + { + ((DatasetDefinition)_def).provisionTable(); + return true; + } + return false; } @Override From 635c3acfa134baa81fad06f65239b0f912004c52 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Thu, 23 Apr 2020 15:46:55 -0700 Subject: [PATCH 46/73] Support useTimeKeyField on DatasetDomainKindProperties --- api/src/org/labkey/api/study/Dataset.java | 4 ++++ .../org/labkey/study/model/DatasetDefinition.java | 2 ++ .../org/labkey/study/model/DatasetDomainKind.java | 6 +++--- .../study/model/DatasetDomainKindProperties.java | 13 +++++++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/api/src/org/labkey/api/study/Dataset.java b/api/src/org/labkey/api/study/Dataset.java index 97e9d396a67..0753303b66d 100644 --- a/api/src/org/labkey/api/study/Dataset.java +++ b/api/src/org/labkey/api/study/Dataset.java @@ -114,6 +114,10 @@ enum DataSharing DataSharing getDataSharingEnum(); + boolean getUseTimeKeyField(); + + void setUseTimeKeyField(boolean useTimeKeyField); + void setKeyPropertyName(String name); void save(User user) throws SQLException; diff --git a/study/src/org/labkey/study/model/DatasetDefinition.java b/study/src/org/labkey/study/model/DatasetDefinition.java index 793c2b33978..b4267c0d1e1 100644 --- a/study/src/org/labkey/study/model/DatasetDefinition.java +++ b/study/src/org/labkey/study/model/DatasetDefinition.java @@ -823,11 +823,13 @@ public void setType(String type) _type = type; } + @Override public boolean getUseTimeKeyField() { return _useTimeKeyField; } + @Override public void setUseTimeKeyField(boolean useTimeKeyField) { verifyMutability(); diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 9afa838dc83..6a8c21080c3 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -349,6 +349,7 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen boolean demographics = arguments.isDemographicData(); boolean isManagedField = arguments.isKeyPropertyManaged(); String visitDatePropertyName = arguments.getVisitDatePropertyName(); + Boolean useTimeKeyField = arguments.isUseTimeKeyField(); StudyImpl study = StudyManager.getInstance().getStudy(container); // general dataset validation @@ -363,7 +364,6 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai // Check for usage of Time as Key Field String keyPropertyName = arguments.getKeyPropertyName(); - boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(keyPropertyName); if (useTimeKeyField) keyPropertyName = null; @@ -461,7 +461,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper String keyPropertyName = datasetProperties.getKeyPropertyName(); Integer datasetId = datasetProperties.getDatasetId(); boolean isManagedField = datasetProperties.isKeyPropertyManaged(); - boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(keyPropertyName); + boolean useTimeKeyField = datasetProperties.isUseTimeKeyField(); boolean isDemographicData = datasetProperties.isDemographicData(); if (!container.hasPermission(user, AdminPermission.class)) @@ -568,7 +568,7 @@ private ValidationException updateDataset(DatasetDomainKindProperties datasetPro try { // Check for usage of Time as Key Field - boolean useTimeKeyField = DatasetDomainKindProperties.TIME_KEY_FIELD_KEY.equalsIgnoreCase(datasetProperties.getKeyPropertyName()); + boolean useTimeKeyField = datasetProperties.isUseTimeKeyField(); if (useTimeKeyField) datasetProperties.setKeyPropertyName(null); diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index d614d674cf7..8eac645cd49 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -26,6 +26,7 @@ public class DatasetDomainKindProperties implements Cloneable protected String _sourceAssayName; protected String _sourceAssayUrl; protected String _dataSharing; + protected boolean _useTimeKeyField = false; protected int _domainId; @@ -65,6 +66,7 @@ public DatasetDomainKindProperties(Dataset ds) _tag = ds.getTag(); _dataSharing = ds.getDataSharingEnum().name(); _keyPropertyManaged = (ds.getKeyManagementType() != Dataset.KeyManagementType.None); + _useTimeKeyField = ds.getUseTimeKeyField(); if (ds.getViewCategory() != null) { @@ -263,4 +265,15 @@ public void setDomainId(int domainId) { _domainId = domainId; } + + public boolean isUseTimeKeyField() + { + return _useTimeKeyField; + } + + public void setUseTimeKeyField(boolean useTimeKeyField) + { + _useTimeKeyField = useTimeKeyField; + } + } From 2cfffec0812ef728d15360a2ce1e2afc5639576d Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Fri, 24 Apr 2020 08:25:07 -0700 Subject: [PATCH 47/73] Disable phi level for additional key field --- .../api/gwt/client/model/GWTPropertyDescriptor.java | 12 ++++++++++++ study/package-lock.json | 6 +++--- study/package.json | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java b/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java index ed6fe70da36..187b89f6600 100644 --- a/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java +++ b/api/gwtsrc/org/labkey/api/gwt/client/model/GWTPropertyDescriptor.java @@ -79,6 +79,7 @@ public class GWTPropertyDescriptor implements IsSerializable private StringProperty redactedText = new StringProperty(); private BooleanProperty isPrimaryKey = new BooleanProperty(false); private StringProperty lockType = new StringProperty(LockedPropertyType.NotLocked.name()); + private BooleanProperty disablePhiLevel = new BooleanProperty(false); // for controlling the property editor (not persisted or user settable) // private boolean isEditable = true; @@ -139,6 +140,7 @@ public GWTPropertyDescriptor(GWTPropertyDescriptor s) setRedactedText(s.getRedactedText()); setIsPrimaryKey(s.getIsPrimaryKey()); setLockType(s.getLockType()); + setDisablePhiLevel(s.getDisablePhiLevel()); for (GWTPropertyValidator v : s.getPropertyValidators()) { @@ -558,6 +560,16 @@ public void setLockType(String lockType) this.lockType.set(lockType); } + public boolean getDisablePhiLevel() + { + return disablePhiLevel.booleanValue(); + } + + public void setDisablePhiLevel(boolean disablePhiLevel) + { + this.disablePhiLevel.setBool(disablePhiLevel); + } + public String debugString() { return getName() + " " + getLabel() + " " + getRangeURI() + " " + isRequired() + " " + getDescription(); diff --git a/study/package-lock.json b/study/package-lock.json index 9f2ff29f425..ecddf991a04 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.2", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.2.tgz", - "integrity": "sha1-5BTAsSjAShNCNCM9XFCVYAcHOKw=", + "version": "0.52.1-fb-datasetDesigner.3", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", + "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index 1c36fbc57eb..6e6271c88a7 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.2" + "@labkey/components": "0.52.1-fb-datasetDesigner.3" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 7da8abb820cc9179618b922140a75f9ceeb7ddc7 Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Fri, 24 Apr 2020 09:33:25 -0700 Subject: [PATCH 48/73] code review changes on platform app --- study/src/client/DatasetDesigner/DatasetDesigner.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/study/src/client/DatasetDesigner/DatasetDesigner.tsx b/study/src/client/DatasetDesigner/DatasetDesigner.tsx index 0578ebe1d99..dadf13531dd 100644 --- a/study/src/client/DatasetDesigner/DatasetDesigner.tsx +++ b/study/src/client/DatasetDesigner/DatasetDesigner.tsx @@ -25,7 +25,6 @@ interface State { isLoadingModel: boolean, message?: string, dirty: boolean, - hasDatasetDesignPermission?: boolean, returnUrl: string, fileImportError: string } @@ -133,6 +132,10 @@ export class App extends PureComponent { this.navigate(ActionURL.buildURL('study', 'begin', getServerContext().container.path)); }; + onChange = (model: DatasetModel) => { + this.setState(() => ({dirty: true})); + }; + render() { const { isLoadingModel, message, model } = this.state; @@ -151,6 +154,8 @@ export class App extends PureComponent { onCancel={this.onCancel} useTheme={true} onComplete={this.onComplete} + successBsStyle={'primary'} + onChange={this.onChange} /> ) From 3e919a550006cdf58acf221a5906c4279d04e68a Mon Sep 17 00:00:00 2001 From: cnathe Date: Fri, 24 Apr 2020 14:28:37 -0500 Subject: [PATCH 49/73] Update to the latest @labkey/components alpha package version --- assay/package-lock.json | 12 ++++++------ assay/package.json | 2 +- core/package-lock.json | 6 +++--- core/package.json | 2 +- experiment/package-lock.json | 12 ++++++------ experiment/package.json | 2 +- list/package-lock.json | 12 ++++++------ list/package.json | 2 +- query/package-lock.json | 12 ++++++------ query/package.json | 2 +- 10 files changed, 32 insertions(+), 32 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index d68fe8d86fb..4a99258702c 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1.tgz", - "integrity": "sha1-tg4ma8yHL19yPClyj0QvAyJSj1o=", + "version": "0.52.1-fb-datasetDesigner.3", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", + "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -5279,9 +5279,9 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", - "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } diff --git a/assay/package.json b/assay/package.json index 25e6b2a8746..fabec0c3e81 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1" + "@labkey/components": "0.52.1-fb-datasetDesigner.3" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index 26a9abaae62..9fc983ca26f 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-KJ7hmmDAn4ZOrTrG3TNAhotNhBQ=" }, "@labkey/components": { - "version": "0.52.1", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1.tgz", - "integrity": "sha1-tg4ma8yHL19yPClyj0QvAyJSj1o=", + "version": "0.52.1-fb-datasetDesigner.3", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", + "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/core/package.json b/core/package.json index b5bae9d7e7b..4b7c80deebd 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.3", - "@labkey/components": "0.52.1", + "@labkey/components": "0.52.1-fb-datasetDesigner.3", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index de06743fdea..69b4ffe3515 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1.tgz", - "integrity": "sha1-tg4ma8yHL19yPClyj0QvAyJSj1o=", + "version": "0.52.1-fb-datasetDesigner.3", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", + "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -5279,9 +5279,9 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", - "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } diff --git a/experiment/package.json b/experiment/package.json index e5827e304ee..e81538c5551 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1" + "@labkey/components": "0.52.1-fb-datasetDesigner.3" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index 98e0e8d4b01..44c5e70e913 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1.tgz", - "integrity": "sha1-tg4ma8yHL19yPClyj0QvAyJSj1o=", + "version": "0.52.1-fb-datasetDesigner.3", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", + "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -5279,9 +5279,9 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", - "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } diff --git a/list/package.json b/list/package.json index 412f2102ca9..beb85e1e99c 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1" + "@labkey/components": "0.52.1-fb-datasetDesigner.3" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index c7e5610bcd5..df77c7210c0 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1.tgz", - "integrity": "sha1-tg4ma8yHL19yPClyj0QvAyJSj1o=", + "version": "0.52.1-fb-datasetDesigner.3", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", + "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -5279,9 +5279,9 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "resolve": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.16.1.tgz", - "integrity": "sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } diff --git a/query/package.json b/query/package.json index 3155b96c154..69f5e812e48 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1" + "@labkey/components": "0.52.1-fb-datasetDesigner.3" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 4e4f60336f2057eb39ee002db5cb2e37eed5ebe7 Mon Sep 17 00:00:00 2001 From: cnathe Date: Fri, 24 Apr 2020 15:40:57 -0500 Subject: [PATCH 50/73] Dataset create case needs to handle the showByDefault and label properties --- .../org/labkey/study/assay/AssayPublishManager.java | 8 +++++--- .../src/org/labkey/study/model/DatasetDomainKind.java | 10 ++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/study/src/org/labkey/study/assay/AssayPublishManager.java b/study/src/org/labkey/study/assay/AssayPublishManager.java index 208f25535c0..1a4c6e6ae65 100644 --- a/study/src/org/labkey/study/assay/AssayPublishManager.java +++ b/study/src/org/labkey/study/assay/AssayPublishManager.java @@ -702,13 +702,13 @@ public DatasetDefinition createAssayDataset(User user, StudyImpl study, String n public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType) { - return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, type, categoryId, protocol, useTimeKeyField, managementType, null, null, null, null); + return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, type, categoryId, protocol, useTimeKeyField, managementType, true, null, null, null, null, null); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType, - @Nullable String description, @Nullable Integer cohortId, @Nullable String tag, String visitDatePropertyName) + boolean showByDefault, @Nullable String label, @Nullable String description, @Nullable Integer cohortId, @Nullable String tag, String visitDatePropertyName) { DbSchema schema = StudySchema.getInstance().getSchema(); if (useTimeKeyField && (isDemographicData || keyPropertyName != null)) @@ -718,9 +718,11 @@ public DatasetDefinition createAssayDataset(User user, StudyImpl study, String n if (null == datasetId) datasetId = new SqlSelector(schema, "SELECT MAX(n) + 1 AS id FROM (SELECT Max(datasetid) AS n FROM study.dataset WHERE container=? UNION SELECT ? As n) x", study.getContainer().getId(), MIN_ASSAY_ID).getObject(Integer.class); DatasetDefinition newDataset = new DatasetDefinition(study, datasetId.intValue(), name, name, null, null, null); - newDataset.setShowByDefault(true); + newDataset.setShowByDefault(showByDefault); newDataset.setType(type); + if (label != null) + newDataset.setLabel(label); if (categoryId != null) newDataset.setCategoryId(categoryId); if (keyPropertyName != null) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 6a8c21080c3..7ab2602bc42 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -342,6 +342,7 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen arguments.setName(domain.getName()); String name = arguments.getName(); String description = arguments.getDescription(); + String label = arguments.getLabel(); Integer cohortId = arguments.getCohortId(); String tag = arguments.getTag(); Integer datasetId = arguments.getDatasetId(); @@ -349,13 +350,14 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen boolean demographics = arguments.isDemographicData(); boolean isManagedField = arguments.isKeyPropertyManaged(); String visitDatePropertyName = arguments.getVisitDatePropertyName(); - Boolean useTimeKeyField = arguments.isUseTimeKeyField(); - StudyImpl study = StudyManager.getInstance().getStudy(container); + boolean useTimeKeyField = arguments.isUseTimeKeyField(); + boolean showByDefault = arguments.isShowByDefault(); // general dataset validation validateDatasetProperties(arguments, container, user, domain, null); // create-case specific validation + StudyImpl study = StudyManager.getInstance().getStudy(container); TimepointType timepointType = study.getTimepointType(); if (timepointType.isVisitBased() && getKindName().equals(DateDatasetDomainKind.KIND_NAME)) throw new IllegalArgumentException("Visit based studies require a visit based dataset domain. Please specify a kind name of : " + VisitDatasetDomainKind.KIND_NAME + "."); @@ -406,8 +408,8 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai } DatasetDefinition def = AssayPublishManager.getInstance().createAssayDataset(user, study, name, keyPropertyName, datasetId, - demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType, - description, cohortId, tag, visitDatePropertyName); + demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType, showByDefault, + label, description, cohortId, tag, visitDatePropertyName); if (def.getDomain() != null) { From 2cf56c49fd8bc19a585565885cc3110974b8c46d Mon Sep 17 00:00:00 2001 From: cnathe Date: Fri, 24 Apr 2020 16:48:24 -0500 Subject: [PATCH 51/73] Update to the latest @labkey/components alpha package version --- assay/package-lock.json | 6 +++--- assay/package.json | 2 +- core/package-lock.json | 6 +++--- core/package.json | 2 +- experiment/package-lock.json | 6 +++--- experiment/package.json | 2 +- list/package-lock.json | 6 +++--- list/package.json | 2 +- query/package-lock.json | 6 +++--- query/package.json | 2 +- study/package-lock.json | 6 +++--- study/package.json | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 4a99258702c..3f32e438df1 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.3", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", - "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", + "version": "0.52.1-fb-datasetDesigner.4", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", + "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/assay/package.json b/assay/package.json index fabec0c3e81..65d79207230 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.3" + "@labkey/components": "0.52.1-fb-datasetDesigner.4" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index 9fc983ca26f..f88834ce41d 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-KJ7hmmDAn4ZOrTrG3TNAhotNhBQ=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.3", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", - "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", + "version": "0.52.1-fb-datasetDesigner.4", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", + "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/core/package.json b/core/package.json index 4b7c80deebd..edf278ae72d 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.3", - "@labkey/components": "0.52.1-fb-datasetDesigner.3", + "@labkey/components": "0.52.1-fb-datasetDesigner.4", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 69b4ffe3515..af305dcf3ec 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.3", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", - "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", + "version": "0.52.1-fb-datasetDesigner.4", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", + "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/experiment/package.json b/experiment/package.json index e81538c5551..207078498aa 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.3" + "@labkey/components": "0.52.1-fb-datasetDesigner.4" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index 44c5e70e913..5919c150b9e 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.3", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", - "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", + "version": "0.52.1-fb-datasetDesigner.4", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", + "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/list/package.json b/list/package.json index beb85e1e99c..e33aec07671 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.3" + "@labkey/components": "0.52.1-fb-datasetDesigner.4" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index df77c7210c0..11ed71bac19 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.3", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", - "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", + "version": "0.52.1-fb-datasetDesigner.4", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", + "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/query/package.json b/query/package.json index 69f5e812e48..477226969b1 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.3" + "@labkey/components": "0.52.1-fb-datasetDesigner.4" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/package-lock.json b/study/package-lock.json index ecddf991a04..23549908a2f 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.3", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.3.tgz", - "integrity": "sha1-VKcinZhnWs4fqgTZOTzgbmN2yv0=", + "version": "0.52.1-fb-datasetDesigner.4", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", + "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index 6e6271c88a7..0d708daa1bb 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.3" + "@labkey/components": "0.52.1-fb-datasetDesigner.4" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 56caa0d1398c1c3fa14a3534efac58f2d4a1c7b7 Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Fri, 24 Apr 2020 17:47:13 -0700 Subject: [PATCH 52/73] column mapping changes for datetime vs dateTime --- study/package-lock.json | 6 +++--- study/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/study/package-lock.json b/study/package-lock.json index 23549908a2f..a8965de016b 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.4", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", - "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", + "version": "0.52.1-fb-datasetDesigner.5", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.5.tgz", + "integrity": "sha1-wErFHXvJYmyj1mNXGU8OwSFjOyA=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index 0d708daa1bb..dde9d01633a 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.4" + "@labkey/components": "0.52.1-fb-datasetDesigner.5" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 7cb165a776e9accb5b9105f9523b754df9a7d0ed Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Sun, 26 Apr 2020 18:27:21 -0700 Subject: [PATCH 53/73] pulling in changes for additional key field and visit date field changes --- study/package-lock.json | 6 +++--- study/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/study/package-lock.json b/study/package-lock.json index a8965de016b..4204465bfc6 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.5", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.5.tgz", - "integrity": "sha1-wErFHXvJYmyj1mNXGU8OwSFjOyA=", + "version": "0.52.1-fb-datasetDesigner.6", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.6.tgz", + "integrity": "sha1-v1rCQnNPJMdi0e6b5skQy9x45wo=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index dde9d01633a..4d0714132d5 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.5" + "@labkey/components": "0.52.1-fb-datasetDesigner.6" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 943c11c4cdeaabbb587d9eaa9fbc7495dd7a86f4 Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Mon, 27 Apr 2020 07:28:37 -0700 Subject: [PATCH 54/73] pulling in shared components designer version in platform apps --- assay/package-lock.json | 6 +++--- assay/package.json | 2 +- core/package-lock.json | 6 +++--- core/package.json | 2 +- experiment/package-lock.json | 6 +++--- experiment/package.json | 2 +- list/package-lock.json | 6 +++--- list/package.json | 2 +- query/package-lock.json | 6 +++--- query/package.json | 2 +- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 3f32e438df1..c8d7d89df9c 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.4", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", - "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", + "version": "0.52.1-fb-datasetDesigner.7", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.7.tgz", + "integrity": "sha1-OJ19RdQzoc8a/q+hACi7bfGAU2U=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/assay/package.json b/assay/package.json index 65d79207230..90126bba57a 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.4" + "@labkey/components": "0.52.1-fb-datasetDesigner.7" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index f88834ce41d..1c317d8e93d 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-KJ7hmmDAn4ZOrTrG3TNAhotNhBQ=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.4", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", - "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", + "version": "0.52.1-fb-datasetDesigner.7", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.7.tgz", + "integrity": "sha1-OJ19RdQzoc8a/q+hACi7bfGAU2U=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/core/package.json b/core/package.json index edf278ae72d..148783a1b21 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.3", - "@labkey/components": "0.52.1-fb-datasetDesigner.4", + "@labkey/components": "0.52.1-fb-datasetDesigner.7", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index af305dcf3ec..49c2f873d36 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.4", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", - "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", + "version": "0.52.1-fb-datasetDesigner.7", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.7.tgz", + "integrity": "sha1-OJ19RdQzoc8a/q+hACi7bfGAU2U=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/experiment/package.json b/experiment/package.json index 207078498aa..20ef58a424b 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.4" + "@labkey/components": "0.52.1-fb-datasetDesigner.7" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index 5919c150b9e..7283a1624a2 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.4", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", - "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", + "version": "0.52.1-fb-datasetDesigner.7", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.7.tgz", + "integrity": "sha1-OJ19RdQzoc8a/q+hACi7bfGAU2U=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/list/package.json b/list/package.json index e33aec07671..ef75200ec3b 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.4" + "@labkey/components": "0.52.1-fb-datasetDesigner.7" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index 11ed71bac19..d4d9a3f914a 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.4", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.4.tgz", - "integrity": "sha1-od8hx+2voIYSReT3KBjQlS3HGGE=", + "version": "0.52.1-fb-datasetDesigner.7", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.7.tgz", + "integrity": "sha1-OJ19RdQzoc8a/q+hACi7bfGAU2U=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/query/package.json b/query/package.json index 477226969b1..73be31d4efb 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.4" + "@labkey/components": "0.52.1-fb-datasetDesigner.7" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From d45cce13b2350b9850c06fa1088f531585804e72 Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 27 Apr 2020 10:02:58 -0500 Subject: [PATCH 55/73] Update to the latest @labkey/components alpha package version --- assay/package-lock.json | 6 +++--- assay/package.json | 2 +- core/package-lock.json | 6 +++--- core/package.json | 2 +- experiment/package-lock.json | 6 +++--- experiment/package.json | 2 +- list/package-lock.json | 6 +++--- list/package.json | 2 +- query/package-lock.json | 6 +++--- query/package.json | 2 +- study/package-lock.json | 6 +++--- study/package.json | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index c8d7d89df9c..36dc41f0eb4 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.7", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.7.tgz", - "integrity": "sha1-OJ19RdQzoc8a/q+hACi7bfGAU2U=", + "version": "0.52.1-fb-datasetDesigner.8", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", + "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/assay/package.json b/assay/package.json index 90126bba57a..6a15c672652 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.7" + "@labkey/components": "0.52.1-fb-datasetDesigner.8" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index 1c317d8e93d..bd3e0ab7a66 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-KJ7hmmDAn4ZOrTrG3TNAhotNhBQ=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.7", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.7.tgz", - "integrity": "sha1-OJ19RdQzoc8a/q+hACi7bfGAU2U=", + "version": "0.52.1-fb-datasetDesigner.8", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", + "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/core/package.json b/core/package.json index 148783a1b21..d040a15dae7 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.3", - "@labkey/components": "0.52.1-fb-datasetDesigner.7", + "@labkey/components": "0.52.1-fb-datasetDesigner.8", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 49c2f873d36..2354560e993 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.7", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.7.tgz", - "integrity": "sha1-OJ19RdQzoc8a/q+hACi7bfGAU2U=", + "version": "0.52.1-fb-datasetDesigner.8", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", + "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/experiment/package.json b/experiment/package.json index 20ef58a424b..13877b0576e 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.7" + "@labkey/components": "0.52.1-fb-datasetDesigner.8" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index 7283a1624a2..184140098e8 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.7", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.7.tgz", - "integrity": "sha1-OJ19RdQzoc8a/q+hACi7bfGAU2U=", + "version": "0.52.1-fb-datasetDesigner.8", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", + "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/list/package.json b/list/package.json index ef75200ec3b..71c98be0888 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.7" + "@labkey/components": "0.52.1-fb-datasetDesigner.8" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index d4d9a3f914a..a1d9a1d9f7e 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.7", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.7.tgz", - "integrity": "sha1-OJ19RdQzoc8a/q+hACi7bfGAU2U=", + "version": "0.52.1-fb-datasetDesigner.8", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", + "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/query/package.json b/query/package.json index 73be31d4efb..e0a358d7aaf 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.7" + "@labkey/components": "0.52.1-fb-datasetDesigner.8" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/package-lock.json b/study/package-lock.json index 4204465bfc6..5faf94f159b 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.6", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.6.tgz", - "integrity": "sha1-v1rCQnNPJMdi0e6b5skQy9x45wo=", + "version": "0.52.1-fb-datasetDesigner.8", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", + "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index 4d0714132d5..28ed464ca6f 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.6" + "@labkey/components": "0.52.1-fb-datasetDesigner.8" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 55fd1c66ff1b89b0052246a5f359dc532f1a9a82 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Mon, 27 Apr 2020 12:41:45 -0700 Subject: [PATCH 56/73] For create case, allows empty label in API call--populates label with name given --- .../src/org/labkey/study/model/DatasetDomainKind.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 7ab2602bc42..5481b86c751 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -342,7 +342,7 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen arguments.setName(domain.getName()); String name = arguments.getName(); String description = arguments.getDescription(); - String label = arguments.getLabel(); + String label = (arguments.getLabel() == null || arguments.getLabel().length() == 0) ? arguments.getName() : arguments.getLabel(); Integer cohortId = arguments.getCohortId(); String tag = arguments.getTag(); Integer datasetId = arguments.getDatasetId(); @@ -487,9 +487,6 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper // Label related exceptions - if (label == null || label.length() == 0) - throw new IllegalArgumentException("Dataset label cannot be empty."); - if ((def != null && !def.getLabel().equals(label) || (def == null)) && null != StudyManager.getInstance().getDatasetDefinitionByLabel(study, label)) throw new IllegalArgumentException("A Dataset already exists with the label \"" + label +"\"."); @@ -535,13 +532,16 @@ private void checkCanUpdate(DatasetDefinition def, Container container, User use if (!def.canUpdateDefinition(user)) throw new IllegalArgumentException("Shared dataset can not be edited in this folder."); + if (datasetProperties.getLabel() == null || datasetProperties.getLabel().length() == 0) + throw new IllegalArgumentException("Dataset label cannot be empty."); + if (null == PropertyService.get().getDomain(container, update.getDomainURI())) throw new IllegalArgumentException("Domain not found: " + update.getDomainURI() + "."); if (!def.getTypeURI().equals(original.getDomainURI()) || !def.getTypeURI().equals(update.getDomainURI())) throw new IllegalArgumentException("Illegal Argument"); - if ( datasetProperties.isDemographicData() && !def.isDemographicData() && !StudyManager.getInstance().isDataUniquePerParticipant(def)) + if (datasetProperties.isDemographicData() && !def.isDemographicData() && !StudyManager.getInstance().isDataUniquePerParticipant(def)) { String noun = StudyService.get().getSubjectNounSingular(container); throw new IllegalArgumentException("This dataset currently contains more than one row of data per " + noun + From bc8ae81806587440770fc4c07a544756c0ebafab Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 27 Apr 2020 16:52:23 -0500 Subject: [PATCH 57/73] Update to the latest @labkey/components alpha package version --- assay/package-lock.json | 6 +++--- assay/package.json | 2 +- core/package-lock.json | 6 +++--- core/package.json | 2 +- experiment/package-lock.json | 6 +++--- experiment/package.json | 2 +- list/package-lock.json | 6 +++--- list/package.json | 2 +- query/package-lock.json | 6 +++--- query/package.json | 2 +- study/package-lock.json | 6 +++--- study/package.json | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 36dc41f0eb4..4a33f297726 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.8", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", - "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", + "version": "0.52.1-fb-datasetDesigner.9", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", + "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/assay/package.json b/assay/package.json index 6a15c672652..38b5046afd0 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.8" + "@labkey/components": "0.52.1-fb-datasetDesigner.9" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index bd3e0ab7a66..b138e2a69d7 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-KJ7hmmDAn4ZOrTrG3TNAhotNhBQ=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.8", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", - "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", + "version": "0.52.1-fb-datasetDesigner.9", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", + "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/core/package.json b/core/package.json index d040a15dae7..abf587112cc 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.3", - "@labkey/components": "0.52.1-fb-datasetDesigner.8", + "@labkey/components": "0.52.1-fb-datasetDesigner.9", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 2354560e993..4e16f3a02e9 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.8", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", - "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", + "version": "0.52.1-fb-datasetDesigner.9", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", + "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/experiment/package.json b/experiment/package.json index 13877b0576e..fcebc0ea6f2 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.8" + "@labkey/components": "0.52.1-fb-datasetDesigner.9" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index 184140098e8..918b2484287 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.8", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", - "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", + "version": "0.52.1-fb-datasetDesigner.9", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", + "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/list/package.json b/list/package.json index 71c98be0888..2acc813b3e3 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.8" + "@labkey/components": "0.52.1-fb-datasetDesigner.9" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index a1d9a1d9f7e..979a1b4d385 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.8", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", - "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", + "version": "0.52.1-fb-datasetDesigner.9", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", + "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/query/package.json b/query/package.json index e0a358d7aaf..38a4b9a2bfb 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.8" + "@labkey/components": "0.52.1-fb-datasetDesigner.9" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/package-lock.json b/study/package-lock.json index 5faf94f159b..2ef21a8d041 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.8", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.8.tgz", - "integrity": "sha1-sPhbQva2x86ivkadBJgQxCfKCq4=", + "version": "0.52.1-fb-datasetDesigner.9", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", + "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index 28ed464ca6f..c2477c1523c 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.8" + "@labkey/components": "0.52.1-fb-datasetDesigner.9" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 6b776db971f0d4a8d3c164ff87f5e3b892ca98ab Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 27 Apr 2020 16:52:52 -0500 Subject: [PATCH 58/73] Add dataset designer message and link about datasets created from assay copy-to-study --- study/src/client/DatasetDesigner/DatasetDesigner.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/study/src/client/DatasetDesigner/DatasetDesigner.tsx b/study/src/client/DatasetDesigner/DatasetDesigner.tsx index dadf13531dd..c68b177ac1a 100644 --- a/study/src/client/DatasetDesigner/DatasetDesigner.tsx +++ b/study/src/client/DatasetDesigner/DatasetDesigner.tsx @@ -149,6 +149,11 @@ export class App extends PureComponent { return ( <> + {model && model.isFromAssay() && +

+ This dataset was created by copying assay data from {model.sourceAssayName}. +

+ } Date: Mon, 27 Apr 2020 16:53:21 -0500 Subject: [PATCH 59/73] Add entityId to the DatasetDomainKindProperties so it can be used to determine if a dataset is new or existing --- .../study/model/DatasetDomainKindProperties.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 8eac645cd49..1ebad5654d4 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -10,6 +10,7 @@ public class DatasetDomainKindProperties implements Cloneable { + protected String _entityId; protected Integer _datasetId; protected String _name; protected String _description; @@ -54,6 +55,7 @@ public DatasetDomainKindProperties(Container container) public DatasetDomainKindProperties(Dataset ds) { this(ds.getContainer()); + _entityId = ds.getEntityId(); _datasetId = ds.getDatasetId(); _name = ds.getName(); _description = ds.getDescription(); @@ -106,6 +108,16 @@ public void setDefinitionIsShared(boolean definitionIsShared) _definitionIsShared = definitionIsShared; } + public String getEntityId() + { + return _entityId; + } + + public void setEntityId(String entityId) + { + _entityId = entityId; + } + public Integer getDatasetId() { return _datasetId; From f38464e3e95e537ce03a4fbc838aff5c6d8f222c Mon Sep 17 00:00:00 2001 From: cnathe Date: Mon, 27 Apr 2020 17:16:30 -0500 Subject: [PATCH 60/73] Fix for dataset validation check on managed field setting for additional key --- study/src/org/labkey/study/model/DatasetDomainKind.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 5481b86c751..1029d664a6e 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -507,7 +507,7 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (!useTimeKeyField && null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) throw new IllegalArgumentException("\"Additional Key Column name \"" + keyPropertyName +"\" must be the name of a column."); - if (null != keyPropertyName && !useTimeKeyField) + if (null != keyPropertyName && !useTimeKeyField && isManagedField) { String rangeURI = domain.getFieldByName(keyPropertyName).getRangeURI(); if (!(rangeURI.endsWith("int") || rangeURI.endsWith("double") || rangeURI.endsWith("string"))) From 3dadd00890b0540222f3cc635ce2efb649c75d91 Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Mon, 27 Apr 2020 15:55:26 -0700 Subject: [PATCH 61/73] pulling in latest alpha version --- assay/package-lock.json | 12 ++++++------ assay/package.json | 2 +- core/package-lock.json | 12 ++++++------ core/package.json | 2 +- experiment/package-lock.json | 12 ++++++------ experiment/package.json | 2 +- list/package-lock.json | 12 ++++++------ list/package.json | 2 +- query/package-lock.json | 12 ++++++------ query/package.json | 2 +- study/package-lock.json | 12 ++++++------ study/package.json | 2 +- 12 files changed, 42 insertions(+), 42 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 4a33f297726..1082f0fc185 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.9", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", - "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", + "version": "0.52.1-fb-datasetDesigner.10", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", + "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -1554,9 +1554,9 @@ } }, "css-box-model": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.0.tgz", - "integrity": "sha512-lri0br+jSNV0kkkiGEp9y9y3Njq2PmpqbeGWRFQJuZteZzY9iC9GZhQ8Y4WpPwM/2YocjHePxy14igJY7YKzkA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", "requires": { "tiny-invariant": "^1.0.6" } diff --git a/assay/package.json b/assay/package.json index 38b5046afd0..d8d54c54cfb 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.9" + "@labkey/components": "0.52.1-fb-datasetDesigner.10" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index b138e2a69d7..ac4366a23a3 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-KJ7hmmDAn4ZOrTrG3TNAhotNhBQ=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.9", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", - "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", + "version": "0.52.1-fb-datasetDesigner.10", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", + "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -3111,9 +3111,9 @@ } }, "css-box-model": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.0.tgz", - "integrity": "sha512-lri0br+jSNV0kkkiGEp9y9y3Njq2PmpqbeGWRFQJuZteZzY9iC9GZhQ8Y4WpPwM/2YocjHePxy14igJY7YKzkA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", "requires": { "tiny-invariant": "^1.0.6" } diff --git a/core/package.json b/core/package.json index abf587112cc..5e9c645a937 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.3", - "@labkey/components": "0.52.1-fb-datasetDesigner.9", + "@labkey/components": "0.52.1-fb-datasetDesigner.10", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 4e16f3a02e9..2506205e309 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.9", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", - "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", + "version": "0.52.1-fb-datasetDesigner.10", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", + "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -1554,9 +1554,9 @@ } }, "css-box-model": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.0.tgz", - "integrity": "sha512-lri0br+jSNV0kkkiGEp9y9y3Njq2PmpqbeGWRFQJuZteZzY9iC9GZhQ8Y4WpPwM/2YocjHePxy14igJY7YKzkA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", "requires": { "tiny-invariant": "^1.0.6" } diff --git a/experiment/package.json b/experiment/package.json index fcebc0ea6f2..be69c7c3a72 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.9" + "@labkey/components": "0.52.1-fb-datasetDesigner.10" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index 918b2484287..f2651d37e60 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.9", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", - "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", + "version": "0.52.1-fb-datasetDesigner.10", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", + "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -1554,9 +1554,9 @@ } }, "css-box-model": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.0.tgz", - "integrity": "sha512-lri0br+jSNV0kkkiGEp9y9y3Njq2PmpqbeGWRFQJuZteZzY9iC9GZhQ8Y4WpPwM/2YocjHePxy14igJY7YKzkA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", "requires": { "tiny-invariant": "^1.0.6" } diff --git a/list/package.json b/list/package.json index 2acc813b3e3..7953bc61d9c 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.9" + "@labkey/components": "0.52.1-fb-datasetDesigner.10" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index 979a1b4d385..d7e6c5b0f8d 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.9", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", - "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", + "version": "0.52.1-fb-datasetDesigner.10", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", + "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -1554,9 +1554,9 @@ } }, "css-box-model": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.0.tgz", - "integrity": "sha512-lri0br+jSNV0kkkiGEp9y9y3Njq2PmpqbeGWRFQJuZteZzY9iC9GZhQ8Y4WpPwM/2YocjHePxy14igJY7YKzkA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", "requires": { "tiny-invariant": "^1.0.6" } diff --git a/query/package.json b/query/package.json index 38a4b9a2bfb..9dde9e1055e 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.9" + "@labkey/components": "0.52.1-fb-datasetDesigner.10" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/package-lock.json b/study/package-lock.json index 2ef21a8d041..7ed598ecdcf 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.9", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.9.tgz", - "integrity": "sha1-zbMyD0hgXnYxv6yHlthLta6/HbY=", + "version": "0.52.1-fb-datasetDesigner.10", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", + "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -1561,9 +1561,9 @@ } }, "css-box-model": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.0.tgz", - "integrity": "sha512-lri0br+jSNV0kkkiGEp9y9y3Njq2PmpqbeGWRFQJuZteZzY9iC9GZhQ8Y4WpPwM/2YocjHePxy14igJY7YKzkA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", "requires": { "tiny-invariant": "^1.0.6" } diff --git a/study/package.json b/study/package.json index c2477c1523c..ddb33361d4e 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.9" + "@labkey/components": "0.52.1-fb-datasetDesigner.10" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 02b8e465d859d2f49bad2903147cfc2e3effb838 Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Mon, 27 Apr 2020 17:15:53 -0700 Subject: [PATCH 62/73] pulling in latest alpha version --- assay/package-lock.json | 6 +++--- assay/package.json | 2 +- core/package-lock.json | 6 +++--- core/package.json | 2 +- experiment/package-lock.json | 6 +++--- experiment/package.json | 2 +- list/package-lock.json | 6 +++--- list/package.json | 2 +- query/package-lock.json | 6 +++--- query/package.json | 2 +- study/package-lock.json | 6 +++--- study/package.json | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 1082f0fc185..4ac7ec38572 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.10", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", - "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", + "version": "0.52.1-fb-datasetDesigner.11", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", + "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/assay/package.json b/assay/package.json index d8d54c54cfb..20615327301 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.10" + "@labkey/components": "0.52.1-fb-datasetDesigner.11" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index ac4366a23a3..688f07ba89e 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-KJ7hmmDAn4ZOrTrG3TNAhotNhBQ=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.10", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", - "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", + "version": "0.52.1-fb-datasetDesigner.11", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", + "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/core/package.json b/core/package.json index 5e9c645a937..65752d4554a 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.3", - "@labkey/components": "0.52.1-fb-datasetDesigner.10", + "@labkey/components": "0.52.1-fb-datasetDesigner.11", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 2506205e309..b821c4701be 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.10", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", - "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", + "version": "0.52.1-fb-datasetDesigner.11", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", + "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/experiment/package.json b/experiment/package.json index be69c7c3a72..03bfed6712b 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.10" + "@labkey/components": "0.52.1-fb-datasetDesigner.11" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index f2651d37e60..3476565cb05 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.10", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", - "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", + "version": "0.52.1-fb-datasetDesigner.11", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", + "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/list/package.json b/list/package.json index 7953bc61d9c..29ee33dee0a 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.10" + "@labkey/components": "0.52.1-fb-datasetDesigner.11" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index d7e6c5b0f8d..006cd4aa705 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.10", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", - "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", + "version": "0.52.1-fb-datasetDesigner.11", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", + "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/query/package.json b/query/package.json index 9dde9e1055e..a93006687fd 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.10" + "@labkey/components": "0.52.1-fb-datasetDesigner.11" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/package-lock.json b/study/package-lock.json index 7ed598ecdcf..0676486b2cf 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.10", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.10.tgz", - "integrity": "sha1-n5yzmTf13qhsN6NJ4wKPe0ytaUU=", + "version": "0.52.1-fb-datasetDesigner.11", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", + "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index ddb33361d4e..6b8b3dd2b42 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.10" + "@labkey/components": "0.52.1-fb-datasetDesigner.11" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From b4494d42f141a43abde4bb5a32ef8b1a37bbdeb3 Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Tue, 28 Apr 2020 11:36:09 -0700 Subject: [PATCH 63/73] pulling in latest alpha version --- assay/package-lock.json | 6 +++--- assay/package.json | 2 +- core/package-lock.json | 6 +++--- core/package.json | 2 +- experiment/package-lock.json | 6 +++--- experiment/package.json | 2 +- list/package-lock.json | 6 +++--- list/package.json | 2 +- query/package-lock.json | 6 +++--- query/package.json | 2 +- study/package-lock.json | 6 +++--- study/package.json | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 4ac7ec38572..6250b2e0ba6 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.11", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", - "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", + "version": "0.52.1-fb-datasetDesigner.13", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", + "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/assay/package.json b/assay/package.json index 20615327301..1904864a0d7 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.11" + "@labkey/components": "0.52.1-fb-datasetDesigner.13" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index 688f07ba89e..8c4c83d2912 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-KJ7hmmDAn4ZOrTrG3TNAhotNhBQ=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.11", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", - "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", + "version": "0.52.1-fb-datasetDesigner.13", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", + "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/core/package.json b/core/package.json index 65752d4554a..f5b9d53d549 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.3", - "@labkey/components": "0.52.1-fb-datasetDesigner.11", + "@labkey/components": "0.52.1-fb-datasetDesigner.13", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index b821c4701be..cd96522d03f 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.11", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", - "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", + "version": "0.52.1-fb-datasetDesigner.13", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", + "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/experiment/package.json b/experiment/package.json index 03bfed6712b..8752d76db8c 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.11" + "@labkey/components": "0.52.1-fb-datasetDesigner.13" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index 3476565cb05..617a1787ce9 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.11", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", - "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", + "version": "0.52.1-fb-datasetDesigner.13", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", + "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/list/package.json b/list/package.json index 29ee33dee0a..26fd6ba7fb7 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.11" + "@labkey/components": "0.52.1-fb-datasetDesigner.13" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index 006cd4aa705..349cba6f33c 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.11", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", - "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", + "version": "0.52.1-fb-datasetDesigner.13", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", + "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/query/package.json b/query/package.json index a93006687fd..dec2d9980d1 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.11" + "@labkey/components": "0.52.1-fb-datasetDesigner.13" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/package-lock.json b/study/package-lock.json index 0676486b2cf..63f2f4ae259 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.11", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.11.tgz", - "integrity": "sha1-jI80PLGcK+x7BDAodazmD4c7th4=", + "version": "0.52.1-fb-datasetDesigner.13", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", + "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index 6b8b3dd2b42..f5c5aa39a82 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.11" + "@labkey/components": "0.52.1-fb-datasetDesigner.13" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From fbbf6b48d4ad113cb2197cbc4aedd69839c45e97 Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 28 Apr 2020 16:43:07 -0500 Subject: [PATCH 64/73] Support for dataSharing prop in createAssayDataset via DatasetDomainKind.createDomain() call --- .../study/assay/AssayPublishManager.java | 23 ++++++++++--------- .../labkey/study/model/DatasetDomainKind.java | 3 ++- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/study/src/org/labkey/study/assay/AssayPublishManager.java b/study/src/org/labkey/study/assay/AssayPublishManager.java index 1a4c6e6ae65..8f9b85c5438 100644 --- a/study/src/org/labkey/study/assay/AssayPublishManager.java +++ b/study/src/org/labkey/study/assay/AssayPublishManager.java @@ -702,13 +702,14 @@ public DatasetDefinition createAssayDataset(User user, StudyImpl study, String n public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType) { - return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, type, categoryId, protocol, useTimeKeyField, managementType, true, null, null, null, null, null); + return createAssayDataset(user, study, name, keyPropertyName, datasetId, isDemographicData, type, categoryId, protocol, useTimeKeyField, managementType, true, null, null, null, null, null, null); } @NotNull public DatasetDefinition createAssayDataset(User user, StudyImpl study, String name, @Nullable String keyPropertyName, @Nullable Integer datasetId, boolean isDemographicData, String type, @Nullable Integer categoryId, @Nullable ExpProtocol protocol, boolean useTimeKeyField, KeyManagementType managementType, - boolean showByDefault, @Nullable String label, @Nullable String description, @Nullable Integer cohortId, @Nullable String tag, String visitDatePropertyName) + boolean showByDefault, @Nullable String label, @Nullable String description, @Nullable Integer cohortId, + @Nullable String tag, String visitDatePropertyName, @Nullable String dataSharing) { DbSchema schema = StudySchema.getInstance().getSchema(); if (useTimeKeyField && (isDemographicData || keyPropertyName != null)) @@ -720,6 +721,13 @@ public DatasetDefinition createAssayDataset(User user, StudyImpl study, String n DatasetDefinition newDataset = new DatasetDefinition(study, datasetId.intValue(), name, name, null, null, null); newDataset.setShowByDefault(showByDefault); newDataset.setType(type); + newDataset.setDemographicData(isDemographicData); + newDataset.setUseTimeKeyField(useTimeKeyField); + newDataset.setKeyManagementType(managementType); + newDataset.setDescription(description); + newDataset.setCohortId(cohortId); + newDataset.setTag(tag); + newDataset.setVisitDatePropertyName(visitDatePropertyName); if (label != null) newDataset.setLabel(label); @@ -729,15 +737,8 @@ public DatasetDefinition createAssayDataset(User user, StudyImpl study, String n newDataset.setKeyPropertyName(keyPropertyName); if (protocol != null) newDataset.setProtocolId(protocol.getRowId()); - - newDataset.setDemographicData(isDemographicData); - newDataset.setUseTimeKeyField(useTimeKeyField); - newDataset.setKeyManagementType(managementType); - - newDataset.setDescription(description); - newDataset.setCohortId(cohortId); - newDataset.setTag(tag); - newDataset.setVisitDatePropertyName(visitDatePropertyName); + if (dataSharing != null) + newDataset.setDataSharing(dataSharing); StudyManager.getInstance().createDatasetDefinition(user, newDataset); diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 1029d664a6e..6d95515d905 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -352,6 +352,7 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen String visitDatePropertyName = arguments.getVisitDatePropertyName(); boolean useTimeKeyField = arguments.isUseTimeKeyField(); boolean showByDefault = arguments.isShowByDefault(); + String dataSharing = arguments.getDataSharing(); // general dataset validation validateDatasetProperties(arguments, container, user, domain, null); @@ -409,7 +410,7 @@ else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomai DatasetDefinition def = AssayPublishManager.getInstance().createAssayDataset(user, study, name, keyPropertyName, datasetId, demographics, Dataset.TYPE_STANDARD, categoryId, null, useTimeKeyField, managementType, showByDefault, - label, description, cohortId, tag, visitDatePropertyName); + label, description, cohortId, tag, visitDatePropertyName, dataSharing); if (def.getDomain() != null) { From 02fa76693fe889977f51252c696b4e7ae0c8cbad Mon Sep 17 00:00:00 2001 From: cnathe Date: Tue, 28 Apr 2020 17:01:07 -0500 Subject: [PATCH 65/73] Update to the latest @labkey/components alpha package version --- assay/package-lock.json | 6 +++--- assay/package.json | 2 +- core/package-lock.json | 6 +++--- core/package.json | 2 +- experiment/package-lock.json | 6 +++--- experiment/package.json | 2 +- list/package-lock.json | 6 +++--- list/package.json | 2 +- query/package-lock.json | 6 +++--- query/package.json | 2 +- study/package-lock.json | 6 +++--- study/package.json | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 6250b2e0ba6..715327c552b 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.13", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", - "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", + "version": "0.52.1-fb-datasetDesigner.14", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", + "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/assay/package.json b/assay/package.json index 1904864a0d7..a021b0dc294 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.13" + "@labkey/components": "0.52.1-fb-datasetDesigner.14" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index 8c4c83d2912..d9eb6732595 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-KJ7hmmDAn4ZOrTrG3TNAhotNhBQ=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.13", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", - "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", + "version": "0.52.1-fb-datasetDesigner.14", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", + "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/core/package.json b/core/package.json index f5b9d53d549..56aa720fbf8 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.3", - "@labkey/components": "0.52.1-fb-datasetDesigner.13", + "@labkey/components": "0.52.1-fb-datasetDesigner.14", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index cd96522d03f..11d15c1d4e0 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.13", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", - "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", + "version": "0.52.1-fb-datasetDesigner.14", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", + "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/experiment/package.json b/experiment/package.json index 8752d76db8c..df43f65e726 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.13" + "@labkey/components": "0.52.1-fb-datasetDesigner.14" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index 617a1787ce9..a2c61227719 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.13", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", - "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", + "version": "0.52.1-fb-datasetDesigner.14", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", + "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/list/package.json b/list/package.json index 26fd6ba7fb7..49aaf616d74 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.13" + "@labkey/components": "0.52.1-fb-datasetDesigner.14" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index 349cba6f33c..b0d66d188d5 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.13", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", - "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", + "version": "0.52.1-fb-datasetDesigner.14", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", + "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/query/package.json b/query/package.json index dec2d9980d1..4c1257feb31 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.13" + "@labkey/components": "0.52.1-fb-datasetDesigner.14" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/package-lock.json b/study/package-lock.json index 63f2f4ae259..1a6a36105f6 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.13", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.13.tgz", - "integrity": "sha1-5O+FT5pMu82bacTg9dTOi3wPGno=", + "version": "0.52.1-fb-datasetDesigner.14", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", + "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index f5c5aa39a82..18dd9354dda 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.13" + "@labkey/components": "0.52.1-fb-datasetDesigner.14" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From c0fee0d39e701736fc3e3eb11b3651dc6da1973f Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Tue, 28 Apr 2020 16:26:04 -0700 Subject: [PATCH 66/73] pulling in latest alpha version --- assay/package-lock.json | 6 +++--- assay/package.json | 2 +- core/package-lock.json | 8 ++++---- core/package.json | 2 +- experiment/package-lock.json | 6 +++--- experiment/package.json | 2 +- list/package-lock.json | 6 +++--- list/package.json | 2 +- query/package-lock.json | 6 +++--- query/package.json | 2 +- study/package-lock.json | 6 +++--- study/package.json | 2 +- 12 files changed, 25 insertions(+), 25 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 715327c552b..5e6fa1a4222 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.14", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", - "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", + "version": "0.53.0-fb-datasetDesigner.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", + "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/assay/package.json b/assay/package.json index a021b0dc294..3e6d006ffdc 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.14" + "@labkey/components": "0.53.0-fb-datasetDesigner.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index d9eb6732595..93f3bd7cb98 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-KJ7hmmDAn4ZOrTrG3TNAhotNhBQ=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.14", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", - "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", + "version": "0.53.0-fb-datasetDesigner.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", + "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", @@ -11005,7 +11005,7 @@ }, "rgba-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, diff --git a/core/package.json b/core/package.json index 56aa720fbf8..c97bd2eaf6b 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.3", - "@labkey/components": "0.52.1-fb-datasetDesigner.14", + "@labkey/components": "0.53.0-fb-datasetDesigner.0", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 11d15c1d4e0..1a3a5512539 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.14", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", - "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", + "version": "0.53.0-fb-datasetDesigner.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", + "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/experiment/package.json b/experiment/package.json index df43f65e726..8ae719f7552 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.14" + "@labkey/components": "0.53.0-fb-datasetDesigner.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index a2c61227719..d68855fbce5 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.14", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", - "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", + "version": "0.53.0-fb-datasetDesigner.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", + "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/list/package.json b/list/package.json index 49aaf616d74..f48516466ee 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.14" + "@labkey/components": "0.53.0-fb-datasetDesigner.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index b0d66d188d5..7183fc92205 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.14", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", - "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", + "version": "0.53.0-fb-datasetDesigner.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", + "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/query/package.json b/query/package.json index 4c1257feb31..14fca2de962 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.14" + "@labkey/components": "0.53.0-fb-datasetDesigner.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/package-lock.json b/study/package-lock.json index 1a6a36105f6..e76e09c2cd2 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.52.1-fb-datasetDesigner.14", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.52.1-fb-datasetDesigner.14.tgz", - "integrity": "sha1-2MNHPafSmOiUY3cfSYCQjNCNR0Q=", + "version": "0.53.0-fb-datasetDesigner.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", + "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index 18dd9354dda..3e2b40b6754 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.52.1-fb-datasetDesigner.14" + "@labkey/components": "0.53.0-fb-datasetDesigner.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 3bdfa84b0823e186df19d43a10e3bfe2ea823218 Mon Sep 17 00:00:00 2001 From: cnathe Date: Wed, 29 Apr 2020 08:54:06 -0500 Subject: [PATCH 67/73] Automated test fix to account for dataset domain update without properties / options --- .../labkey/study/model/DatasetDomainKind.java | 36 +++++++++---------- .../tests/study/StudyDatasetDomainTest.java | 8 ++--- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 6d95515d905..334cc7fa4b1 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -551,18 +551,11 @@ private void checkCanUpdate(DatasetDefinition def, Container container, User use } private ValidationException updateDomainDescriptor(GWTDomain original, GWTDomain update, - Container container, User user, DatasetDefinition def) + Container container, User user) { - try - { - ValidationException exception = new ValidationException(); - exception.addErrors(DomainUtil.updateDomainDescriptor(original, update, container, user)); - return exception; - } - finally - { - StudyManager.getInstance().uncache(def); - } + ValidationException exception = new ValidationException(); + exception.addErrors(DomainUtil.updateDomainDescriptor(original, update, container, user)); + return exception; } private ValidationException updateDataset(DatasetDomainKindProperties datasetProperties, String domainURI, ValidationException exception, @@ -628,19 +621,21 @@ public ValidationException updateDomain(GWTDomain Date: Wed, 29 Apr 2020 09:49:52 -0700 Subject: [PATCH 68/73] Updates member variables to be private, and provides backwards compatibility for 'demographics' option --- .../labkey/study/model/DatasetDomainKind.java | 16 ++++++ .../model/DatasetDomainKindProperties.java | 51 +++++++++++-------- 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 334cc7fa4b1..1b0be04870f 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -17,6 +17,7 @@ package org.labkey.study.model; import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.labkey.api.data.BaseColumnInfo; @@ -327,6 +328,21 @@ public boolean canCreateDefinition(User user, Container container) return container.hasPermission(user, AdminPermission.class); } + @Override + public Map processArguments(Container container, User user, Map arguments) + { + Map updatedArguments = new HashMap<>(arguments); + + // For backwards compatibility, map "demographics" => "demographicData" + if (arguments.containsKey("demographics")) + { + updatedArguments.put("demographicData", arguments.get("demographics")); + updatedArguments.remove("demographics"); + } + + return updatedArguments; + } + @Nullable @Override public DatasetDomainKindProperties getDomainKindProperties(@NotNull GWTDomain domain, Container container, User user) diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index 1ebad5654d4..e35bb34acb9 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -10,26 +10,27 @@ public class DatasetDomainKindProperties implements Cloneable { - protected String _entityId; - protected Integer _datasetId; - protected String _name; - protected String _description; - protected String _category; - protected String _label; - - protected String _visitDatePropertyName; - protected String _keyPropertyName; - protected boolean _keyPropertyManaged = false; - protected boolean _demographicData = false; - protected Integer _cohortId = null; - protected String _tag; - protected boolean _showByDefault = true; - protected String _sourceAssayName; - protected String _sourceAssayUrl; - protected String _dataSharing; - protected boolean _useTimeKeyField = false; - - protected int _domainId; + private String _entityId; + private Integer _datasetId; + private String _name; + private String _description; + private String _category; + private String _label; + + private String _visitDatePropertyName; + private String _keyPropertyName; + private boolean _keyPropertyManaged = false; + private boolean _demographicData = false; + private boolean _demographics = false; + private Integer _cohortId = null; + private String _tag; + private boolean _showByDefault = true; + private String _sourceAssayName; + private String _sourceAssayUrl; + private String _dataSharing; + private boolean _useTimeKeyField = false; + + private int _domainId; // read-only (not changed in the editor) private boolean _definitionIsShared = false; @@ -88,6 +89,16 @@ public DatasetDomainKindProperties(Dataset ds) } } + public boolean isDemographics() + { + return _demographics; + } + + public void setDemographics(boolean demographics) + { + _demographics = demographics; + } + public boolean isVisitMapShared() { return _visitMapShared; From 81d79c80b9c75f3f86df13a293df903a3ba28829 Mon Sep 17 00:00:00 2001 From: Rosaline Pyktel Date: Wed, 29 Apr 2020 10:13:39 -0700 Subject: [PATCH 69/73] Adds comment about backwards compatibility and removes related setter --- .../labkey/study/model/DatasetDomainKindProperties.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index e35bb34acb9..f1ec280ca02 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -21,7 +21,7 @@ public class DatasetDomainKindProperties implements Cloneable private String _keyPropertyName; private boolean _keyPropertyManaged = false; private boolean _demographicData = false; - private boolean _demographics = false; + private boolean _demographics = false; // Included only for backwards compatibility. Use _demographicData instead private Integer _cohortId = null; private String _tag; private boolean _showByDefault = true; @@ -94,11 +94,6 @@ public boolean isDemographics() return _demographics; } - public void setDemographics(boolean demographics) - { - _demographics = demographics; - } - public boolean isVisitMapShared() { return _visitMapShared; From 3b2958ac7916d7e044aa348c6335379189c82222 Mon Sep 17 00:00:00 2001 From: labkey-ankurj Date: Wed, 29 Apr 2020 11:15:59 -0700 Subject: [PATCH 70/73] pull beta version --- assay/package-lock.json | 6 +++--- assay/package.json | 2 +- core/package-lock.json | 6 +++--- core/package.json | 2 +- experiment/package-lock.json | 6 +++--- experiment/package.json | 2 +- list/package-lock.json | 6 +++--- list/package.json | 2 +- query/package-lock.json | 6 +++--- query/package.json | 2 +- study/package-lock.json | 6 +++--- study/package.json | 2 +- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/assay/package-lock.json b/assay/package-lock.json index 5e6fa1a4222..505062dde0e 100644 --- a/assay/package-lock.json +++ b/assay/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.53.0-fb-datasetDesigner.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", - "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", + "version": "0.54.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.54.0.tgz", + "integrity": "sha1-VWPU9sbho3A3y/wJdWSHronfYSQ=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/assay/package.json b/assay/package.json index 3e6d006ffdc..6a3c369ba70 100644 --- a/assay/package.json +++ b/assay/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.53.0-fb-datasetDesigner.0" + "@labkey/components": "0.54.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/core/package-lock.json b/core/package-lock.json index 8150d237725..b8c9a6286dd 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -939,9 +939,9 @@ "integrity": "sha1-NJIdAY//FYWYjCObiLH/TnC2adM=" }, "@labkey/components": { - "version": "0.53.0-fb-datasetDesigner.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", - "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", + "version": "0.54.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.54.0.tgz", + "integrity": "sha1-VWPU9sbho3A3y/wJdWSHronfYSQ=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/core/package.json b/core/package.json index 3a9f7d5d3e8..709c6b9cdda 100644 --- a/core/package.json +++ b/core/package.json @@ -91,7 +91,7 @@ }, "dependencies": { "@labkey/api": "0.2.4", - "@labkey/components": "0.53.0-fb-datasetDesigner.0", + "@labkey/components": "0.54.0", "@labkey/eslint-config-react": "0.0.5", "react-toggle-button": "2.2.0" }, diff --git a/experiment/package-lock.json b/experiment/package-lock.json index 1a3a5512539..29e95dec68f 100644 --- a/experiment/package-lock.json +++ b/experiment/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.53.0-fb-datasetDesigner.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", - "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", + "version": "0.54.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.54.0.tgz", + "integrity": "sha1-VWPU9sbho3A3y/wJdWSHronfYSQ=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/experiment/package.json b/experiment/package.json index 8ae719f7552..4dca3627b6c 100644 --- a/experiment/package.json +++ b/experiment/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.53.0-fb-datasetDesigner.0" + "@labkey/components": "0.54.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/list/package-lock.json b/list/package-lock.json index d68855fbce5..be40ead28f7 100644 --- a/list/package-lock.json +++ b/list/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.53.0-fb-datasetDesigner.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", - "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", + "version": "0.54.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.54.0.tgz", + "integrity": "sha1-VWPU9sbho3A3y/wJdWSHronfYSQ=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/list/package.json b/list/package.json index f48516466ee..74f43128bb1 100644 --- a/list/package.json +++ b/list/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.53.0-fb-datasetDesigner.0" + "@labkey/components": "0.54.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/query/package-lock.json b/query/package-lock.json index 7183fc92205..80207ffca12 100644 --- a/query/package-lock.json +++ b/query/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.53.0-fb-datasetDesigner.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", - "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", + "version": "0.54.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.54.0.tgz", + "integrity": "sha1-VWPU9sbho3A3y/wJdWSHronfYSQ=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/query/package.json b/query/package.json index 14fca2de962..227f6d84b00 100644 --- a/query/package.json +++ b/query/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.53.0-fb-datasetDesigner.0" + "@labkey/components": "0.54.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", diff --git a/study/package-lock.json b/study/package-lock.json index e76e09c2cd2..20aeac2464a 100644 --- a/study/package-lock.json +++ b/study/package-lock.json @@ -249,9 +249,9 @@ "integrity": "sha1-3uthffvyvoPrduPETCeAfGkcap0=" }, "@labkey/components": { - "version": "0.53.0-fb-datasetDesigner.0", - "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.53.0-fb-datasetDesigner.0.tgz", - "integrity": "sha1-6a+hSfXDbCWYAxLsaZkEXAfFdHE=", + "version": "0.54.0", + "resolved": "https://artifactory.labkey.com/artifactory/api/npm/libs-client/@labkey/components/-/@labkey/components-0.54.0.tgz", + "integrity": "sha1-VWPU9sbho3A3y/wJdWSHronfYSQ=", "requires": { "@fortawesome/fontawesome-free": "5.9.0", "@fortawesome/fontawesome-svg-core": "1.2.19", diff --git a/study/package.json b/study/package.json index 3e2b40b6754..db4f150b46e 100644 --- a/study/package.json +++ b/study/package.json @@ -29,7 +29,7 @@ } }, "dependencies": { - "@labkey/components": "0.53.0-fb-datasetDesigner.0" + "@labkey/components": "0.54.0" }, "devDependencies": { "@hot-loader/react-dom": "16.13.0", From 9e6e3f166a950d8080bfec92868b4d245d8be848 Mon Sep 17 00:00:00 2001 From: cnathe Date: Wed, 29 Apr 2020 17:01:18 -0500 Subject: [PATCH 71/73] Add in a few missing validation checks for DatasetDomainKind handling of useTimeKeyField --- study/src/org/labkey/study/model/DatasetDomainKind.java | 9 +++++++-- .../labkey/study/model/DatasetDomainKindProperties.java | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/study/src/org/labkey/study/model/DatasetDomainKind.java b/study/src/org/labkey/study/model/DatasetDomainKind.java index 1b0be04870f..f3127a39f88 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKind.java +++ b/study/src/org/labkey/study/model/DatasetDomainKind.java @@ -380,6 +380,8 @@ public Domain createDomain(GWTDomain domain, DatasetDomainKindProperties argumen throw new IllegalArgumentException("Visit based studies require a visit based dataset domain. Please specify a kind name of : " + VisitDatasetDomainKind.KIND_NAME + "."); else if (!timepointType.isVisitBased() && getKindName().equals(VisitDatasetDomainKind.KIND_NAME)) throw new IllegalArgumentException("Date based studies require a date based dataset domain. Please specify a kind name of : " + DateDatasetDomainKind.KIND_NAME + "."); + if (timepointType.isVisitBased() && useTimeKeyField) + throw new IllegalArgumentException("Additional key property cannot be Time (from Date/Time) for visit based studies."); // Check for usage of Time as Key Field String keyPropertyName = arguments.getKeyPropertyName(); @@ -518,13 +520,16 @@ private void validateDatasetProperties(DatasetDomainKindProperties datasetProper if (useTimeKeyField && isManagedField) throw new IllegalArgumentException("Additional key cannot be a managed field if KeyPropertyName is Time (from Date/Time)."); + if (useTimeKeyField && keyPropertyName != null) + throw new IllegalArgumentException("KeyPropertyName should not be provided when using additional key of Time (from Date/Time)."); + if (isDemographicData && (isManagedField || keyPropertyName != null)) throw new IllegalArgumentException("There cannot be an Additional Key Column if the dataset is Demographic Data."); if (!useTimeKeyField && null != keyPropertyName && null == domain.getFieldByName(keyPropertyName)) - throw new IllegalArgumentException("\"Additional Key Column name \"" + keyPropertyName +"\" must be the name of a column."); + throw new IllegalArgumentException("Additional Key Column name \"" + keyPropertyName +"\" must be the name of a column."); - if (null != keyPropertyName && !useTimeKeyField && isManagedField) + if (null != keyPropertyName && isManagedField) { String rangeURI = domain.getFieldByName(keyPropertyName).getRangeURI(); if (!(rangeURI.endsWith("int") || rangeURI.endsWith("double") || rangeURI.endsWith("string"))) diff --git a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java index f1ec280ca02..19430b1f4bb 100644 --- a/study/src/org/labkey/study/model/DatasetDomainKindProperties.java +++ b/study/src/org/labkey/study/model/DatasetDomainKindProperties.java @@ -89,9 +89,9 @@ public DatasetDomainKindProperties(Dataset ds) } } - public boolean isDemographics() + public void setDemographics(boolean demographics) { - return _demographics; + _demographics = demographics; } public boolean isVisitMapShared() From 46e8b1b826e4534d62bf939854817b2f23407bbc Mon Sep 17 00:00:00 2001 From: Chris Joosse Date: Wed, 29 Apr 2020 15:21:23 -0700 Subject: [PATCH 72/73] Item #6799 Dataset Designer UX test migration --- .../study/AbstractStudyTimeKeyFieldTest.java | 18 +++++++------- .../test/tests/study/QuerySnapshotTest.java | 6 ++--- .../test/tests/study/SharedStudyTest.java | 24 +++++++++---------- .../study/StudyDatasetImportFieldsTest.java | 9 ++++--- .../tests/study/StudyDatasetReloadTest.java | 2 +- .../test/tests/study/StudyDatasetsTest.java | 6 ++--- .../StudyDateAndContinuousTimepointTest.java | 13 +++++----- .../test/tests/study/StudyExportTest.java | 14 +++++------ .../test/tests/study/StudyManualTest.java | 10 ++++---- .../study/StudyMergeParticipantsTest.java | 9 +++---- .../test/tests/study/StudyScheduleTest.java | 11 ++++----- .../tests/study/StudySimpleExportTest.java | 20 ++++++++-------- .../labkey/test/tests/study/StudyTest.java | 21 +++++++++------- .../test/tests/study/VaccineProtocolTest.java | 16 ++++++------- 14 files changed, 88 insertions(+), 91 deletions(-) diff --git a/study/test/src/org/labkey/test/tests/study/AbstractStudyTimeKeyFieldTest.java b/study/test/src/org/labkey/test/tests/study/AbstractStudyTimeKeyFieldTest.java index 3ee765ed178..b755d8e9c12 100644 --- a/study/test/src/org/labkey/test/tests/study/AbstractStudyTimeKeyFieldTest.java +++ b/study/test/src/org/labkey/test/tests/study/AbstractStudyTimeKeyFieldTest.java @@ -20,10 +20,10 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.pages.DatasetInsertPage; import org.labkey.test.pages.DatasetPropertiesPage; -import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.ImportDataPage; import org.labkey.test.pages.ViewDatasetDataPage; import org.labkey.test.pages.core.admin.LookAndFeelSettingsPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import java.io.File; import java.util.HashMap; @@ -64,7 +64,7 @@ protected void testCannotInsertExactDuplicateNoTimeKey(Map kvp, S DatasetPropertiesPage propertiesPage = dataPage.clickManageDataset(); EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.NONE); - propertiesPage = editDatasetDefinitionPage.save(); + propertiesPage = editDatasetDefinitionPage.clickSave(); dataPage = propertiesPage.clickViewData(); DatasetInsertPage insertPage = dataPage.insertDatasetRow(); insertPage.insert(kvp,false,"Duplicates were found in the database or imported data"); @@ -78,7 +78,7 @@ protected void testCannotInsertDifferingOnlyTimeNoTimeKey(Map kvp EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.NONE); //editDatasetDefinitionPage = editDatasetDefinitionPage.saveExpectFail("Changing the dataset key would result in duplicate keys"); - editDatasetDefinitionPage.save(); + editDatasetDefinitionPage.clickSave(); dataPage = propertiesPage.clickViewData(); DatasetInsertPage insertPage = dataPage.insertDatasetRow(); insertPage.insert(kvp,false,"Duplicates were found in the database or imported data"); @@ -92,7 +92,7 @@ protected void testCanInsertWithOnlyTimeDifferentIfTimeKey(Map kv EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); editDatasetDefinitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = editDatasetDefinitionPage.save(); + propertiesPage = editDatasetDefinitionPage.clickSave(); dataPage = propertiesPage.clickViewData(); DatasetInsertPage insertPage = dataPage.insertDatasetRow(); insertPage.insert(kvp,true,"Duplicates were found in the database or imported data"); @@ -106,7 +106,7 @@ protected void testCannotUploadDuplicateIfTimeKey(File toUpload, String dataset, EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); editDatasetDefinitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = editDatasetDefinitionPage.save(); + propertiesPage = editDatasetDefinitionPage.clickSave(); dataPage = propertiesPage.clickViewData(); ImportDataPage importPage = dataPage.importBulkData(); importPage.setFile(toUpload); @@ -121,7 +121,7 @@ protected void testCanUploadWithOnlyTimeDifferentIfTimeKey(File toUpload, String EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); editDatasetDefinitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = editDatasetDefinitionPage.save(); + propertiesPage = editDatasetDefinitionPage.clickSave(); dataPage = propertiesPage.clickViewData(); ImportDataPage importPage = dataPage.importBulkData(); importPage.setFile(toUpload); @@ -136,7 +136,7 @@ protected void testCanChangeExtraKeyFromTimeIfDoesNotViolateUnique(String folder EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); editDatasetDefinitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = editDatasetDefinitionPage.save(); + propertiesPage = editDatasetDefinitionPage.clickSave(); dataPage = propertiesPage.clickViewData(); ImportDataPage importPage = dataPage.importBulkData(); importPage.setFile(toUpload); @@ -164,7 +164,7 @@ protected void testDateFieldDisplaysTimeIfTimeKey() EditDatasetDefinitionPage definitionPage = propertiesPage.clickEditDefinition(); definitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); definitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = definitionPage.save(); + propertiesPage = definitionPage.clickSave(); dataPage = propertiesPage.clickViewData(); dates.forEach((d) -> Assert.assertTrue("date was in wrong format", isDateTime(d))); } @@ -176,7 +176,7 @@ protected void testCannotTurnOffExtraTimeKeyIfViolatesUnique(String folder, Stri EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); editDatasetDefinitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = editDatasetDefinitionPage.save(); + propertiesPage = editDatasetDefinitionPage.clickSave(); dataPage = propertiesPage.clickViewData(); DatasetInsertPage insertPage = dataPage.insertDatasetRow(); Map kvp = new HashMap<>(); diff --git a/study/test/src/org/labkey/test/tests/study/QuerySnapshotTest.java b/study/test/src/org/labkey/test/tests/study/QuerySnapshotTest.java index 049e1108ee1..e503c2cc042 100644 --- a/study/test/src/org/labkey/test/tests/study/QuerySnapshotTest.java +++ b/study/test/src/org/labkey/test/tests/study/QuerySnapshotTest.java @@ -466,7 +466,7 @@ private void changeDatasetLabel(@LoggedParam String datasetName, @LoggedParam St .selectDatasetByName(datasetName) .clickEditDefinition() .setDatasetLabel(newLabel) - .save(); + .clickSave(); } @LogMethod @@ -475,8 +475,8 @@ private void changeDatasetName(@LoggedParam String datasetName, @LoggedParam Str _studyHelper.goToManageDatasets() .selectDatasetByName(datasetName) .clickEditDefinition() - .setDatasetName(newName) - .save(); + .setName(newName) + .clickSave(); } @LogMethod diff --git a/study/test/src/org/labkey/test/tests/study/SharedStudyTest.java b/study/test/src/org/labkey/test/tests/study/SharedStudyTest.java index 0107070b677..8ae3e41ab85 100644 --- a/study/test/src/org/labkey/test/tests/study/SharedStudyTest.java +++ b/study/test/src/org/labkey/test/tests/study/SharedStudyTest.java @@ -33,7 +33,7 @@ import org.labkey.test.components.ParticipantListWebPart; import org.labkey.test.components.studydesigner.ManageAssaySchedulePage; import org.labkey.test.pages.DatasetInsertPage; -import org.labkey.test.pages.EditDatasetDefinitionPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageVisitPage; import org.labkey.test.util.Crawler; import org.labkey.test.util.DataRegionTable; @@ -106,9 +106,9 @@ private void doSetup() EditDatasetDefinitionPage datasetDomainEditor = _studyHelper.defineDataset(SHARED_DEMOGRAPHICS, getProjectName()); datasetDomainEditor.setIsDemographicData(true); - datasetDomainEditor.shareDemographics(EditDatasetDefinitionPage.ShareDemographicsBy.PTID); - datasetDomainEditor.inferFieldsFromFile(new File(STUDY_DIR, "study/datasets/dataset5001.tsv")); - datasetDomainEditor.save(); + datasetDomainEditor.shareDemographics("Share by PandaId"); + datasetDomainEditor.getFieldsPanel().setInferFieldFile(new File(STUDY_DIR, "study/datasets/dataset5001.tsv")); + datasetDomainEditor.clickSave(); setPipelineRoot(STUDY_DIR.getAbsolutePath()); _containerHelper.createSubfolder(getProjectName(), STUDY1, "Study"); @@ -388,18 +388,16 @@ public void testShadowingSharedDataset() _containerHelper.createSubfolder(getProjectName(), datasetName, "Study"); createDefaultStudy(); - goToManageStudy(); - clickAndWait(Locator.linkWithText("Manage Datasets")); - assertElementPresent(Locator.linkContainingText(SHARED_DEMOGRAPHICS)); - clickAndWait(Locator.linkWithText("Create New Dataset")); + goToManageStudy() + .goToManageStudy() + .manageDatasets() + .clickCreateNewDataset() + .setName(datasetName) + .clickSave(); - setFormElement(Locator.name("typeName"), datasetName); // Default dataset ID will overlap shared demographics (5001) - clickButton("Next"); - waitAndClick(Locator.id("partdelete_0")); - clickButton("Save"); - assertTextPresent(String.format("A shared dataset is shadowed by this local dataset definition: %s.", SHARED_DEMOGRAPHICS)); + waitForText(String.format("A shared dataset is shadowed by this local dataset definition: %s.", SHARED_DEMOGRAPHICS)); clickAndWait(Locator.linkWithText("Manage Datasets")); assertTextPresent("WARNING: One or more datasets in parent study are shadowed by datasets defined in this folder."); assertElementNotPresent(Locator.linkContainingText(SHARED_DEMOGRAPHICS)); diff --git a/study/test/src/org/labkey/test/tests/study/StudyDatasetImportFieldsTest.java b/study/test/src/org/labkey/test/tests/study/StudyDatasetImportFieldsTest.java index 205de845664..6c85d5df9c1 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyDatasetImportFieldsTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyDatasetImportFieldsTest.java @@ -20,7 +20,7 @@ import org.labkey.test.Locator; import org.labkey.test.categories.DailyC; import org.labkey.test.pages.DatasetPropertiesPage; -import org.labkey.test.pages.EditDatasetDefinitionPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.tests.StudyBaseTest; import org.labkey.test.util.DataRegionTable; @@ -74,12 +74,11 @@ protected void doVerifySteps() clickButton("Create Study"); EditDatasetDefinitionPage editDatasetPage = _studyHelper.goToManageDatasets() .clickCreateNewDataset() - .setName("Test Dataset") - .submit(); + .setName("Test Dataset"); waitForElement(Locator.name("ff_name0")); setFormElement(Locator.name("ff_name0"), INITIAL_COL); editDatasetPage - .save() + .clickSave() .clickViewData(); DataRegionTable.DataRegion(getDriver()).find().clickInsertNewRow(); waitForElement(Locator.name("quf_ParticipantId")); @@ -99,7 +98,7 @@ protected void doVerifySteps() clickButton("Import", 0); waitForText(REPLACEMENT_COL); editDatasetPage - .save() + .clickSave() .clickViewData(); //waitForText("47"); waitForText("No data to show."); diff --git a/study/test/src/org/labkey/test/tests/study/StudyDatasetReloadTest.java b/study/test/src/org/labkey/test/tests/study/StudyDatasetReloadTest.java index d926540cd99..ea123a34c85 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyDatasetReloadTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyDatasetReloadTest.java @@ -21,7 +21,7 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.categories.DailyC; import org.labkey.test.pages.DatasetPropertiesPage; -import org.labkey.test.pages.EditDatasetDefinitionPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.tests.StudyBaseTest; import org.labkey.test.util.LogMethod; diff --git a/study/test/src/org/labkey/test/tests/study/StudyDatasetsTest.java b/study/test/src/org/labkey/test/tests/study/StudyDatasetsTest.java index 476af002049..52f4e36a8db 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyDatasetsTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyDatasetsTest.java @@ -31,8 +31,8 @@ import org.labkey.test.components.PagingWidget; import org.labkey.test.components.ext4.Window; import org.labkey.test.components.study.DatasetFacetPanel; -import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.TimeChartWizard; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.LogMethod; import org.labkey.test.util.LoggedParam; @@ -191,7 +191,7 @@ protected void renameDataset(String orgName, String newName, String orgLabel, St .clickEditDefinition(); editDatasetPage - .setDatasetName(newName) + .setName(newName) .setDatasetLabel(newLabel); for (String fieldName : fieldNames) @@ -199,7 +199,7 @@ protected void renameDataset(String orgName, String newName, String orgLabel, St assertTextPresent(fieldName); } - editDatasetPage.save(); + editDatasetPage.clickSave(); // fix dataset label references in report and view mappings for (Map.Entry entry : EXPECTED_REPORTS.entrySet()) diff --git a/study/test/src/org/labkey/test/tests/study/StudyDateAndContinuousTimepointTest.java b/study/test/src/org/labkey/test/tests/study/StudyDateAndContinuousTimepointTest.java index 1d4dd74db7c..ae51ff1219e 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyDateAndContinuousTimepointTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyDateAndContinuousTimepointTest.java @@ -8,8 +8,8 @@ import org.labkey.test.Locator; import org.labkey.test.categories.DailyA; import org.labkey.test.components.CustomizeView; -import org.labkey.test.components.PropertiesEditor; -import org.labkey.test.pages.EditDatasetDefinitionPage; +import org.labkey.test.components.domain.DomainFormPanel; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.params.FieldDefinition; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.Ext4Helper; @@ -68,13 +68,12 @@ private void doCreateSteps() EditDatasetDefinitionPage editDatasetPage = _studyHelper .goToManageDatasets() .clickCreateNewDataset() - .setName(datasetName) - .submit(); + .setName(datasetName); - PropertiesEditor fieldsEditor = editDatasetPage.getFieldsEditor(); - fieldsEditor.selectField(0).markForDeletion(); + DomainFormPanel fieldsEditor = editDatasetPage.getFieldsPanel(); + fieldsEditor.getField(0).clickRemoveField(true); fieldsEditor.addField(new FieldDefinition("TestDate").setLabel("TestDate").setType(FieldDefinition.ColumnType.DateTime)); - editDatasetPage.save(); + editDatasetPage.clickSave(); log("Inserting rows in the dataset"); goToProjectHome(); diff --git a/study/test/src/org/labkey/test/tests/study/StudyExportTest.java b/study/test/src/org/labkey/test/tests/study/StudyExportTest.java index 674cb8c55fc..091d66e8a2b 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyExportTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyExportTest.java @@ -23,11 +23,11 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.TestTimeoutException; import org.labkey.test.categories.DailyC; -import org.labkey.test.components.PropertiesEditor; +import org.labkey.test.components.domain.DomainFieldRow; import org.labkey.test.components.html.BootstrapMenu; import org.labkey.test.components.html.Checkbox; import org.labkey.test.components.html.Table; -import org.labkey.test.pages.EditDatasetDefinitionPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageVisitPage; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.Ext4Helper; @@ -560,7 +560,7 @@ protected void setDatasetCategory(String dataset, String category) .selectDatasetByLabel(dataset) .clickEditDefinition() .setCategory(category) - .save(); + .clickSave(); } private void modifyVisits() @@ -586,11 +586,11 @@ private void modifyDatasetColumn(String dataset) .selectDatasetByLabel(dataset) .clickEditDefinition(); - PropertiesEditor.FieldRow fieldRow = editDatasetPage.getFieldsEditor().selectField(0); - fieldRow.properties().selectDisplayTab().setDescription(COLUMN_DESC); - fieldRow.properties().selectAdvancedTab().setMvEnabled(true); + DomainFieldRow fieldRow = editDatasetPage.getFieldsPanel().getField(0); + fieldRow.setDescription(COLUMN_DESC); + fieldRow.setMissingValuesEnabled(true); - editDatasetPage.save(); + editDatasetPage.clickSave(); // TODO: add lookups for current & other folders } diff --git a/study/test/src/org/labkey/test/tests/study/StudyManualTest.java b/study/test/src/org/labkey/test/tests/study/StudyManualTest.java index 3a5ae338619..8259d92095d 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyManualTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyManualTest.java @@ -19,7 +19,7 @@ import org.labkey.test.Locator; import org.labkey.test.TestFileUtils; import org.labkey.test.components.PropertiesEditor; -import org.labkey.test.pages.EditDatasetDefinitionPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageVisitPage; import org.labkey.test.params.FieldDefinition; import org.labkey.test.util.StudyHelper; @@ -174,7 +174,7 @@ protected void setDemographicsDescription() .selectDatasetByName("DEM-1") .clickEditDefinition() .setDescription(DEMOGRAPHICS_DESCRIPTION) - .save(); + .clickSave(); } @@ -203,8 +203,8 @@ protected void createCustomAssays() clickFolder(getFolderName()); EditDatasetDefinitionPage editDatasetPage = _studyHelper.goToManageDatasets() .clickCreateNewDataset() - .setName("verifyAssay") - .submit(); + .setName("verifyAssay"); + editDatasetPage.clickSave(); waitForElement(Locator.input("dsName"), WAIT_FOR_JAVASCRIPT); @@ -230,7 +230,7 @@ protected void createCustomAssays() tabPane.setImportAliases("aliasedColumn"); editDatasetPage - .save() + .clickSave() .clickViewData() .getDataRegion() .clickImportBulkData(); diff --git a/study/test/src/org/labkey/test/tests/study/StudyMergeParticipantsTest.java b/study/test/src/org/labkey/test/tests/study/StudyMergeParticipantsTest.java index 9507f718d34..813f7693b42 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyMergeParticipantsTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyMergeParticipantsTest.java @@ -21,7 +21,7 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.WebTestHelper; import org.labkey.test.categories.DailyC; -import org.labkey.test.pages.EditDatasetDefinitionPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.tests.StudyBaseTest; import org.labkey.test.util.Ext4Helper; @@ -156,15 +156,16 @@ private void configureAliases() // Create alias dataset and insert some data EditDatasetDefinitionPage editDatasetPage = _studyHelper.goToManageDatasets() .clickCreateNewDataset() - .setName(ALIAS_DATASET) - .submit(); + .setName(ALIAS_DATASET); + + // todo: clickButton("Import Fields", "Paste tab-delimited"); setFormElement(Locator.name("tsv"), "Property\tNotNull\n" + ALIAS_COLUMN + "\tTRUE\n" + SOURCE_COLUMN + "\tTRUE"); clickButton("Import", ALIAS_COLUMN); click(Locator.radioButtonById("button_dataField")); selectOptionByValue(Locator.name("list_dataField"), SOURCE_COLUMN); editDatasetPage - .save() + .clickSave() .clickViewData() .getDataRegion() .clickImportBulkData(); diff --git a/study/test/src/org/labkey/test/tests/study/StudyScheduleTest.java b/study/test/src/org/labkey/test/tests/study/StudyScheduleTest.java index 37065474eba..794c438e7df 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyScheduleTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyScheduleTest.java @@ -21,14 +21,13 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.categories.DailyC; import org.labkey.test.components.ext4.RadioButton; -import org.labkey.test.pages.EditDatasetDefinitionPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageVisitPage; import org.labkey.test.tests.StudyBaseTest; import org.labkey.test.util.Ext4Helper; import org.labkey.test.util.LogMethod; import org.labkey.test.util.LoggedParam; import org.labkey.test.util.PortalHelper; -import org.labkey.test.util.StudyHelper; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriverException; @@ -283,8 +282,8 @@ private void addDataset(String name, String category, DatasetType type) EditDatasetDefinitionPage datasetDesignerPage = new EditDatasetDefinitionPage(getDriver()); // add a single name field - datasetDesignerPage.getFieldsEditor().selectField(0).setName("antigenName"); - datasetDesignerPage.save(); + datasetDesignerPage.getFieldsPanel().getField(0).setName("antigenName"); + datasetDesignerPage.clickSave(); break; case importFromFile: click(Ext4Helper.Locators.ext4Radio("Import data from file")); @@ -370,8 +369,8 @@ private void linkDataset(@LoggedParam String name, DatasetType type, String targ EditDatasetDefinitionPage datasetDesignerPage = new EditDatasetDefinitionPage(getDriver()); // add a single name field - datasetDesignerPage.getFieldsEditor().selectField(0).setName("antigenName"); - datasetDesignerPage.save(); + datasetDesignerPage.getFieldsPanel().getField(0).setName("antigenName"); + datasetDesignerPage.clickSave(); break; case importFromFile: click(Ext4Helper.Locators.ext4Radio("Import data from file")); diff --git a/study/test/src/org/labkey/test/tests/study/StudySimpleExportTest.java b/study/test/src/org/labkey/test/tests/study/StudySimpleExportTest.java index 21b35ce055a..552ef47e776 100644 --- a/study/test/src/org/labkey/test/tests/study/StudySimpleExportTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudySimpleExportTest.java @@ -27,10 +27,9 @@ import org.labkey.test.TestTimeoutException; import org.labkey.test.categories.DailyC; import org.labkey.test.components.DomainDesignerPage; -import org.labkey.test.components.PropertiesEditor; import org.labkey.test.components.domain.DomainFormPanel; -import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.ImportDataPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageDatasetQCStatesPage; import org.labkey.test.pages.study.ManageStudyPage; import org.labkey.test.pages.study.ManageVisitPage; @@ -138,10 +137,10 @@ private void createSimpleDataset() EditDatasetDefinitionPage editDatasetPage = _studyHelper .goToManageDatasets() .clickCreateNewDataset() - .setName(TEST_DATASET_NAME) - .submit(); - PropertiesEditor fieldsEditor = editDatasetPage.getFieldsEditor(); - fieldsEditor.selectField(0).markForDeletion(); + .setName(TEST_DATASET_NAME); + + DomainFormPanel fieldsEditor = editDatasetPage.getFieldsPanel(); + fieldsEditor.getField(0).clickRemoveField(true); fieldsEditor.addField(new FieldDefinition("TestInt").setLabel("TestInt").setType(FieldDefinition.ColumnType.Integer) .setValidator(new ListHelper.RangeValidator("numberValidator", "numberValidator", "TestInt must equals '999'.", ListHelper.RangeType.Equals, "999")) .setRequired(false)); @@ -152,10 +151,11 @@ private void createSimpleDataset() // "TestDateTime" format will default to date-time fieldsEditor.addField(new FieldDefinition("TestDateTime").setLabel("TestDateTime").setType(FieldDefinition.ColumnType.DateTime)); editDatasetPage - .save() - .clickViewData() - .getDataRegion() - .clickImportBulkData(); + .clickSave(); + //todo: +// .clickViewData() +// .getDataRegion() +// .clickImportBulkData(); waitForElement(Locator.name("text")); setFormElement(Locator.name("text"), "ParticipantId\tSequenceNum\tTestInt\tTestString\tTestDate\tTestDateTime\nPTID123\t1.0\t999\tABC\t2013-10-29\t2013-10-28 01:23"); clickButton("Submit"); diff --git a/study/test/src/org/labkey/test/tests/study/StudyTest.java b/study/test/src/org/labkey/test/tests/study/StudyTest.java index 77023654cf2..98997102d89 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyTest.java @@ -34,7 +34,7 @@ import org.labkey.test.components.PropertiesEditor; import org.labkey.test.components.html.BootstrapMenu; import org.labkey.test.pages.DatasetPropertiesPage; -import org.labkey.test.pages.EditDatasetDefinitionPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageStudyPage; import org.labkey.test.params.FieldDefinition; import org.labkey.test.tests.StudyBaseTest; @@ -699,11 +699,11 @@ protected void verifyStudyAndDatasets(boolean isVisitBased) // Test Bad Field Names -- #13607 clickButton("Manage"); EditDatasetDefinitionPage editDatasetPage = new DatasetPropertiesPage(getDriver()).clickEditDefinition(); - editDatasetPage.getFieldsEditor() + editDatasetPage.getFieldsPanel() .addField(new FieldDefinition("Bad Name").setLabel("Bad Name").setType(FieldDefinition.ColumnType.String)); - editDatasetPage - .save() - .clickViewData(); + editDatasetPage.clickSave(); + new DatasetPropertiesPage(getDriver()) + .clickViewData(); _customizeViewsHelper.openCustomizeViewPanel(); _customizeViewsHelper.addColumn("Bad Name", "Bad Name"); _customizeViewsHelper.applyCustomView(); @@ -1190,11 +1190,14 @@ protected void verifyParticipantVisitDay() .selectDatasetByLabel(DEMOGRAPHICS_TITLE) .clickEditDefinition(); editDatasetPage - .getFieldsEditor() + .getFieldsPanel() .addField(new FieldDefinition("VisitDay").setLabel("VisitDay").setType(FieldDefinition.ColumnType.Integer)); - editDatasetPage.setVisitDate("DEMdt") - .save() - .clickViewData(); + editDatasetPage.openAdvancedDatasetSettings() + .selectVisitDateColumn("DEMdt") + .clickApply() + .clickSave(); + new DatasetPropertiesPage(getDriver()) + .clickViewData(); // Edit 1 item changing sequence from 101; then edit again and change back and set VisitDay to something clickAndWait(Locator.tagWithAttribute("a", "data-original-title","edit").index(0)); diff --git a/study/test/src/org/labkey/test/tests/study/VaccineProtocolTest.java b/study/test/src/org/labkey/test/tests/study/VaccineProtocolTest.java index 4164dcdef40..a36ecae451a 100644 --- a/study/test/src/org/labkey/test/tests/study/VaccineProtocolTest.java +++ b/study/test/src/org/labkey/test/tests/study/VaccineProtocolTest.java @@ -24,7 +24,7 @@ import org.labkey.test.TestTimeoutException; import org.labkey.test.categories.DailyA; import org.labkey.test.pages.DesignerController.DesignerTester; -import org.labkey.test.pages.EditDatasetDefinitionPage; +import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.ListHelper; import org.labkey.test.util.PortalHelper; @@ -219,15 +219,13 @@ else if (isQueryPresent("VerifySnapshot", "testassay1")) EditDatasetDefinitionPage editDatasetPage = _studyHelper .goToManageDatasets() .clickCreateNewDataset() - .setName("Simple") - .submit(); - editDatasetPage.getFieldsEditor() - .selectField(0).setName("Value"); + .setName("Simple"); + editDatasetPage.getFieldsPanel() + .manuallyDefineFields("Value"); editDatasetPage - .save() - .clickViewData() - .getDataRegion() - .clickImportBulkData(); + .clickSave(); +// new ManageDatasetsPage(getDriver()) +// .clickImportBulkData(); _listHelper.submitTsvData("participantid\tDate\tValue\treplace\nP1\t2/1/2007\tHello\nPnew\t11/17/2007\tGoodbye"); _customizeViewsHelper.openCustomizeViewPanel(); From 3683c2d189c950fca85c78f4a5fc2e64f999db7f Mon Sep 17 00:00:00 2001 From: cnathe Date: Thu, 30 Apr 2020 08:41:24 -0500 Subject: [PATCH 73/73] Revert "Item #6799 Dataset Designer UX test migration" This reverts commit 46e8b1b826e4534d62bf939854817b2f23407bbc. --- .../study/AbstractStudyTimeKeyFieldTest.java | 18 +++++++------- .../test/tests/study/QuerySnapshotTest.java | 6 ++--- .../test/tests/study/SharedStudyTest.java | 24 ++++++++++--------- .../study/StudyDatasetImportFieldsTest.java | 9 +++---- .../tests/study/StudyDatasetReloadTest.java | 2 +- .../test/tests/study/StudyDatasetsTest.java | 6 ++--- .../StudyDateAndContinuousTimepointTest.java | 13 +++++----- .../test/tests/study/StudyExportTest.java | 14 +++++------ .../test/tests/study/StudyManualTest.java | 10 ++++---- .../study/StudyMergeParticipantsTest.java | 9 ++++--- .../test/tests/study/StudyScheduleTest.java | 11 +++++---- .../tests/study/StudySimpleExportTest.java | 20 ++++++++-------- .../labkey/test/tests/study/StudyTest.java | 21 +++++++--------- .../test/tests/study/VaccineProtocolTest.java | 16 +++++++------ 14 files changed, 91 insertions(+), 88 deletions(-) diff --git a/study/test/src/org/labkey/test/tests/study/AbstractStudyTimeKeyFieldTest.java b/study/test/src/org/labkey/test/tests/study/AbstractStudyTimeKeyFieldTest.java index b755d8e9c12..3ee765ed178 100644 --- a/study/test/src/org/labkey/test/tests/study/AbstractStudyTimeKeyFieldTest.java +++ b/study/test/src/org/labkey/test/tests/study/AbstractStudyTimeKeyFieldTest.java @@ -20,10 +20,10 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.pages.DatasetInsertPage; import org.labkey.test.pages.DatasetPropertiesPage; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.ImportDataPage; import org.labkey.test.pages.ViewDatasetDataPage; import org.labkey.test.pages.core.admin.LookAndFeelSettingsPage; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import java.io.File; import java.util.HashMap; @@ -64,7 +64,7 @@ protected void testCannotInsertExactDuplicateNoTimeKey(Map kvp, S DatasetPropertiesPage propertiesPage = dataPage.clickManageDataset(); EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.NONE); - propertiesPage = editDatasetDefinitionPage.clickSave(); + propertiesPage = editDatasetDefinitionPage.save(); dataPage = propertiesPage.clickViewData(); DatasetInsertPage insertPage = dataPage.insertDatasetRow(); insertPage.insert(kvp,false,"Duplicates were found in the database or imported data"); @@ -78,7 +78,7 @@ protected void testCannotInsertDifferingOnlyTimeNoTimeKey(Map kvp EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.NONE); //editDatasetDefinitionPage = editDatasetDefinitionPage.saveExpectFail("Changing the dataset key would result in duplicate keys"); - editDatasetDefinitionPage.clickSave(); + editDatasetDefinitionPage.save(); dataPage = propertiesPage.clickViewData(); DatasetInsertPage insertPage = dataPage.insertDatasetRow(); insertPage.insert(kvp,false,"Duplicates were found in the database or imported data"); @@ -92,7 +92,7 @@ protected void testCanInsertWithOnlyTimeDifferentIfTimeKey(Map kv EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); editDatasetDefinitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = editDatasetDefinitionPage.clickSave(); + propertiesPage = editDatasetDefinitionPage.save(); dataPage = propertiesPage.clickViewData(); DatasetInsertPage insertPage = dataPage.insertDatasetRow(); insertPage.insert(kvp,true,"Duplicates were found in the database or imported data"); @@ -106,7 +106,7 @@ protected void testCannotUploadDuplicateIfTimeKey(File toUpload, String dataset, EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); editDatasetDefinitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = editDatasetDefinitionPage.clickSave(); + propertiesPage = editDatasetDefinitionPage.save(); dataPage = propertiesPage.clickViewData(); ImportDataPage importPage = dataPage.importBulkData(); importPage.setFile(toUpload); @@ -121,7 +121,7 @@ protected void testCanUploadWithOnlyTimeDifferentIfTimeKey(File toUpload, String EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); editDatasetDefinitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = editDatasetDefinitionPage.clickSave(); + propertiesPage = editDatasetDefinitionPage.save(); dataPage = propertiesPage.clickViewData(); ImportDataPage importPage = dataPage.importBulkData(); importPage.setFile(toUpload); @@ -136,7 +136,7 @@ protected void testCanChangeExtraKeyFromTimeIfDoesNotViolateUnique(String folder EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); editDatasetDefinitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = editDatasetDefinitionPage.clickSave(); + propertiesPage = editDatasetDefinitionPage.save(); dataPage = propertiesPage.clickViewData(); ImportDataPage importPage = dataPage.importBulkData(); importPage.setFile(toUpload); @@ -164,7 +164,7 @@ protected void testDateFieldDisplaysTimeIfTimeKey() EditDatasetDefinitionPage definitionPage = propertiesPage.clickEditDefinition(); definitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); definitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = definitionPage.clickSave(); + propertiesPage = definitionPage.save(); dataPage = propertiesPage.clickViewData(); dates.forEach((d) -> Assert.assertTrue("date was in wrong format", isDateTime(d))); } @@ -176,7 +176,7 @@ protected void testCannotTurnOffExtraTimeKeyIfViolatesUnique(String folder, Stri EditDatasetDefinitionPage editDatasetDefinitionPage = propertiesPage.clickEditDefinition(); editDatasetDefinitionPage.setAdditionalKeyColumnType(EditDatasetDefinitionPage.LookupAdditionalKeyColType.DATAFIELD); editDatasetDefinitionPage.setAdditionalKeyColDataField("Time (from Date/Time)"); - propertiesPage = editDatasetDefinitionPage.clickSave(); + propertiesPage = editDatasetDefinitionPage.save(); dataPage = propertiesPage.clickViewData(); DatasetInsertPage insertPage = dataPage.insertDatasetRow(); Map kvp = new HashMap<>(); diff --git a/study/test/src/org/labkey/test/tests/study/QuerySnapshotTest.java b/study/test/src/org/labkey/test/tests/study/QuerySnapshotTest.java index e503c2cc042..049e1108ee1 100644 --- a/study/test/src/org/labkey/test/tests/study/QuerySnapshotTest.java +++ b/study/test/src/org/labkey/test/tests/study/QuerySnapshotTest.java @@ -466,7 +466,7 @@ private void changeDatasetLabel(@LoggedParam String datasetName, @LoggedParam St .selectDatasetByName(datasetName) .clickEditDefinition() .setDatasetLabel(newLabel) - .clickSave(); + .save(); } @LogMethod @@ -475,8 +475,8 @@ private void changeDatasetName(@LoggedParam String datasetName, @LoggedParam Str _studyHelper.goToManageDatasets() .selectDatasetByName(datasetName) .clickEditDefinition() - .setName(newName) - .clickSave(); + .setDatasetName(newName) + .save(); } @LogMethod diff --git a/study/test/src/org/labkey/test/tests/study/SharedStudyTest.java b/study/test/src/org/labkey/test/tests/study/SharedStudyTest.java index 8ae3e41ab85..0107070b677 100644 --- a/study/test/src/org/labkey/test/tests/study/SharedStudyTest.java +++ b/study/test/src/org/labkey/test/tests/study/SharedStudyTest.java @@ -33,7 +33,7 @@ import org.labkey.test.components.ParticipantListWebPart; import org.labkey.test.components.studydesigner.ManageAssaySchedulePage; import org.labkey.test.pages.DatasetInsertPage; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageVisitPage; import org.labkey.test.util.Crawler; import org.labkey.test.util.DataRegionTable; @@ -106,9 +106,9 @@ private void doSetup() EditDatasetDefinitionPage datasetDomainEditor = _studyHelper.defineDataset(SHARED_DEMOGRAPHICS, getProjectName()); datasetDomainEditor.setIsDemographicData(true); - datasetDomainEditor.shareDemographics("Share by PandaId"); - datasetDomainEditor.getFieldsPanel().setInferFieldFile(new File(STUDY_DIR, "study/datasets/dataset5001.tsv")); - datasetDomainEditor.clickSave(); + datasetDomainEditor.shareDemographics(EditDatasetDefinitionPage.ShareDemographicsBy.PTID); + datasetDomainEditor.inferFieldsFromFile(new File(STUDY_DIR, "study/datasets/dataset5001.tsv")); + datasetDomainEditor.save(); setPipelineRoot(STUDY_DIR.getAbsolutePath()); _containerHelper.createSubfolder(getProjectName(), STUDY1, "Study"); @@ -388,16 +388,18 @@ public void testShadowingSharedDataset() _containerHelper.createSubfolder(getProjectName(), datasetName, "Study"); createDefaultStudy(); - goToManageStudy() - .goToManageStudy() - .manageDatasets() - .clickCreateNewDataset() - .setName(datasetName) - .clickSave(); + goToManageStudy(); + clickAndWait(Locator.linkWithText("Manage Datasets")); + assertElementPresent(Locator.linkContainingText(SHARED_DEMOGRAPHICS)); + clickAndWait(Locator.linkWithText("Create New Dataset")); + setFormElement(Locator.name("typeName"), datasetName); // Default dataset ID will overlap shared demographics (5001) + clickButton("Next"); + waitAndClick(Locator.id("partdelete_0")); + clickButton("Save"); - waitForText(String.format("A shared dataset is shadowed by this local dataset definition: %s.", SHARED_DEMOGRAPHICS)); + assertTextPresent(String.format("A shared dataset is shadowed by this local dataset definition: %s.", SHARED_DEMOGRAPHICS)); clickAndWait(Locator.linkWithText("Manage Datasets")); assertTextPresent("WARNING: One or more datasets in parent study are shadowed by datasets defined in this folder."); assertElementNotPresent(Locator.linkContainingText(SHARED_DEMOGRAPHICS)); diff --git a/study/test/src/org/labkey/test/tests/study/StudyDatasetImportFieldsTest.java b/study/test/src/org/labkey/test/tests/study/StudyDatasetImportFieldsTest.java index 6c85d5df9c1..205de845664 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyDatasetImportFieldsTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyDatasetImportFieldsTest.java @@ -20,7 +20,7 @@ import org.labkey.test.Locator; import org.labkey.test.categories.DailyC; import org.labkey.test.pages.DatasetPropertiesPage; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.tests.StudyBaseTest; import org.labkey.test.util.DataRegionTable; @@ -74,11 +74,12 @@ protected void doVerifySteps() clickButton("Create Study"); EditDatasetDefinitionPage editDatasetPage = _studyHelper.goToManageDatasets() .clickCreateNewDataset() - .setName("Test Dataset"); + .setName("Test Dataset") + .submit(); waitForElement(Locator.name("ff_name0")); setFormElement(Locator.name("ff_name0"), INITIAL_COL); editDatasetPage - .clickSave() + .save() .clickViewData(); DataRegionTable.DataRegion(getDriver()).find().clickInsertNewRow(); waitForElement(Locator.name("quf_ParticipantId")); @@ -98,7 +99,7 @@ protected void doVerifySteps() clickButton("Import", 0); waitForText(REPLACEMENT_COL); editDatasetPage - .clickSave() + .save() .clickViewData(); //waitForText("47"); waitForText("No data to show."); diff --git a/study/test/src/org/labkey/test/tests/study/StudyDatasetReloadTest.java b/study/test/src/org/labkey/test/tests/study/StudyDatasetReloadTest.java index ea123a34c85..d926540cd99 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyDatasetReloadTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyDatasetReloadTest.java @@ -21,7 +21,7 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.categories.DailyC; import org.labkey.test.pages.DatasetPropertiesPage; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.tests.StudyBaseTest; import org.labkey.test.util.LogMethod; diff --git a/study/test/src/org/labkey/test/tests/study/StudyDatasetsTest.java b/study/test/src/org/labkey/test/tests/study/StudyDatasetsTest.java index 52f4e36a8db..476af002049 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyDatasetsTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyDatasetsTest.java @@ -31,8 +31,8 @@ import org.labkey.test.components.PagingWidget; import org.labkey.test.components.ext4.Window; import org.labkey.test.components.study.DatasetFacetPanel; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.TimeChartWizard; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.LogMethod; import org.labkey.test.util.LoggedParam; @@ -191,7 +191,7 @@ protected void renameDataset(String orgName, String newName, String orgLabel, St .clickEditDefinition(); editDatasetPage - .setName(newName) + .setDatasetName(newName) .setDatasetLabel(newLabel); for (String fieldName : fieldNames) @@ -199,7 +199,7 @@ protected void renameDataset(String orgName, String newName, String orgLabel, St assertTextPresent(fieldName); } - editDatasetPage.clickSave(); + editDatasetPage.save(); // fix dataset label references in report and view mappings for (Map.Entry entry : EXPECTED_REPORTS.entrySet()) diff --git a/study/test/src/org/labkey/test/tests/study/StudyDateAndContinuousTimepointTest.java b/study/test/src/org/labkey/test/tests/study/StudyDateAndContinuousTimepointTest.java index ae51ff1219e..1d4dd74db7c 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyDateAndContinuousTimepointTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyDateAndContinuousTimepointTest.java @@ -8,8 +8,8 @@ import org.labkey.test.Locator; import org.labkey.test.categories.DailyA; import org.labkey.test.components.CustomizeView; -import org.labkey.test.components.domain.DomainFormPanel; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; +import org.labkey.test.components.PropertiesEditor; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.params.FieldDefinition; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.Ext4Helper; @@ -68,12 +68,13 @@ private void doCreateSteps() EditDatasetDefinitionPage editDatasetPage = _studyHelper .goToManageDatasets() .clickCreateNewDataset() - .setName(datasetName); + .setName(datasetName) + .submit(); - DomainFormPanel fieldsEditor = editDatasetPage.getFieldsPanel(); - fieldsEditor.getField(0).clickRemoveField(true); + PropertiesEditor fieldsEditor = editDatasetPage.getFieldsEditor(); + fieldsEditor.selectField(0).markForDeletion(); fieldsEditor.addField(new FieldDefinition("TestDate").setLabel("TestDate").setType(FieldDefinition.ColumnType.DateTime)); - editDatasetPage.clickSave(); + editDatasetPage.save(); log("Inserting rows in the dataset"); goToProjectHome(); diff --git a/study/test/src/org/labkey/test/tests/study/StudyExportTest.java b/study/test/src/org/labkey/test/tests/study/StudyExportTest.java index 091d66e8a2b..674cb8c55fc 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyExportTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyExportTest.java @@ -23,11 +23,11 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.TestTimeoutException; import org.labkey.test.categories.DailyC; -import org.labkey.test.components.domain.DomainFieldRow; +import org.labkey.test.components.PropertiesEditor; import org.labkey.test.components.html.BootstrapMenu; import org.labkey.test.components.html.Checkbox; import org.labkey.test.components.html.Table; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageVisitPage; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.Ext4Helper; @@ -560,7 +560,7 @@ protected void setDatasetCategory(String dataset, String category) .selectDatasetByLabel(dataset) .clickEditDefinition() .setCategory(category) - .clickSave(); + .save(); } private void modifyVisits() @@ -586,11 +586,11 @@ private void modifyDatasetColumn(String dataset) .selectDatasetByLabel(dataset) .clickEditDefinition(); - DomainFieldRow fieldRow = editDatasetPage.getFieldsPanel().getField(0); - fieldRow.setDescription(COLUMN_DESC); - fieldRow.setMissingValuesEnabled(true); + PropertiesEditor.FieldRow fieldRow = editDatasetPage.getFieldsEditor().selectField(0); + fieldRow.properties().selectDisplayTab().setDescription(COLUMN_DESC); + fieldRow.properties().selectAdvancedTab().setMvEnabled(true); - editDatasetPage.clickSave(); + editDatasetPage.save(); // TODO: add lookups for current & other folders } diff --git a/study/test/src/org/labkey/test/tests/study/StudyManualTest.java b/study/test/src/org/labkey/test/tests/study/StudyManualTest.java index 8259d92095d..3a5ae338619 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyManualTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyManualTest.java @@ -19,7 +19,7 @@ import org.labkey.test.Locator; import org.labkey.test.TestFileUtils; import org.labkey.test.components.PropertiesEditor; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageVisitPage; import org.labkey.test.params.FieldDefinition; import org.labkey.test.util.StudyHelper; @@ -174,7 +174,7 @@ protected void setDemographicsDescription() .selectDatasetByName("DEM-1") .clickEditDefinition() .setDescription(DEMOGRAPHICS_DESCRIPTION) - .clickSave(); + .save(); } @@ -203,8 +203,8 @@ protected void createCustomAssays() clickFolder(getFolderName()); EditDatasetDefinitionPage editDatasetPage = _studyHelper.goToManageDatasets() .clickCreateNewDataset() - .setName("verifyAssay"); - editDatasetPage.clickSave(); + .setName("verifyAssay") + .submit(); waitForElement(Locator.input("dsName"), WAIT_FOR_JAVASCRIPT); @@ -230,7 +230,7 @@ protected void createCustomAssays() tabPane.setImportAliases("aliasedColumn"); editDatasetPage - .clickSave() + .save() .clickViewData() .getDataRegion() .clickImportBulkData(); diff --git a/study/test/src/org/labkey/test/tests/study/StudyMergeParticipantsTest.java b/study/test/src/org/labkey/test/tests/study/StudyMergeParticipantsTest.java index 813f7693b42..9507f718d34 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyMergeParticipantsTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyMergeParticipantsTest.java @@ -21,7 +21,7 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.WebTestHelper; import org.labkey.test.categories.DailyC; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.tests.StudyBaseTest; import org.labkey.test.util.Ext4Helper; @@ -156,16 +156,15 @@ private void configureAliases() // Create alias dataset and insert some data EditDatasetDefinitionPage editDatasetPage = _studyHelper.goToManageDatasets() .clickCreateNewDataset() - .setName(ALIAS_DATASET); - - // todo: + .setName(ALIAS_DATASET) + .submit(); clickButton("Import Fields", "Paste tab-delimited"); setFormElement(Locator.name("tsv"), "Property\tNotNull\n" + ALIAS_COLUMN + "\tTRUE\n" + SOURCE_COLUMN + "\tTRUE"); clickButton("Import", ALIAS_COLUMN); click(Locator.radioButtonById("button_dataField")); selectOptionByValue(Locator.name("list_dataField"), SOURCE_COLUMN); editDatasetPage - .clickSave() + .save() .clickViewData() .getDataRegion() .clickImportBulkData(); diff --git a/study/test/src/org/labkey/test/tests/study/StudyScheduleTest.java b/study/test/src/org/labkey/test/tests/study/StudyScheduleTest.java index 794c438e7df..37065474eba 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyScheduleTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyScheduleTest.java @@ -21,13 +21,14 @@ import org.labkey.test.TestFileUtils; import org.labkey.test.categories.DailyC; import org.labkey.test.components.ext4.RadioButton; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageVisitPage; import org.labkey.test.tests.StudyBaseTest; import org.labkey.test.util.Ext4Helper; import org.labkey.test.util.LogMethod; import org.labkey.test.util.LoggedParam; import org.labkey.test.util.PortalHelper; +import org.labkey.test.util.StudyHelper; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriverException; @@ -282,8 +283,8 @@ private void addDataset(String name, String category, DatasetType type) EditDatasetDefinitionPage datasetDesignerPage = new EditDatasetDefinitionPage(getDriver()); // add a single name field - datasetDesignerPage.getFieldsPanel().getField(0).setName("antigenName"); - datasetDesignerPage.clickSave(); + datasetDesignerPage.getFieldsEditor().selectField(0).setName("antigenName"); + datasetDesignerPage.save(); break; case importFromFile: click(Ext4Helper.Locators.ext4Radio("Import data from file")); @@ -369,8 +370,8 @@ private void linkDataset(@LoggedParam String name, DatasetType type, String targ EditDatasetDefinitionPage datasetDesignerPage = new EditDatasetDefinitionPage(getDriver()); // add a single name field - datasetDesignerPage.getFieldsPanel().getField(0).setName("antigenName"); - datasetDesignerPage.clickSave(); + datasetDesignerPage.getFieldsEditor().selectField(0).setName("antigenName"); + datasetDesignerPage.save(); break; case importFromFile: click(Ext4Helper.Locators.ext4Radio("Import data from file")); diff --git a/study/test/src/org/labkey/test/tests/study/StudySimpleExportTest.java b/study/test/src/org/labkey/test/tests/study/StudySimpleExportTest.java index 552ef47e776..21b35ce055a 100644 --- a/study/test/src/org/labkey/test/tests/study/StudySimpleExportTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudySimpleExportTest.java @@ -27,9 +27,10 @@ import org.labkey.test.TestTimeoutException; import org.labkey.test.categories.DailyC; import org.labkey.test.components.DomainDesignerPage; +import org.labkey.test.components.PropertiesEditor; import org.labkey.test.components.domain.DomainFormPanel; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.ImportDataPage; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageDatasetQCStatesPage; import org.labkey.test.pages.study.ManageStudyPage; import org.labkey.test.pages.study.ManageVisitPage; @@ -137,10 +138,10 @@ private void createSimpleDataset() EditDatasetDefinitionPage editDatasetPage = _studyHelper .goToManageDatasets() .clickCreateNewDataset() - .setName(TEST_DATASET_NAME); - - DomainFormPanel fieldsEditor = editDatasetPage.getFieldsPanel(); - fieldsEditor.getField(0).clickRemoveField(true); + .setName(TEST_DATASET_NAME) + .submit(); + PropertiesEditor fieldsEditor = editDatasetPage.getFieldsEditor(); + fieldsEditor.selectField(0).markForDeletion(); fieldsEditor.addField(new FieldDefinition("TestInt").setLabel("TestInt").setType(FieldDefinition.ColumnType.Integer) .setValidator(new ListHelper.RangeValidator("numberValidator", "numberValidator", "TestInt must equals '999'.", ListHelper.RangeType.Equals, "999")) .setRequired(false)); @@ -151,11 +152,10 @@ private void createSimpleDataset() // "TestDateTime" format will default to date-time fieldsEditor.addField(new FieldDefinition("TestDateTime").setLabel("TestDateTime").setType(FieldDefinition.ColumnType.DateTime)); editDatasetPage - .clickSave(); - //todo: -// .clickViewData() -// .getDataRegion() -// .clickImportBulkData(); + .save() + .clickViewData() + .getDataRegion() + .clickImportBulkData(); waitForElement(Locator.name("text")); setFormElement(Locator.name("text"), "ParticipantId\tSequenceNum\tTestInt\tTestString\tTestDate\tTestDateTime\nPTID123\t1.0\t999\tABC\t2013-10-29\t2013-10-28 01:23"); clickButton("Submit"); diff --git a/study/test/src/org/labkey/test/tests/study/StudyTest.java b/study/test/src/org/labkey/test/tests/study/StudyTest.java index 98997102d89..77023654cf2 100644 --- a/study/test/src/org/labkey/test/tests/study/StudyTest.java +++ b/study/test/src/org/labkey/test/tests/study/StudyTest.java @@ -34,7 +34,7 @@ import org.labkey.test.components.PropertiesEditor; import org.labkey.test.components.html.BootstrapMenu; import org.labkey.test.pages.DatasetPropertiesPage; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.pages.study.ManageStudyPage; import org.labkey.test.params.FieldDefinition; import org.labkey.test.tests.StudyBaseTest; @@ -699,11 +699,11 @@ protected void verifyStudyAndDatasets(boolean isVisitBased) // Test Bad Field Names -- #13607 clickButton("Manage"); EditDatasetDefinitionPage editDatasetPage = new DatasetPropertiesPage(getDriver()).clickEditDefinition(); - editDatasetPage.getFieldsPanel() + editDatasetPage.getFieldsEditor() .addField(new FieldDefinition("Bad Name").setLabel("Bad Name").setType(FieldDefinition.ColumnType.String)); - editDatasetPage.clickSave(); - new DatasetPropertiesPage(getDriver()) - .clickViewData(); + editDatasetPage + .save() + .clickViewData(); _customizeViewsHelper.openCustomizeViewPanel(); _customizeViewsHelper.addColumn("Bad Name", "Bad Name"); _customizeViewsHelper.applyCustomView(); @@ -1190,14 +1190,11 @@ protected void verifyParticipantVisitDay() .selectDatasetByLabel(DEMOGRAPHICS_TITLE) .clickEditDefinition(); editDatasetPage - .getFieldsPanel() + .getFieldsEditor() .addField(new FieldDefinition("VisitDay").setLabel("VisitDay").setType(FieldDefinition.ColumnType.Integer)); - editDatasetPage.openAdvancedDatasetSettings() - .selectVisitDateColumn("DEMdt") - .clickApply() - .clickSave(); - new DatasetPropertiesPage(getDriver()) - .clickViewData(); + editDatasetPage.setVisitDate("DEMdt") + .save() + .clickViewData(); // Edit 1 item changing sequence from 101; then edit again and change back and set VisitDay to something clickAndWait(Locator.tagWithAttribute("a", "data-original-title","edit").index(0)); diff --git a/study/test/src/org/labkey/test/tests/study/VaccineProtocolTest.java b/study/test/src/org/labkey/test/tests/study/VaccineProtocolTest.java index a36ecae451a..4164dcdef40 100644 --- a/study/test/src/org/labkey/test/tests/study/VaccineProtocolTest.java +++ b/study/test/src/org/labkey/test/tests/study/VaccineProtocolTest.java @@ -24,7 +24,7 @@ import org.labkey.test.TestTimeoutException; import org.labkey.test.categories.DailyA; import org.labkey.test.pages.DesignerController.DesignerTester; -import org.labkey.test.pages.dataset.EditDatasetDefinitionPage; +import org.labkey.test.pages.EditDatasetDefinitionPage; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.ListHelper; import org.labkey.test.util.PortalHelper; @@ -219,13 +219,15 @@ else if (isQueryPresent("VerifySnapshot", "testassay1")) EditDatasetDefinitionPage editDatasetPage = _studyHelper .goToManageDatasets() .clickCreateNewDataset() - .setName("Simple"); - editDatasetPage.getFieldsPanel() - .manuallyDefineFields("Value"); + .setName("Simple") + .submit(); + editDatasetPage.getFieldsEditor() + .selectField(0).setName("Value"); editDatasetPage - .clickSave(); -// new ManageDatasetsPage(getDriver()) -// .clickImportBulkData(); + .save() + .clickViewData() + .getDataRegion() + .clickImportBulkData(); _listHelper.submitTsvData("participantid\tDate\tValue\treplace\nP1\t2/1/2007\tHello\nPnew\t11/17/2007\tGoodbye"); _customizeViewsHelper.openCustomizeViewPanel();