diff --git a/README.md b/README.md index 0ccc9d997..e69505641 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ npm install ```bash # DEGREE VALIDATOR - VALIDATOR=http://localhost:5000 + NEXT_PUBLIC_VALIDATOR=http://127.0.0.1:5000 ``` 9. Generate `Prisma` client and run web server: diff --git a/package-lock.json b/package-lock.json index d83ee4254..0d40458d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "nebula-web", "version": "0.1.0", - "lockfileVersion": 3, + "lockfileVersion": 2, "requires": true, "packages": { "": { @@ -30,6 +30,7 @@ "@trpc/react-query": "^10.36.0", "@trpc/server": "^10.36.0", "@vercel/analytics": "^0.1.11", + "async-mutex": "^0.4.0", "axios": "^1.3.4", "eslint": "^8.8.0", "eslint-plugin-unused-imports": "^2.0.0", @@ -45,6 +46,7 @@ "prettier-eslint": "^13.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-hotkeys-hook": "^4.4.1", "react-loading-skeleton": "^3.3.1", "react-toastify": "^9.1.1", "superjson": "^1.11.0", @@ -5133,6 +5135,14 @@ "dev": true, "license": "MIT" }, + "node_modules/async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/asynckit": { "version": "0.4.0", "license": "MIT" @@ -13850,6 +13860,15 @@ "react": ">=16.0.0" } }, + "node_modules/react-hotkeys-hook": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-4.4.1.tgz", + "integrity": "sha512-sClBMBioFEgFGYLTWWRKvhxcCx1DRznd+wkFHwQZspnRBkHTgruKIHptlK/U/2DPX8BhHoRGzpMVWUXMmdZlmw==", + "peerDependencies": { + "react": ">=16.8.1", + "react-dom": ">=16.8.1" + } + }, "node_modules/react-icons": { "version": "3.11.0", "dev": true, @@ -17093,5 +17112,11078 @@ "url": "https://github.com/sponsors/wooorm" } } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.14" + }, + "@babel/core": { + "version": "7.20.12", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "@babel/generator": { + "version": "7.20.14", + "requires": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.7", + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + }, + "yallist": { + "version": "3.1.1" + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9" + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.11", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4" + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1" + }, + "@babel/helper-validator-option": { + "version": "7.18.6" + }, + "@babel/helpers": { + "version": "7.20.13", + "requires": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.13", + "@babel/types": "^7.20.7" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "has-flag": { + "version": "3.0.0" + }, + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.20.13" + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/runtime": { + "version": "7.21.0", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/runtime-corejs3": { + "version": "7.20.1", + "dev": true, + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.10" + } + }, + "@babel/template": { + "version": "7.20.7", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/traverse": { + "version": "7.20.13", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.13", + "@babel/types": "^7.20.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.7", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true, + "optional": true + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@cypress/request": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.0.tgz", + "integrity": "sha512-GKFCqwZwMYmL3IBoNeR2MM1SnxRIGERsQOTWeQKoYBt2JLqcqiy7JXqO894FLrpjZYqGxW92MNwRH2BN56obdQ==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.10.3", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@dnd-kit/accessibility": { + "version": "3.0.1", + "requires": { + "tslib": "^2.0.0" + } + }, + "@dnd-kit/core": { + "version": "6.0.7", + "requires": { + "@dnd-kit/accessibility": "^3.0.0", + "@dnd-kit/utilities": "^3.2.1", + "tslib": "^2.0.0" + } + }, + "@dnd-kit/utilities": { + "version": "3.2.1", + "requires": { + "tslib": "^2.0.0" + } + }, + "@emotion/babel-plugin": { + "version": "11.10.5", + "peer": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.1.3" + } + }, + "@emotion/cache": { + "version": "11.10.5", + "requires": { + "@emotion/memoize": "^0.8.0", + "@emotion/sheet": "^1.2.1", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "stylis": "4.1.3" + } + }, + "@emotion/hash": { + "version": "0.9.0" + }, + "@emotion/is-prop-valid": { + "version": "0.8.8", + "optional": true, + "requires": { + "@emotion/memoize": "0.7.4" + }, + "dependencies": { + "@emotion/memoize": { + "version": "0.7.4", + "optional": true + } + } + }, + "@emotion/memoize": { + "version": "0.8.0" + }, + "@emotion/react": { + "version": "11.10.5", + "peer": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.1", + "requires": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.2.1" + }, + "@emotion/styled": { + "version": "11.10.5", + "optional": true, + "peer": true, + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.5", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + }, + "dependencies": { + "@emotion/is-prop-valid": { + "version": "1.2.0", + "optional": true, + "peer": true, + "requires": { + "@emotion/memoize": "^0.8.0" + } + } + } + }, + "@emotion/unitless": { + "version": "0.8.0" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.0", + "peer": true, + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.0" + }, + "@emotion/weak-memoize": { + "version": "0.3.0" + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "devOptional": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "devOptional": true + }, + "@eslint/eslintrc": { + "version": "1.3.3", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.18.0", + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@floating-ui/core": { + "version": "0.7.3" + }, + "@floating-ui/dom": { + "version": "0.5.4", + "requires": { + "@floating-ui/core": "^0.7.3" + } + }, + "@floating-ui/react-dom": { + "version": "0.7.2", + "requires": { + "@floating-ui/dom": "^0.5.3", + "use-isomorphic-layout-effect": "^1.1.1" + } + }, + "@hapi/hoek": { + "version": "9.3.0", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.7", + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1" + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1" + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "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" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jest/console": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.1.tgz", + "integrity": "sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==", + "dev": true, + "requires": { + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.1.tgz", + "integrity": "sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==", + "dev": true, + "requires": { + "@jest/console": "^29.6.1", + "@jest/reporters": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.6.1", + "jest-haste-map": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.1", + "jest-resolve-dependencies": "^29.6.1", + "jest-runner": "^29.6.1", + "jest-runtime": "^29.6.1", + "jest-snapshot": "^29.6.1", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "jest-watcher": "^29.6.1", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.1", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, + "@jest/environment": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.1.tgz", + "integrity": "sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-mock": "^29.6.1" + } + }, + "@jest/expect": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.1.tgz", + "integrity": "sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==", + "dev": true, + "requires": { + "expect": "^29.6.1", + "jest-snapshot": "^29.6.1" + } + }, + "@jest/expect-utils": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.1.tgz", + "integrity": "sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" + } + }, + "@jest/fake-timers": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.1.tgz", + "integrity": "sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==", + "dev": true, + "requires": { + "@jest/types": "^29.6.1", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.1", + "jest-mock": "^29.6.1", + "jest-util": "^29.6.1" + } + }, + "@jest/globals": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.1.tgz", + "integrity": "sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==", + "dev": true, + "requires": { + "@jest/environment": "^29.6.1", + "@jest/expect": "^29.6.1", + "@jest/types": "^29.6.1", + "jest-mock": "^29.6.1" + } + }, + "@jest/reporters": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.1.tgz", + "integrity": "sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1", + "jest-worker": "^29.6.1", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "dependencies": { + "jest-worker": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz", + "integrity": "sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.6.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/schemas": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", + "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/source-map": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", + "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.1.tgz", + "integrity": "sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==", + "dev": true, + "requires": { + "@jest/console": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz", + "integrity": "sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==", + "dev": true, + "requires": { + "@jest/test-result": "^29.6.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.1.tgz", + "integrity": "sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "dependencies": { + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + } + } + }, + "@jest/types": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", + "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0" + }, + "@jridgewell/set-array": { + "version": "1.1.2" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "devOptional": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "devOptional": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "dev": true + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.10", + "optional": true, + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "dependencies": { + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "optional": true, + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "@motionone/animation": { + "version": "10.14.0", + "requires": { + "@motionone/easing": "^10.14.0", + "@motionone/types": "^10.14.0", + "@motionone/utils": "^10.14.0", + "tslib": "^2.3.1" + } + }, + "@motionone/dom": { + "version": "10.12.0", + "requires": { + "@motionone/animation": "^10.12.0", + "@motionone/generators": "^10.12.0", + "@motionone/types": "^10.12.0", + "@motionone/utils": "^10.12.0", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "@motionone/easing": { + "version": "10.14.0", + "requires": { + "@motionone/utils": "^10.14.0", + "tslib": "^2.3.1" + } + }, + "@motionone/generators": { + "version": "10.14.0", + "requires": { + "@motionone/types": "^10.14.0", + "@motionone/utils": "^10.14.0", + "tslib": "^2.3.1" + } + }, + "@motionone/types": { + "version": "10.14.0" + }, + "@motionone/utils": { + "version": "10.14.0", + "requires": { + "@motionone/types": "^10.14.0", + "hey-listen": "^1.0.8", + "tslib": "^2.3.1" + } + }, + "@mui/base": { + "version": "5.0.0-alpha.106", + "requires": { + "@babel/runtime": "^7.20.1", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.1", + "@mui/utils": "^5.10.14", + "@popperjs/core": "^2.11.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "@emotion/is-prop-valid": { + "version": "1.2.0", + "requires": { + "@emotion/memoize": "^0.8.0" + } + }, + "react-is": { + "version": "18.2.0" + } + } + }, + "@mui/core-downloads-tracker": { + "version": "5.10.14" + }, + "@mui/icons-material": { + "version": "5.10.14", + "requires": { + "@babel/runtime": "^7.20.1" + } + }, + "@mui/lab": { + "version": "5.0.0-alpha.115", + "requires": { + "@babel/runtime": "^7.20.7", + "@mui/base": "5.0.0-alpha.113", + "@mui/system": "^5.11.4", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.2", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "@emotion/is-prop-valid": { + "version": "1.2.0", + "requires": { + "@emotion/memoize": "^0.8.0" + } + }, + "@mui/base": { + "version": "5.0.0-alpha.113", + "requires": { + "@babel/runtime": "^7.20.7", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.2", + "@popperjs/core": "^2.11.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "react-is": { + "version": "18.2.0" + } + } + }, + "@mui/material": { + "version": "5.10.14", + "requires": { + "@babel/runtime": "^7.20.1", + "@mui/base": "5.0.0-alpha.106", + "@mui/core-downloads-tracker": "^5.10.14", + "@mui/system": "^5.10.14", + "@mui/types": "^7.2.1", + "@mui/utils": "^5.10.14", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "dependencies": { + "react-is": { + "version": "18.2.0" + } + } + }, + "@mui/private-theming": { + "version": "5.11.2", + "requires": { + "@babel/runtime": "^7.20.7", + "@mui/utils": "^5.11.2", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.11.0", + "requires": { + "@babel/runtime": "^7.20.6", + "@emotion/cache": "^11.10.5", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.11.4", + "requires": { + "@babel/runtime": "^7.20.7", + "@mui/private-theming": "^5.11.2", + "@mui/styled-engine": "^5.11.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.2", + "clsx": "^1.2.1", + "csstype": "^3.1.1", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.3", + "requires": {} + }, + "@mui/utils": { + "version": "5.11.2", + "requires": { + "@babel/runtime": "^7.20.7", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^16.7.1 || ^17.0.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0" + } + } + }, + "@next-auth/prisma-adapter": { + "version": "1.0.5", + "requires": {} + }, + "@next/bundle-analyzer": { + "version": "13.1.6", + "requires": { + "webpack-bundle-analyzer": "4.7.0" + } + }, + "@next/env": { + "version": "13.1.6" + }, + "@next/eslint-plugin-next": { + "version": "12.3.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.4.tgz", + "integrity": "sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==", + "dev": true, + "requires": { + "glob": "7.1.7" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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" + } + } + } + }, + "@next/swc-android-arm-eabi": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz", + "integrity": "sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==", + "optional": true + }, + "@next/swc-android-arm64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz", + "integrity": "sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==", + "optional": true + }, + "@next/swc-darwin-arm64": { + "version": "13.1.6", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz", + "integrity": "sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==", + "optional": true + }, + "@next/swc-freebsd-x64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz", + "integrity": "sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz", + "integrity": "sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz", + "integrity": "sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz", + "integrity": "sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz", + "integrity": "sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz", + "integrity": "sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz", + "integrity": "sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz", + "integrity": "sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz", + "integrity": "sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==", + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@panva/hkdf": { + "version": "1.0.2" + }, + "@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "dependencies": { + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true + }, + "open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "requires": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + } + } + } + }, + "@polka/url": { + "version": "1.0.0-next.21" + }, + "@popperjs/core": { + "version": "2.11.6" + }, + "@prisma/client": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.0.0.tgz", + "integrity": "sha512-XlO5ELNAQ7rV4cXIDJUNBEgdLwX3pjtt9Q/RHqDpGf43szpNJx2hJnggfFs7TKNx0cOFsl6KJCSfqr5duEU/bQ==", + "requires": { + "@prisma/engines-version": "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584" + } + }, + "@prisma/engines": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.0.0.tgz", + "integrity": "sha512-kyT/8fd0OpWmhAU5YnY7eP31brW1q1YrTGoblWrhQJDiN/1K+Z8S1kylcmtjqx5wsUGcP1HBWutayA/jtyt+sg==", + "devOptional": true + }, + "@prisma/engines-version": { + "version": "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584.tgz", + "integrity": "sha512-HHiUF6NixsldsP3JROq07TYBLEjXFKr6PdH8H4gK/XAoTmIplOJBCgrIUMrsRAnEuGyRoRLXKXWUb943+PFoKQ==" + }, + "@radix-ui/number": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/primitive": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-arrow": { + "version": "1.0.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + } + }, + "@radix-ui/react-checkbox": { + "version": "1.0.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-use-size": "1.0.0" + } + }, + "@radix-ui/react-collection": { + "version": "1.0.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-slot": "1.0.1" + } + }, + "@radix-ui/react-compose-refs": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-context": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-dialog": { + "version": "1.0.3", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "dependencies": { + "@radix-ui/react-dismissable-layer": { + "version": "1.0.3", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" + } + }, + "@radix-ui/react-focus-scope": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-portal": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + } + } + }, + "@radix-ui/react-direction": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-dismissable-layer": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" + } + }, + "@radix-ui/react-dropdown-menu": { + "version": "2.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-menu": "2.0.2", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0" + } + }, + "@radix-ui/react-focus-guards": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-focus-scope": { + "version": "1.0.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-hover-card": { + "version": "1.0.4", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-popper": "1.1.0", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0" + } + }, + "@radix-ui/react-id": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-menu": { + "version": "2.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.2", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.1", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.0", + "@radix-ui/react-portal": "1.0.1", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-roving-focus": "1.0.2", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + } + }, + "@radix-ui/react-popper": { + "version": "1.1.0", + "requires": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + } + }, + "@radix-ui/react-portal": { + "version": "1.0.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.1" + } + }, + "@radix-ui/react-presence": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + }, + "@radix-ui/react-roving-focus": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0" + } + }, + "@radix-ui/react-select": { + "version": "1.2.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-collection": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-dismissable-layer": "1.0.3", + "@radix-ui/react-focus-guards": "1.0.0", + "@radix-ui/react-focus-scope": "1.0.2", + "@radix-ui/react-id": "1.0.0", + "@radix-ui/react-popper": "1.1.1", + "@radix-ui/react-portal": "1.0.2", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-visually-hidden": "1.0.2", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "dependencies": { + "@radix-ui/react-arrow": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + } + }, + "@radix-ui/react-collection": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-slot": "1.0.1" + } + }, + "@radix-ui/react-dismissable-layer": { + "version": "1.0.3", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-escape-keydown": "1.0.2" + } + }, + "@radix-ui/react-focus-scope": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-popper": { + "version": "1.1.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "0.7.2", + "@radix-ui/react-arrow": "1.0.2", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0", + "@radix-ui/react-use-rect": "1.0.0", + "@radix-ui/react-use-size": "1.0.0", + "@radix-ui/rect": "1.0.0" + } + }, + "@radix-ui/react-portal": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + } + }, + "@radix-ui/react-primitive": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + } + } + }, + "@radix-ui/react-slot": { + "version": "1.0.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + } + }, + "@radix-ui/react-switch": { + "version": "1.0.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.0", + "@radix-ui/react-use-previous": "1.0.0", + "@radix-ui/react-use-size": "1.0.0" + } + }, + "@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-controllable-state": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-use-escape-keydown": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.0" + } + }, + "@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-previous": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-rect": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.0" + } + }, + "@radix-ui/react-use-size": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.0" + } + }, + "@radix-ui/react-visually-hidden": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.2" + }, + "dependencies": { + "@radix-ui/react-primitive": { + "version": "1.0.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + } + } + } + }, + "@radix-ui/rect": { + "version": "1.0.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@react-pdf/fns": { + "version": "2.0.0" + }, + "@react-pdf/font": { + "version": "2.3.1", + "requires": { + "@babel/runtime": "^7.16.4", + "@react-pdf/types": "^2.0.9", + "cross-fetch": "^3.1.5", + "fontkit": "^2.0.2", + "is-url": "^1.2.4" + } + }, + "@react-pdf/image": { + "version": "2.2.0", + "requires": { + "@babel/runtime": "^7.16.4", + "@react-pdf/png-js": "^2.2.0", + "cross-fetch": "^3.1.5" + } + }, + "@react-pdf/layout": { + "version": "3.2.2", + "requires": { + "@babel/runtime": "^7.16.4", + "@react-pdf/fns": "2.0.0", + "@react-pdf/image": "^2.2.0", + "@react-pdf/pdfkit": "^3.0.0", + "@react-pdf/primitives": "^3.0.0", + "@react-pdf/stylesheet": "^4.0.0", + "@react-pdf/textkit": "^4.1.0", + "@react-pdf/types": "^2.1.0", + "@react-pdf/yoga": "^3.0.0", + "cross-fetch": "^3.1.5", + "emoji-regex": "^8.0.0", + "queue": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0" + } + } + }, + "@react-pdf/pdfkit": { + "version": "3.0.1", + "requires": { + "@babel/runtime": "^7.16.4", + "@react-pdf/png-js": "^2.2.0", + "browserify-zlib": "^0.2.0", + "crypto-js": "^4.0.0", + "fontkit": "^2.0.2", + "vite-compatible-readable-stream": "^3.6.1" + } + }, + "@react-pdf/png-js": { + "version": "2.2.0", + "requires": { + "browserify-zlib": "^0.2.0" + } + }, + "@react-pdf/primitives": { + "version": "3.0.1" + }, + "@react-pdf/render": { + "version": "3.2.1", + "requires": { + "@babel/runtime": "^7.16.4", + "@react-pdf/fns": "2.0.0", + "@react-pdf/primitives": "^3.0.0", + "@react-pdf/textkit": "^4.1.0", + "@react-pdf/types": "^2.1.0", + "abs-svg-path": "^0.1.1", + "color-string": "^1.5.3", + "normalize-svg-path": "^1.1.0", + "parse-svg-path": "^0.1.2", + "svg-arc-to-cubic-bezier": "^3.2.0" + } + }, + "@react-pdf/renderer": { + "version": "3.0.3", + "requires": { + "@babel/runtime": "^7.16.4", + "@react-pdf/font": "^2.3.1", + "@react-pdf/layout": "^3.2.1", + "@react-pdf/pdfkit": "^3.0.1", + "@react-pdf/primitives": "^3.0.0", + "@react-pdf/render": "^3.2.1", + "@react-pdf/types": "^2.1.1", + "queue": "^6.0.1", + "react-reconciler": "^0.23.0", + "scheduler": "^0.17.0" + }, + "dependencies": { + "scheduler": { + "version": "0.17.0", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, + "@react-pdf/stylesheet": { + "version": "4.0.0", + "requires": { + "@babel/runtime": "^7.16.4", + "@react-pdf/fns": "2.0.0", + "@react-pdf/types": "^2.1.0", + "color-string": "^1.5.3", + "hsl-to-hex": "^1.0.0", + "media-engine": "^1.0.3", + "postcss-value-parser": "^4.1.0" + } + }, + "@react-pdf/textkit": { + "version": "4.1.0", + "requires": { + "@babel/runtime": "^7.16.4", + "@react-pdf/fns": "2.0.0", + "hyphen": "^1.6.4", + "unicode-properties": "^1.4.1" + } + }, + "@react-pdf/types": { + "version": "2.1.1" + }, + "@react-pdf/yoga": { + "version": "3.0.0", + "requires": { + "@types/yoga-layout": "^1.9.3" + } + }, + "@rollup/plugin-commonjs": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.0.tgz", + "integrity": "sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==", + "requires": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "dependencies": { + "@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + } + } + }, + "@rushstack/eslint-patch": { + "version": "1.2.0", + "dev": true + }, + "@sentry-internal/tracing": { + "version": "7.58.1", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.58.1.tgz", + "integrity": "sha512-kOWKqyjYdDgvO6CacXneE9UrFQHT3BXF1UpCAlnHchW/TqRFmg89sJAEUjEPGzN7y6IaX1G4j2dBPDE0OFQi3w==", + "requires": { + "@sentry/core": "7.58.1", + "@sentry/types": "7.58.1", + "@sentry/utils": "7.58.1", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/browser": { + "version": "7.58.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.58.1.tgz", + "integrity": "sha512-7+6Z/T7m0A/2/ImMCakpMOaWTPxmENzTdaojhkyVQKuYUZr7mCe4nco0jsongwY634zSUziuVsibi0jxMMTdBA==", + "requires": { + "@sentry-internal/tracing": "7.58.1", + "@sentry/core": "7.58.1", + "@sentry/replay": "7.58.1", + "@sentry/types": "7.58.1", + "@sentry/utils": "7.58.1", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/cli": { + "version": "1.75.2", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.75.2.tgz", + "integrity": "sha512-CG0CKH4VCKWzEaegouWfCLQt9SFN+AieFESCatJ7zSuJmzF05ywpMusjxqRul6lMwfUhRKjGKOzcRJ1jLsfTBw==", + "requires": { + "https-proxy-agent": "^5.0.0", + "mkdirp": "^0.5.5", + "node-fetch": "^2.6.7", + "progress": "^2.0.3", + "proxy-from-env": "^1.1.0", + "which": "^2.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + } + } + }, + "@sentry/core": { + "version": "7.58.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.58.1.tgz", + "integrity": "sha512-hpeB5fZ5T6Jg1CBqz486jHgWuJ5R/HD0wyYX+S3LDDsHCJo6V3TxNuoxYDlTTerRRfZdTwr9GYJXskehpU26IA==", + "requires": { + "@sentry/types": "7.58.1", + "@sentry/utils": "7.58.1", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/integrations": { + "version": "7.58.1", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.58.1.tgz", + "integrity": "sha512-fKZV/QDPM7rIZhaJpFwgxD4rzWLtRuag7cOWfvHCsezJnhXEF8u45sBak/VWmSr8SbcvJAIJSZbWYi0N91hNHQ==", + "requires": { + "@sentry/types": "7.58.1", + "@sentry/utils": "7.58.1", + "localforage": "^1.8.1", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/nextjs": { + "version": "7.58.1", + "resolved": "https://registry.npmjs.org/@sentry/nextjs/-/nextjs-7.58.1.tgz", + "integrity": "sha512-/wNVWNJ4vdVHBAvbnjbrRfAX3YhGvdC/CR9IAN5h0tTNjD/LFaHUN97/MUn9oZ7FpFgOOveM5bqK/5b6QRCBCg==", + "requires": { + "@rollup/plugin-commonjs": "24.0.0", + "@sentry/core": "7.58.1", + "@sentry/integrations": "7.58.1", + "@sentry/node": "7.58.1", + "@sentry/react": "7.58.1", + "@sentry/types": "7.58.1", + "@sentry/utils": "7.58.1", + "@sentry/webpack-plugin": "1.20.0", + "chalk": "3.0.0", + "rollup": "2.78.0", + "stacktrace-parser": "^0.1.10", + "tslib": "^2.4.1 || ^1.9.3" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "@sentry/node": { + "version": "7.58.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.58.1.tgz", + "integrity": "sha512-XsSu0xg5SYcltMbatnRBcIZw9pXwGJoGbYDLuPhhuqBz2mnQ0mQ9Try9dn/agDU7KZzT0IyA1qkPXk0NkMe3rw==", + "requires": { + "@sentry-internal/tracing": "7.58.1", + "@sentry/core": "7.58.1", + "@sentry/types": "7.58.1", + "@sentry/utils": "7.58.1", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^2.4.1 || ^1.9.3" + }, + "dependencies": { + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + } + } + }, + "@sentry/react": { + "version": "7.58.1", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.58.1.tgz", + "integrity": "sha512-0fh2JfKBxPU6Pm11PBt/5DgDg+l0cKcOf1WGhCWsBcFmRE2gAax+Q09+1fWm6+dqtg3piVR8AEEU6ZCBk3l4OQ==", + "requires": { + "@sentry/browser": "7.58.1", + "@sentry/types": "7.58.1", + "@sentry/utils": "7.58.1", + "hoist-non-react-statics": "^3.3.2", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/replay": { + "version": "7.58.1", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.58.1.tgz", + "integrity": "sha512-KKlpIxGrH1deTr/R3BErX8y16MnOzEylBVVn2I31BglLoZETFS9JAle6JNOgGxS5apFjwdQmD+69vX/mlVhMow==", + "requires": { + "@sentry/core": "7.58.1", + "@sentry/types": "7.58.1", + "@sentry/utils": "7.58.1" + } + }, + "@sentry/types": { + "version": "7.58.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.58.1.tgz", + "integrity": "sha512-OnKG+yrilPBeVNQK3biF0u/4IDjwH+boJU1XzJOnYdMRO8uzTWxvaRqpt0C8sVE9VAetRi2eutkzOgCXZISRrw==" + }, + "@sentry/utils": { + "version": "7.58.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.58.1.tgz", + "integrity": "sha512-iC9xZJBHp4+MDrZjKwcmMUhI5sTmpUcttwmsJL9HA6ACW+L1XX2eGSDky5pSlhhVFR7q7jJnQ7YUlMQ/jcd8eQ==", + "requires": { + "@sentry/types": "7.58.1", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/webpack-plugin": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@sentry/webpack-plugin/-/webpack-plugin-1.20.0.tgz", + "integrity": "sha512-Ssj1mJVFsfU6vMCOM2d+h+KQR7QHSfeIP16t4l20Uq/neqWXZUQ2yvQfe4S3BjdbJXz/X4Rw8Hfy1Sd0ocunYw==", + "requires": { + "@sentry/cli": "^1.74.6", + "webpack-sources": "^2.0.0 || ^3.0.0" + } + }, + "@sideway/address": { + "version": "4.1.4", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "dev": true + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@swc/helpers": { + "version": "0.4.14", + "requires": { + "tslib": "^2.4.0" + } + }, + "@tanstack/match-sorter-utils": { + "version": "8.7.6", + "requires": { + "remove-accents": "0.4.2" + } + }, + "@tanstack/query-core": { + "version": "4.24.10" + }, + "@tanstack/react-query": { + "version": "4.24.10", + "requires": { + "@tanstack/query-core": "4.24.10", + "use-sync-external-store": "^1.2.0" + } + }, + "@tanstack/react-query-devtools": { + "version": "4.24.10", + "requires": { + "@tanstack/match-sorter-utils": "^8.7.0", + "superjson": "^1.10.0", + "use-sync-external-store": "^1.2.0" + } + }, + "@tippyjs/react": { + "version": "4.1.0", + "dev": true, + "requires": { + "tippy.js": "^6.2.0" + } + }, + "@trpc/client": { + "version": "10.36.0", + "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.36.0.tgz", + "integrity": "sha512-Qj1T4vwhEEeLgXCUHFT7S5fqytkNYAudHwZtooEZ+NN+yN/a5oDZy1wd5D/gkY9y+nO8JCSgc7P5KhLjwzdeVw==", + "requires": {} + }, + "@trpc/next": { + "version": "10.36.0", + "resolved": "https://registry.npmjs.org/@trpc/next/-/next-10.36.0.tgz", + "integrity": "sha512-R0DYUMXkzKGQy49vvVou1fqOu459D47OsejwhMUktTNadTpUAuaE8SM0mo9a/faK59NhdlihDvRGq74PHupIkQ==", + "requires": { + "react-ssr-prepass": "^1.5.0" + } + }, + "@trpc/react-query": { + "version": "10.36.0", + "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.36.0.tgz", + "integrity": "sha512-ueIdfP/Xl4DIeBLMh6hEb0QdvcUjDZ+V+4lzIuztmkpRIvL4ZpwyBS7TGbKs+1EUwWu42AJB0t8n/LrtO6MxgQ==", + "requires": {} + }, + "@trpc/server": { + "version": "10.36.0", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.36.0.tgz", + "integrity": "sha512-9kwFeGBuihUPZT2wRv2cmTpSoI+sSGj0/lBwvtgIq1P0+ONpj5NJOcWlvYbpnr5nRxc/+44lM/mg4TnSuTd5Kg==" + }, + "@tsconfig/node10": { + "version": "1.0.9", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.3", + "dev": true + }, + "@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.4.10", + "devOptional": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "devOptional": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0" + }, + "@types/estree": { + "version": "0.0.51" + }, + "@types/express": { + "version": "4.17.16", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.31", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.33", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/http-proxy": { + "version": "1.17.9", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11" + }, + "@types/json5": { + "version": "0.0.29", + "dev": true + }, + "@types/mdast": { + "version": "3.0.10", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/mime": { + "version": "3.0.1", + "dev": true + }, + "@types/minimatch": { + "version": "5.1.2", + "dev": true + }, + "@types/node": { + "version": "17.0.45", + "devOptional": true + }, + "@types/nprogress": { + "version": "0.2.0", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0" + }, + "@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5" + }, + "@types/qs": { + "version": "6.9.7", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "dev": true + }, + "@types/react": { + "version": "17.0.52", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.11", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-is": { + "version": "17.0.3", + "requires": { + "@types/react": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.5", + "requires": { + "@types/react": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "dev": true + }, + "@types/scheduler": { + "version": "0.16.2" + }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "devOptional": true + }, + "@types/serve-index": { + "version": "1.9.1", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.1", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.3", + "dev": true + }, + "@types/sockjs": { + "version": "0.3.33", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/unist": { + "version": "2.0.6", + "dev": true + }, + "@types/uuid": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz", + "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", + "dev": true + }, + "@types/ws": { + "version": "8.5.4", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "@types/yauzl": { + "version": "2.10.0", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yoga-layout": { + "version": "1.9.4" + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "devOptional": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "devOptional": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "devOptional": true + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "devOptional": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "3.10.1", + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "dependencies": { + "@typescript-eslint/types": { + "version": "3.10.1" + }, + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-utils": { + "version": "2.1.0", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0" + } + } + }, + "@typescript-eslint/parser": { + "version": "5.43.0", + "devOptional": true, + "requires": { + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.43.0", + "devOptional": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "devOptional": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "devOptional": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "devOptional": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "devOptional": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + } + } + }, + "@typescript-eslint/types": { + "version": "5.43.0", + "devOptional": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.43.0", + "devOptional": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "devOptional": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "devOptional": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "devOptional": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "devOptional": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "devOptional": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.43.0", + "devOptional": true, + "requires": { + "@typescript-eslint/types": "5.43.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@vercel/analytics": { + "version": "0.1.11", + "requires": {} + }, + "@vxna/mini-html-webpack-template": { + "version": "2.0.0", + "dev": true, + "requires": { + "common-tags": "^1.8.0" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "devOptional": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "devOptional": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "devOptional": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "devOptional": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "devOptional": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "devOptional": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "devOptional": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "devOptional": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "devOptional": true, + "peer": true + }, + "abbrev": { + "version": "1.1.1", + "optional": true + }, + "abs-svg-path": { + "version": "0.1.1" + }, + "accepts": { + "version": "1.3.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.1" + }, + "acorn-import-assertions": { + "version": "1.8.0", + "devOptional": true, + "peer": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "dev": true + }, + "address": { + "version": "1.2.1", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "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-formats": { + "version": "2.1.1", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "devOptional": true, + "requires": {} + }, + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "ansi-html-community": { + "version": "0.0.8", + "dev": true + }, + "ansi-regex": { + "version": "3.0.1" + }, + "ansi-styles": { + "version": "4.3.0", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "2.0.0", + "optional": true + }, + "arch": { + "version": "2.2.0", + "dev": true + }, + "are-we-there-yet": { + "version": "2.0.0", + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "arg": { + "version": "5.0.2", + "dev": true + }, + "argparse": { + "version": "2.0.1" + }, + "aria-hidden": { + "version": "1.2.2", + "requires": { + "tslib": "^2.0.0" + } + }, + "aria-query": { + "version": "4.2.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-flatten": { + "version": "2.1.2", + "dev": true + }, + "array-includes": { + "version": "3.1.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "devOptional": true + }, + "array-uniq": { + "version": "1.0.3", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "ast-types": { + "version": "0.14.2", + "dev": true, + "requires": { + "tslib": "^2.0.1" + } + }, + "ast-types-flow": { + "version": "0.0.7", + "dev": true + }, + "astral-regex": { + "version": "2.0.0" + }, + "async": { + "version": "3.2.4", + "dev": true + }, + "async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "requires": { + "tslib": "^2.4.0" + } + }, + "asynckit": { + "version": "0.4.0" + }, + "at-least-node": { + "version": "1.0.0", + "dev": true + }, + "autoprefixer": { + "version": "10.4.13", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "axe-core": { + "version": "4.5.2", + "dev": true + }, + "axios": { + "version": "1.3.4", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "proxy-from-env": { + "version": "1.1.0" + } + } + }, + "axobject-query": { + "version": "2.2.0", + "dev": true + }, + "babel-jest": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.1.tgz", + "integrity": "sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==", + "dev": true, + "requires": { + "@jest/transform": "^29.6.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "peer": true, + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "bail": { + "version": "1.0.5", + "dev": true + }, + "balanced-match": { + "version": "1.0.2" + }, + "base64-js": { + "version": "1.5.1" + }, + "batch": { + "version": "0.6.1", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "blob-util": { + "version": "2.0.2", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.1.0", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "devOptional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brotli": { + "version": "1.3.3", + "requires": { + "base64-js": "^1.1.2" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.21.4", + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buble": { + "version": "0.20.0", + "dev": true, + "requires": { + "acorn": "^6.4.1", + "acorn-dynamic-import": "^4.0.0", + "acorn-jsx": "^5.2.0", + "chalk": "^2.4.2", + "magic-string": "^0.25.7", + "minimist": "^1.2.5", + "regexpu-core": "4.5.4" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "dev": true + }, + "acorn-dynamic-import": { + "version": "4.0.0", + "dev": true, + "requires": {} + }, + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "buffer": { + "version": "5.7.1", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "devOptional": true + }, + "bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "requires": { + "run-applescript": "^5.0.0" + } + }, + "bytes": { + "version": "3.0.0", + "dev": true + }, + "c8": { + "version": "7.12.0", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "cachedir": { + "version": "2.3.0", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0" + }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001431" + }, + "canvas": { + "version": "2.11.0", + "optional": true, + "requires": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "character-entities": { + "version": "1.2.4", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "dev": true + }, + "check-more-types": { + "version": "2.24.0", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chownr": { + "version": "2.0.0", + "optional": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "devOptional": true, + "peer": true + }, + "ci-info": { + "version": "3.7.1", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "dev": true + }, + "clean-webpack-plugin": { + "version": "4.0.0", + "dev": true, + "requires": { + "del": "^4.1.1" + } + }, + "cli-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.7.0", + "dev": true + }, + "cli-table3": { + "version": "0.6.3", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "client-only": { + "version": "0.0.1" + }, + "clipboard-copy": { + "version": "3.2.0", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "dev": true + }, + "clsx": { + "version": "1.2.1" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" + }, + "color-string": { + "version": "1.9.1", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "color-support": { + "version": "1.1.3", + "optional": true + }, + "colorette": { + "version": "2.0.19", + "dev": true + }, + "colors": { + "version": "0.6.2", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "common-dir": { + "version": "3.0.1", + "dev": true, + "requires": { + "common-sequence": "^2.0.0" + } + }, + "common-sequence": { + "version": "2.0.2", + "dev": true + }, + "common-tags": { + "version": "1.8.2" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "compressible": { + "version": "2.0.18", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1" + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "optional": true + }, + "content-disposition": { + "version": "0.5.4", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0" + }, + "cookie": { + "version": "0.5.0" + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true + }, + "copy-anything": { + "version": "3.0.2", + "requires": { + "is-what": "^4.1.6" + } + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "globby": { + "version": "13.1.3", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "slash": { + "version": "4.0.0", + "dev": true + } + } + }, + "core-js": { + "version": "3.26.1", + "dev": true + }, + "core-js-pure": { + "version": "3.26.1", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "peer": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "create-require": { + "version": "1.1.1", + "dev": true + }, + "cross-env": { + "version": "7.0.3", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "cross-fetch": { + "version": "3.1.5", + "requires": { + "node-fetch": "2.6.7" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-js": { + "version": "4.1.1" + }, + "css-initials": { + "version": "0.3.1", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "dev": true + }, + "csstype": { + "version": "3.1.1" + }, + "cypress": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.0.0.tgz", + "integrity": "sha512-nWHU5dUxP2Wm/zrMd8SWTTl706aJex/l+H4vi/tbu2SWUr17BUcd/sIYeqyxeoSPW1JFV2pT1pf4JEImH/POMg==", + "dev": true, + "requires": { + "@cypress/request": "^3.0.0", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^16.18.39", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.5.3", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "@types/node": { + "version": "16.18.46", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.46.tgz", + "integrity": "sha512-Mnq3O9Xz52exs3mlxMcQuA7/9VFe/dXcrgAyfjLkABIqxXKOgBRjyazTxUbjsxDa4BP7hhPliyjVTP9RDP14xg==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "human-signals": { + "version": "1.1.1", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "damerau-levenshtein": { + "version": "1.0.8", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true + }, + "dayjs": { + "version": "1.11.7", + "dev": true + }, + "debug": { + "version": "4.3.4", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "4.2.1", + "optional": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deep-is": { + "version": "0.1.4" + }, + "deepmerge": { + "version": "4.2.2", + "dev": true + }, + "default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "dependencies": { + "execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + } + } + }, + "default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + } + }, + "default-gateway": { + "version": "6.0.3", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defaults": { + "version": "1.0.4", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "defined": { + "version": "1.0.1", + "dev": true + }, + "del": { + "version": "4.1.1", + "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": { + "array-union": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "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", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0" + }, + "delegates": { + "version": "1.0.0", + "optional": true + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detect-libc": { + "version": "2.0.1", + "optional": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "dev": true + }, + "detect-node-es": { + "version": "1.1.0" + }, + "detect-port-alt": { + "version": "1.1.6", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "detective": { + "version": "5.2.1", + "dev": true, + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "dfa": { + "version": "1.2.0" + }, + "didyoumean": { + "version": "1.2.2", + "dev": true + }, + "diff": { + "version": "4.0.2", + "dev": true + }, + "diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "devOptional": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dlv": { + "version": "1.1.3" + }, + "dns-equal": { + "version": "1.0.0", + "dev": true + }, + "dns-packet": { + "version": "5.4.0", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-helpers": { + "version": "5.2.1", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "dotenv": { + "version": "16.0.3", + "dev": true + }, + "duplexer": { + "version": "0.1.2" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.284" + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.12.0", + "devOptional": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "devOptional": true + } + } + }, + "enquirer": { + "version": "2.3.6", + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.3" + } + } + }, + "error-ex": { + "version": "1.3.2", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "devOptional": true, + "peer": true + }, + "es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-object-assign": { + "version": "1.1.0", + "dev": true + }, + "es6-promise": { + "version": "4.2.8", + "dev": true + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0" + }, + "escodegen": { + "version": "1.14.3", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "levn": { + "version": "0.3.0", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.28.0", + "requires": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.1", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "globals": { + "version": "13.18.0", + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "eslint-config-next": { + "version": "12.3.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.3.4.tgz", + "integrity": "sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==", + "dev": true, + "requires": { + "@next/eslint-plugin-next": "12.3.4", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.21.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + }, + "dependencies": { + "eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + } + } + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz", + "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "get-tsconfig": "^4.5.0", + "globby": "^13.1.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "synckit": "^0.8.5" + }, + "dependencies": { + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.7.4", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.6.1", + "dev": true, + "requires": { + "@babel/runtime": "^7.18.9", + "aria-query": "^4.2.2", + "array-includes": "^3.1.5", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.4.3", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.2", + "language-tags": "^1.0.5", + "minimatch": "^3.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "4.2.1", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.31.11", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.4", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "dev": true, + "requires": {} + }, + "eslint-plugin-unused-imports": { + "version": "2.0.0", + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "eslint-rule-composer": { + "version": "0.3.0" + }, + "eslint-scope": { + "version": "5.1.1", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0" + } + } + }, + "eslint-utils": { + "version": "3.0.0", + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0" + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0" + }, + "espree": { + "version": "9.4.1", + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esprima": { + "version": "4.0.1" + }, + "esquery": { + "version": "1.4.0", + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0" + }, + "estree-to-babel": { + "version": "3.2.1", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.2.0", + "c8": "^7.6.0" + } + }, + "estree-walker": { + "version": "0.9.0", + "dev": true + }, + "esutils": { + "version": "2.0.3" + }, + "etag": { + "version": "1.8.1", + "dev": true + }, + "event-stream": { + "version": "3.3.4", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "eventemitter2": { + "version": "6.4.7", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "events": { + "version": "3.3.0", + "devOptional": true, + "peer": true + }, + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "executable": { + "version": "4.1.1", + "dev": true, + "requires": { + "pify": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "dev": true + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.1.tgz", + "integrity": "sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.6.1", + "@types/node": "*", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1" + } + }, + "express": { + "version": "4.18.2", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "extract-zip": { + "version": "2.0.1", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3" + }, + "fast-diff": { + "version": "1.2.0", + "dev": true + }, + "fast-glob": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "devOptional": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "devOptional": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0" + }, + "fast-levenshtein": { + "version": "2.0.6" + }, + "fastest-levenshtein": { + "version": "1.0.16", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, + "figures": { + "version": "3.2.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "6.0.1", + "requires": { + "flat-cache": "^3.0.4" + } + }, + "filesize": { + "version": "8.0.7", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "devOptional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "find-root": { + "version": "1.1.0", + "peer": true + }, + "find-up": { + "version": "5.0.0", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "findup": { + "version": "0.1.5", + "dev": true, + "requires": { + "colors": "~0.6.0-1", + "commander": "~2.1.0" + }, + "dependencies": { + "commander": { + "version": "2.1.0", + "dev": true + } + } + }, + "flat-cache": { + "version": "3.0.4", + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7" + }, + "follow-redirects": { + "version": "1.15.2" + }, + "fontkit": { + "version": "2.0.2", + "requires": { + "@swc/helpers": "^0.4.2", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "dfa": "^1.2.0", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.4.0", + "unicode-trie": "^2.0.0" + }, + "dependencies": { + "clone": { + "version": "2.1.2" + } + } + }, + "foreground-child": { + "version": "2.0.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "dev": true, + "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" + } + }, + "schema-utils": { + "version": "2.7.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "forwarded": { + "version": "0.2.0", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "dev": true + }, + "framer-motion": { + "version": "6.5.1", + "requires": { + "@emotion/is-prop-valid": "^0.8.2", + "@motionone/dom": "10.12.0", + "framesync": "6.0.1", + "hey-listen": "^1.0.8", + "popmotion": "11.0.3", + "style-value-types": "5.0.0", + "tslib": "^2.1.0" + } + }, + "framesync": { + "version": "6.0.1", + "requires": { + "tslib": "^2.1.0" + } + }, + "fresh": { + "version": "0.5.2", + "dev": true + }, + "from": { + "version": "0.1.7", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "optional": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "fs-monkey": { + "version": "1.0.3", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0" + }, + "fsevents": { + "version": "2.3.2", + "optional": true + }, + "function-bind": { + "version": "1.1.1" + }, + "function.name-polyfill": { + "version": "1.0.6", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1" + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "fuse.js": { + "version": "6.6.2" + }, + "gauge": { + "version": "3.0.2", + "optional": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "gensync": { + "version": "1.0.0-beta.2" + }, + "get-caller-file": { + "version": "2.0.5", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-nonce": { + "version": "1.0.1" + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-tsconfig": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.6.2.tgz", + "integrity": "sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==", + "dev": true, + "requires": { + "resolve-pkg-maps": "^1.0.0" + } + }, + "getos": { + "version": "3.2.1", + "dev": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "github-slugger": { + "version": "1.5.0", + "dev": true + }, + "glob": { + "version": "7.2.3", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "requires": { + "is-glob": "^4.0.3" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "devOptional": true, + "peer": true + }, + "global-dirs": { + "version": "3.0.1", + "dev": true, + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "dev": true + } + } + }, + "global-modules": { + "version": "2.0.0", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "11.12.0" + }, + "globby": { + "version": "11.1.0", + "devOptional": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "glogg": { + "version": "1.0.2", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "devOptional": true + }, + "grapheme-splitter": { + "version": "1.0.4" + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "devOptional": true + }, + "gzip-size": { + "version": "6.0.0", + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "dev": true + }, + "has": { + "version": "1.0.3", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1" + } + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0" + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "optional": true + }, + "hash-sum": { + "version": "2.0.0", + "dev": true + }, + "hey-listen": { + "version": "1.0.8" + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "requires": { + "react-is": "^16.7.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "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" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "hsl-to-hex": { + "version": "1.0.0", + "requires": { + "hsl-to-rgb-for-reals": "^1.1.0" + } + }, + "hsl-to-rgb-for-reals": { + "version": "1.1.1" + }, + "html-entities": { + "version": "2.3.3", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "hyphen": { + "version": "1.6.4" + }, + "hyphenate-style-name": { + "version": "1.0.4", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "immer": { + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", + "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0" + } + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4" + }, + "indent-string": { + "version": "4.0.0" + }, + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "ini": { + "version": "1.3.8", + "dev": true + }, + "internal-slot": { + "version": "1.0.4", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "intro.js": { + "version": "6.0.0" + }, + "intro.js-react": { + "version": "0.7.1", + "requires": {} + }, + "invariant": { + "version": "2.2.4", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ipaddr.js": { + "version": "2.0.1", + "dev": true + }, + "is-alphabetical": { + "version": "1.0.4", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1" + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "dev": true + }, + "is-ci": { + "version": "3.0.1", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, + "is-core-module": { + "version": "2.11.0", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1" + }, + "is-fullwidth-code-point": { + "version": "3.0.0" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "dev": true + }, + "is-in-browser": { + "version": "1.1.3", + "dev": true + }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + }, + "dependencies": { + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true + } + } + }, + "is-installed-globally": { + "version": "0.4.0", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-interactive": { + "version": "1.0.0", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "devOptional": true + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-cwd": { + "version": "2.2.0", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + }, + "dependencies": { + "is-path-inside": { + "version": "2.1.0", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + } + } + }, + "is-path-inside": { + "version": "3.0.3" + }, + "is-plain-obj": { + "version": "3.0.0", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "requires": { + "@types/estree": "*" + } + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "1.0.0", + "dev": true + }, + "is-root": { + "version": "2.1.0", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "dev": true + }, + "is-url": { + "version": "1.2.4" + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-what": { + "version": "4.1.7" + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "dev": true + }, + "isexe": { + "version": "2.0.0" + }, + "isobject": { + "version": "3.0.1", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.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 + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "javascript-stringify": { + "version": "2.1.0", + "dev": true + }, + "jest": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.1.tgz", + "integrity": "sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw==", + "dev": true, + "requires": { + "@jest/core": "^29.6.1", + "@jest/types": "^29.6.1", + "import-local": "^3.0.2", + "jest-cli": "^29.6.1" + } + }, + "jest-changed-files": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.1.tgz", + "integrity": "sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.6.1", + "@jest/expect": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.1", + "jest-matcher-utils": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-runtime": "^29.6.1", + "jest-snapshot": "^29.6.1", + "jest-util": "^29.6.1", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.1", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, + "jest-cli": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.1.tgz", + "integrity": "sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing==", + "dev": true, + "requires": { + "@jest/core": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.1", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + } + }, + "jest-config": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.1.tgz", + "integrity": "sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.1", + "@jest/types": "^29.6.1", + "babel-jest": "^29.6.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.1", + "jest-environment-node": "^29.6.1", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.1", + "jest-runner": "^29.6.1", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, + "jest-diff": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.1.tgz", + "integrity": "sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, + "jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.1.tgz", + "integrity": "sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==", + "dev": true, + "requires": { + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.6.1", + "pretty-format": "^29.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, + "jest-environment-node": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.1.tgz", + "integrity": "sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.6.1", + "@jest/fake-timers": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-mock": "^29.6.1", + "jest-util": "^29.6.1" + } + }, + "jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true + }, + "jest-haste-map": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.1.tgz", + "integrity": "sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==", + "dev": true, + "requires": { + "@jest/types": "^29.6.1", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.1", + "jest-worker": "^29.6.1", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "dependencies": { + "jest-worker": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz", + "integrity": "sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.6.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz", + "integrity": "sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, + "jest-matcher-utils": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz", + "integrity": "sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.1", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, + "jest-message-util": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.1.tgz", + "integrity": "sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, + "jest-mock": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.1.tgz", + "integrity": "sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==", + "dev": true, + "requires": { + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-util": "^29.6.1" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "dev": true + }, + "jest-resolve": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.1.tgz", + "integrity": "sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz", + "integrity": "sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==", + "dev": true, + "requires": { + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.6.1" + } + }, + "jest-runner": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.1.tgz", + "integrity": "sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==", + "dev": true, + "requires": { + "@jest/console": "^29.6.1", + "@jest/environment": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.6.1", + "jest-haste-map": "^29.6.1", + "jest-leak-detector": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-resolve": "^29.6.1", + "jest-runtime": "^29.6.1", + "jest-util": "^29.6.1", + "jest-watcher": "^29.6.1", + "jest-worker": "^29.6.1", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "jest-worker": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz", + "integrity": "sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.6.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.1.tgz", + "integrity": "sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.6.1", + "@jest/fake-timers": "^29.6.1", + "@jest/globals": "^29.6.1", + "@jest/source-map": "^29.6.0", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-mock": "^29.6.1", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.1", + "jest-snapshot": "^29.6.1", + "jest-util": "^29.6.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.1.tgz", + "integrity": "sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.1", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.1", + "semver": "^7.5.3" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, + "jest-util": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz", + "integrity": "sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==", + "dev": true, + "requires": { + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.1.tgz", + "integrity": "sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==", + "dev": true, + "requires": { + "@jest/types": "^29.6.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.1.tgz", + "integrity": "sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==", + "dev": true, + "requires": { + "@jest/test-result": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.1", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "27.5.1", + "devOptional": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "devOptional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "joi": { + "version": "17.9.1", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "jose": { + "version": "4.13.1" + }, + "js-sdsl": { + "version": "4.1.5" + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "jsesc": { + "version": "2.5.2" + }, + "json-parse-even-better-errors": { + "version": "2.3.1" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json5": { + "version": "2.2.3" + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "jss": { + "version": "10.9.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "csstype": "^3.0.2", + "is-in-browser": "^1.1.3", + "tiny-warning": "^1.0.2" + } + }, + "jss-plugin-camel-case": { + "version": "10.9.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "hyphenate-style-name": "^1.0.3", + "jss": "10.9.2" + } + }, + "jss-plugin-compose": { + "version": "10.9.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.9.2", + "tiny-warning": "^1.0.2" + } + }, + "jss-plugin-default-unit": { + "version": "10.9.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.9.2" + } + }, + "jss-plugin-global": { + "version": "10.9.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.9.2" + } + }, + "jss-plugin-isolate": { + "version": "10.9.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "css-initials": "^0.3.1", + "jss": "10.9.2" + } + }, + "jss-plugin-nested": { + "version": "10.9.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "jss": "10.9.2", + "tiny-warning": "^1.0.2" + } + }, + "jsx-ast-utils": { + "version": "3.3.3", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + } + }, + "kind-of": { + "version": "6.0.3", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "dev": true + }, + "language-subtag-registry": { + "version": "0.3.22", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "lazy-ass": { + "version": "1.6.0", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "requires": { + "immediate": "~3.0.5" + } + }, + "lilconfig": { + "version": "2.0.5", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4" + }, + "listify": { + "version": "1.0.3", + "dev": true + }, + "listr2": { + "version": "3.14.0", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "loader-runner": { + "version": "4.3.0", + "devOptional": true, + "peer": true + }, + "localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "requires": { + "lie": "3.1.1" + } + }, + "locate-path": { + "version": "6.0.0", + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2" + }, + "lodash.once": { + "version": "4.1.1", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2" + }, + "log-symbols": { + "version": "4.1.0", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loglevel": { + "version": "1.8.1" + }, + "loglevel-colored-level-prefix": { + "version": "1.0.0", + "requires": { + "chalk": "^1.1.3", + "loglevel": "^1.4.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1" + }, + "ansi-styles": { + "version": "2.2.1" + }, + "chalk": { + "version": "1.1.3", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "strip-ansi": { + "version": "3.0.1", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0" + } + } + }, + "longest-streak": { + "version": "2.0.4", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "dev": true + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "lru-cache": { + "version": "6.0.0", + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.9", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "devOptional": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "devOptional": true + } + } + }, + "make-error": { + "version": "1.3.6", + "dev": true + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "map-stream": { + "version": "0.1.0", + "dev": true + }, + "markdown-to-jsx": { + "version": "6.11.4", + "dev": true, + "requires": { + "prop-types": "^15.6.2", + "unquote": "^1.1.0" + } + }, + "mdast-util-from-markdown": { + "version": "0.8.5", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.6.5", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "dev": true + }, + "media-engine": { + "version": "1.0.3" + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "memfs": { + "version": "3.4.11", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "devOptional": true + }, + "merge2": { + "version": "1.4.1", + "devOptional": true + }, + "methods": { + "version": "1.1.2", + "dev": true + }, + "micromark": { + "version": "2.11.4", + "dev": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "micromatch": { + "version": "4.0.5", + "devOptional": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0" + }, + "mime-types": { + "version": "2.1.35", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "mimic-response": { + "version": "2.1.0", + "optional": true + }, + "min-indent": { + "version": "1.0.1", + "dev": true + }, + "mini-html-webpack-plugin": { + "version": "3.1.3", + "dev": true, + "requires": { + "webpack-sources": "^2.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + }, + "webpack-sources": { + "version": "2.3.1", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8" + }, + "minipass": { + "version": "4.0.1", + "optional": true + }, + "minizlib": { + "version": "2.1.2", + "optional": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "optional": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "optional": true + }, + "mri": { + "version": "1.2.0", + "dev": true + }, + "mrmime": { + "version": "1.0.1" + }, + "ms": { + "version": "2.1.2" + }, + "multicast-dns": { + "version": "7.2.5", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mute-stream": { + "version": "0.0.8", + "dev": true + }, + "nan": { + "version": "2.17.0", + "optional": true + }, + "nanoid": { + "version": "3.3.4" + }, + "natural-compare": { + "version": "1.4.0" + }, + "natural-compare-lite": { + "version": "1.4.0", + "devOptional": true + }, + "negotiator": { + "version": "0.6.3", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "devOptional": true + }, + "next": { + "version": "13.1.6", + "requires": { + "@next/env": "13.1.6", + "@next/swc-android-arm-eabi": "13.1.6", + "@next/swc-android-arm64": "13.1.6", + "@next/swc-darwin-arm64": "13.1.6", + "@next/swc-darwin-x64": "13.1.6", + "@next/swc-freebsd-x64": "13.1.6", + "@next/swc-linux-arm-gnueabihf": "13.1.6", + "@next/swc-linux-arm64-gnu": "13.1.6", + "@next/swc-linux-arm64-musl": "13.1.6", + "@next/swc-linux-x64-gnu": "13.1.6", + "@next/swc-linux-x64-musl": "13.1.6", + "@next/swc-win32-arm64-msvc": "13.1.6", + "@next/swc-win32-ia32-msvc": "13.1.6", + "@next/swc-win32-x64-msvc": "13.1.6", + "@swc/helpers": "0.4.14", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.1.1" + }, + "dependencies": { + "postcss": { + "version": "8.4.14", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + } + } + }, + "next-auth": { + "version": "4.20.1", + "requires": { + "@babel/runtime": "^7.20.13", + "@panva/hkdf": "^1.0.2", + "cookie": "^0.5.0", + "jose": "^4.11.4", + "oauth": "^0.9.15", + "openid-client": "^5.4.0", + "preact": "^10.6.3", + "preact-render-to-string": "^5.1.19", + "uuid": "^8.3.2" + } + }, + "node-dir": { + "version": "0.1.17", + "dev": true, + "requires": { + "minimatch": "^3.0.2" + } + }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true + }, + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, + "node-forge": { + "version": "1.3.1", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6" + }, + "nodemailer": { + "version": "6.8.0" + }, + "nopt": { + "version": "5.0.0", + "optional": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "dev": true + }, + "normalize-svg-path": { + "version": "1.1.0", + "requires": { + "svg-arc-to-cubic-bezier": "^3.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "5.0.1", + "optional": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "nprogress": { + "version": "0.2.0" + }, + "oauth": { + "version": "0.9.15" + }, + "object-assign": { + "version": "4.1.1" + }, + "object-hash": { + "version": "3.0.0", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.fromentries": { + "version": "2.0.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.hasown": { + "version": "1.1.2", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "object.values": { + "version": "1.1.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "obuf": { + "version": "1.1.2", + "dev": true + }, + "oidc-token-hash": { + "version": "5.0.1" + }, + "on-finished": { + "version": "2.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "dev": true + }, + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opener": { + "version": "1.5.2" + }, + "openid-client": { + "version": "5.4.0", + "requires": { + "jose": "^4.10.0", + "lru-cache": "^6.0.0", + "object-hash": "^2.0.1", + "oidc-token-hash": "^5.0.1" + }, + "dependencies": { + "object-hash": { + "version": "2.2.0" + } + } + }, + "optionator": { + "version": "0.9.1", + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "ospath": { + "version": "1.2.2", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-retry": { + "version": "4.6.2", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "pako": { + "version": "1.0.11" + }, + "parent-module": { + "version": "1.0.1", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "2.0.0", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-svg-path": { + "version": "0.1.2" + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "path-exists": { + "version": "4.0.0" + }, + "path-is-absolute": { + "version": "1.0.1" + }, + "path-is-inside": { + "version": "1.0.2", + "dev": true + }, + "path-key": { + "version": "3.1.1" + }, + "path-parse": { + "version": "1.0.7" + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true + }, + "path-type": { + "version": "4.0.0" + }, + "path2d-polyfill": { + "version": "2.0.1" + }, + "pause-stream": { + "version": "0.0.11", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "pdfjs-dist": { + "version": "3.3.122", + "requires": { + "canvas": "^2.11.0", + "path2d-polyfill": "^2.0.1", + "web-streams-polyfill": "^3.2.1" + } + }, + "pend": { + "version": "1.2.0", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "picocolors": { + "version": "1.0.0" + }, + "picomatch": { + "version": "2.3.1" + }, + "pify": { + "version": "4.0.1", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "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" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "pkg-up": { + "version": "3.1.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + } + } + }, + "popmotion": { + "version": "11.0.3", + "requires": { + "framesync": "6.0.1", + "hey-listen": "^1.0.8", + "style-value-types": "5.0.0", + "tslib": "^2.1.0" + } + }, + "postcss": { + "version": "8.4.19", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-import": { + "version": "14.1.0", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.0", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-nested": { + "version": "6.0.0", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.10" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0" + }, + "preact": { + "version": "10.11.3" + }, + "preact-render-to-string": { + "version": "5.2.6", + "requires": { + "pretty-format": "^3.8.0" + }, + "dependencies": { + "pretty-format": { + "version": "3.8.0" + } + } + }, + "prelude-ls": { + "version": "1.2.1" + }, + "prettier": { + "version": "2.7.1" + }, + "prettier-eslint": { + "version": "13.0.0", + "requires": { + "@typescript-eslint/parser": "^3.0.0", + "common-tags": "^1.4.0", + "dlv": "^1.1.0", + "eslint": "^7.9.0", + "indent-string": "^4.0.0", + "lodash.merge": "^4.6.0", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^2.0.0", + "pretty-format": "^23.0.1", + "require-relative": "^0.8.7", + "typescript": "^3.9.3", + "vue-eslint-parser": "~7.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@typescript-eslint/parser": { + "version": "3.10.1", + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "3.10.1", + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/typescript-estree": "3.10.1", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/types": { + "version": "3.10.1" + }, + "@typescript-eslint/typescript-estree": { + "version": "3.10.1", + "requires": { + "@typescript-eslint/types": "3.10.1", + "@typescript-eslint/visitor-keys": "3.10.1", + "debug": "^4.1.1", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "3.10.1", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "acorn": { + "version": "7.4.1" + }, + "argparse": { + "version": "1.0.10", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "eslint": { + "version": "7.32.0", + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0" + } + } + }, + "eslint-utils": { + "version": "2.1.0", + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0" + }, + "espree": { + "version": "7.3.1", + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.18.0", + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6" + }, + "js-yaml": { + "version": "3.14.1", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "typescript": { + "version": "3.9.10" + } + } + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "prettier-plugin-tailwindcss": { + "version": "0.2.2", + "dev": true, + "requires": {} + }, + "pretty-bytes": { + "version": "5.6.0", + "dev": true + }, + "pretty-format": { + "version": "23.6.0", + "requires": { + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3" + } + } + }, + "prisma": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.0.0.tgz", + "integrity": "sha512-KYWk83Fhi1FH59jSpavAYTt2eoMVW9YKgu8ci0kuUnt6Dup5Qy47pcB4/TLmiPAbhGrxxSz7gsSnJcCmkyPANA==", + "devOptional": true, + "requires": { + "@prisma/engines": "5.0.0" + } + }, + "prismjs": { + "version": "1.29.0", + "dev": true + }, + "private": { + "version": "0.1.8", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "progress": { + "version": "2.0.3" + }, + "prompts": { + "version": "2.4.2", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.8.1", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "proxy-addr": { + "version": "2.0.7", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "dev": true + } + } + }, + "proxy-from-env": { + "version": "1.0.0", + "dev": true + }, + "ps-tree": { + "version": "1.2.0", + "dev": true, + "requires": { + "event-stream": "=3.3.4" + } + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1" + }, + "pure-rand": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", + "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "dev": true + }, + "q-i": { + "version": "2.0.1", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "is-plain-object": "^2.0.4", + "stringify-object": "^3.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + } + } + }, + "qs": { + "version": "6.11.0", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "qss": { + "version": "2.0.3", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "queue": { + "version": "6.0.2", + "requires": { + "inherits": "~2.0.3" + } + }, + "queue-microtask": { + "version": "1.2.3" + }, + "randombytes": { + "version": "2.1.0", + "devOptional": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "dev": true + } + } + }, + "react": { + "version": "18.2.0", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dev-utils": { + "version": "12.0.1", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "loader-utils": { + "version": "3.2.1", + "dev": true + } + } + }, + "react-docgen": { + "version": "5.4.3", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@babel/generator": "^7.12.11", + "@babel/runtime": "^7.7.6", + "ast-types": "^0.14.2", + "commander": "^2.19.0", + "doctrine": "^3.0.0", + "estree-to-babel": "^3.1.0", + "neo-async": "^2.6.1", + "node-dir": "^0.1.10", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + } + } + }, + "react-docgen-annotation-resolver": { + "version": "2.0.0", + "dev": true + }, + "react-docgen-displayname-handler": { + "version": "3.0.2", + "dev": true, + "requires": { + "ast-types": "0.14.2" + } + }, + "react-dom": { + "version": "18.2.0", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-error-overlay": { + "version": "6.0.11", + "dev": true + }, + "react-group": { + "version": "3.0.2", + "dev": true, + "requires": { + "prop-types": "^15.7.2" + } + }, + "react-hotkeys-hook": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-hotkeys-hook/-/react-hotkeys-hook-4.4.1.tgz", + "integrity": "sha512-sClBMBioFEgFGYLTWWRKvhxcCx1DRznd+wkFHwQZspnRBkHTgruKIHptlK/U/2DPX8BhHoRGzpMVWUXMmdZlmw==", + "requires": {} + }, + "react-icons": { + "version": "3.11.0", + "dev": true, + "requires": { + "camelcase": "^5.0.0" + } + }, + "react-is": { + "version": "16.13.1" + }, + "react-loading-skeleton": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/react-loading-skeleton/-/react-loading-skeleton-3.3.1.tgz", + "integrity": "sha512-NilqqwMh2v9omN7LteiDloEVpFyMIa0VGqF+ukqp0ncVlYu1sKYbYGX9JEl+GtOT9TKsh04zCHAbavnQ2USldA==", + "requires": {} + }, + "react-reconciler": { + "version": "0.23.0", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.17.0" + }, + "dependencies": { + "scheduler": { + "version": "0.17.0", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, + "react-remove-scroll": { + "version": "2.5.5", + "requires": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + } + }, + "react-remove-scroll-bar": { + "version": "2.3.4", + "requires": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + } + }, + "react-simple-code-editor": { + "version": "0.13.1", + "dev": true, + "requires": {} + }, + "react-ssr-prepass": { + "version": "1.5.0", + "requires": {} + }, + "react-style-singleton": { + "version": "2.2.1", + "requires": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + } + }, + "react-styleguidist": { + "version": "13.0.0", + "dev": true, + "requires": { + "@tippyjs/react": "4.1.0", + "@vxna/mini-html-webpack-template": "^2.0.0", + "acorn": "^6.4.1", + "acorn-jsx": "^5.1.0", + "assert": "1.5.0", + "ast-types": "~0.14.2", + "buble": "0.20.0", + "clean-webpack-plugin": "^4.0.0", + "clipboard-copy": "^3.1.0", + "clsx": "^1.0.4", + "common-dir": "^3.0.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.6.4", + "doctrine": "^3.0.0", + "es6-object-assign": "~1.1.0", + "es6-promise": "^4.2.8", + "escodegen": "^1.12.0", + "estree-walker": "~0.9.0", + "fastest-levenshtein": "^1.0.9", + "findup": "^0.1.5", + "function.name-polyfill": "^1.0.6", + "github-slugger": "^1.2.1", + "glob": "^7.1.5", + "glogg": "^1.0.2", + "hash-sum": "^2.0.0", + "javascript-stringify": "^2.0.0", + "jss": "^10.9.0", + "jss-plugin-camel-case": "^10.9.0", + "jss-plugin-compose": "^10.9.0", + "jss-plugin-default-unit": "^10.9.0", + "jss-plugin-global": "^10.9.0", + "jss-plugin-isolate": "^10.9.0", + "jss-plugin-nested": "^10.9.0", + "kleur": "^3.0.3", + "listify": "^1.0.0", + "lodash": "^4.17.15", + "lowercase-keys": "^2.0.0", + "markdown-to-jsx": "^6.11.4", + "mini-html-webpack-plugin": "^3.1.3", + "mri": "^1.1.4", + "ora": "^4.0.2", + "prismjs": "^1.17.1", + "prop-types": "^15.8.1", + "q-i": "^2.0.1", + "qss": "^2.0.3", + "react-dev-utils": "^12.0.0", + "react-docgen": "^5.0.0", + "react-docgen-annotation-resolver": "^2.0.0", + "react-docgen-displayname-handler": "^3.0.0", + "react-group": "^3.0.2", + "react-icons": "^3.8.0", + "react-simple-code-editor": "^0.13.1", + "recast": "~0.18.5", + "remark": "^13.0.0", + "strip-html-comments": "^1.0.0", + "terser-webpack-plugin": "^5.3.3", + "to-ast": "^1.0.0", + "type-detect": "^4.0.8", + "unist-util-visit": "^2.0.0", + "webpack-dev-server": "^4.9.2", + "webpack-merge": "^4.2.2" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "log-symbols": { + "version": "3.0.0", + "dev": true, + "requires": { + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ora": { + "version": "4.1.1", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + } + } + }, + "react-toastify": { + "version": "9.1.1", + "requires": { + "clsx": "^1.1.1" + } + }, + "react-transition-group": { + "version": "4.4.5", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "read-cache": { + "version": "1.0.0", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "devOptional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "recast": { + "version": "0.18.10", + "dev": true, + "requires": { + "ast-types": "0.13.3", + "esprima": "~4.0.0", + "private": "^0.1.8", + "source-map": "~0.6.1" + }, + "dependencies": { + "ast-types": { + "version": "0.13.3", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "recursive-readdir": { + "version": "2.2.3", + "dev": true, + "requires": { + "minimatch": "^3.0.5" + } + }, + "regenerate": { + "version": "1.4.2", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.11" + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0" + }, + "regexpu-core": { + "version": "4.5.4", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.0.2", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "dev": true + }, + "regjsparser": { + "version": "0.6.9", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "dev": true + } + } + }, + "remark": { + "version": "13.0.0", + "dev": true, + "requires": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + } + }, + "remark-parse": { + "version": "9.0.0", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + }, + "remark-stringify": { + "version": "9.0.1", + "dev": true, + "requires": { + "mdast-util-to-markdown": "^0.6.0" + } + }, + "remove-accents": { + "version": "0.4.2" + }, + "repeat-string": { + "version": "1.6.1", + "dev": true + }, + "request-progress": { + "version": "3.0.0", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "dev": true + }, + "require-from-string": { + "version": "2.0.2" + }, + "require-relative": { + "version": "0.8.7" + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "restructure": { + "version": "3.0.0" + }, + "retry": { + "version": "0.13.1", + "dev": true + }, + "reusify": { + "version": "1.0.4" + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.78.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.0.tgz", + "integrity": "sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg==", + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.0", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safe-regex-test": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "scheduler": { + "version": "0.23.0", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "devOptional": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "dev": true + }, + "selfsigned": { + "version": "2.1.1", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.18.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.1", + "devOptional": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "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": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "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", + "dev": true + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "optional": true + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0" + }, + "shell-quote": { + "version": "1.7.4", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "devOptional": true + }, + "simple-concat": { + "version": "1.0.1", + "optional": true + }, + "simple-get": { + "version": "3.1.1", + "optional": true, + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2" + } + } + }, + "sirv": { + "version": "1.0.19", + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + } + }, + "sisteransi": { + "version": "1.0.5", + "dev": true + }, + "slash": { + "version": "3.0.0", + "devOptional": true + }, + "slice-ansi": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "sockjs": { + "version": "0.3.24", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "source-list-map": { + "version": "2.0.1", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "peer": true + }, + "source-map-js": { + "version": "1.0.2" + }, + "source-map-support": { + "version": "0.5.21", + "devOptional": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "devOptional": true + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "dev": true + }, + "sparkles": { + "version": "1.0.1", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "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" + } + }, + "spdy-transport": { + "version": "3.0.0", + "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" + } + }, + "split": { + "version": "0.3.3", + "dev": true, + "requires": { + "through": "2" + } + }, + "sprintf-js": { + "version": "1.0.3" + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "requires": { + "type-fest": "^0.7.1" + }, + "dependencies": { + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + } + } + }, + "start-server-and-test": { + "version": "2.0.0", + "dev": true, + "requires": { + "arg": "^5.0.2", + "bluebird": "3.7.2", + "check-more-types": "2.24.0", + "debug": "4.3.4", + "execa": "5.1.1", + "lazy-ass": "1.6.0", + "ps-tree": "1.2.0", + "wait-on": "7.0.1" + } + }, + "statuses": { + "version": "2.0.1", + "dev": true + }, + "stream-combiner": { + "version": "0.0.4", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0" + } + } + }, + "string.prototype.matchall": { + "version": "4.0.8", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "stringify-object": { + "version": "3.3.0", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "dev": true + } + } + }, + "strip-ansi": { + "version": "6.0.1", + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1" + } + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "strip-html-comments": { + "version": "1.0.0", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1" + }, + "style-value-types": { + "version": "5.0.0", + "requires": { + "hey-listen": "^1.0.8", + "tslib": "^2.1.0" + } + }, + "styled-jsx": { + "version": "5.1.1", + "requires": { + "client-only": "0.0.1" + } + }, + "stylis": { + "version": "4.1.3" + }, + "superjson": { + "version": "1.11.0", + "requires": { + "copy-anything": "^3.0.2" + } + }, + "supports-color": { + "version": "7.2.0", + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0" + }, + "svg-arc-to-cubic-bezier": { + "version": "3.2.0" + }, + "synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "table": { + "version": "6.8.1", + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0" + }, + "slice-ansi": { + "version": "4.0.0", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "tailwindcss": { + "version": "3.2.4", + "dev": true, + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.18", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "dependencies": { + "lilconfig": { + "version": "2.0.6", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "dev": true + } + } + }, + "tapable": { + "version": "1.1.3", + "dev": true + }, + "tar": { + "version": "6.1.13", + "optional": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "terser": { + "version": "5.15.1", + "devOptional": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "devOptional": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "devOptional": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + } + }, + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0" + }, + "throttleit": { + "version": "1.0.0", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "thunky": { + "version": "1.1.0", + "dev": true + }, + "tiny-inflate": { + "version": "1.0.3" + }, + "tiny-warning": { + "version": "1.0.3", + "dev": true + }, + "tippy.js": { + "version": "6.3.7", + "dev": true, + "requires": { + "@popperjs/core": "^2.9.0" + } + }, + "titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-ast": { + "version": "1.0.0", + "dev": true, + "requires": { + "ast-types": "^0.7.2", + "esprima": "^2.1.0" + }, + "dependencies": { + "ast-types": { + "version": "0.7.8", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "dev": true + } + } + }, + "to-fast-properties": { + "version": "2.0.0" + }, + "to-regex-range": { + "version": "5.0.1", + "devOptional": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "dev": true + }, + "totalist": { + "version": "1.1.0" + }, + "tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "dependencies": { + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true + } + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "trough": { + "version": "1.0.5", + "dev": true + }, + "ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "dependencies": { + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, + "ts-node": { + "version": "10.9.1", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "dev": true + }, + "arg": { + "version": "4.1.3", + "dev": true + } + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "dev": true + } + } + }, + "tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "tss-react": { + "version": "3.7.1", + "requires": { + "@emotion/cache": "*", + "@emotion/serialize": "*", + "@emotion/utils": "*" + } + }, + "tsutils": { + "version": "3.21.0", + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1" + } + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-detect": { + "version": "4.0.8", + "dev": true + }, + "type-fest": { + "version": "0.20.2" + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "5.0.2" + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "dev": true + }, + "unicode-properties": { + "version": "1.4.1", + "requires": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "dev": true + }, + "unicode-trie": { + "version": "2.0.0", + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + }, + "dependencies": { + "pako": { + "version": "0.2.9" + } + } + }, + "unified": { + "version": "9.2.2", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "dev": true + } + } + }, + "unist-util-is": { + "version": "4.1.0", + "dev": true + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "dev": true + }, + "untildify": { + "version": "4.0.0", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use-callback-ref": { + "version": "1.3.0", + "requires": { + "tslib": "^2.0.0" + } + }, + "use-isomorphic-layout-effect": { + "version": "1.1.2", + "requires": {} + }, + "use-sidecar": { + "version": "1.1.2", + "requires": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + } + }, + "use-sync-external-store": { + "version": "1.2.0", + "requires": {} + }, + "util": { + "version": "0.10.3", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2" + }, + "utils-merge": { + "version": "1.0.1", + "dev": true + }, + "uuid": { + "version": "8.3.2" + }, + "v8-compile-cache": { + "version": "2.3.0" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.0.1", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, + "vary": { + "version": "1.1.2", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + } + } + }, + "vfile": { + "version": "4.2.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-message": { + "version": "2.0.4", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vite-compatible-readable-stream": { + "version": "3.6.1", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "vue-eslint-parser": { + "version": "7.1.1", + "requires": { + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.0.1", + "lodash": "^4.17.15" + }, + "dependencies": { + "acorn": { + "version": "7.4.1" + }, + "eslint-visitor-keys": { + "version": "1.3.0" + }, + "espree": { + "version": "6.2.1", + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + } + } + }, + "wait-on": { + "version": "7.0.1", + "dev": true, + "requires": { + "axios": "^0.27.2", + "joi": "^17.7.0", + "lodash": "^4.17.21", + "minimist": "^1.2.7", + "rxjs": "^7.8.0" + }, + "dependencies": { + "axios": { + "version": "0.27.2", + "dev": true, + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "form-data": { + "version": "4.0.0", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "watchpack": { + "version": "2.4.0", + "devOptional": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "web-streams-polyfill": { + "version": "3.2.1" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "webpack": { + "version": "5.76.1", + "devOptional": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "tapable": { + "version": "2.2.1", + "devOptional": true, + "peer": true + } + } + }, + "webpack-bundle-analyzer": { + "version": "4.7.0", + "requires": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0" + }, + "commander": { + "version": "7.2.0" + }, + "ws": { + "version": "7.5.9", + "requires": {} + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.11.1", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-merge": { + "version": "4.2.2", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + }, + "websocket-driver": { + "version": "0.7.4", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "wide-align": { + "version": "1.1.5", + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2" + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "ws": { + "version": "8.12.0", + "dev": true, + "requires": {} + }, + "xtend": { + "version": "4.0.2", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "dev": true + }, + "yallist": { + "version": "4.0.0" + }, + "yaml": { + "version": "1.10.2" + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yn": { + "version": "3.1.1", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0" + }, + "zod": { + "version": "3.19.1" + }, + "zwitch": { + "version": "1.0.5", + "dev": true + } } } diff --git a/package.json b/package.json index 7f97332de..004b78a8d 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { + "bootstrap": "npm run prisma:generate && npx prisma migrate dev && npm run dev", "dev": "next dev", "prisma:generate": "prisma generate --schema prisma/platform.prisma && prisma generate --schema prisma/schema.prisma", "prisma:migrate:deploy": "prisma migrate deploy --schema prisma/schema.prisma", @@ -44,6 +45,7 @@ "@trpc/react-query": "^10.36.0", "@trpc/server": "^10.36.0", "@vercel/analytics": "^0.1.11", + "async-mutex": "^0.4.0", "axios": "^1.3.4", "eslint": "^8.8.0", "eslint-plugin-unused-imports": "^2.0.0", @@ -59,6 +61,7 @@ "prettier-eslint": "^13.0.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-hotkeys-hook": "^4.4.1", "react-loading-skeleton": "^3.3.1", "react-toastify": "^9.1.1", "superjson": "^1.11.0", diff --git a/prisma/platform.prisma b/prisma/platform.prisma index 728910b8a..f6f14602b 100644 --- a/prisma/platform.prisma +++ b/prisma/platform.prisma @@ -8,6 +8,223 @@ datasource db { url = env("PLATFORM_DATABASE_URL") } +type CoursesCoOrPreRequisites { + name String + options CoursesCoOrPreRequisitesOptions[] + required Int + type String +} + +type CoursesCoOrPreRequisitesOptions { + choices CoursesCoOrPreRequisitesOptionsChoices? + class_reference String? + condition String? + description String? + max_hours Int? + minimum_grade String? + name String? + options CoursesCoOrPreRequisitesOptionsOptions[] + required Int? + type String +} + +type CoursesCoOrPreRequisitesOptionsChoices { + name String + options CoursesCoOrPreRequisitesOptionsChoicesOptions[] + required Int + type String +} + +type CoursesCoOrPreRequisitesOptionsChoicesOptions { + class_reference String? + condition String? + description String? + minimum_grade String? + type String +} + +type CoursesCoOrPreRequisitesOptionsOptions { + class_reference String? + condition String? + description String? + minimum_grade String? + name String? + options CoursesCoOrPreRequisitesOptionsOptionsOptions[] + required Int? + type String +} + +type CoursesCoOrPreRequisitesOptionsOptionsOptions { + class_reference String? + condition String? + description String? + major String? + minimum_grade String? + minor String? + type String +} + +type CoursesCorequisites { + name String + options CoursesCorequisitesOptions[] + required Int + type String +} + +type CoursesCorequisitesOptions { + choices CoursesCorequisitesOptionsChoices? + class_reference String? + condition String? + description String? + max_hours Int? + minimum_grade String? + name String? + options CoursesCorequisitesOptionsOptions[] + required Int? + type String +} + +type CoursesCorequisitesOptionsChoices { + name String + options CoursesCorequisitesOptionsChoicesOptions[] + required Int + type String +} + +type CoursesCorequisitesOptionsChoicesOptions { + class_reference String? + condition String? + description String? + minimum_grade String? + name String? + options CoursesCorequisitesOptionsChoicesOptionsOptions[] + required Int? + type String +} + +type CoursesCorequisitesOptionsChoicesOptionsOptions { + class_reference String + minimum_grade String + type String +} + +type CoursesCorequisitesOptionsOptions { + class_reference String? + condition String? + description String? + minimum_grade String? + name String? + options CoursesCorequisitesOptionsOptionsOptions[] + required Int? + type String +} + +type CoursesCorequisitesOptionsOptionsOptions { + class_reference String? + condition String? + description String? + major String? + minimum_grade String? + minor String? + type String +} + +type CoursesPrerequisites { + name String + options CoursesPrerequisitesOptions[] + required Int + type String +} + +type CoursesPrerequisitesOptions { + choices CoursesPrerequisitesOptionsChoices? + class_reference String? + condition String? + core_flag String? + description String? + hours Int? + major String? + max_hours Int? + minimum Float? + minimum_grade String? + name String? + options CoursesPrerequisitesOptionsOptions[] + required Int? + subset String? + type String +} + +type CoursesPrerequisitesOptionsChoices { + name String + options CoursesPrerequisitesOptionsChoicesOptions[] + required Int + type String +} + +type CoursesPrerequisitesOptionsChoicesOptions { + class_reference String? + condition String? + description String? + minimum_grade String? + name String? + options CoursesPrerequisitesOptionsChoicesOptionsOptions[] + required Int? + type String +} + +type CoursesPrerequisitesOptionsChoicesOptionsOptions { + class_reference String + minimum_grade String + type String +} + +type CoursesPrerequisitesOptionsOptions { + class_reference String? + condition String? + core_flag String? + description String? + granter String? + hours Int? + major String? + minimum_grade String? + name String? + options CoursesPrerequisitesOptionsOptionsOptions[] + required Int? + type String +} + +type CoursesPrerequisitesOptionsOptionsOptions { + class_reference String? + condition String? + description String? + granter String? + major String? + minimum_grade String? + name String? + options CoursesPrerequisitesOptionsOptionsOptionsOptions[] + required Int? + type String +} + +type CoursesPrerequisitesOptionsOptionsOptionsOptions { + class_reference String? + condition String? + description String? + minimum_grade String? + name String? + options CoursesPrerequisitesOptionsOptionsOptionsOptionsOptions[] + required Int? + type String +} + +type CoursesPrerequisitesOptionsOptionsOptionsOptionsOptions { + class_reference String? + condition String? + description String? + minimum_grade String? + type String +} + type ExamsYields { outcome Json requirement ExamsYieldsRequirement @@ -66,31 +283,20 @@ type SectionsAcademicSession { start_date String } -type SectionsAttributes { - raw_attributes String[] -} - type SectionsMeetings { - end_date String? + end_date String end_time String location SectionsMeetingsLocation meeting_days String[] - /// Could not determine type: the field only had null or empty values in the sample set. - modality Json? + modality String start_date String start_time String } type SectionsMeetingsLocation { - building String? + building String map_uri String - room String? -} - -type SectionsSectionCorequisites { - /// Could not determine type: the field only had null or empty values in the sample set. - options Json? - type String + room String } type SectionsTeachingAssistants { @@ -101,64 +307,80 @@ type SectionsTeachingAssistants { } model courses { - id String @id @default(auto()) @map("_id") @db.ObjectId - v Int @map("__v") + id String @id @default(auto()) @map("_id") @db.ObjectId activity_type String + /// Could not determine type: the field only had null or empty values in the sample set. + attributes Json? + catalog_year String class_level String - co_or_pre_requisites Json - corequisites Json + co_or_pre_requisites CoursesCoOrPreRequisites? + corequisites CoursesCorequisites? course_number String credit_hours String description String + enrollment_reqs String grading String internal_course_number String - laboratory_contact_hours String? - lecture_contact_hours String? - offering_frequency String? - prerequisites Json + laboratory_contact_hours String + lecture_contact_hours String + offering_frequency String + prerequisites CoursesPrerequisites? school String - sections String[] @db.ObjectId + sections String[] subject_prefix String title String } +model degrees { + id String @id @default(auto()) @map("_id") @db.ObjectId +} + model exams { id String @id @default(auto()) @map("_id") @db.ObjectId + level String? name String? type String yields ExamsYields[] + + @@index([type], map: "type_1") + @@index([name], map: "name_1") + @@index([level], map: "level_1") } model professors { - id String @id @default(auto()) @map("_id") @db.ObjectId - v Int @map("__v") + id String @id @default(auto()) @map("_id") @db.ObjectId email String first_name String - image_uri String? + image_uri String last_name String - office ProfessorsOffice? + office ProfessorsOffice /// Could not determine type: the field only had null or empty values in the sample set. office_hours Json? - phone_number String? - profile_uri String? - sections String[] @db.ObjectId + phone_number String + profile_uri String + sections String[] titles String[] + + @@index([first_name, last_name], map: "first_name_1_last_name_1") } model sections { id String @id @default(auto()) @map("_id") @db.ObjectId - v Int @map("__v") academic_session SectionsAcademicSession - attributes SectionsAttributes + /// Could not determine type: the field only had null or empty values in the sample set. + attributes Json? core_flags String[] course_reference String @db.ObjectId grade_distribution Int[] instruction_mode String internal_class_number String meetings SectionsMeetings[] - professors String[] @db.ObjectId - section_corequisites SectionsSectionCorequisites + professors String[] + /// Could not determine type: the field only had null or empty values in the sample set. + section_corequisites Json? section_number String - syllabus_uri String? + syllabus_uri String teaching_assistants SectionsTeachingAssistants[] + + @@index([course_reference], map: "course_reference_1") } diff --git a/src/components/landing/PlanCard.tsx b/src/components/landing/PlanCard.tsx index 2558e9428..e8b3e2a59 100644 --- a/src/components/landing/PlanCard.tsx +++ b/src/components/landing/PlanCard.tsx @@ -2,10 +2,10 @@ import router from 'next/router'; import { useState } from 'react'; import DotsHorizontalIcon from '@/icons/DotsHorizontalIcon'; +import DeletePlanModal from '@/shared/DeletePlanModal'; import { trpc } from '@/utils/trpc'; import PlanCardDropdown from './PlanCardDropdown'; -import DeletePlanModal from '@/shared/DeletePlanModal'; export type PlanCardProps = { id: string; diff --git a/src/components/onboarding/welcome.tsx b/src/components/onboarding/welcome.tsx index f97c8b4c5..cd89fc75c 100644 --- a/src/components/onboarding/welcome.tsx +++ b/src/components/onboarding/welcome.tsx @@ -1,13 +1,13 @@ import { MenuItem, Select, SelectChangeEvent } from '@mui/material'; +import Link from 'next/link'; import React from 'react'; import AutoCompleteMajor from '@/components/AutoCompleteMajor'; import EmojiIcons from '@/icons/EmojiIcon'; +import useMajors from '@/shared/useMajors'; import { SemesterCode } from 'prisma/utils'; import useSearch from '../search/search'; -import useMajors from '@/shared/useMajors'; -import Link from 'next/link'; export type WelcomeTypes = { name: string; diff --git a/src/components/planner/EditableMajor.tsx b/src/components/planner/EditableMajor.tsx index 2339fb64f..e7a9dc76f 100644 --- a/src/components/planner/EditableMajor.tsx +++ b/src/components/planner/EditableMajor.tsx @@ -1,12 +1,12 @@ import Autocomplete from '@mui/material/Autocomplete'; import TextField from '@mui/material/TextField'; +import Link from 'next/link'; import { useEffect, useState } from 'react'; import { toast } from 'react-toastify'; import EditIcon from '@/icons/EditIcon'; -import { trpc } from '@/utils/trpc'; import useMajors from '@/shared/useMajors'; -import Link from 'next/link'; +import { trpc } from '@/utils/trpc'; const EditableMajor = ({ major: initialMajor, diff --git a/src/components/planner/Planner.tsx b/src/components/planner/Planner.tsx index 688de4e1e..4322c99e0 100644 --- a/src/components/planner/Planner.tsx +++ b/src/components/planner/Planner.tsx @@ -21,6 +21,7 @@ import { } from '@dnd-kit/core'; import Router from 'next/router'; import React, { useMemo, useState, useRef, FC, useEffect } from 'react'; +import { useHotkeys } from 'react-hotkeys-hook'; import { trpc } from '@/utils/trpc'; @@ -65,6 +66,7 @@ export default function Planner({ handleSelectCourses, handleDeleteAllSelectedCourses, title, + undo, } = useSemestersContext(); const utils = trpc.useContext(); @@ -154,6 +156,8 @@ export default function Planner({ const ref = useRef(null); // TODO: Use resizeobserver to change column count based on screen size + useHotkeys('ctrl+z', undo); + return ( void)[]; courseIsSelected: (courseId: string) => boolean; handleSelectCourses: (courseId: string[]) => void; handleDeselectCourses: (courseId: string[]) => void; @@ -62,6 +63,7 @@ export interface SemestersContextState { prereqOverriden: boolean, courseName: string, ) => void; + undo: () => void; } type Filter = @@ -92,6 +94,20 @@ export interface useSemestersProps { plan?: Plan; } +export type UndoStackReducerState = { + stack: (() => void)[]; + current: (() => void) | null; +}; + +export type UndoStackReducerAction = + | { + type: 'popUndoStack'; + } + | { + type: 'pushUndoStack'; + callback: () => void; + }; + export type SemestersReducerState = Semester[]; export type SemestersReducerAction = @@ -106,6 +122,7 @@ export type SemestersReducerAction = } | { type: 'removeYear' } | { type: 'removeCourseFromSemester'; semesterId: string; courseId: string } + | { type: 'massInsertCourses'; coursesGrouped: CourseSemesterGrouped } | { type: 'massDeleteCoursesFromSemester'; courseIds: string[] } | { type: 'moveCourseFromSemesterToSemester'; @@ -150,6 +167,13 @@ export type SemestersReducerAction = semesters: Semester[]; }; +interface CourseSemester { + semesterId: string; + course: DraggableCourse; +} + +type CourseSemesterGrouped = { [semesterId: string]: DraggableCourse[] }; + export const SemestersContextProvider: FC = ({ planId, plan, @@ -160,6 +184,35 @@ export const SemestersContextProvider: FC = ({ const [selectedCourseIds, setSelectedCourseIds] = useState>(new Set()); + const [undoStack, dispatchUndo] = useReducer< + (state: UndoStackReducerState, action: UndoStackReducerAction) => UndoStackReducerState + >( + (state, action) => { + switch (action.type) { + case 'popUndoStack': + return { stack: state.stack.slice(0, -1), current: state.stack[state.stack.length - 1] }; + case 'pushUndoStack': + return { stack: [...state.stack, action.callback], current: state.current }; + default: + return state; + } + }, + { + stack: [], + current: null, + }, + ); + + const undo = () => { + dispatchUndo({ type: 'popUndoStack' }); + }; + + useEffect(() => { + if (undoStack.current) { + undoStack.current(); + } + }, [undoStack.current]); + const handleSelectCourses = (courseIds: string[]) => { setSelectedCourseIds((existingCourseIds) => { const newSet = new Set(existingCourseIds); @@ -178,7 +231,9 @@ export const SemestersContextProvider: FC = ({ const courseIsSelected = (courseId: string): boolean => selectedCourseIds.has(courseId); - const handleDeselectAllCourses = () => setSelectedCourseIds(new Set()); + const handleDeselectAllCourses = () => { + setSelectedCourseIds(new Set()); + }; const [semesters, dispatchSemesters] = useReducer< (state: SemestersReducerState, action: SemestersReducerAction) => Semester[] @@ -216,6 +271,17 @@ export const SemestersContextProvider: FC = ({ : semester; }); + case 'massInsertCourses': + return state.map((semester) => + semester.id.toString() in action.coursesGrouped && + action.coursesGrouped[semester.id.toString()].length > 0 + ? { + ...semester, + courses: [...semester.courses, ...action.coursesGrouped[semester.id.toString()]], + } + : semester, + ); + case 'massDeleteCoursesFromSemester': return state.map((semester) => { return { @@ -334,6 +400,22 @@ export const SemestersContextProvider: FC = ({ func: ({ locked, semesterId }) => changeSemesterLock.mutateAsync({ locked, semesterId }), args: { locked, semesterId }, }); + + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + dispatchSemesters({ + type: 'changeSemesterLock', + locked: !locked, + semesterId, + }); + + addTask({ + func: ({ locked, semesterId }) => changeSemesterLock.mutateAsync({ locked, semesterId }), + args: { locked: !locked, semesterId }, + }); + }, + }); }; const handleCourseLock = (semesterId: string, locked: boolean, courseName: string) => { @@ -354,6 +436,23 @@ export const SemestersContextProvider: FC = ({ changeCourseLock.mutateAsync({ locked, semesterId, courseName }), args: { locked, semesterId, courseName }, }); + + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + dispatchSemesters({ + type: 'changeCourseLock', + locked: !locked, + semesterId, + courseName, + }); + addTask({ + func: ({ locked, semesterId, courseName }) => + changeCourseLock.mutateAsync({ locked, semesterId, courseName }), + args: { locked: !locked, semesterId, courseName }, + }); + }, + }); }; const changeCoursePrereqOverride = trpc.plan.changeCoursePrereqOverride.useMutation(); @@ -375,6 +474,24 @@ export const SemestersContextProvider: FC = ({ changeCoursePrereqOverride.mutateAsync({ semesterId, courseName, prereqOverriden }), args: { semesterId, courseName, prereqOverriden }, }); + + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + dispatchSemesters({ + type: 'changeCoursePrereqOverride', + courseName, + prereqOverriden: !prereqOverriden, + semesterId, + }); + + addTask({ + func: ({ semesterId, courseName, prereqOverriden }) => + changeCoursePrereqOverride.mutateAsync({ semesterId, courseName, prereqOverriden }), + args: { semesterId, courseName, prereqOverriden: !prereqOverriden }, + }); + }, + }); }; const addCourse = trpc.plan.addCourseToSemester.useMutation({ @@ -398,6 +515,13 @@ export const SemestersContextProvider: FC = ({ }, }); + const massInsertCourses = trpc.plan.massInsertCourses.useMutation({ + async onSuccess() { + await utils.validator.degreeValidator.invalidate(); + await utils.validator.prereqValidator.invalidate(); + }, + }); + const moveCourse = trpc.plan.moveCourseFromSemester.useMutation({ async onSuccess() { utils.validator.prereqValidator.invalidate(); @@ -418,8 +542,29 @@ export const SemestersContextProvider: FC = ({ const semesterColorChange = trpc.plan.changeSemesterColor.useMutation(); + const expandCourseFromId = (id: string): CourseSemester | null => { + for (const semester of semesters) { + for (const course of semester.courses) { + if (course.id === id) { + return { semesterId: semester.id, course }; + } + } + } + return null; + }; + const handleDeleteAllSelectedCourses = useCallback(() => { const coursesToDelete = [...selectedCourseIds]; + const coursesCopy: CourseSemester[] = coursesToDelete.map((id) => expandCourseFromId(id)!); + const coursesCopyGrouped: CourseSemesterGrouped = coursesCopy.reduce( + (groups: CourseSemesterGrouped, item) => { + const group = groups[item.semesterId] || []; + group.push(item.course); + groups[item.semesterId] = group; + return groups; + }, + {}, + ); dispatchSemesters({ type: 'massDeleteCoursesFromSemester', @@ -443,9 +588,47 @@ export const SemestersContextProvider: FC = ({ ), args: { courseIds: coursesToDelete }, }); + + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + dispatchSemesters({ + type: 'massInsertCourses', + coursesGrouped: coursesCopyGrouped, + }); + + addTask({ + func: (courses) => + toast.promise( + massInsertCourses.mutateAsync( + courses.map(({ course, semesterId }) => ({ + id: course.id, + code: course.code, + color: course.color, + locked: course.locked, + prereqOverriden: course.prereqOveridden, + semesterId, + })), + ), + { + pending: 'Undoing deletion of selected courses', + success: 'Undo deletion of selected courses successful!', + error: 'Error during undo', + }, + { + autoClose: 1000, + position: 'bottom-right', + }, + ), + args: coursesCopy, + }); + }, + }); }, [selectedCourseIds, addTask, massDeleteCourses]); const handleDeleteAllCoursesFromSemester = (semester: Semester) => { + const coursesGroup = { [semester.id]: semester.courses }; + handleDeselectCourses(semester.courses.map((course) => course.id.toString())); dispatchSemesters({ type: 'deleteAllCoursesFromSemester', semesterId: semester.id.toString() }); @@ -454,9 +637,45 @@ export const SemestersContextProvider: FC = ({ func: ({ semesterId }) => deleteAllCourses.mutateAsync({ semesterId }), args: { semesterId: semester.id.toString() }, }); + + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + dispatchSemesters({ + type: 'massInsertCourses', + coursesGrouped: coursesGroup, + }); + + addTask({ + func: ({ semesterId, courses }) => + toast.promise( + massInsertCourses.mutateAsync( + courses.map((course) => ({ + id: course.id, + code: course.code, + color: course.color, + locked: course.locked, + prereqOverriden: course.prereqOveridden, + semesterId, + })), + ), + { + pending: 'Undoing deletion of courses', + success: 'Undo deletion of courses successful!', + error: 'Error during undo', + }, + { + autoClose: 1000, + position: 'bottom-right', + }, + ), + args: { semesterId: semester.id, courses: semester.courses }, + }); + }, + }); }; - const handleAddYear = () => { + const handleAddYear = (shouldPushUndo = true) => { const newYear: Semester[] = createYearBasedOnFall( semesters.length ? semesters[semesters.length - 1].code.year : 2022, ); @@ -483,9 +702,17 @@ export const SemestersContextProvider: FC = ({ ), args: { semesterIds: semesterIds.map((id) => id.toString()) }, }); + + if (shouldPushUndo) + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + handleRemoveYear(false); + }, + }); }; - const handleRemoveYear = () => { + const handleRemoveYear = (shouldPushUndo = true) => { dispatchSemesters({ type: 'removeYear' }); addTask({ @@ -506,11 +733,20 @@ export const SemestersContextProvider: FC = ({ .catch((err) => console.error(err)), args: {}, }); + + if (shouldPushUndo) + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + handleAddYear(false); + }, + }); }; const handleRemoveCourseFromSemester = ( targetSemester: Semester, targetCourse: DraggableCourse, + shouldPushUndo = true, ) => { dispatchSemesters({ type: 'removeCourseFromSemester', @@ -539,9 +775,25 @@ export const SemestersContextProvider: FC = ({ .catch((err) => console.error(err)), args: { semesterId, courseName }, }); + + if (shouldPushUndo) + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + const semesterUpdated: Semester = { + ...targetSemester, + courses: targetSemester.courses.filter((course) => course.code !== targetCourse.code), + }; + handleAddCourseToSemester(semesterUpdated, targetCourse, false); + }, + }); }; - const handleAddCourseToSemester = (targetSemester: Semester, newCourse: DraggableCourse) => { + const handleAddCourseToSemester = ( + targetSemester: Semester, + newCourse: DraggableCourse, + shouldPushUndo = true, + ) => { // check for duplicate course const isDuplicate = Boolean( targetSemester.courses.find((course) => course.code === newCourse.code), @@ -577,6 +829,14 @@ export const SemestersContextProvider: FC = ({ ), args: { semesterId, courseName }, }); + + if (shouldPushUndo) + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + handleRemoveCourseFromSemester(targetSemester, newCourse, false); + }, + }); }; const handleMoveCourseFromSemesterToSemester = ( @@ -601,30 +861,41 @@ export const SemestersContextProvider: FC = ({ const newSemesterId = destinationSemester.id.toString(); const courseName = courseToMove.code; - dispatchSemesters({ - type: 'moveCourseFromSemesterToSemester', - originSemesterId: oldSemesterId, - destinationSemesterId: newSemesterId, - course: courseToMove, - }); + const mutate = (oldSemesterId: string, newSemesterId: string) => { + dispatchSemesters({ + type: 'moveCourseFromSemesterToSemester', + originSemesterId: oldSemesterId, + destinationSemesterId: newSemesterId, + course: courseToMove, + }); + + addTask({ + func: ({ courseName, newSemesterId, oldSemesterId }) => + toast + .promise( + moveCourse.mutateAsync({ planId, oldSemesterId, newSemesterId, courseName }), + { + pending: 'Moving course ' + courseName + '...', + success: 'Moved course ' + courseName + '!', + error: 'Error while moving ' + courseName, + }, + { + autoClose: 1000, + position: 'bottom-right', + }, + ) + .catch((err) => console.error(err)), + args: { oldSemesterId, newSemesterId, courseName }, + }); + }; - addTask({ - func: ({ courseName, newSemesterId, oldSemesterId }) => - toast - .promise( - moveCourse.mutateAsync({ planId, oldSemesterId, newSemesterId, courseName }), - { - pending: 'Moving course ' + courseName + '...', - success: 'Moved course ' + courseName + '!', - error: 'Error while moving ' + courseName, - }, - { - autoClose: 1000, - position: 'bottom-right', - }, - ) - .catch((err) => console.error(err)), - args: { oldSemesterId, newSemesterId, courseName }, + mutate(oldSemesterId, newSemesterId); + + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + mutate(newSemesterId, oldSemesterId); + }, }); }; @@ -633,20 +904,54 @@ export const SemestersContextProvider: FC = ({ courseName: string, semesterId: string, ) => { + const semester = semesters.find((sem) => sem.id === semesterId); + if (!semester) return; + const course = semester.courses.find((crs) => crs.code === courseName); + if (!course) return; + const oldColor = course.color; dispatchSemesters({ type: 'changeCourseColor', courseCode: courseName, semesterId, color }); addTask({ args: { color, courseName, semesterId }, func: ({ color, courseName, semesterId }) => colorChange.mutateAsync({ color, courseName, semesterId, planId }), }); + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + dispatchSemesters({ + type: 'changeCourseColor', + courseCode: courseName, + semesterId, + color: oldColor, + }); + addTask({ + args: { color: oldColor, courseName, semesterId }, + func: ({ color, courseName, semesterId }) => + colorChange.mutateAsync({ color, courseName, semesterId, planId }), + }); + }, + }); }; const handleSemesterColorChange = (color: keyof typeof tagColors, semesterId: string) => { + const semester = semesters.find((sem) => sem.id === semesterId); + if (!semester) return; + const oldColor = semester.color; dispatchSemesters({ type: 'changeSemesterColor', semesterId, color }); addTask({ args: { color, semesterId }, func: ({ color, semesterId }) => semesterColorChange.mutateAsync({ color, semesterId }), }); + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + dispatchSemesters({ type: 'changeSemesterColor', semesterId, color: oldColor }); + addTask({ + args: { color: oldColor, semesterId }, + func: ({ color, semesterId }) => semesterColorChange.mutateAsync({ color, semesterId }), + }); + }, + }); }; const utils = trpc.useContext(); @@ -666,22 +971,37 @@ export const SemestersContextProvider: FC = ({ const handleAddBypass = ({ planId, requirement }: { planId: string; requirement: string }) => { addBypass.mutateAsync({ planId, requirement }); + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + removeBypass.mutateAsync({ planId, requirement }); + }, + }); }; const handleRemoveBypass = ({ planId, requirement }: { planId: string; requirement: string }) => { removeBypass.mutateAsync({ planId, requirement }); + dispatchUndo({ + type: 'pushUndoStack', + callback: () => { + addBypass.mutateAsync({ planId, requirement }); + }, + }); }; const [filters, setFilters] = useState([]); - const toggleOffAllColorFilters = () => + const toggleOffAllColorFilters = () => { setFilters(filters.filter((filter) => filter.type !== 'color')); + }; - const toggleOffAllYearFilters = () => + const toggleOffAllYearFilters = () => { setFilters(filters.filter((filter) => filter.type !== 'year')); + }; - const toggleOffAllSemesterFilters = () => + const toggleOffAllSemesterFilters = () => { setFilters(filters.filter((filter) => filter.type !== 'semester')); + }; const toggleColorFilter = (color: keyof typeof tagColors) => { const hasFilter = filters.some((filter) => filter.type === 'color' && filter.color === color); @@ -754,6 +1074,7 @@ export const SemestersContextProvider: FC = ({ allSemesters: semesters, filteredSemesters, bypasses: bypasses, + undoStack: [], selectedCourseCount: selectedCourseIds.size, courseIsSelected, handleSelectCourses, @@ -780,6 +1101,7 @@ export const SemestersContextProvider: FC = ({ handleCourseLock, handleSemesterLock, handleCoursePrereqOverride, + undo, }} > {children} diff --git a/src/components/planner/Sidebar/DraggableCourseList.tsx b/src/components/planner/Sidebar/DraggableCourseList.tsx index 36ee10c39..a74fb33e9 100644 --- a/src/components/planner/Sidebar/DraggableCourseList.tsx +++ b/src/components/planner/Sidebar/DraggableCourseList.tsx @@ -12,7 +12,7 @@ export interface DraggableCourseListProps { function DraggableCourseList({ courses, getDragId }: DraggableCourseListProps) { // Add sorting logic here return ( -
+
{courses.length > 0 ? ( courses.map((course, idx) => ( diff --git a/src/components/planner/Sidebar/RequirementsContainer.tsx b/src/components/planner/Sidebar/RequirementsContainer.tsx index 93741be76..b1cb2603e 100644 --- a/src/components/planner/Sidebar/RequirementsContainer.tsx +++ b/src/components/planner/Sidebar/RequirementsContainer.tsx @@ -1,10 +1,10 @@ import ChevronRightIcon from '@mui/icons-material/ChevronRight'; import * as HoverCard from '@radix-ui/react-hover-card'; -import React, { useState } from 'react'; +import { useState, useEffect } from 'react'; import useSearch from '@/components/search/search'; -import { JSONCourse } from '@/data/courses.json'; import { trpc } from '@/utils/trpc'; +import { courses as Course } from 'prisma/generated/platform'; import Accordion from './Accordion'; import { RecursiveRequirement } from './RecursiveRequirement'; @@ -16,7 +16,6 @@ import { CourseRequirement, DegreeRequirement, } from './types'; -import { useSemestersContext } from '../SemesterContext'; import { GetDragIdByCourseAndReq } from '../types'; function RequirementContainerHeader({ @@ -69,7 +68,7 @@ function RequirementContainerHeader({
- + ); @@ -77,7 +76,7 @@ function RequirementContainerHeader({ const getRequirementGroup = ( degreeRequirement: RequirementGroupTypes, - allCourses: JSONCourse[] | undefined, + allCourses: Course[] | undefined, ): { name: string; progress: { value: number; max: number; unit: string }; @@ -200,15 +199,7 @@ const getRequirementGroup = ( } }; -export const ProgressComponent2 = ({ - value, - max, - unit = 'done', -}: { - value: number; - max: number; - unit?: string; -}) => { +export const ProgressComponent2 = ({ value, max }: { value: number; max: number }) => { const heh = `${(value * 100) / max}%`; return ( @@ -269,7 +260,7 @@ export default function RequirementsContainer({ courses, getCourseItemDragId, }: RequirementsContainerProps) { - const [requirementIdx, setRequirementIdx] = React.useState(0); + const [requirementIdx, setRequirementIdx] = useState(0); const q = trpc.courses.publicGetAllCourses.useQuery(undefined, { staleTime: Infinity, @@ -280,7 +271,7 @@ export default function RequirementsContainer({ /** * These hooks manage the carousel state for RequirementsCarousel */ - const [carousel, setCarousel] = React.useState(false); + const [carousel, setCarousel] = useState(false); // Note: this logic hides overflow during sliding animation const [overflow, setOverflow] = useState(false); @@ -290,8 +281,6 @@ export default function RequirementsContainer({ setCarousel(!carousel); } - const { bypasses } = useSemestersContext(); - return ( { + useEffect(() => { updateQuery(''); - }, [degreeRequirement]); + }, [degreeRequirement]); // eslint-disable-line react-hooks/exhaustive-deps // Put filled requirements first const sortedResults = [...results] @@ -410,18 +393,8 @@ function RequirementContainer({ return 0; }) .slice(0, 100); - - const { planId, bypasses, handleAddBypass, handleRemoveBypass } = useSemestersContext(); - - const hasBypass = bypasses.includes(degreeRequirement.metadata.id.toString()); - - const handleUpdateBypass = () => { - hasBypass - ? handleRemoveBypass({ planId, requirement: degreeRequirement.metadata.id.toString() }) - : handleAddBypass({ planId, requirement: degreeRequirement.metadata.id.toString() }); - }; - // Handles logic for adding bypass to requirement + return ( <> @@ -442,9 +415,6 @@ function RequirementContainer({ ); })} - {/* */} ); } diff --git a/src/components/planner/Sidebar/Sidebar.tsx b/src/components/planner/Sidebar/Sidebar.tsx index d66385460..449080316 100644 --- a/src/components/planner/Sidebar/Sidebar.tsx +++ b/src/components/planner/Sidebar/Sidebar.tsx @@ -3,12 +3,6 @@ import { useRef, useState, useMemo, memo } from 'react'; import Skeleton from 'react-loading-skeleton'; import { v4 as uuidv4 } from 'uuid'; -import AccordionSkeleton from './AccordionSkeleton'; -import DraggableCourseList from './DraggableCourseList'; -import { DegreeRequirement } from './types'; -import { Course, DraggableCourse, GetDragIdByCourse } from '../types'; -import useFuse from '../useFuse'; - import Button from '@/components/Button'; import AnalyticsWrapper from '@/components/common/AnalyticsWrapper'; import RequirementsContainer from '@/components/planner/Sidebar/RequirementsContainer'; @@ -17,6 +11,12 @@ import ChevronIcon from '@/icons/ChevronIcon'; import { trpc } from '@/utils/trpc'; import { getSemesterHourFromCourseCode } from '@/utils/utilFunctions'; +import AccordionSkeleton from './AccordionSkeleton'; +import DraggableCourseList from './DraggableCourseList'; +import { DegreeRequirement } from './types'; +import { Course, DraggableCourse, GetDragIdByCourse } from '../types'; +import useFuse from '../useFuse'; + import 'react-loading-skeleton/dist/skeleton.css'; export interface CourseSelectorContainerProps { @@ -36,11 +36,7 @@ function CourseSelectorContainer({ getRequirementDragId, courseDragged, }: CourseSelectorContainerProps) { - const { - data: validationData, - error, - isLoading: isValidationLoading, - } = trpc.validator.degreeValidator.useQuery(planId, { + const { data: validationData, error } = trpc.validator.degreeValidator.useQuery(planId, { // TODO: Fix validator retries. // Validator kept retrying when the "REPORT ERROR" button was clicked on. At some point it should stop retrying. retry: false, @@ -53,7 +49,17 @@ function CourseSelectorContainer({ }, }); - const { data, isLoading } = trpc.courses.publicGetAllCourses.useQuery(); + const validatorError = useMemo( + () => error?.data?.code === 'INTERNAL_SERVER_ERROR', + [error?.data?.code], + ); + + const validatorUnsupportedDegreeError = useMemo( + () => error?.data?.code === 'NOT_FOUND', + [error?.data?.code], + ); + + const { data } = trpc.courses.publicGetAllCourses.useQuery(); const { results, updateQuery } = useFuse({ dataSet: @@ -197,18 +203,31 @@ function CourseSelectorContainer({ )} - {error?.data?.code === 'INTERNAL_SERVER_ERROR' && ( + {validatorError && (
It seems like a screw has gone loose! - +
)} - {validationData && + {validatorUnsupportedDegreeError && ( +
+
+ It seems like your major is no longer supported! Contact us to have it added. + + + +
+
+ )} + + {!validatorError && + !validatorUnsupportedDegreeError && + validationData && validationData.validation.requirements.length > 0 && validationData.validation.requirements.map((req: DegreeRequirement, idx: number) => ( ))} - {!validationData && } + + {!validatorError && !validatorUnsupportedDegreeError && !validationData && ( + + )} +
Warning: This is an unofficial tool not diff --git a/src/components/planner/Tiles/SemesterCourseItem.tsx b/src/components/planner/Tiles/SemesterCourseItem.tsx index ff75af7ab..d51c64ed1 100644 --- a/src/components/planner/Tiles/SemesterCourseItem.tsx +++ b/src/components/planner/Tiles/SemesterCourseItem.tsx @@ -3,6 +3,12 @@ import DragIndicatorIcon from '@mui/icons-material/DragIndicator'; import React, { ComponentPropsWithoutRef, FC, forwardRef, useState, useRef } from 'react'; import Skeleton from 'react-loading-skeleton'; +import Checkbox from '@/components/Checkbox'; +import DotsHorizontalIcon from '@/icons/DotsHorizontalIcon'; +import FilledWarningIcon from '@/icons/FilledWarningIcon'; +import LockIcon from '@/icons/LockIcon'; +import { trpc } from '@/utils/trpc'; + import SemesterCourseItemDropdown from './SemesterCourseItemDropdown'; import CourseInfoHoverCard from '../CourseInfoHoverCard'; import PrereqWarnHoverCard from '../PrereqWarnHoverCard'; @@ -11,12 +17,6 @@ import { DragDataFromSemesterTile, DraggableCourse, Semester } from '../types'; import useGetCourseInfo from '../useGetCourseInfo'; import { tagColors } from '../utils'; -import Checkbox from '@/components/Checkbox'; -import DotsHorizontalIcon from '@/icons/DotsHorizontalIcon'; -import FilledWarningIcon from '@/icons/FilledWarningIcon'; -import LockIcon from '@/icons/LockIcon'; -import { trpc } from '@/utils/trpc'; - import 'react-loading-skeleton/dist/skeleton.css'; export interface SemesterCourseItemProps extends ComponentPropsWithoutRef<'div'> { diff --git a/src/components/planner/Toolbar/Toolbar.tsx b/src/components/planner/Toolbar/Toolbar.tsx index 6660ef270..936f6135a 100644 --- a/src/components/planner/Toolbar/Toolbar.tsx +++ b/src/components/planner/Toolbar/Toolbar.tsx @@ -3,6 +3,13 @@ import { usePDF } from '@react-pdf/renderer'; import Link from 'next/link'; import { FC, useEffect, useState } from 'react'; +import AnalyticsWrapper from '@/components/common/AnalyticsWrapper'; +import DownloadIcon from '@/icons/DownloadIcon'; +import SettingsIcon from '@/icons/SettingsIcon'; +import SwitchVerticalIcon from '@/icons/SwitchVerticalIcon'; +import DeletePlanModal from '@/shared/DeletePlanModal'; +import { trpc } from '@/utils/trpc'; + import EditableMajorTitle from './EditablePlanTitle'; import EditSemestersModal from './EditSemestersModal'; import FilterByDropdown from './FilterByDropdown'; @@ -12,13 +19,6 @@ import DegreePlanPDF from '../DegreePlanPDF/DegreePlanPDF'; import EditableMajor from '../EditableMajor'; import { useSemestersContext } from '../SemesterContext'; -import AnalyticsWrapper from '@/components/common/AnalyticsWrapper'; -import DownloadIcon from '@/icons/DownloadIcon'; -import SettingsIcon from '@/icons/SettingsIcon'; -import SwitchVerticalIcon from '@/icons/SwitchVerticalIcon'; -import DeletePlanModal from '@/shared/DeletePlanModal'; -import { trpc } from '@/utils/trpc'; - export interface ToolbarProps { degreeRequirements: { id: string; major: string }; planId: string; diff --git a/src/components/planner/useFuse.ts b/src/components/planner/useFuse.ts index 48cd355f9..c2a0c8ef1 100644 --- a/src/components/planner/useFuse.ts +++ b/src/components/planner/useFuse.ts @@ -21,7 +21,7 @@ export default function useFuse({ dataSet, keys, threshold = 0.4 }: IUseSearc }, [dataSet, keys, threshold]); const updateQuery = (query: string) => { - setResults(fuse.search(query, { limit: 5 }).map((fuseResult) => fuseResult.item)); + setResults(fuse.search(query, { limit: 100 }).map((fuseResult) => fuseResult.item)); }; /* const results = useMemo(() => { diff --git a/src/components/planner/useGetCourseInfo.ts b/src/components/planner/useGetCourseInfo.ts index da700cfc3..135339324 100644 --- a/src/components/planner/useGetCourseInfo.ts +++ b/src/components/planner/useGetCourseInfo.ts @@ -52,11 +52,11 @@ const getPrereqs = ( if (cNum.subject_prefix + ' ' + cNum.course_number === courseCode) { title = cNum.title; - (cNum.prerequisites as Record).options.map((elem: any) => { + cNum.prerequisites?.options.map((elem) => { if (elem.type !== 'course' && elem.type !== 'other' && elem.options) { - elem.options.map((elem2: any) => { + elem.options.map((elem2) => { if (elem2.type !== 'course' && elem2.type !== 'other') { - elem2.options?.map((elem3: any) => { + elem2.options?.map((elem3) => { courseData?.map((elem4) => { if (elem4.id === elem3.class_reference) { prereqs.push(elem4.subject_prefix + ' ' + elem4.course_number); @@ -64,7 +64,7 @@ const getPrereqs = ( }); }); } else if (elem2.type === 'other') { - prereqs.push(elem2.description); + prereqs.push(elem2.description || ''); } else { courseData?.map((elem4) => { if (elem4.id === elem2.class_reference) { @@ -74,7 +74,7 @@ const getPrereqs = ( } }); } else if (elem.type === 'other') { - prereqs.push(elem.description); + prereqs.push(elem.description || ''); } else { courseData?.map((elem4) => { if (elem4.id === elem.class_reference) { @@ -83,11 +83,11 @@ const getPrereqs = ( }); } }); - (cNum.corequisites as Record).options.map((elem: any) => { + cNum.corequisites?.options.map((elem) => { if (elem.type !== 'course' && elem.type !== 'other' && elem.options) { - elem.options.map((elem2: any) => { + elem.options.map((elem2) => { if (elem2.type !== 'course' && elem2.type !== 'other') { - elem2.options?.map((elem3: any) => { + elem2.options?.map((elem3) => { courseData?.map((elem4) => { if (elem4.id === elem3.class_reference) { coreqs.push(elem4.subject_prefix + ' ' + elem4.course_number); @@ -95,7 +95,7 @@ const getPrereqs = ( }); }); } else if (elem2.type === 'other') { - coreqs.push(elem2.description); + coreqs.push(elem2.description || ''); } else { courseData?.map((elem4) => { if (elem4.id === elem2.class_reference) { @@ -105,7 +105,7 @@ const getPrereqs = ( } }); } else if (elem.type === 'other') { - coreqs.push(elem.description); + coreqs.push(elem.description || ''); } else { courseData?.map((elem4) => { if (elem4.id === elem.class_reference) { @@ -114,11 +114,11 @@ const getPrereqs = ( }); } }); - (cNum.co_or_pre_requisites as Record).options.map((elem: any) => { + cNum.co_or_pre_requisites?.options.map((elem) => { if (elem.type !== 'course' && elem.type !== 'other' && elem.options) { - elem.options.map((elem2: any) => { + elem.options.map((elem2) => { if (elem2.type !== 'course' && elem2.type !== 'other') { - elem2.options?.map((elem3: any) => { + elem2.options?.map((elem3) => { courseData?.map((elem4) => { if (elem4.id === elem3.class_reference) { co_or_pre.push(elem4.subject_prefix + ' ' + elem4.course_number); @@ -126,7 +126,7 @@ const getPrereqs = ( }); }); } else if (elem2.type === 'other') { - co_or_pre.push(elem2.description); + co_or_pre.push(elem2.description || ''); } else { courseData?.map((elem4) => { if (elem4.id === elem2.class_reference) { @@ -136,7 +136,7 @@ const getPrereqs = ( } }); } else if (elem.type === 'other') { - co_or_pre.push(elem.description); + co_or_pre.push(elem.description || ''); } else { courseData?.map((elem4) => { if (elem4.id === elem.class_reference) { diff --git a/src/components/template/CustomPlan.tsx b/src/components/template/CustomPlan.tsx index a208be326..a7ce8a34b 100644 --- a/src/components/template/CustomPlan.tsx +++ b/src/components/template/CustomPlan.tsx @@ -1,9 +1,11 @@ import { SemesterType } from '@prisma/client'; +import Link from 'next/link'; import { useRouter } from 'next/router'; import { useEffect, useRef, useState } from 'react'; import AutoCompleteMajor from '@/components/AutoCompleteMajor'; import courseCode from '@/data/courseCode.json'; +import useMajors from '@/shared/useMajors'; import { UnwrapArray } from '@/types/util-types'; import { RouterInputs, trpc } from '@/utils/trpc'; import { SemesterCode } from 'prisma/utils'; @@ -14,8 +16,6 @@ import ErrorMessage from '../common/ErrorMessage'; import useSearch from '../search/search'; import type { PDFDocumentProxy } from 'pdfjs-dist'; -import useMajors from '@/shared/useMajors'; -import Link from 'next/link'; type TakenCourse = UnwrapArray; diff --git a/src/components/template/NewPlan.tsx b/src/components/template/NewPlan.tsx index 5f65954d8..9f1f56b96 100644 --- a/src/components/template/NewPlan.tsx +++ b/src/components/template/NewPlan.tsx @@ -2,10 +2,8 @@ import { useRouter } from 'next/router'; import { useState } from 'react'; import AutoCompleteMajor from '@/components/AutoCompleteMajor'; - -import { trpc } from '@/utils/trpc'; - import useMajors from '@/shared/useMajors'; +import { trpc } from '@/utils/trpc'; import { Page } from './Page'; import { ButtonProps } from '../Button'; diff --git a/src/env/schema.mjs b/src/env/schema.mjs index 69599aa3d..250ceb214 100644 --- a/src/env/schema.mjs +++ b/src/env/schema.mjs @@ -39,10 +39,10 @@ export const serverSchema = z.object({ * To expose them to the client, prefix them with `NEXT_PUBLIC_`. */ export const clientSchema = z.object({ + NEXT_PUBLIC_NODE_ENV: z.enum(['development', 'test', 'production']), NEXT_PUBLIC_UMAMI_URL: z.string(), NEXT_PUBLIC_UMAMI_WEBSITE_ID: z.string(), NEXT_PUBLIC_VALIDATOR: z.string(), - // NEXT_PUBLIC_BAR: z.string(), }); /** @@ -52,8 +52,8 @@ export const clientSchema = z.object({ * @type {{ [k in keyof z.infer]: z.infer[k] | undefined }} */ export const clientEnv = { + NEXT_PUBLIC_NODE_ENV: process.env.NODE_ENV, NEXT_PUBLIC_UMAMI_URL: process.env.NEXT_PUBLIC_UMAMI_URL, NEXT_PUBLIC_UMAMI_WEBSITE_ID: process.env.NEXT_PUBLIC_UMAMI_WEBSITE_ID, NEXT_PUBLIC_VALIDATOR: process.env.NEXT_PUBLIC_VALIDATOR, - // NEXT_PUBLIC_BAR: process.env.NEXT_PUBLIC_BAR, }; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index a9a052f7f..2702a2c5a 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -8,9 +8,9 @@ import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { Analytics } from '@vercel/analytics/react'; import { AnimateSharedLayout } from 'framer-motion'; import { type AppType, AppProps } from 'next/app'; -// import type { AppProps } from 'next/app'; import Head from 'next/head'; import { Router } from 'next/router'; +import Script from 'next/script'; import { type Session } from 'next-auth'; import { SessionProvider, useSession } from 'next-auth/react'; import NProgress from 'nprogress'; //nprogress module @@ -18,15 +18,20 @@ import { FC, useEffect, useState } from 'react'; import { ToastContainer } from 'react-toastify'; import Layout from '@/components/home/Layout'; +import { env } from '@/env/client.mjs'; +import ScreenSizeWarnModal from '@/shared/ScreenSizeWarnModal'; import 'nprogress/nprogress.css'; //styles of nprogress +import { getBaseUrl, trpc } from '../utils/trpc'; + +import type { NextComponentType } from 'next'; //Import Component type + // Binding events NProgress.configure({ showSpinner: false }); Router.events.on('routeChangeStart', () => NProgress.start()); Router.events.on('routeChangeComplete', () => NProgress.done()); Router.events.on('routeChangeError', () => NProgress.done()); -import { getBaseUrl, trpc } from '../utils/trpc'; const theme = createTheme({ typography: { allVariants: { @@ -50,12 +55,6 @@ const theme = createTheme({ ].join(','), }, }); - -import { env } from '@/env/client.mjs'; -import ScreenSizeWarnModal from '@/shared/ScreenSizeWarnModal'; - -import type { NextComponentType } from 'next'; //Import Component type - //Add custom appProp type then use union to add it type CustomAppProps = AppProps & { Component: NextComponentType & { auth?: boolean }; // add auth type @@ -116,6 +115,20 @@ const NebulaApp: AppType<{ session: Session | null }> = ({ /> )} + {env.NEXT_PUBLIC_NODE_ENV === 'production' && ( + <> + + + )} setHasWarned(true)} diff --git a/src/server/trpc/router/courseCache.ts b/src/server/trpc/router/courseCache.ts new file mode 100644 index 000000000..26100155e --- /dev/null +++ b/src/server/trpc/router/courseCache.ts @@ -0,0 +1,46 @@ +import { Mutex } from 'async-mutex'; + +import { platformPrisma } from '@/server/db/platform_client'; +import { courses as Course } from 'prisma/generated/platform'; + +class CourseCacheError extends Error { + name = 'CourseCacheError'; +} + +class CourseCache { + private coursesByYear: Map = new Map(); + private mutex = new Mutex(); + + public async getCourses(year: number) { + const formattedYear = year.toString().slice(-2); + // Acquire lock before success check so if another request is fetching, we don't fetch again. + const release = await this.mutex.acquire(); + if (this.coursesByYear.has(year)) { + release(); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + return this.coursesByYear.get(year)!; // Must exist at this point + } + + console.info(`Fetching courses for year ${year}...`); + return await platformPrisma.courses + .findMany({ + where: { + catalog_year: formattedYear, + }, + }) + .then((courses) => { + this.coursesByYear.set(year, courses); + return courses; + }) + .catch((err) => { + const message = `Error fetching courses for year ${year}: ${err}`; + console.error(message); + throw new CourseCacheError(message, { cause: err }); + }) + .finally(release); + } +} + +const courseCache = new CourseCache(); + +export { courseCache }; diff --git a/src/server/trpc/router/courses.ts b/src/server/trpc/router/courses.ts index 1305e6542..d3af6eb85 100644 --- a/src/server/trpc/router/courses.ts +++ b/src/server/trpc/router/courses.ts @@ -1,12 +1,11 @@ import { Prisma } from '@prisma/client'; -import courses, { JSONCourse } from '@data/courses.json'; - +import { courseCache } from './courseCache'; import { router, publicProcedure } from '../trpc'; export const coursesRouter = router({ - publicGetAllCourses: publicProcedure.query(async ({ ctx }) => { - return courses as JSONCourse[]; + publicGetAllCourses: publicProcedure.query(async () => { + return await courseCache.getCourses(new Date().getFullYear()); }), publicGetSanitizedCourses: publicProcedure.query(async ({ ctx }) => { const courses = await ctx.platformPrisma.courses.findMany({ diff --git a/src/server/trpc/router/errors.ts b/src/server/trpc/router/errors.ts new file mode 100644 index 000000000..4cbe5f7e2 --- /dev/null +++ b/src/server/trpc/router/errors.ts @@ -0,0 +1,14 @@ +// Generic error thrown from any validator (external) errors. +export class DegreeValidationError extends Error { + constructor(message: string) { + super(message); + this.name = 'DegreeValidationError'; + } +} + +// Error thrown when validator (external) indicates that degree is not found. +export class DegreeNotFound extends DegreeValidationError { + constructor(message: string) { + super(message); + } +} diff --git a/src/server/trpc/router/plan.ts b/src/server/trpc/router/plan.ts index 443d90eec..18279d88c 100644 --- a/src/server/trpc/router/plan.ts +++ b/src/server/trpc/router/plan.ts @@ -290,6 +290,28 @@ export const planRouter = router({ return false; } }), + massInsertCourses: protectedProcedure + .input( + z.array( + z.object({ + id: z.string(), + code: z.string(), + color: z.string().default(''), + semesterId: z.string(), + locked: z.boolean(), + prereqOverriden: z.boolean(), + }), + ), + ) + .mutation(async ({ ctx, input }) => { + try { + await ctx.prisma.course.createMany({ data: input }); + return true; + } catch (error) { + console.error(error); + return false; + } + }), massDeleteCourses: protectedProcedure .input(z.object({ courseIds: z.array(z.string()) })) .mutation(async ({ ctx, input }) => { diff --git a/src/server/trpc/router/validator.ts b/src/server/trpc/router/validator.ts index cbb474df8..77b49326b 100644 --- a/src/server/trpc/router/validator.ts +++ b/src/server/trpc/router/validator.ts @@ -3,8 +3,10 @@ import { TRPCError } from '@trpc/server'; import { z } from 'zod'; import { env } from '@/env/server.mjs'; -import courses, { JSONCourse } from '@data/courses.json'; +import { courses as PlatformCourse } from 'prisma/generated/platform'; +import { courseCache } from './courseCache'; +import { DegreeNotFound, DegreeValidationError } from './errors'; import { protectedProcedure, router } from '../trpc'; type PlanData = { @@ -46,7 +48,13 @@ export const validatorRouter = router({ throw new TRPCError({ code: 'FORBIDDEN' }); } - const coursesFromApi: JSONCourse[] = courses; + let year = new Date().getFullYear(); // If plan has no semesters, default to current year. + if (planData.semesters.length > 0) { + // If plan has semesters, default to first semester's year. + year = Math.min(...planData.semesters.map((sem) => sem.year)); + } + + const coursesFromAPI: PlatformCourse[] = await courseCache.getCourses(year); /* sanitizing data from API db. * TODO: Fix this later somehow */ @@ -60,13 +68,16 @@ export const validatorRouter = router({ } >(); - for (const course of coursesFromApi) { + for (const course of coursesFromAPI) { courseMapWithCodeKey.set(`${course.subject_prefix} ${course.course_number}`, { prereqs: course.prerequisites, coreqs: course.corequisites, co_or_pre_requisites: course.co_or_pre_requisites, }); - courseMapWithIdKey.set(course.id, `${course.subject_prefix} ${course.course_number}`); + courseMapWithIdKey.set( + course.internal_course_number, + `${course.subject_prefix} ${course.course_number}`, + ); } /* Hash to store pre req data. @@ -103,7 +114,7 @@ export const validatorRouter = router({ ): Array<[Array, number]> => { const prereqNotMet: Array<[Array, number]> = []; let count = 0; - if (requirements.options.length === 0) { + if (!requirements || requirements.options.length === 0) { return []; } const temp: [Array, number] = [[], 0]; @@ -151,7 +162,7 @@ export const validatorRouter = router({ ): Array<[Array, number]> => { const coreqNotMet: Array<[Array, number]> = []; let count = 0; - if (requirements.options.length === 0) { + if (!requirements || requirements.options.length === 0) { return []; } const temp: [Array, number] = [[], 0]; @@ -200,7 +211,7 @@ export const validatorRouter = router({ ): Array<[Array, number]> => { const coreqNotMet: Array<[Array, number]> = []; let count = 0; - if (requirements.options.length === 0) { + if (!requirements || requirements.options.length === 0) { return []; } const temp: [Array, number] = [[], 0]; @@ -370,36 +381,42 @@ export const validatorRouter = router({ const body = { courses: [...semestersWithCourses.flatMap((s) => s.courses), ...validTransferCredits], requirements: { + year: 2022, majors: [degreeRequirements.major], minors: [], }, bypasses, }; - const validationData = await fetch(`${env.NEXT_PUBLIC_VALIDATOR}/validate`, { + const res = await fetch(`${env.NEXT_PUBLIC_VALIDATOR}/validate`, { method: 'POST', body: JSON.stringify(body), headers: { 'content-type': 'application/json', }, - }) - .then(async (res) => { - if (!res.ok) { - const errorMsg = await res.json(); - throw new Error(`validator fetch failed with status ${res.status}: ${errorMsg.error}.`); - } - return res.json(); - }) - .catch((err) => { - const errorMessage = `Validator error: ${err.message}`; - console.error('Validator error', err); + }); + + if (!res.ok) { + const errorMsg = await res.json(); + if (res.status == 404) { throw new TRPCError({ - code: 'INTERNAL_SERVER_ERROR', - cause: err, - message: errorMessage, + code: 'NOT_FOUND', + message: errorMsg.error, + cause: new DegreeNotFound(errorMsg), }); + } + + const error = new DegreeValidationError( + `Validator fetch failed with stats: ${res.status}, err: ${errorMsg}`, + ); + throw new TRPCError({ + code: 'INTERNAL_SERVER_ERROR', + message: error.message, + cause: error, }); + } + const validationData = await res.json(); return { plan: planData, validation: validationData, bypasses }; }), }); diff --git a/src/shared/useMajors.ts b/src/shared/useMajors.ts index 93fb8925a..729651759 100644 --- a/src/shared/useMajors.ts +++ b/src/shared/useMajors.ts @@ -10,9 +10,7 @@ const useMajors = () => { }) .then((res) => res.json()) .then((data) => { - setMajors( - data['degree_plans'].map((degree: { display_name: string }) => degree['display_name']), - ); + setMajors(data['degree_plans']); }) .catch((error) => { console.error('An error occurred while trying to load majors:', error); diff --git a/validator/.python-version b/validator/.python-version index c8cfe3959..2c0733315 100644 --- a/validator/.python-version +++ b/validator/.python-version @@ -1 +1 @@ -3.10 +3.11 diff --git a/validator/api.py b/validator/api.py index a255eeab0..685e8dd5f 100644 --- a/validator/api.py +++ b/validator/api.py @@ -1,9 +1,15 @@ import json from glob import glob from flask import Flask, Response, request, make_response +from http import HTTPStatus from flask_cors import CORS -from degree_solver import BypassInput, DegreeRequirementsInput, DegreeRequirementsSolver +from degree_solver import ( + BypassInput, + DegreeRequirementsInput, + DegreeRequirementsSolver, + DegreeNotFoundException, +) class APIError(Exception): @@ -13,12 +19,12 @@ def __init__(self, message: str, http_response_code: int = 400) -> None: super().__init__(self.message) -# Load the list of degree plans that we support along with their json data -plans = [] -for fname in glob("./degree_data/*.json"): +# Load the list of degree plans that we support +plans: set[str] = set() +for fname in glob("./degree_data/*/*.json"): with open(fname, "r") as f: data = json.load(f) - plans.append({"display_name": data["display_name"], "id": data["id"]}) + plans.add(data["display_name"]) # Instantiate flask app and ratelimiter @@ -41,25 +47,41 @@ def get_degree_plans() -> Response: # Returns a list of degree plans that validator supports. This is just a list of the display names of all the JSON # plans we have. return make_response( - {"message": f"Supported degree plans.", "degree_plans": plans}, 200 + {"message": f"Supported degree plans.", "degree_plans": list(plans)}, 200 ) @app.route("/validate", methods=["POST"]) -def test_validate() -> Response: +def validate() -> Response: try: j = request.get_json() - if not j: - raise APIError("bad request", 400) + if ( + not j + or not "courses" in j + or not "bypasses" in j + or not "requirements" in j + or not "majors" in j["requirements"] + or not "minors" in j["requirements"] + ): + raise APIError("bad request", HTTPStatus.BAD_REQUEST) + + for major in j["requirements"]["majors"]: + if not major in plans: + raise APIError("unsupported degree plan", HTTPStatus.NOT_FOUND) courses: list[str] = j["courses"] - rawReqs = j["requirements"] - requirements = DegreeRequirementsInput(rawReqs["majors"], rawReqs["minors"], []) - rawBypasses = j["bypasses"] - bypasses = BypassInput([], {rawReqs["majors"][0]: [i for i in rawBypasses]}) - - print(bypasses) - solver = DegreeRequirementsSolver(courses, requirements, bypasses) + year = j["requirements"]["year"] + majors = j["requirements"]["majors"] + minors = j["requirements"]["minors"] + raw_bypasses = j["bypasses"] + + requirements = DegreeRequirementsInput(year, majors, minors, []) + bypasses = BypassInput([], {majors[0]: [i for i in raw_bypasses]}) + + try: + solver = DegreeRequirementsSolver(courses, requirements, bypasses) + except DegreeNotFoundException: + raise APIError("Degree plan not found!", HTTPStatus.NOT_FOUND) solver.solve() return make_response(solver.to_json(), 200) @@ -78,7 +100,7 @@ def test_validate() -> Response: "message": "Error in validate-degree-plan", "error": str(e), }, - 500, + HTTPStatus.BAD_REQUEST, ) diff --git a/validator/degree_data/Accounting(BS).json b/validator/degree_data/2022/Accounting(BS).json similarity index 100% rename from validator/degree_data/Accounting(BS).json rename to validator/degree_data/2022/Accounting(BS).json diff --git a/validator/degree_data/Biomedical Engineering(BS).json b/validator/degree_data/2022/Biomedical Engineering(BS).json similarity index 100% rename from validator/degree_data/Biomedical Engineering(BS).json rename to validator/degree_data/2022/Biomedical Engineering(BS).json diff --git a/validator/degree_data/Business Administration Business Economics Concentration(BS).json b/validator/degree_data/2022/Business Administration Business Economics Concentration(BS).json similarity index 100% rename from validator/degree_data/Business Administration Business Economics Concentration(BS).json rename to validator/degree_data/2022/Business Administration Business Economics Concentration(BS).json diff --git a/validator/degree_data/Business Administration Energy Management Concentration(BS).json b/validator/degree_data/2022/Business Administration Energy Management Concentration(BS).json similarity index 100% rename from validator/degree_data/Business Administration Energy Management Concentration(BS).json rename to validator/degree_data/2022/Business Administration Energy Management Concentration(BS).json diff --git a/validator/degree_data/Business Administration Real Estate Management Concentration(BS).json b/validator/degree_data/2022/Business Administration Real Estate Management Concentration(BS).json similarity index 100% rename from validator/degree_data/Business Administration Real Estate Management Concentration(BS).json rename to validator/degree_data/2022/Business Administration Real Estate Management Concentration(BS).json diff --git a/validator/degree_data/Business Administration Risk Management and Insurance Concentration(BS).json b/validator/degree_data/2022/Business Administration Risk Management and Insurance Concentration(BS).json similarity index 100% rename from validator/degree_data/Business Administration Risk Management and Insurance Concentration(BS).json rename to validator/degree_data/2022/Business Administration Risk Management and Insurance Concentration(BS).json diff --git a/validator/degree_data/Business Administration Sales Concentration(BS).json b/validator/degree_data/2022/Business Administration Sales Concentration(BS).json similarity index 100% rename from validator/degree_data/Business Administration Sales Concentration(BS).json rename to validator/degree_data/2022/Business Administration Sales Concentration(BS).json diff --git a/validator/degree_data/Computer Engineering(BS).json b/validator/degree_data/2022/Computer Engineering(BS).json similarity index 100% rename from validator/degree_data/Computer Engineering(BS).json rename to validator/degree_data/2022/Computer Engineering(BS).json diff --git a/validator/degree_data/Computer Science(BS).json b/validator/degree_data/2022/Computer Science(BS).json similarity index 100% rename from validator/degree_data/Computer Science(BS).json rename to validator/degree_data/2022/Computer Science(BS).json diff --git a/validator/degree_data/Electrical Engineering(BS).json b/validator/degree_data/2022/Electrical Engineering(BS).json similarity index 100% rename from validator/degree_data/Electrical Engineering(BS).json rename to validator/degree_data/2022/Electrical Engineering(BS).json diff --git a/validator/degree_data/Finance(BS).json b/validator/degree_data/2022/Finance(BS).json similarity index 100% rename from validator/degree_data/Finance(BS).json rename to validator/degree_data/2022/Finance(BS).json diff --git a/validator/degree_data/Global Business(BS).json b/validator/degree_data/2022/Global Business(BS).json similarity index 100% rename from validator/degree_data/Global Business(BS).json rename to validator/degree_data/2022/Global Business(BS).json diff --git a/validator/degree_data/Healthcare Management(BS).json b/validator/degree_data/2022/Healthcare Management(BS).json similarity index 100% rename from validator/degree_data/Healthcare Management(BS).json rename to validator/degree_data/2022/Healthcare Management(BS).json diff --git a/validator/degree_data/Information Technology And Systems(BS).json b/validator/degree_data/2022/Information Technology And Systems(BS).json similarity index 100% rename from validator/degree_data/Information Technology And Systems(BS).json rename to validator/degree_data/2022/Information Technology And Systems(BS).json diff --git a/validator/degree_data/Marketing(BS).json b/validator/degree_data/2022/Marketing(BS).json similarity index 100% rename from validator/degree_data/Marketing(BS).json rename to validator/degree_data/2022/Marketing(BS).json diff --git a/validator/degree_data/Mechanical Engineering(BS).json b/validator/degree_data/2022/Mechanical Engineering(BS).json similarity index 72% rename from validator/degree_data/Mechanical Engineering(BS).json rename to validator/degree_data/2022/Mechanical Engineering(BS).json index eeaf46175..4d504dfec 100644 --- a/validator/degree_data/Mechanical Engineering(BS).json +++ b/validator/degree_data/2022/Mechanical Engineering(BS).json @@ -1,5 +1,5 @@ { - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ecs/electrical-engineering", + "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ecs/mechanical-engineering", "minimum_credit_hours": 128, "school": "Erik Jonsson School of Engineering and Computer Science", "subtype": "Major", @@ -11,133 +11,133 @@ "matcher": "AndRequirement", "metadata": { "name": "Major Preparatory Courses", - "id": "Electrical Engineering (BSEE)-0" + "id": "Mechanical Engineering (BS)-0" }, "requirements": [ { "matcher": "CourseRequirement", "course": "CHEM 1111", "metadata": { - "id": "Electrical Engineering (BSEE)-1" + "id": "Mechanical Engineering (BS)-1" } }, { "matcher": "CourseRequirement", "course": "CHEM 1311", "metadata": { - "id": "Electrical Engineering (BSEE)-2" + "id": "Mechanical Engineering (BS)-2" } }, { "matcher": "CourseRequirement", "course": "CS 1325", "metadata": { - "id": "Electrical Engineering (BSEE)-3" + "id": "Mechanical Engineering (BS)-3" } }, { "matcher": "CourseRequirement", "course": "ECS 1100", "metadata": { - "id": "Electrical Engineering (BSEE)-4" + "id": "Mechanical Engineering (BS)-4" } }, { "matcher": "CourseRequirement", "course": "MATH 2417", "metadata": { - "id": "Electrical Engineering (BSEE)-5" + "id": "Mechanical Engineering (BS)-5" } }, { "matcher": "CourseRequirement", "course": "MATH 2419", "metadata": { - "id": "Electrical Engineering (BSEE)-6" + "id": "Mechanical Engineering (BS)-6" } }, { "matcher": "CourseRequirement", "course": "MATH 2420", "metadata": { - "id": "Electrical Engineering (BSEE)-7" + "id": "Mechanical Engineering (BS)-7" } }, { "matcher": "CourseRequirement", "course": "MECH 1100", "metadata": { - "id": "Electrical Engineering (BSEE)-8" + "id": "Mechanical Engineering (BS)-8" } }, { "matcher": "CourseRequirement", "course": "MECH 1208", "metadata": { - "id": "Electrical Engineering (BSEE)-9" + "id": "Mechanical Engineering (BS)-9" } }, { "matcher": "CourseRequirement", "course": "MECH 2120", "metadata": { - "id": "Electrical Engineering (BSEE)-10" + "id": "Mechanical Engineering (BS)-10" } }, { "matcher": "CourseRequirement", "course": "ENGR 2300", "metadata": { - "id": "Electrical Engineering (BSEE)-11" + "id": "Mechanical Engineering (BS)-11" } }, { "matcher": "CourseRequirement", "course": "MECH 2310", "metadata": { - "id": "Electrical Engineering (BSEE)-12" + "id": "Mechanical Engineering (BS)-12" } }, { "matcher": "CourseRequirement", "course": "MECH 2320", "metadata": { - "id": "Electrical Engineering (BSEE)-13" + "id": "Mechanical Engineering (BS)-13" } }, { "matcher": "CourseRequirement", "course": "MECH 2330", "metadata": { - "id": "Electrical Engineering (BSEE)-14" + "id": "Mechanical Engineering (BS)-14" } }, { "matcher": "CourseRequirement", "course": "PHYS 2125", "metadata": { - "id": "Electrical Engineering (BSEE)-15" + "id": "Mechanical Engineering (BS)-15" } }, { "matcher": "CourseRequirement", "course": "PHYS 2126", "metadata": { - "id": "Electrical Engineering (BSEE)-16" + "id": "Mechanical Engineering (BS)-16" } }, { "matcher": "CourseRequirement", "course": "PHYS 2325", "metadata": { - "id": "Electrical Engineering (BSEE)-17" + "id": "Mechanical Engineering (BS)-17" } }, { "matcher": "CourseRequirement", "course": "PHYS 2326", "metadata": { - "id": "Electrical Engineering (BSEE)-18" + "id": "Mechanical Engineering (BS)-18" } } ] @@ -146,133 +146,133 @@ "matcher": "AndRequirement", "metadata": { "name": "Major Core Courses", - "id": "Electrical Engineering (BSEE)-19" + "id": "Mechanical Engineering (BS)-19" }, "requirements": [ { "matcher": "CourseRequirement", "course": "ECS 3390", "metadata": { - "id": "Electrical Engineering (BSEE)-20" + "id": "Mechanical Engineering (BS)-20" } }, { "matcher": "CourseRequirement", "course": "MECH 3105", "metadata": { - "id": "Electrical Engineering (BSEE)-21" + "id": "Mechanical Engineering (BS)-21" } }, { "matcher": "CourseRequirement", "course": "MECH 3115", "metadata": { - "id": "Electrical Engineering (BSEE)-22" + "id": "Mechanical Engineering (BS)-22" } }, { "matcher": "CourseRequirement", "course": "MECH 3120", "metadata": { - "id": "Electrical Engineering (BSEE)-23" + "id": "Mechanical Engineering (BS)-23" } }, { "matcher": "CourseRequirement", "course": "MECH 3150", "metadata": { - "id": "Electrical Engineering (BSEE)-24" + "id": "Mechanical Engineering (BS)-24" } }, { "matcher": "CourseRequirement", "course": "ENGR 3300", "metadata": { - "id": "Electrical Engineering (BSEE)-25" + "id": "Mechanical Engineering (BS)-25" } }, { "matcher": "CourseRequirement", "course": "MECH 3305", "metadata": { - "id": "Electrical Engineering (BSEE)-26" + "id": "Mechanical Engineering (BS)-26" } }, { "matcher": "CourseRequirement", "course": "MECH 3310", "metadata": { - "id": "Electrical Engineering (BSEE)-27" + "id": "Mechanical Engineering (BS)-27" } }, { "matcher": "CourseRequirement", "course": "MECH 3315", "metadata": { - "id": "Electrical Engineering (BSEE)-28" + "id": "Mechanical Engineering (BS)-28" } }, { "matcher": "CourseRequirement", "course": "MECH 3320", "metadata": { - "id": "Electrical Engineering (BSEE)-29" + "id": "Mechanical Engineering (BS)-29" } }, { "matcher": "CourseRequirement", "course": "MECH 3340", "metadata": { - "id": "Electrical Engineering (BSEE)-30" + "id": "Mechanical Engineering (BS)-30" } }, { "matcher": "CourseRequirement", "course": "ENGR 3341", "metadata": { - "id": "Electrical Engineering (BSEE)-31" + "id": "Mechanical Engineering (BS)-31" } }, { "matcher": "CourseRequirement", "course": "MECH 3350", "metadata": { - "id": "Electrical Engineering (BSEE)-32" + "id": "Mechanical Engineering (BS)-32" } }, { "matcher": "CourseRequirement", "course": "MECH 3351", "metadata": { - "id": "Electrical Engineering (BSEE)-33" + "id": "Mechanical Engineering (BS)-33" } }, { "matcher": "CourseRequirement", "course": "MECH 4110", "metadata": { - "id": "Electrical Engineering (BSEE)-34" + "id": "Mechanical Engineering (BS)-34" } }, { "matcher": "CourseRequirement", "course": "MECH 4310", "metadata": { - "id": "Electrical Engineering (BSEE)-35" + "id": "Mechanical Engineering (BS)-35" } }, { "matcher": "CourseRequirement", "course": "MECH 4381", "metadata": { - "id": "Electrical Engineering (BSEE)-36" + "id": "Mechanical Engineering (BS)-36" } }, { "matcher": "CourseRequirement", "course": "MECH 4382", "metadata": { - "id": "Electrical Engineering (BSEE)-37" + "id": "Mechanical Engineering (BS)-37" } } ] @@ -282,140 +282,140 @@ "required_hours": 12, "metadata": { "name": "Perscribed Electives", - "id": "Electrical Engineering (BSEE)-38" + "id": "Mechanical Engineering (BS)-38" }, "requirements": [ { "matcher": "CourseRequirement", "course": "MECH 2340", "metadata": { - "id": "Electrical Engineering (BSEE)-39" + "id": "Mechanical Engineering (BS)-39" } }, { "matcher": "CourseRequirement", "course": "MECH 3360", "metadata": { - "id": "Electrical Engineering (BSEE)-40" + "id": "Mechanical Engineering (BS)-40" } }, { "matcher": "CourseRequirement", "course": "MECH 3370", "metadata": { - "id": "Electrical Engineering (BSEE)-41" + "id": "Mechanical Engineering (BS)-41" } }, { "matcher": "CourseRequirement", "course": "MECH 3380", "metadata": { - "id": "Electrical Engineering (BSEE)-42" + "id": "Mechanical Engineering (BS)-42" } }, { "matcher": "CourseRequirement", "course": "MECH 3381", "metadata": { - "id": "Electrical Engineering (BSEE)-43" + "id": "Mechanical Engineering (BS)-43" } }, { "matcher": "CourseRequirement", "course": "MECH 3V95", "metadata": { - "id": "Electrical Engineering (BSEE)-44" + "id": "Mechanical Engineering (BS)-44" } }, { "matcher": "CourseRequirement", "course": "MECH 4301", "metadata": { - "id": "Electrical Engineering (BSEE)-45" + "id": "Mechanical Engineering (BS)-45" } }, { "matcher": "CourseRequirement", "course": "MECH 4320", "metadata": { - "id": "Electrical Engineering (BSEE)-46" + "id": "Mechanical Engineering (BS)-46" } }, { "matcher": "CourseRequirement", "course": "MECH 4330", "metadata": { - "id": "Electrical Engineering (BSEE)-47" + "id": "Mechanical Engineering (BS)-47" } }, { "matcher": "CourseRequirement", "course": "MECH 4340", "metadata": { - "id": "Electrical Engineering (BSEE)-48" + "id": "Mechanical Engineering (BS)-48" } }, { "matcher": "CourseRequirement", "course": "MECH 4342", "metadata": { - "id": "Electrical Engineering (BSEE)-49" + "id": "Mechanical Engineering (BS)-49" } }, { "matcher": "CourseRequirement", "course": "MECH 4360", "metadata": { - "id": "Electrical Engineering (BSEE)-50" + "id": "Mechanical Engineering (BS)-50" } }, { "matcher": "CourseRequirement", "course": "MECH 4365", "metadata": { - "id": "Electrical Engineering (BSEE)-51" + "id": "Mechanical Engineering (BS)-51" } }, { "matcher": "CourseRequirement", "course": "MECH 4370", "metadata": { - "id": "Electrical Engineering (BSEE)-52" + "id": "Mechanical Engineering (BS)-52" } }, { "matcher": "CourseRequirement", "course": "MECH 4380", "metadata": { - "id": "Electrical Engineering (BSEE)-53" + "id": "Mechanical Engineering (BS)-53" } }, { "matcher": "CourseRequirement", "course": "MECH 4V95", "metadata": { - "id": "Electrical Engineering (BSEE)-54" + "id": "Mechanical Engineering (BS)-54" } }, { "matcher": "CourseRequirement", "course": "ENTP 3301", "metadata": { - "id": "Electrical Engineering (BSEE)-55" + "id": "Mechanical Engineering (BS)-55" } }, { "matcher": "CourseRequirement", "course": "MECH 4399", "metadata": { - "id": "Electrical Engineering (BSEE)-56" + "id": "Mechanical Engineering (BS)-56" } }, { "matcher": "CourseRequirement", "course": "MECH 4V98", "metadata": { - "id": "Electrical Engineering (BSEE)-57" + "id": "Mechanical Engineering (BS)-57" } } ] @@ -425,11 +425,11 @@ "required_hours": 3, "excluded_courses": [], "metadata": { - "id": "Electrical Engineering (BSEE)-58" + "id": "Mechanical Engineering (BS)-58" } } ] }, - "display_name": "Electrical Engineering(BSEE)", + "display_name": "Mechanical Engineering(BS)", "id": "4f4397fa-05b0-46a1-b529-e3ed64e9cec3" } diff --git a/validator/degree_data/Psychology(BS).json b/validator/degree_data/2022/Psychology(BS).json similarity index 100% rename from validator/degree_data/Psychology(BS).json rename to validator/degree_data/2022/Psychology(BS).json diff --git a/validator/degree_data/Software Engineering(BS).json b/validator/degree_data/2022/Software Engineering(BS).json similarity index 100% rename from validator/degree_data/Software Engineering(BS).json rename to validator/degree_data/2022/Software Engineering(BS).json diff --git a/validator/degree_data/Supply Chain Management(BS).json b/validator/degree_data/2022/Supply Chain Management(BS).json similarity index 100% rename from validator/degree_data/Supply Chain Management(BS).json rename to validator/degree_data/2022/Supply Chain Management(BS).json diff --git a/validator/degree_data/2023/Computer Science(BS).json b/validator/degree_data/2023/Computer Science(BS).json new file mode 100644 index 000000000..ad3aa7671 --- /dev/null +++ b/validator/degree_data/2023/Computer Science(BS).json @@ -0,0 +1,370 @@ +{ + "catalog_uri": "https://catalog.utdallas.edu/2023/undergraduate/programs/ecs/computer-science", + "minimum_credit_hours": 124, + "school": "Erik Jonsson School of Engineering and Computer Science", + "subtype": "Major", + "year": "2023-2024", + "requirements": { + "core": "@import ./core.json", + "major": [ + { + "matcher": "AndRequirement", + "metadata": { + "id": "Computer Science(BS)-0", + "name": "Major Preparatory Courses" + }, + "requirements": [ + { + "course": "ECS 1100", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-1" + } + }, + { + "course": "CS 1200", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-2" + } + }, + { + "course": "CS 1436", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-4" + } + }, + { + "course": "CS 1337", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-5" + } + }, + { + "course": "CS 2305", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-6" + } + }, + { + "course": "CS 2336", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-7" + } + }, + { + "course": "CS 2340", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-8" + } + }, + { + "matcher": "OrRequirement", + "metadata": { + "id": "Computer Science(BS)-9" + }, + "requirements": [ + { + "matcher": "AndRequirement", + "metadata": { + "id": "Computer Science(BS)-10" + }, + "requirements": [ + { + "course": "MATH 2413", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-11" + } + }, + { + "course": "MATH 2414", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-12" + } + } + ] + }, + { + "matcher": "AndRequirement", + "metadata": { + "id": "Computer Science(BS)-13" + }, + "requirements": [ + { + "course": "MATH 2417", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-14" + } + }, + { + "course": "MATH 2419", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-15" + } + } + ] + } + ] + }, + { + "course": "MATH 2418", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-16" + } + }, + { + "course": "RHET 1302", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-3" + } + }, + { + "course": "PHYS 2125", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-17" + } + }, + { + "course": "PHYS 2126", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-18" + } + }, + { + "course": "PHYS 2325", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-19" + } + }, + { + "course": "PHYS 2326", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-20" + } + } + ] + }, + { + "matcher": "AndRequirement", + "metadata": { + "id": "Computer Science(BS)-21", + "name": "Major Core Courses" + }, + "requirements": [ + { + "course": "CS 3162", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-22" + } + }, + { + "course": "CS 3305", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-23" + } + }, + { + "course": "CS 3341", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-24" + } + }, + { + "course": "CS 3345", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-25" + } + }, + { + "course": "CS 3354", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-26" + } + }, + { + "course": "CS 3377", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-27" + } + }, + { + "course": "ECS 3390", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-28" + } + }, + { + "course": "CS 4141", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-29" + } + }, + { + "course": "CS 4337", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-30" + } + }, + { + "course": "CS 4341", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-31" + } + }, + { + "course": "CS 4347", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-32" + } + }, + { + "course": "CS 4348", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-33" + } + }, + { + "course": "CS 4349", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-34" + } + }, + { + "course": "CS 4384", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-35" + } + }, + { + "course": "CS 4485", + "matcher": "CourseRequirement", + "metadata": { + "id": "Computer Science(BS)-36" + } + } + ] + }, + { + "also_fulfills": [ + { + "course": "EE 4325", + "matcher": "CourseRequirement", + "metadata": { + "id": "37" + } + }, + { + "course": "SE 4351", + "matcher": "CourseRequirement", + "metadata": { + "id": "38" + } + }, + { + "course": "SE 4352", + "matcher": "CourseRequirement", + "metadata": { + "id": "39" + } + }, + { + "course": "SE 4367", + "matcher": "CourseRequirement", + "metadata": { + "id": "40" + } + }, + { + "course": "SE 4381", + "matcher": "CourseRequirement", + "metadata": { + "id": "41" + } + } + ], + "matcher": "CSGuidedElectiveRequirement", + "metadata": { + "id": "Computer Science(BS)-37", + "name": "CS Guided Electives" + }, + "required_count": 3, + "starts_with": "CS 43" + }, + { + "excluded_courses": [ + "ECS 3390", + "RHET 1302", + "MATH 2413", + "MATH 2417", + "MATH 2414", + "MATH 2419", + "PHYS 2325", + "PHYS 2421", + "CS 1136", + "CS 1336", + "CS 1337", + "CS 2305", + "CS 2336", + "CS 2337", + "CS 2340", + "MATH 2418", + "PHYS 2125", + "PHYS 2126", + "ECS 1100", + "CS 1200", + "CS 3305", + "CS 4337", + "CS 4349", + "CS 4384", + "CS 4485", + "CS 3341", + "CS 3345", + "CS 3354", + "CS 4141", + "CS 4348", + "CS 4341", + "CS 3377", + "CS 4347", + "CS 3162" + ], + "matcher": "FreeElectiveRequirement", + "metadata": { + "id": "Computer Science(BS)-38", + "name": "Free Electives" + }, + "required_hours": 10 + } + ] + }, + "display_name": "Computer Science(BS)", + "id": "700d442b-d433-4851-94c1-55f7681fc98e" +} diff --git a/validator/degree_data/Arts, Technology, and Emerging Communication Animation and Games Concentration(BA).json b/validator/degree_data/Arts, Technology, and Emerging Communication Animation and Games Concentration(BA).json deleted file mode 100644 index b319a3f68..000000000 --- a/validator/degree_data/Arts, Technology, and Emerging Communication Animation and Games Concentration(BA).json +++ /dev/null @@ -1,693 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/atec/arts-and-technology-animation", - "minimum_credit_hours": 120, - "school": "School of Arts, Technology, and Emerging Communication", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 2300", - "metadata": { - "id": "93bdde17-4079-4a19-9891-a0a7ff8ee279" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2301", - "metadata": { - "id": "0dfec53a-0a44-4fcd-a989-8f44becaa186" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2302", - "metadata": { - "id": "dddf48d4-f97f-4fef-b8a4-7c12d6bc605f" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 1335", - "metadata": { - "id": "9bdc6974-a3fa-4e15-b0ee-61616f3099e1" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2303", - "metadata": { - "id": "fa202c73-5489-4164-abb6-1d8cdf0025e2" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2310", - "metadata": { - "id": "0c2dc393-d369-4e2b-a242-8554ecd594d8" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 2321", - "metadata": { - "id": "e043a122-4c30-4cc4-b453-f8df3dfcef8d" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2330", - "metadata": { - "id": "075b4a32-16c4-411c-8cd6-55ba8a4ff8bd" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2345", - "metadata": { - "id": "0ed46225-3e5a-4c85-9d91-8e059eb513ec" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2350", - "metadata": { - "id": "ca2e2105-8f2b-49bd-a327-d51c2c9208f9" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2355", - "metadata": { - "id": "956567b5-6fe9-4295-a97d-01c3c97972da" - } - } - ], - "metadata": { - "id": "589b9eaf-8bfa-4ba0-ab57-3242b96a0ff8" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 2315", - "metadata": { - "id": "65941985-3e03-4890-8fb8-e62b7e8e79ab" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2375", - "metadata": { - "id": "de98f84a-682d-44e8-8de3-8d2465785620" - } - } - ], - "metadata": { - "id": "4a5ff970-8eb4-46ac-9400-bfc6fd84c11c" - } - }, - { - "matcher": "ATECPrescribedElectiveRequirement", - "requirement_count": 5, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 3305", - "metadata": { - "id": "a857bb1d-9ad9-4ff3-8993-8cc0bfd11619" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3306", - "metadata": { - "id": "4270ed7d-21fa-48d4-b9b1-19b406f51d20" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3307", - "metadata": { - "id": "d44fc9f7-1d25-461e-aa47-3acad1b77333" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3308", - "metadata": { - "id": "29b09646-7c5d-4a26-ba73-464288c775c7" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3312", - "metadata": { - "id": "7d91b95b-1cfc-4d3c-82e4-62ba8909db31" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3338", - "metadata": { - "id": "ebb4c58e-a4bb-4379-9065-42e06cbab9f8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3365", - "metadata": { - "id": "f2b2a1cf-148e-44dc-81c8-fcffb599fdf8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3367", - "metadata": { - "id": "4c1571ad-7969-435b-97bf-11da2123f8f7" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3370", - "metadata": { - "id": "405d34d7-3750-47b2-8f68-d93c4188a764" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4305", - "metadata": { - "id": "cf6751e8-4457-4ff1-a9c0-d7034f75fb5b" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4306", - "metadata": { - "id": "5c1b3de7-2044-4103-b346-d77345aefa34" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4307", - "metadata": { - "id": "03aab884-53c3-4e8b-995e-29f48e7c8532" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4308", - "metadata": { - "id": "4143bd37-4d7c-4f29-99de-08bfa43796ac" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4338", - "metadata": { - "id": "7da67656-dcf0-4120-b2dd-ebf12acc40cd" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4365", - "metadata": { - "id": "babca50d-a27d-4b61-b3ea-bf7257d75351" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4367", - "metadata": { - "id": "d5bb10e0-1afb-4935-aa75-2ae907507ea9" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4370", - "metadata": { - "id": "e6436233-d4ff-4672-bee3-fca7fc78251a" - } - } - ], - "minimum_hours_in_area": 0, - "metadata": { - "id": "9a04f0c3-de9e-42ae-9008-28002e1a5f9a" - }, - "required_4000_level_courses": 2 - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 3315", - "metadata": { - "id": "b8352030-215e-4ca1-b061-6c52e56d9743" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3366", - "metadata": { - "id": "06d174ca-145e-4a8d-afed-9af6da8763f0" - } - } - ], - "metadata": { - "id": "35688c9e-ed26-4f2d-b99e-424096786840" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 3311", - "metadata": { - "id": "a58e13d8-9e1b-4b97-a28a-741e2d2d607b" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3368", - "metadata": { - "id": "1fc9d543-b2df-4ad1-a8c8-9b2322d3d7bf" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 3360", - "metadata": { - "id": "473f9a14-a4e3-4cf4-8543-e6b0fde94e68" - } - } - ], - "metadata": { - "id": "6f3c2f7a-3a99-4a95-85fa-14378fb23ff6" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 4397", - "metadata": { - "id": "1ae434fc-2483-4a0f-964f-7d61c51c39cf" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4398", - "metadata": { - "id": "1571ea43-0110-4a99-9885-35f7746b4eb6" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4399", - "metadata": { - "id": "d692dd5e-ee55-492e-8329-bdf17096d131" - } - } - ], - "metadata": { - "id": "3a767ce7-a3af-4d80-85ea-559ac654d037" - } - }, - { - "matcher": "ATECPrescribedElectiveRequirement", - "requirement_count": 5, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 3301", - "metadata": { - "id": "2f556d23-5a3d-46b2-a217-3e0dbd53c71b" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3303", - "metadata": { - "id": "1244950a-5986-43ad-a685-34fb0f022e17" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3305", - "metadata": { - "id": "441f08d4-6988-4b3f-b349-635f733f31ce" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3306", - "metadata": { - "id": "e3de9e85-828a-4d59-b77f-3b33179e9255" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3307", - "metadata": { - "id": "37295e5d-7dd4-4a8d-ad01-a7ec8c278308" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3308", - "metadata": { - "id": "bc6832b4-a8eb-43d7-b748-bb9a967e0164" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3309", - "metadata": { - "id": "1380f62a-d3e0-4617-8adf-2714c7d8765b" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3310", - "metadata": { - "id": "2cc8772c-8489-4029-be5d-199838c060f8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3311", - "metadata": { - "id": "cceba1f7-10bc-423f-bb1b-f2e329033d93" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3312", - "metadata": { - "id": "3aa54d8d-dc26-48a8-a813-5c66d5ea1c85" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3313", - "metadata": { - "id": "0f842eea-d339-4f5e-a785-e7a476eafb9d" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3315", - "metadata": { - "id": "a67a24f3-aa4b-4274-b368-83da815c7971" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3350", - "metadata": { - "id": "412867b4-d19d-412f-be43-8c75c05069cb" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3365", - "metadata": { - "id": "ffcd234b-1246-46a1-8b66-f14ca550cc72" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3366", - "metadata": { - "id": "ea80f14d-904f-4044-9f72-42f53f9e1042" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3367", - "metadata": { - "id": "bf0c2985-a05c-4b85-8f73-f8a2eac2e8fc" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3368", - "metadata": { - "id": "0aff0ea2-59e0-43df-a4d4-4bf22260b0ec" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3369", - "metadata": { - "id": "53f62866-d044-43e2-b6c2-e24921187325" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3370", - "metadata": { - "id": "5b3add3a-6926-4e20-a0e4-358dad3b54e9" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3371", - "metadata": { - "id": "6ec4eae8-79b6-4368-bbf6-b038196ecfd3" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3372", - "metadata": { - "id": "ce659374-e90c-43c9-90c7-b7d0c9e43d4c" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3338", - "metadata": { - "id": "d4481962-f7e4-4c19-a53d-43d8fbe4a5d2" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4305", - "metadata": { - "id": "ec28f494-04a6-495d-86bc-2834f90c125a" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4306", - "metadata": { - "id": "a43cd38b-17ec-41f1-9a03-2a52d7f453b8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4307", - "metadata": { - "id": "22481dbe-04ef-431b-a366-979559997625" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4308", - "metadata": { - "id": "baadbda6-27ba-482a-a6c1-8d6353e97c1c" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4309", - "metadata": { - "id": "72d90c8b-f7da-4f65-afc5-5356a4dfd23a" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4310", - "metadata": { - "id": "d7a608a9-912a-4848-bea2-2798f238b9c9" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4312", - "metadata": { - "id": "e4b35c57-39d1-48b1-b549-da09ce9eb191" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4313", - "metadata": { - "id": "602f8f54-c666-4279-9165-5232675e05f2" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4314", - "metadata": { - "id": "d023b4d2-41df-43e2-b160-60dc30a774c4" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4315", - "metadata": { - "id": "fda36072-3859-4647-b057-41a5d374e4ba" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4316", - "metadata": { - "id": "c3df742e-ea81-4df0-8749-4bced829907b" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4317", - "metadata": { - "id": "f15d76fd-9b77-49ec-b0d4-2bf6b7caa45f" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4318", - "metadata": { - "id": "e6487d52-dae3-4fcf-822a-458e93108f92" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4319", - "metadata": { - "id": "899aa734-f741-4c81-8a60-b2d2f02cdbcb" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4338", - "metadata": { - "id": "abd837b7-25a7-418e-8f9f-ac49e57bbeac" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4365", - "metadata": { - "id": "2d2d0df3-b3fd-4a09-92ef-e8c28f894995" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4366", - "metadata": { - "id": "7f77baba-9a46-40a8-b17d-6605a093e1c1" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4367", - "metadata": { - "id": "f1aa7158-d83e-49d5-820c-3287a473d6d6" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4368", - "metadata": { - "id": "6129611e-de65-4d59-9128-23a61827f916" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4370", - "metadata": { - "id": "c31ea433-7497-48ec-bdb2-c45440ff495e" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4373", - "metadata": { - "id": "e2efe261-f4c3-4620-b74d-673101e48389" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4376", - "metadata": { - "id": "e4c3d39d-db3d-48e2-b50f-21049c4c18c9" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4377", - "metadata": { - "id": "2d4a0315-8687-42ba-9951-772fe2bdacdd" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4379", - "metadata": { - "id": "26ad8076-de24-4463-a2a5-8e85023e6552" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4384", - "metadata": { - "id": "5e91bc4a-9ec6-4ffc-890c-bb540d96f100" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4311", - "metadata": { - "id": "e9cf10a8-6ade-4505-a766-b53e5000a7f0" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4374", - "metadata": { - "id": "2cdb3e9b-c536-4164-800c-0a1efc8d52c6" - } - } - ], - "minimum_hours_in_area": 0, - "metadata": { - "id": "8b522d01-a02a-4d60-8ee7-e434099f372c" - }, - "required_4000_level_courses": 2 - }, - { - "matcher": "FreeElectiveRequirement", - "excluded_courses": [], - "required_hours": 15, - "metadata": { - "id": "6b2045bd-3cb5-4841-be3b-fb1234d73e8c" - } - } - ] - }, - "display_name": "Arts, Technology, and Emerging Communication Animation and Games Concentration(BA)", - "id": "3d0c9344-ad01-4f31-8aa0-e285bad768a4" -} diff --git a/validator/degree_data/Arts, Technology, and Emerging Communication Critical Media Studies Concentration(BA).json b/validator/degree_data/Arts, Technology, and Emerging Communication Critical Media Studies Concentration(BA).json deleted file mode 100644 index 327b70f5e..000000000 --- a/validator/degree_data/Arts, Technology, and Emerging Communication Critical Media Studies Concentration(BA).json +++ /dev/null @@ -1,258 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/atec/arts-and-technology-critical-media-studies", - "minimum_credit_hours": 120, - "school": "School of Arts, Technology, and Emerging Communication", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 2300", - "metadata": { - "id": "93bdde17-4079-4a19-9891-a0a7ff8ee279" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2301", - "metadata": { - "id": "0dfec53a-0a44-4fcd-a989-8f44becaa186" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2302", - "metadata": { - "id": "dddf48d4-f97f-4fef-b8a4-7c12d6bc605f" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 1335", - "metadata": { - "id": "9bdc6974-a3fa-4e15-b0ee-61616f3099e1" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2320", - "metadata": { - "id": "566ad3b6-ad67-437c-8605-55555d5c54bc" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2321", - "metadata": { - "id": "0a1a71aa-8cef-4ad6-81f1-aea2cebf6757" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2322", - "metadata": { - "id": "4c97a2d7-85d4-4368-aa8f-0a8742582a44" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2330", - "metadata": { - "id": "c4d26175-2be1-47f8-860f-7f0eed8aa454" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3320", - "metadata": { - "id": "e88c0922-8cf4-424d-a46d-34996c97ab3d" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3321", - "metadata": { - "id": "38bf24ce-0b93-4a9e-8ef2-1d1bb52f658f" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3325", - "metadata": { - "id": "d23d0b83-14da-4b76-9a1b-d0660c9e479d" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3331", - "metadata": { - "id": "d13b2bfc-7182-4e0c-8b7e-e4a45dce5288" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4320", - "metadata": { - "id": "c6994f9f-12ec-427e-a94e-0fbfd7123f80" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4326", - "metadata": { - "id": "3fca7809-9136-4857-872b-81ae4c924a9a" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4330", - "metadata": { - "id": "39ba6614-d9d3-476c-8511-a192195b0f4d" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 4397", - "metadata": { - "id": "1ae434fc-2483-4a0f-964f-7d61c51c39cf" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4398", - "metadata": { - "id": "1571ea43-0110-4a99-9885-35f7746b4eb6" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4399", - "metadata": { - "id": "d692dd5e-ee55-492e-8329-bdf17096d131" - } - } - ], - "metadata": { - "id": "3a767ce7-a3af-4d80-85ea-559ac654d037" - } - }, - { - "matcher": "ATECPrescribedElectiveRequirement", - "requirement_count": 5, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 3300", - "metadata": { - "id": "06fc0e2b-4863-49ce-8b04-7c4c50fc3bdf" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3315", - "metadata": { - "id": "6fd082bd-170d-4061-9ed3-2fe1e4bd6dcf" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3323", - "metadata": { - "id": "21e73bd2-c6af-4094-9b68-9d356a5e4d1e" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3366", - "metadata": { - "id": "2cb2451d-716e-4923-b5f0-329e40503f52" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4322", - "metadata": { - "id": "be3172b6-6a2e-48bc-b364-9f4780963b56" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4323", - "metadata": { - "id": "9419e25b-4407-4cbb-92bc-37539d4cdd0a" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4325", - "metadata": { - "id": "d56fcedb-b70b-4543-a03b-1373718fbe75" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4327", - "metadata": { - "id": "d2b8bc70-e58a-44aa-b306-fde0b759a9a6" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4332", - "metadata": { - "id": "12eb6753-a3b9-40a1-bd4f-dea9a2768c41" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4333", - "metadata": { - "id": "4475cf74-7b56-46f7-83a7-9b3b05ef082f" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4334", - "metadata": { - "id": "558cced4-4d96-4c88-ab1c-9d607b73bece" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4366", - "metadata": { - "id": "2e2365f9-8653-4b43-ab2f-5c9e466960e5" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4384", - "metadata": { - "id": "c2558e3e-1246-4719-b2e3-9e5073c557d0" - } - } - ], - "minimum_hours_in_area": 0, - "metadata": { - "id": "8b522d01-a02a-4d60-8ee7-e434099f372c" - }, - "required_4000_level_courses": 2 - }, - { - "matcher": "FreeElectiveRequirement", - "excluded_courses": [], - "required_hours": 15, - "metadata": { - "id": "6b2045bd-3cb5-4841-be3b-fb1234d73e8c" - } - } - ] - }, - "display_name": "Arts, Technology, and Emerging Communication Critical Media Studies Concentration(BA)", - "id": "03f013f4-0f6e-45bf-ab48-0274bebc7f95" -} diff --git a/validator/degree_data/Arts, Technology, and Emerging Communication Emerging Media Arts Concentration(BA).json b/validator/degree_data/Arts, Technology, and Emerging Communication Emerging Media Arts Concentration(BA).json deleted file mode 100644 index d11aadb1b..000000000 --- a/validator/degree_data/Arts, Technology, and Emerging Communication Emerging Media Arts Concentration(BA).json +++ /dev/null @@ -1,475 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/atec/arts-and-technology-emerging-media-arts", - "minimum_credit_hours": 120, - "school": "School of Arts, Technology, and Emerging Communication", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 2300", - "metadata": { - "id": "93bdde17-4079-4a19-9891-a0a7ff8ee279" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2301", - "metadata": { - "id": "0dfec53a-0a44-4fcd-a989-8f44becaa186" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2302", - "metadata": { - "id": "dddf48d4-f97f-4fef-b8a4-7c12d6bc605f" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 1335", - "metadata": { - "id": "9bdc6974-a3fa-4e15-b0ee-61616f3099e1" - } - }, - { - "matcher": "SelectRequirement", - "required_count": 2, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 2340", - "metadata": { - "id": "aee22860-b9b1-4ab0-b402-42749584dca1" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2345", - "metadata": { - "id": "09e2ae6f-6a78-4d1e-9d99-5cb158982db8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2350", - "metadata": { - "id": "602881a8-9e82-4f4d-ba99-99874aeb3b60" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2355", - "metadata": { - "id": "51098fd3-651f-4d4a-a6f8-a7c69f6a4682" - } - } - ], - "metadata": { - "id": "9b290654-c69e-4a66-b579-a3d701c488bd" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 2322", - "metadata": { - "id": "15ff745b-cec0-4e99-b076-d591772e9b4b" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2343", - "metadata": { - "id": "ce5cb96b-be05-47d0-94d9-b831e9e65142" - } - } - ], - "metadata": { - "id": "012e82ef-976a-4944-b347-12af7611ab3e" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3301", - "metadata": { - "id": "8de559ba-2bf5-4359-aa38-f2e39e61496b" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4384", - "metadata": { - "id": "f43bbd0f-390d-4f10-9942-7ff6b5807b13" - } - }, - { - "matcher": "SelectRequirement", - "required_count": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 3345", - "metadata": { - "id": "090fdf0e-cffc-4dd0-9a9b-b5d8036a624d" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3346", - "metadata": { - "id": "baf64cfb-6502-4e12-a0cf-384dd6d9ffdd" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3350", - "metadata": { - "id": "d0979f1b-2869-4f57-936f-9f1e7a58d1fe" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3355", - "metadata": { - "id": "6a527115-2043-40a2-8e96-23319a2605a0" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3356", - "metadata": { - "id": "825fe08e-402a-4e6f-8352-3c54a142e863" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3357", - "metadata": { - "id": "92fef932-6d82-40ab-b7b3-29614f43810e" - } - } - ], - "metadata": { - "id": "fb774dff-7ba0-4193-8c13-18cd0b092f79" - } - }, - { - "matcher": "SelectRequirement", - "required_count": 2, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 4330", - "metadata": { - "id": "5fdb8ab8-6474-411b-9da7-cecc4a11cabc" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4346", - "metadata": { - "id": "d0448c00-b6b5-42a7-be19-96c5d84a381c" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4350", - "metadata": { - "id": "fb15d3b2-0bc9-4b32-ac85-c422b2d16fbc" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4351", - "metadata": { - "id": "32b76cd6-5fb4-4573-8839-7941ad9fdfe9" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4357", - "metadata": { - "id": "3bbf621b-5ee4-4745-84a3-63e4b916c037" - } - } - ], - "metadata": { - "id": "e2fe3f6c-9ec4-45e6-a188-8efc997eb748" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 4397", - "metadata": { - "id": "1ae434fc-2483-4a0f-964f-7d61c51c39cf" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4398", - "metadata": { - "id": "1571ea43-0110-4a99-9885-35f7746b4eb6" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4399", - "metadata": { - "id": "d692dd5e-ee55-492e-8329-bdf17096d131" - } - } - ], - "metadata": { - "id": "3a767ce7-a3af-4d80-85ea-559ac654d037" - } - }, - { - "matcher": "ATECPrescribedElectiveRequirement", - "requirement_count": 5, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ATCM 3303", - "metadata": { - "id": "be7b494d-4fe5-402b-ad7f-d11e2940e9f0" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3305", - "metadata": { - "id": "9fe51f34-b6e2-4861-84d4-e892d085f914" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3306", - "metadata": { - "id": "092f6dde-9c9d-4e5c-bcc8-a6ba0bfc8c38" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3315", - "metadata": { - "id": "3d99cd42-6f48-486c-bf63-ab10d4017465" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3320", - "metadata": { - "id": "faeb077d-fa8a-4eeb-a5c9-22cf20bf5668" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3331", - "metadata": { - "id": "08454e21-cd26-4291-8692-d2ff0429bad9" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3336", - "metadata": { - "id": "45c8e428-39c5-42b2-8180-b826eecc544f" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3338", - "metadata": { - "id": "6cfabd44-97aa-4ed4-8846-0c9c17c76da8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3346", - "metadata": { - "id": "bff3ecb5-1617-43b0-84c2-c5d10cc4d3c7" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3350", - "metadata": { - "id": "efd8a69a-6b24-48fb-90b0-112cc68db71d" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3355", - "metadata": { - "id": "4e126db3-1aaf-4697-b236-73a9e709bf28" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3356", - "metadata": { - "id": "1610f93f-d214-42e2-8e7d-e8b3fac3daa9" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3357", - "metadata": { - "id": "e4202459-90a5-482b-b251-6c27bca04d30" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3365", - "metadata": { - "id": "9a85632d-691b-4f0b-bc6d-4e19824e1e31" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3366", - "metadata": { - "id": "c99d6730-1fa6-4623-98f4-0475b4c2a3e8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3370", - "metadata": { - "id": "568e0b11-271f-475e-9a61-3a579b9636fb" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3372", - "metadata": { - "id": "b8cc4631-1529-44b8-8053-eefb7a30704b" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4326", - "metadata": { - "id": "a5d2e7bf-590e-4196-bd5a-0fa12f265d5e" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4330", - "metadata": { - "id": "9a55a122-a905-482c-80f2-7191771b5958" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4338", - "metadata": { - "id": "fd68b36b-8810-4f29-a403-09f855142756" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4339", - "metadata": { - "id": "265869ee-d77e-4a3d-875b-44f115a95d8f" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4345", - "metadata": { - "id": "75f90e42-b3de-474c-9966-d7a2ecbdd81e" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4350", - "metadata": { - "id": "96284b46-7cad-4914-a881-4ff65a416830" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4351", - "metadata": { - "id": "8831f25a-d6d2-40c7-888b-70b345daea25" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4357", - "metadata": { - "id": "f0fafc1a-3fb2-41fd-a6c0-8505feeb9447" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4363", - "metadata": { - "id": "f04c24ed-0aaa-4bc8-a162-407aa20f18b1" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4364", - "metadata": { - "id": "0bb544c9-eda2-462c-9b41-2991b7bfea8c" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 3377", - "metadata": { - "id": "5ea6fd47-e57e-4be0-b3e2-3269a7b21505" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 3379", - "metadata": { - "id": "5d6f093f-55c2-43b9-96f0-725a0860c447" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4372", - "metadata": { - "id": "8d262f96-6544-4d0b-a8e3-7baadfbdffe8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4305", - "metadata": { - "id": "195edced-60f4-45e0-a1fd-16faf4814fad" - } - } - ], - "minimum_hours_in_area": 0, - "metadata": { - "id": "8b522d01-a02a-4d60-8ee7-e434099f372c" - }, - "required_4000_level_courses": 2 - }, - { - "matcher": "FreeElectiveRequirement", - "excluded_courses": [], - "required_hours": 15, - "metadata": { - "id": "6b2045bd-3cb5-4841-be3b-fb1234d73e8c" - } - } - ] - }, - "display_name": "Arts, Technology, and Emerging Communication Emerging Media Arts Concentration(BA)", - "id": "4a78b160-81e1-46fb-9897-899da21f6016" -} diff --git a/validator/degree_data/Data Science(BS).json b/validator/degree_data/Data Science(BS).json deleted file mode 100644 index c4e20fea8..000000000 --- a/validator/degree_data/Data Science(BS).json +++ /dev/null @@ -1,312 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/nsm/data-science", - "minimum_credit_hours": 120, - "school": "School of Natural Sciences and Mathematics", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "AndRequirement", - "metadata": { - "name": "Major Preparatory Courses", - "id": "Data Science (BS)-0" - }, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CS 1136", - "metadata": { - "id": "Data Science (BS)-1" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 1336", - "metadata": { - "id": "Data Science (BS)-2" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 1337", - "metadata": { - "id": "Data Science (BS)-3" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 2336", - "metadata": { - "id": "Data Science (BS)-4" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "MATH 3315", - "metadata": { - "id": "Data Science (BS)-6" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 2305", - "metadata": { - "id": "Data Science (BS)-7" - } - } - ], - "metadata": { - "id": "Data Science (BS)-5" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 2417", - "metadata": { - "id": "Data Science (BS)-8" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 2418", - "metadata": { - "id": "Data Science (BS)-9" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 2419", - "metadata": { - "id": "Data Science (BS)-10" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "AndRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "PHYS 2325", - "metadata": { - "id": "Data Science (BS)-13" - } - }, - { - "matcher": "CourseRequirement", - "course": "PHYS 2125", - "metadata": { - "id": "Data Science (BS)-14" - } - } - ], - "metadata": { - "id": "Data Science (BS)-12" - } - }, - { - "matcher": "AndRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "PHYS 2421", - "metadata": { - "id": "Data Science (BS)-16" - } - } - ], - "metadata": { - "id": "Data Science (BS)-15" - } - } - ], - "metadata": { - "id": "Data Science (BS)-11" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "PHYS 2326", - "metadata": { - "id": "Data Science (BS)-18" - } - }, - { - "matcher": "CourseRequirement", - "course": "PHYS 2422", - "metadata": { - "id": "Data Science (BS)-19" - } - } - ], - "metadata": { - "id": "Data Science (BS)-17" - } - }, - { - "matcher": "CourseRequirement", - "course": "PHYS 2126", - "metadata": { - "id": "Data Science (BS)-20" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Major Core Courses", - "id": "Data Science (BS)-21" - }, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CS 3345", - "metadata": { - "id": "Data Science (BS)-22" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 4347", - "metadata": { - "id": "Data Science (BS)-23" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 4371", - "metadata": { - "id": "Data Science (BS)-24" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 4372", - "metadata": { - "id": "Data Science (BS)-25" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 4375", - "metadata": { - "id": "Data Science (BS)-26" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 3310", - "metadata": { - "id": "Data Science (BS)-27" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 3351", - "metadata": { - "id": "Data Science (BS)-28" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 4301", - "metadata": { - "id": "Data Science (BS)-29" - } - }, - { - "matcher": "CourseRequirement", - "course": "STAT 3355", - "metadata": { - "id": "Data Science (BS)-30" - } - }, - { - "matcher": "CourseRequirement", - "course": "STAT 4351", - "metadata": { - "id": "Data Science (BS)-31" - } - }, - { - "matcher": "CourseRequirement", - "course": "STAT 4352", - "metadata": { - "id": "Data Science (BS)-32" - } - }, - { - "matcher": "CourseRequirement", - "course": "STAT 4354", - "metadata": { - "id": "Data Science (BS)-33" - } - }, - { - "matcher": "CourseRequirement", - "course": "STAT 4355", - "metadata": { - "id": "Data Science (BS)-34" - } - }, - { - "matcher": "CourseRequirement", - "course": "STAT 4360", - "metadata": { - "id": "Data Science (BS)-35" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "STAT 4475", - "metadata": { - "id": "Data Science (BS)-37" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 4475", - "metadata": { - "id": "Data Science (BS)-38" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 4475", - "metadata": { - "id": "Data Science (BS)-39" - } - } - ], - "metadata": { - "id": "Data Science (BS)-36" - } - } - ] - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 14, - "excluded_courses": [], - "metadata": { - "id": "Data Science (BS)-40" - } - } - ] - }, - "display_name": "Data Science(BS)", - "id": "4565eb96-e3e2-46e9-bd65-5323544d5c90" -} diff --git a/validator/degree_data/Finance and Economics(BS).json b/validator/degree_data/Finance and Economics(BS).json deleted file mode 100644 index 247773c02..000000000 --- a/validator/degree_data/Finance and Economics(BS).json +++ /dev/null @@ -1,705 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/jsom/finance", - "minimum_credit_hours": 128, - "school": "Naveen Jindal School of Management", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "AndRequirement", - "metadata": { - "name": "Major Preparatory Courses", - "id": "Finance and Economics(BS)-0" - }, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ACCT 2301", - "metadata": { - "id": "Finance and Economics(BS)-1" - } - }, - { - "matcher": "CourseRequirement", - "course": "ACCT 2302", - "metadata": { - "id": "Finance and Economics(BS)-2" - } - }, - { - "matcher": "CourseRequirement", - "course": "BLAW 2301", - "metadata": { - "id": "Finance and Economics(BS)-3" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 2301", - "metadata": { - "id": "Finance and Economics(BS)-4" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 2302", - "metadata": { - "id": "Finance and Economics(BS)-5" - } - }, - { - "matcher": "OrRequirement", - "metadata": { - "id": "Finance and Economics(BS)-6" - }, - "requirements": [ - { - "course": "MATH 1325", - "matcher": "CourseRequirement", - "metadata": { - "id": "Finance and Economics(BS)-7" - } - }, - { - "course": "MATH 2413", - "matcher": "CourseRequirement", - "metadata": { - "id": "Finance and Economics(BS)-8" - } - }, - { - "course": "MATH 2417", - "matcher": "CourseRequirement", - "metadata": { - "id": "Finance and Economics(BS)-9" - } - } - ] - }, - { - "matcher": "OrRequirement", - "metadata": { - "id": "Finance and Economics(BS)-10" - }, - "requirements": [ - { - "course": "MATH 1326", - "matcher": "CourseRequirement", - "metadata": { - "id": "Finance and Economics(BS)-11" - } - }, - { - "course": "MATH 2414", - "matcher": "CourseRequirement", - "metadata": { - "id": "Finance and Economics(BS)-12" - } - }, - { - "course": "MATH 2419", - "matcher": "CourseRequirement", - "metadata": { - "id": "Finance and Economics(BS)-13" - } - } - ] - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "MATH 2333", - "metadata": { - "id": "Finance and Economics(BS)-15" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 3333", - "metadata": { - "id": "Finance and Economics(BS)-16" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 2418", - "metadata": { - "id": "Finance and Economics(BS)-17" - } - }, - { - "matcher": "CourseRequirement", - "course": "CS 2305", - "metadata": { - "id": "Finance and Economics(BS)-18" - } - } - ], - "metadata": { - "id": "Finance and Economics(BS)-14" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "OPRE 3360", - "metadata": { - "id": "Finance and Economics(BS)-20" - } - }, - { - "matcher": "CourseRequirement", - "course": "STAT 3360", - "metadata": { - "id": "Finance and Economics(BS)-21" - } - } - ], - "metadata": { - "id": "Finance and Economics(BS)-19" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Major Core Courses", - "id": "Finance and Economics(BS)-22" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "BCOM 1300", - "metadata": { - "id": "Finance and Economics(BS)-24" - } - }, - { - "matcher": "CourseRequirement", - "course": "BCOM 3300", - "metadata": { - "id": "Finance and Economics(BS)-25" - } - } - ], - "metadata": { - "id": "Finance and Economics(BS)-23" - } - }, - { - "matcher": "CourseRequirement", - "course": "BCOM 4300", - "metadata": { - "id": "Finance and Economics(BS)-26" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3310", - "metadata": { - "id": "Finance and Economics(BS)-27" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3320", - "metadata": { - "id": "Finance and Economics(BS)-28" - } - }, - { - "matcher": "CourseRequirement", - "course": "ITSS 3300", - "metadata": { - "id": "Finance and Economics(BS)-29" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 3310", - "metadata": { - "id": "Finance and Economics(BS)-30" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "OBHR 3310", - "metadata": { - "id": "Finance and Economics(BS)-32" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 3330", - "metadata": { - "id": "Finance and Economics(BS)-33" - } - } - ], - "metadata": { - "id": "Finance and Economics(BS)-31" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 3300", - "metadata": { - "id": "Finance and Economics(BS)-34" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3390", - "metadata": { - "id": "Finance and Economics(BS)-35" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4310", - "metadata": { - "id": "Finance and Economics(BS)-36" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 3310", - "metadata": { - "id": "Finance and Economics(BS)-37" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 3311", - "metadata": { - "id": "Finance and Economics(BS)-38" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4351", - "metadata": { - "id": "Finance and Economics(BS)-39" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4355", - "metadata": { - "id": "Finance and Economics(BS)-40" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4300", - "metadata": { - "id": "Finance and Economics(BS)-41" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "FIN 4395", - "metadata": { - "id": "Finance and Economics(BS)-43" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4328", - "metadata": { - "id": "Finance and Economics(BS)-44" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4333", - "metadata": { - "id": "Finance and Economics(BS)-45" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4380", - "metadata": { - "id": "Finance and Economics(BS)-46" - } - }, - { - "matcher": "CourseRequirement", - "course": "BPS 4395", - "metadata": { - "id": "Finance and Economics(BS)-47" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4395", - "metadata": { - "id": "Finance and Economics(BS)-48" - } - } - ], - "metadata": { - "id": "Finance and Economics(BS)-42" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Guided Electives", - "id": "Finance and Economics(BS)-49" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "FIN 4V80", - "metadata": { - "id": "Finance and Economics(BS)-51" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4080", - "metadata": { - "id": "Finance and Economics(BS)-52" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4090", - "metadata": { - "id": "Finance and Economics(BS)-53" - } - } - ], - "metadata": { - "id": "Finance and Economics(BS)-50" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4335", - "metadata": { - "id": "Finance and Economics(BS)-55" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4340", - "metadata": { - "id": "Finance and Economics(BS)-56" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 4360", - "metadata": { - "id": "Finance and Economics(BS)-57" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4095", - "metadata": { - "id": "Finance and Economics(BS)-58" - } - } - ], - "metadata": { - "id": "Finance and Economics(BS)-54" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 11, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "FIN 4V80", - "metadata": { - "id": "Finance and Economics(BS)-60" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4080", - "metadata": { - "id": "Finance and Economics(BS)-61" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4090", - "metadata": { - "id": "Finance and Economics(BS)-62" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4335", - "metadata": { - "id": "Finance and Economics(BS)-63" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4340", - "metadata": { - "id": "Finance and Economics(BS)-64" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 4360", - "metadata": { - "id": "Finance and Economics(BS)-65" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4095", - "metadata": { - "id": "Finance and Economics(BS)-66" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3305", - "metadata": { - "id": "Finance and Economics(BS)-67" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3330", - "metadata": { - "id": "Finance and Economics(BS)-68" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3340", - "metadata": { - "id": "Finance and Economics(BS)-69" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3350", - "metadata": { - "id": "Finance and Economics(BS)-70" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3365", - "metadata": { - "id": "Finance and Economics(BS)-71" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3380", - "metadata": { - "id": "Finance and Economics(BS)-72" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4313", - "metadata": { - "id": "Finance and Economics(BS)-73" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4315", - "metadata": { - "id": "Finance and Economics(BS)-74" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4320", - "metadata": { - "id": "Finance and Economics(BS)-75" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4321", - "metadata": { - "id": "Finance and Economics(BS)-76" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4328", - "metadata": { - "id": "Finance and Economics(BS)-77" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4333", - "metadata": { - "id": "Finance and Economics(BS)-78" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4336", - "metadata": { - "id": "Finance and Economics(BS)-79" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4338", - "metadata": { - "id": "Finance and Economics(BS)-80" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4340", - "metadata": { - "id": "Finance and Economics(BS)-81" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4345", - "metadata": { - "id": "Finance and Economics(BS)-82" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4380", - "metadata": { - "id": "Finance and Economics(BS)-83" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 4390", - "metadata": { - "id": "Finance and Economics(BS)-84" - } - } - ], - "metadata": { - "id": "Finance and Economics(BS)-59" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 12, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ECON 3312", - "metadata": { - "id": "Finance and Economics(BS)-86" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 3332", - "metadata": { - "id": "Finance and Economics(BS)-87" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4301", - "metadata": { - "id": "Finance and Economics(BS)-88" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4310", - "metadata": { - "id": "Finance and Economics(BS)-89" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4342", - "metadata": { - "id": "Finance and Economics(BS)-90" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4345", - "metadata": { - "id": "Finance and Economics(BS)-91" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4360", - "metadata": { - "id": "Finance and Economics(BS)-92" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4382", - "metadata": { - "id": "Finance and Economics(BS)-93" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4385", - "metadata": { - "id": "Finance and Economics(BS)-94" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4396", - "metadata": { - "id": "Finance and Economics(BS)-95" - } - } - ], - "metadata": { - "id": "Finance and Economics(BS)-85" - } - } - ] - } - ] - }, - "display_name": "Finance and Economics(BS)", - "id": "67125309-9578-4c3e-a7fe-dbcc054873a3" -} diff --git a/validator/degree_data/Global Business and Human Resource Management(BS).json b/validator/degree_data/Global Business and Human Resource Management(BS).json deleted file mode 100644 index b11092947..000000000 --- a/validator/degree_data/Global Business and Human Resource Management(BS).json +++ /dev/null @@ -1,728 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/jsom/global-business-human-resource-management", - "minimum_credit_hours": 128, - "school": "Naveen Jindal School of Management", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "AndRequirement", - "metadata": { - "name": "Major Preparatory Courses", - "id": "Global Business and Human Resource Management(BS)-0" - }, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ACCT 2301", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-1" - } - }, - { - "matcher": "CourseRequirement", - "course": "ACCT 2302", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-2" - } - }, - { - "matcher": "CourseRequirement", - "course": "BLAW 2301", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-3" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "MATH 1325", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-5" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 2413", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-6" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 2417", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-7" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-4" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "OPRE 3360", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-9" - } - }, - { - "matcher": "CourseRequirement", - "course": "STAT 3360", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-10" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-8" - } - }, - { - "matcher": "SelectRequirement", - "required_count": 2, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "BA 1310", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-12" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 1320", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-13" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 2301", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-14" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 2302", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-15" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-11" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Major Core Courses", - "id": "Global Business and Human Resource Management(BS)-16" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "BCOM 1300", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-18" - } - }, - { - "matcher": "CourseRequirement", - "course": "BCOM 3300", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-19" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-17" - } - }, - { - "matcher": "CourseRequirement", - "course": "BCOM 4300", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-20" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3310", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-21" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3320", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-22" - } - }, - { - "matcher": "CourseRequirement", - "course": "ITSS 3300", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-23" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 3310", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-24" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 3330", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-25" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 3300", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-26" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Major Related Courses", - "id": "Global Business and Human Resource Management(BS)-27" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4320", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-29" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 4320", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-30" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-28" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3380", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-31" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4330", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-32" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4350", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-33" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4373", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-34" - } - }, - { - "matcher": "CourseRequirement", - "course": "BLAW 3301", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-35" - } - }, - { - "matcher": "CourseRequirement", - "course": "BLAW 4301", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-36" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4331", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-37" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4333", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-38" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4334", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-39" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4335", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-40" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4354", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-41" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "OBHR 4395", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-43" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4395", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-44" - } - }, - { - "matcher": "CourseRequirement", - "course": "BPS 4395", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-45" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4395", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-46" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-42" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4310", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-48" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4340", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-49" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4V94", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-50" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-47" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "OBHR 3310", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-52" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4350", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-53" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4352", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-54" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4336", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-55" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4337", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-56" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4356", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-57" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4300", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-58" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4310", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-59" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4361", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-60" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-51" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Elective Requirements", - "id": "Global Business and Human Resource Management(BS)-61" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4V90", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-63" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4090", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-64" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4090", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-65" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-62" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4335", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-67" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4340", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-68" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 4360", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-69" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4095", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-70" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-66" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 5, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4V90", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-72" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4090", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-73" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4090", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-74" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4335", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-75" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4340", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-76" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 4360", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-77" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4095", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-78" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4310", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-79" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4311", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-80" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3350", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-81" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4310", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-82" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4352", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-83" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 3320", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-84" - } - }, - { - "matcher": "CourseRequirement", - "course": "GEOG 3370", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-85" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4360", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-86" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3091", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-87" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3092", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-88" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3093", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-89" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3094", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-90" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3095", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-91" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3096", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-92" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V91", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-93" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V92", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-94" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V93", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-95" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V94", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-96" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V95", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-97" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V96", - "metadata": { - "id": "Global Business and Human Resource Management(BS)-98" - } - } - ], - "metadata": { - "id": "Global Business and Human Resource Management(BS)-71" - } - } - ] - } - ] - }, - "display_name": "Global Business and Human Resource Management(BS)", - "id": "b4cdd83a-daff-4c1b-b07a-541cfa6c4730" -} diff --git a/validator/degree_data/Global Business and Supply Chain Management(BS).json b/validator/degree_data/Global Business and Supply Chain Management(BS).json deleted file mode 100644 index e75d5e673..000000000 --- a/validator/degree_data/Global Business and Supply Chain Management(BS).json +++ /dev/null @@ -1,772 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/jsom/global-business-supply-chain-management", - "minimum_credit_hours": 128, - "school": "Naveen Jindal School of Management", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "AndRequirement", - "metadata": { - "name": "Major Preparatory Courses", - "id": "Global Business and Supply Chain Management(BS)-0" - }, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ACCT 2301", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-1" - } - }, - { - "matcher": "CourseRequirement", - "course": "ACCT 2302", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-2" - } - }, - { - "matcher": "CourseRequirement", - "course": "BLAW 2301", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-3" - } - }, - { - "matcher": "OrRequirement", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-4" - }, - "requirements": [ - { - "course": "MATH 1325", - "matcher": "CourseRequirement", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-5" - } - }, - { - "course": "MATH 2413", - "matcher": "CourseRequirement", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-6" - } - }, - { - "course": "MATH 2417", - "matcher": "CourseRequirement", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-7" - } - } - ] - }, - { - "matcher": "OrRequirement", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-8" - }, - "requirements": [ - { - "course": "MATH 1326", - "matcher": "CourseRequirement", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-9" - } - }, - { - "course": "OPRE 3340", - "matcher": "CourseRequirement", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-10" - } - }, - { - "course": "MATH 2414", - "matcher": "CourseRequirement", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-11" - } - }, - { - "course": "MATH 2419", - "matcher": "CourseRequirement", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-12" - } - } - ] - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "OPRE 3333", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-14" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 2333", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-15" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-13" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "OPRE 3360", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-17" - } - }, - { - "matcher": "CourseRequirement", - "course": "STAT 3360", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-18" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-16" - } - }, - { - "matcher": "SelectRequirement", - "required_count": 2, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "BA 1310", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-20" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 1320", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-21" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 2301", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-22" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 2302", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-23" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-19" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Major Core Courses", - "id": "Global Business and Supply Chain Management(BS)-24" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "BCOM 1300", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-26" - } - }, - { - "matcher": "CourseRequirement", - "course": "BCOM 3300", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-27" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-25" - } - }, - { - "matcher": "CourseRequirement", - "course": "BCOM 4300", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-28" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3310", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-29" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3320", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-30" - } - }, - { - "matcher": "CourseRequirement", - "course": "ITSS 3300", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-31" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 3310", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-32" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "OBHR 3310", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-34" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 3330", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-35" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-33" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 3300", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-36" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Major Related Courses", - "id": "Global Business and Supply Chain Management(BS)-37" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4320", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-39" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 4320", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-40" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-38" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3380", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-41" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4330", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-42" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4350", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-43" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4373", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-44" - } - }, - { - "matcher": "CourseRequirement", - "course": "BLAW 4301", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-45" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 3320", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-46" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 3330", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-47" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 4310", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-48" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 4330", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-49" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 4340", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-50" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "OPRE 4395", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-52" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4395", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-53" - } - }, - { - "matcher": "CourseRequirement", - "course": "BPS 4395", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-54" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4395", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-55" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-51" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4310", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-57" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4340", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-58" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4V94", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-59" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-56" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Elective Requirements", - "id": "Global Business and Supply Chain Management(BS)-60" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4V90", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-62" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4090", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-63" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4090", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-64" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-61" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4335", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-66" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4340", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-67" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 4360", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-68" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4095", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-69" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-65" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 8, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4V90", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-71" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4090", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-72" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4090", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-73" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4335", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-74" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4340", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-75" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 4360", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-76" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4095", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-77" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 3311", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-78" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 3312", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-79" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 4320", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-80" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 4337", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-81" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 4345", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-82" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 4350", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-83" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 4353", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-84" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 4362", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-85" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 4310", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-86" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4311", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-87" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3350", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-88" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4310", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-89" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 4352", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-90" - } - }, - { - "matcher": "CourseRequirement", - "course": "GEOG 3370", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-91" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 4360", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-92" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3091", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-93" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3092", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-94" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3093", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-95" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3094", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-96" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3095", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-97" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3096", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-98" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V91", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-99" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V92", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-100" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V93", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-101" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V94", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-102" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V95", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-103" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3V96", - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-104" - } - } - ], - "metadata": { - "id": "Global Business and Supply Chain Management(BS)-70" - } - } - ] - } - ] - }, - "display_name": "Global Business and Supply Chain Management(BS)", - "id": "eedd5d31-35a9-42da-9f3c-f06216f71373" -} diff --git a/validator/degree_data/Healthcare Management and Molecular Biology(BS)_no_work.json b/validator/degree_data/Healthcare Management and Molecular Biology(BS)_no_work.json deleted file mode 100644 index 22949b1ec..000000000 --- a/validator/degree_data/Healthcare Management and Molecular Biology(BS)_no_work.json +++ /dev/null @@ -1,710 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/jsom/healthcare-management-molecular-biology", - "minimum_credit_hours": 152, - "school": "Naveen Jindal School of Management", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "AndRequirement", - "metadata": { - "name": "Biology Major Preparatory Courses", - "id": "Healthcare Management and Molecular Biology(BS)-0" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CHEM 1111", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-2" - } - }, - { - "matcher": "CourseRequirement", - "course": "CHEM 1115", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-3" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-1" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CHEM 1112", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-5" - } - }, - { - "matcher": "CourseRequirement", - "course": "CHEM 1116", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-6" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-4" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CHEM 1311", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-8" - } - }, - { - "matcher": "CourseRequirement", - "course": "CHEM 1315", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-9" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-7" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CHEM 1312", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-11" - } - }, - { - "matcher": "CourseRequirement", - "course": "CHEM 1316", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-12" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-10" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CHEM 2323", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-14" - } - }, - { - "matcher": "CourseRequirement", - "course": "CHEM 2327", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-15" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-13" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CHEM 2325", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-17" - } - }, - { - "matcher": "CourseRequirement", - "course": "CHEM 2328", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-18" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-16" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CHEM 2233", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-20" - } - }, - { - "matcher": "CourseRequirement", - "course": "CHEM 2237", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-21" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-19" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "MATH 2417", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-23" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 2413", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-24" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-22" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "MATH 2419", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-26" - } - }, - { - "matcher": "CourseRequirement", - "course": "MATH 2414", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-27" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-25" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "AndRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "PHYS 2325", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-30" - } - }, - { - "matcher": "CourseRequirement", - "course": "PHYS 2125", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-31" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-29" - } - }, - { - "matcher": "CourseRequirement", - "course": "PHYS 2421", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-32" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-28" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "PHYS 2326", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-34" - } - }, - { - "matcher": "CourseRequirement", - "course": "PHYS 2422", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-35" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-33" - } - }, - { - "matcher": "CourseRequirement", - "course": "PHYS 2126", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-36" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Biology Core Courses", - "id": "Healthcare Management and Molecular Biology(BS)-37" - }, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "BIOL 2111", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-38" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 2112", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-39" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 2281", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-40" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 2311", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-41" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 2312", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-42" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 3101", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-43" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 3102", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-44" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 3161", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-45" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 3162", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-46" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 3301", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-47" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 3302", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-48" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 3361", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-49" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "BIOL 3362", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-51" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 3335", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-52" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-50" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 3380", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-53" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 4461", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-54" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Business Major Preparatory Courses", - "id": "Healthcare Management and Molecular Biology(BS)-55" - }, - "requirements": [] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Business Core Courses", - "id": "Healthcare Management and Molecular Biology(BS)-68" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "BCOM 1300", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-70" - } - }, - { - "matcher": "CourseRequirement", - "course": "BCOM 3300", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-71" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-69" - } - }, - { - "matcher": "CourseRequirement", - "course": "BCOM 4300", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-72" - } - }, - { - "matcher": "CourseRequirement", - "course": "IMS 3310", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-73" - } - }, - { - "matcher": "CourseRequirement", - "course": "FIN 3320", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-74" - } - }, - { - "matcher": "CourseRequirement", - "course": "OPRE 3310", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-75" - } - }, - { - "matcher": "CourseRequirement", - "course": "ITSS 3300", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-76" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "OBHR 3330", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-78" - } - }, - { - "matcher": "CourseRequirement", - "course": "OBHR 3310", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-79" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-77" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 3300", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-80" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "name": "Elective Requirements", - "id": "Healthcare Management and Molecular Biology(BS)-81" - }, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "HMGT 4090", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-83" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4090", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-84" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-82" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "IMS 4335", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-86" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4340", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-87" - } - }, - { - "matcher": "CourseRequirement", - "course": "MKT 4360", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-88" - } - }, - { - "matcher": "CourseRequirement", - "course": "BA 4095", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-89" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-85" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 18, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "HMGT 3301", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-91" - } - }, - { - "matcher": "CourseRequirement", - "course": "HMGT 3310", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-92" - } - }, - { - "matcher": "CourseRequirement", - "course": "HMGT 3311", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-93" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "HMGT 3320", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-95" - } - }, - { - "matcher": "CourseRequirement", - "course": "ECON 3330", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-96" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-94" - } - }, - { - "matcher": "CourseRequirement", - "course": "HMGT 4321", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-97" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "HMGT 4395", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-99" - } - }, - { - "matcher": "CourseRequirement", - "course": "BPS 4395", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-100" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 4395", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-101" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-98" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-90" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "BIOL 4380", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-103" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 3V96", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-104" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 4391", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-105" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIOL 4399", - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-106" - } - } - ], - "metadata": { - "id": "Healthcare Management and Molecular Biology(BS)-102" - } - } - ] - } - ] - }, - "display_name": "Healthcare Management and Molecular Biology(BS)", - "id": "24b77a2e-90fa-4fb6-b0ca-4f064bd341d8" -} diff --git a/validator/degree_data/Latin American Studies(BA).json b/validator/degree_data/Latin American Studies(BA).json deleted file mode 100644 index 8b9d04106..000000000 --- a/validator/degree_data/Latin American Studies(BA).json +++ /dev/null @@ -1,297 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/latin-american-studies", - "minimum_credit_hours": 120, - "school": "School of Arts and Humanities", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "HoursRequirement", - "required_hours": 9, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "HIST 2350", - "metadata": { - "id": "2eae106a-ee88-4cca-aaa4-c30518dca8ab" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LIT 2350", - "metadata": { - "id": "465afc76-1205-4754-ad37-21e5c10423c3" - } - }, - { - "matcher": "CourseRequirement", - "course": "HIST 3301", - "metadata": { - "id": "f7838cb2-d2f8-4ada-9dbf-65ddbfe9d886" - } - }, - { - "matcher": "CourseRequirement", - "course": "GEOG 2303", - "metadata": { - "id": "6475146e-126c-4020-bf4b-84c91abe6d4f" - } - } - ], - "metadata": { - "id": "eca9a6f0-30bc-4de3-907f-fdc755c8544f" - } - } - ], - "metadata": { - "id": "dec12281-56cd-4df0-939a-ce0773a4b92b" - } - }, - { - "matcher": "OtherRequirement", - "description": "Foreign Language Requirement: 12 semester credit hours of Approved Language", - "metadata": { - "id": "765b7ca2-4f75-4f64-94b7-82643af28fe4" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LATS 3301", - "metadata": { - "id": "a0207a8b-4681-468e-b922-c1a49458dae5" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "HIST 3398", - "metadata": { - "id": "d076d94d-f034-4c87-9358-f0f7d6c0858c" - } - }, - { - "matcher": "CourseRequirement", - "course": "HIST 3399", - "metadata": { - "id": "3f20d9b4-8684-43fe-b09c-209f6f476a25" - } - } - ], - "metadata": { - "id": "bc35fa70-0bf4-4c4d-a8ee-14688d08b9c6" - } - } - ], - "metadata": { - "id": "97c380a9-ef4e-439b-b2f3-dc7e69b67b61" - } - }, - { - "matcher": "MultiGroupElectiveRequirement", - "requirement_count": 2, - "minimum_hours_in_area": 9, - "requirements": [ - { - "matcher": "SomeRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "HIST 3391", - "metadata": { - "id": "d20bec81-1c5a-4f1f-ab62-3e1b263db15c" - } - }, - { - "matcher": "CourseRequirement", - "course": "HIST 3398", - "metadata": { - "id": "5cdcc0fe-232d-4158-aa66-e873db370f73" - } - }, - { - "matcher": "CourseRequirement", - "course": "HIST 3399", - "metadata": { - "id": "226e034a-5e27-4801-9be6-64abc8d49709" - } - }, - { - "matcher": "CourseRequirement", - "course": "HIST 4369", - "metadata": { - "id": "2c2aa11c-9b33-4433-a43e-28a728a453f5" - } - }, - { - "matcher": "CourseRequirement", - "course": "HIST 4359", - "metadata": { - "id": "1ffbefc8-7303-44e6-ae8c-e91abf340803" - } - }, - { - "matcher": "CourseRequirement", - "course": "HIST 3397", - "metadata": { - "id": "c1fe3375-613b-4818-9ec0-5d7219e82ec5" - } - } - ], - "metadata": { - "id": "03d9b044-43b3-42e9-a696-5ce965bc5711" - } - }, - { - "matcher": "SomeRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CRIM 3319", - "metadata": { - "id": "8078d8e1-856c-4561-92ba-8af060863e67" - } - }, - { - "matcher": "CourseRequirement", - "course": "GEOG 2302", - "metadata": { - "id": "2ea04ad3-0f56-4e11-b0f5-8d892c128a8d" - } - }, - { - "matcher": "CourseRequirement", - "course": "GEOG 3304", - "metadata": { - "id": "03d68751-e15a-4db0-ac22-ffc795d1a664" - } - }, - { - "matcher": "CourseRequirement", - "course": "GEOG 3359", - "metadata": { - "id": "56c741f2-eced-48b1-b9d9-dcd54294c8df" - } - }, - { - "matcher": "CourseRequirement", - "course": "GEOS 2321", - "metadata": { - "id": "6c90ac01-abc2-4139-8b0c-addc80fb4829" - } - }, - { - "matcher": "CourseRequirement", - "course": "PSCI 4348", - "metadata": { - "id": "96880964-57d8-47b7-80ed-409a541c5905" - } - } - ], - "metadata": { - "id": "fc0fa575-34b4-4f01-bf5a-7decb27d21b1" - } - }, - { - "matcher": "SomeRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LATS 3301", - "metadata": { - "id": "931555e1-2ade-4146-8d1b-dacf26a46a9e" - } - }, - { - "matcher": "CourseRequirement", - "course": "LATS 3302", - "metadata": { - "id": "b59b66c9-556a-4d6d-93ff-3b9714ad68e3" - } - }, - { - "matcher": "CourseRequirement", - "course": "LATS 3303", - "metadata": { - "id": "7ceb698c-6d36-4c19-bfd0-79c12a97df1b" - } - }, - { - "matcher": "CourseRequirement", - "course": "LATS 4329", - "metadata": { - "id": "47790616-c876-493b-ad5e-9465ccc84d98" - } - }, - { - "matcher": "PrefixBucketRequirement", - "prefix": "SPAN 3", - "metadata": { - "id": "482370f8-6616-4b5a-af32-b7561b47cfb1" - } - }, - { - "matcher": "PrefixBucketRequirement", - "prefix": "SPAN 4", - "metadata": { - "id": "c6d830dd-7c7b-4b81-a97e-e7630e28bf7f" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "OtherRequirement", - "description": "LANG 4348, LIT 3319, and LIT 3337 with Latin American related subtitles will be allowed.", - "metadata": { - "id": "934503cf-7b2d-4527-9814-5cbcf55595fd" - } - } - ], - "metadata": { - "id": "885ab372-6eab-4a0f-b41e-11dbf1c56b22" - } - } - ], - "metadata": { - "id": "f2e7fcc9-bc58-468c-b23e-f3f219e686d0" - } - } - ], - "metadata": { - "id": "9d21ea86-a9b2-454e-b4f7-f08fe224d3eb" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-15" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 33, - "excluded_courses": [], - "metadata": { - "id": "d0a53bba-6902-4f97-88b8-06f14289c9be" - } - } - ] - }, - "display_name": "Latin American Studies(BA)", - "id": "94c9d9d6-ac7d-48f7-97de-265d988d5813" -} diff --git a/validator/degree_data/Literature Creative Writing Concentration(BA).json b/validator/degree_data/Literature Creative Writing Concentration(BA).json deleted file mode 100644 index b05ad490c..000000000 --- a/validator/degree_data/Literature Creative Writing Concentration(BA).json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/literature-creative-writing", - "minimum_credit_hours": 120, - "school": "School of Arts and Humanities", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "LIT 2350", - "metadata": { - "id": "d127bd1c-198b-41e5-9ce2-30859a16eb74" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LIT 2320", - "metadata": { - "id": "5bd74a04-74b9-4a2d-8e3e-246709f5a83b" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 2321", - "metadata": { - "id": "d45c59ac-d442-4e54-9652-8833f3fa5466" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 2322", - "metadata": { - "id": "27edcb39-d248-4f2e-8011-a7b118152da2" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 2331", - "metadata": { - "id": "b86351e6-3dec-4967-9ca6-611479c7f4cb" - } - } - ], - "metadata": { - "id": "be7d2724-c04f-46b4-a765-491b47dd9af9" - } - }, - { - "matcher": "CourseRequirement", - "course": "CRWT 2301", - "metadata": { - "id": "d2b57a43-399e-428c-bec3-32b7c48258f1" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 12, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LIT 3300", - "metadata": { - "id": "2eae70a5-b922-402c-9aab-d5522d1263c6" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 3339", - "metadata": { - "id": "23fa76f0-f282-40ab-9e5b-c67a52afa9e5" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 4329", - "metadata": { - "id": "55611dec-f78a-4d19-b7c2-a17b399f324c" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 4390", - "metadata": { - "id": "cce65cd2-ad5f-4678-86c4-ebaf2ec08f5f" - } - } - ], - "metadata": { - "id": "9cd2f699-212c-4bd4-bd08-66bbb7fbf6b5" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARHM 3342", - "metadata": { - "id": "ac6bbaa8-4a14-4ca8-9bc1-bd07a13dc7d4" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 3338", - "metadata": { - "id": "b9627a7a-a6c6-4534-998a-0ce55d8095a0" - } - }, - { - "matcher": "PrefixBucketRequirement", - "prefix": "CRWT 3", - "metadata": { - "id": "6567a3e7-58b9-4fc5-8dd8-6892f0b6725e" - } - }, - { - "matcher": "PrefixBucketRequirement", - "prefix": "CRWT 4", - "metadata": { - "id": "6567a3e7-58b9-4fc5-8dd8-6892f0b6725e" - } - } - ], - "metadata": { - "id": "9b5e13cf-4ba9-4dcb-aa03-567c6a4582c3" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LIT 3319", - "metadata": { - "id": "722d29d1-ef53-4b2b-aaef-48a68765955e" - } - } - ], - "metadata": { - "id": "f2b510ed-d080-455d-9b4f-9bd47247e5f3" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CRWT 3330", - "metadata": { - "id": "98d6b739-4e33-4466-8789-ee108de0f3b2" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 3337", - "metadata": { - "id": "f2ddcd98-de09-4898-8a7f-1258bc62cb36" - } - } - ], - "metadata": { - "id": "d5f58057-44da-455a-92e7-e1c3885517b7" - } - }, - { - "matcher": "OtherRequirement", - "description": "12 semester credit hours of upper-division creative writing workshops in at least two genres (e.g., poetry and fiction).", - "metadata": { - "id": "e44f3a0e-b091-4ac9-9e3e-810aa5a6c3c8" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours of foreign language, upper-division LIT, or CRWT electives.", - "metadata": { - "id": "a1a4d71f-a59b-4e86-814c-c8960e26dd69" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-15" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 30, - "excluded_courses": [], - "metadata": { - "id": "e86dd7bf-76a7-4a73-85b9-83a585f279df" - } - } - ] - }, - "display_name": "Literature with Creative Writing Concentration(BA)", - "id": "88631086-43f5-46e9-a2fc-8468c35f633b" -} diff --git a/validator/degree_data/Literature Rhetoric and Communication Concentration.json b/validator/degree_data/Literature Rhetoric and Communication Concentration.json deleted file mode 100644 index 1032aeee4..000000000 --- a/validator/degree_data/Literature Rhetoric and Communication Concentration.json +++ /dev/null @@ -1,267 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/literature-rhetoric-and-communication", - "minimum_credit_hours": 120, - "school": "School of Arts and Humanities", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "LIT 2350", - "metadata": { - "id": "d127bd1c-198b-41e5-9ce2-30859a16eb74" - } - }, - { - "matcher": "CourseRequirement", - "course": "RHET 2302", - "metadata": { - "id": "bdf3d45f-d9e2-4bde-8ac7-8fee5cba73ad" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LIT 2320", - "metadata": { - "id": "5bd74a04-74b9-4a2d-8e3e-246709f5a83b" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 2321", - "metadata": { - "id": "d45c59ac-d442-4e54-9652-8833f3fa5466" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 2322", - "metadata": { - "id": "27edcb39-d248-4f2e-8011-a7b118152da2" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 2331", - "metadata": { - "id": "b86351e6-3dec-4967-9ca6-611479c7f4cb" - } - } - ], - "metadata": { - "id": "be7d2724-c04f-46b4-a765-491b47dd9af9" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 12, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LIT 3300", - "metadata": { - "id": "0c77c5c9-f956-487b-93a6-ab1ebf5a8550" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 3339", - "metadata": { - "id": "985a9ea3-fe8c-41b8-9356-601a7b109f04" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 4329", - "metadata": { - "id": "84615b45-fb62-4303-a9aa-3e94d903cb83" - } - }, - { - "matcher": "CourseRequirement", - "course": "ISAH 4V50", - "metadata": { - "id": "5c5237e0-7d1d-4b28-be0f-e5b58ccef1e5" - } - } - ], - "metadata": { - "id": "9cd2f699-212c-4bd4-bd08-66bbb7fbf6b5" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARHM 3342", - "metadata": { - "id": "ac6bbaa8-4a14-4ca8-9bc1-bd07a13dc7d4" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 3338", - "metadata": { - "id": "b9627a7a-a6c6-4534-998a-0ce55d8095a0" - } - }, - { - "matcher": "PrefixBucketRequirement", - "prefix": "CRWT 3", - "metadata": { - "id": "6567a3e7-58b9-4fc5-8dd8-6892f0b6725e" - } - }, - { - "matcher": "PrefixBucketRequirement", - "prefix": "CRWT 4", - "metadata": { - "id": "6567a3e7-58b9-4fc5-8dd8-6892f0b6725e" - } - } - ], - "metadata": { - "id": "9b5e13cf-4ba9-4dcb-aa03-567c6a4582c3" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LIT 3319", - "metadata": { - "id": "722d29d1-ef53-4b2b-aaef-48a68765955e" - } - } - ], - "metadata": { - "id": "f2b510ed-d080-455d-9b4f-9bd47247e5f3" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CRWT 3330", - "metadata": { - "id": "98d6b739-4e33-4466-8789-ee108de0f3b2" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 3337", - "metadata": { - "id": "f2ddcd98-de09-4898-8a7f-1258bc62cb36" - } - } - ], - "metadata": { - "id": "d5f58057-44da-455a-92e7-e1c3885517b7" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 15, - "requirements": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "RHET 3302", - "metadata": { - "id": "877891d2-c358-4997-9656-511df571a8ec" - } - }, - { - "matcher": "CourseRequirement", - "course": "RHET 3303", - "metadata": { - "id": "cdb1ab5e-a2c3-4eeb-83e4-9d37fe511cf8" - } - } - ], - "metadata": { - "id": "b2ac1b90-66c3-4478-9896-cc86395f28d6" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 3351", - "metadata": { - "id": "489d1444-d624-439f-8127-f2913b513b10" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "RHET 4302", - "metadata": { - "id": "43bc8d54-f4b5-4859-b6dc-3d5a8e27ec0c" - } - }, - { - "matcher": "CourseRequirement", - "course": "RHET 4303", - "metadata": { - "id": "f6e7cc7e-4926-4334-b131-160538a02798" - } - } - ], - "metadata": { - "id": "197d42c2-8b95-4d07-b22e-6ff7a74770fa" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4314", - "metadata": { - "id": "c0d432fc-26ae-40a6-b5f7-3382bb48942f" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4371", - "metadata": { - "id": "4e8eb7f0-e990-45ed-8dac-f3fe41f135c1" - } - } - ], - "metadata": { - "id": "8cee4b06-1f80-4ec3-9362-de837c44a92c" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-15" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 33, - "excluded_courses": [], - "metadata": { - "id": "e86dd7bf-76a7-4a73-85b9-83a585f279df" - } - } - ] - }, - "display_name": "Literature with Rhetoric and Communication Concentration(BA)", - "id": "1a6c7984-cff5-4945-93b0-ece18543e189" -} diff --git a/validator/degree_data/Literature Spanish Concentration.json b/validator/degree_data/Literature Spanish Concentration.json deleted file mode 100644 index 81eb3ddb9..000000000 --- a/validator/degree_data/Literature Spanish Concentration.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/literature-spanish", - "minimum_credit_hours": 120, - "school": "School of Arts and Humanities", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "LIT 2350", - "metadata": { - "id": "d127bd1c-198b-41e5-9ce2-30859a16eb74" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LIT 2320", - "metadata": { - "id": "5bd74a04-74b9-4a2d-8e3e-246709f5a83b" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 2321", - "metadata": { - "id": "d45c59ac-d442-4e54-9652-8833f3fa5466" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 2322", - "metadata": { - "id": "27edcb39-d248-4f2e-8011-a7b118152da2" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 2331", - "metadata": { - "id": "b86351e6-3dec-4967-9ca6-611479c7f4cb" - } - } - ], - "metadata": { - "id": "be7d2724-c04f-46b4-a765-491b47dd9af9" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 12, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LIT 3300", - "metadata": { - "id": "0c77c5c9-f956-487b-93a6-ab1ebf5a8550" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 3339", - "metadata": { - "id": "985a9ea3-fe8c-41b8-9356-601a7b109f04" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 4329", - "metadata": { - "id": "84615b45-fb62-4303-a9aa-3e94d903cb83" - } - }, - { - "matcher": "CourseRequirement", - "course": "ISAH 4V50", - "metadata": { - "id": "5c5237e0-7d1d-4b28-be0f-e5b58ccef1e5" - } - } - ], - "metadata": { - "id": "9cd2f699-212c-4bd4-bd08-66bbb7fbf6b5" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARHM 3342", - "metadata": { - "id": "ac6bbaa8-4a14-4ca8-9bc1-bd07a13dc7d4" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 3338", - "metadata": { - "id": "b9627a7a-a6c6-4534-998a-0ce55d8095a0" - } - }, - { - "matcher": "PrefixBucketRequirement", - "prefix": "CRWT 3", - "metadata": { - "id": "6567a3e7-58b9-4fc5-8dd8-6892f0b6725e" - } - }, - { - "matcher": "PrefixBucketRequirement", - "prefix": "CRWT 4", - "metadata": { - "id": "6567a3e7-58b9-4fc5-8dd8-6892f0b6725e" - } - } - ], - "metadata": { - "id": "9b5e13cf-4ba9-4dcb-aa03-567c6a4582c3" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "LIT 3319", - "metadata": { - "id": "722d29d1-ef53-4b2b-aaef-48a68765955e" - } - } - ], - "metadata": { - "id": "f2b510ed-d080-455d-9b4f-9bd47247e5f3" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "CRWT 3330", - "metadata": { - "id": "98d6b739-4e33-4466-8789-ee108de0f3b2" - } - }, - { - "matcher": "CourseRequirement", - "course": "LIT 3337", - "metadata": { - "id": "f2ddcd98-de09-4898-8a7f-1258bc62cb36" - } - } - ], - "metadata": { - "id": "d5f58057-44da-455a-92e7-e1c3885517b7" - } - }, - { - "matcher": "OtherRequirement", - "description": "Select 15 semester credit hours of SPAN electives (at least 6 semester credit hours must be at the upper-level). Students who do not place into SPAN 1312 will also need to complete SPAN 1311.", - "metadata": { - "id": "e9132a2a-4747-4ffa-afcb-f35bafd10312" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-15" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 33, - "excluded_courses": [], - "metadata": { - "id": "e86dd7bf-76a7-4a73-85b9-83a585f279df" - } - } - ] - }, - "display_name": "Literature with Spanish Concentration(BA)", - "id": "ebfad274-8ba1-4e7e-ae4d-4543deb8a661" -} diff --git a/validator/degree_data/Speech, Language, and Hearing Sciences(BS).json b/validator/degree_data/Speech, Language, and Hearing Sciences(BS).json deleted file mode 100644 index 222d470fb..000000000 --- a/validator/degree_data/Speech, Language, and Hearing Sciences(BS).json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/bbs/speech-language-and-hearing-sciences", - "minimum_credit_hours": 120, - "school": "School of Behavioral and Brain Sciences", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "AndRequirement", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-0", - "name": "Major Preparatory Courses" - }, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "PSY 2301", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-1" - } - }, - { - "matcher": "CourseRequirement", - "course": "BBSU 1100", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-2" - } - } - ] - }, - { - "matcher": "AndRequirement", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-3", - "name": "Major Core Courses" - }, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "SPAU 3301", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-4" - } - }, - { - "matcher": "CourseRequirement", - "course": "SPAU 3303", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-5" - } - }, - { - "matcher": "CourseRequirement", - "course": "SPAU 3304", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-6" - } - }, - { - "matcher": "CourseRequirement", - "course": "SPAU 3340", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-7" - } - }, - { - "matcher": "CourseRequirement", - "course": "SPAU 3341", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-8" - } - }, - { - "matcher": "CourseRequirement", - "course": "SPAU 3343", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-9" - } - }, - { - "matcher": "CourseRequirement", - "course": "SPAU 3344", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-10" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "SPAU 3345", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-12" - } - }, - { - "matcher": "CourseRequirement", - "course": "NSC 3361", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-13" - } - } - ], - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-11" - } - }, - { - "matcher": "CourseRequirement", - "course": "SPAU 3388", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-14" - } - }, - { - "matcher": "CourseRequirement", - "course": "SPAU 4308", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-15" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "SPAU 4394", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-17" - } - }, - { - "matcher": "CourseRequirement", - "course": "SPAU 4393", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-18" - } - } - ], - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-16" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "PrefixBucketRequirement", - "prefix": "SPAU", - "metadata": { - "id": "b1d8b401-87f1-41b8-8555-5312ff312848" - } - } - ], - "metadata": { - "id": "c0da5286-1846-4eed-af45-72dc5cbc6305" - } - } - ] - }, - { - "excluded_courses": [], - "matcher": "FreeElectiveRequirement", - "metadata": { - "id": "Speech, Language, and Hearing Sciences(BS)-20", - "name": "Free Electives" - }, - "required_hours": 42 - } - ] - }, - "display_name": "Speech, Language, and Hearing Sciences(BS)", - "id": "4e3584c3-ac66-4f1e-8ee9-a90789ce54ef" -} diff --git a/validator/degree_data/Visual Performing Arts Art History Concentration(BA).json b/validator/degree_data/Visual Performing Arts Art History Concentration(BA).json deleted file mode 100644 index d5e403bd2..000000000 --- a/validator/degree_data/Visual Performing Arts Art History Concentration(BA).json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/visual-and-performing-arts-art-history", - "minimum_credit_hours": 120, - "school": "School of Arts, Humanities, and Technology", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "AHST 1303", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-0" - } - }, - { - "matcher": "CourseRequirement", - "course": "AHST 1304", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-1" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 3340", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-2" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4389", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-3" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "VPAS 4390", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-5" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4V99", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-6" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-4" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARTS 3311", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4310", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-9" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4370", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-10" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4371", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-11" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 3301", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-12" - } - }, - { - "matcher": "CourseRequirement", - "course": "ISAH 4V50", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-13" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4310", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-14" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-7" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-15" - } - }, - { - "matcher": "OtherRequirement", - "description": "15 semester credit hours of upper-division Historical Context courses", - "metadata": { - "id": "ef71b958-4d4f-450b-9bdd-2beba5f94df5" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours of upper-level Related Courses from the School of Arts and Humanities (excluding the AHST prefix)", - "metadata": { - "id": "22774bf5-b1e4-4259-8438-8c4560a0b343" - } - }, - { - "matcher": "OtherRequirement", - "description": "9 semester credit hours of upper-division Visual and Performing Arts electives", - "metadata": { - "id": "82e499cb-6b3b-4540-b0e0-f47f355750a3" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 39, - "excluded_courses": [], - "metadata": { - "id": "Visual and Performing Arts with Art History Concentration (BA)-16" - } - } - ] - }, - "display_name": "Visual and Performing Arts with Art History Concentration(BA)", - "id": "d6e3d0c6-5b6b-4d47-a6c5-3bc735707760" -} diff --git a/validator/degree_data/Visual Performing Arts Communication Concentration(BA).json b/validator/degree_data/Visual Performing Arts Communication Concentration(BA).json deleted file mode 100644 index 2c56a8104..000000000 --- a/validator/degree_data/Visual Performing Arts Communication Concentration(BA).json +++ /dev/null @@ -1,353 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/visual-and-performing-arts-communication", - "minimum_credit_hours": 120, - "school": "School of Arts, Humanities, and Technology", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "AHST 1303", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-1" - } - }, - { - "matcher": "CourseRequirement", - "course": "AHST 1304", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-2" - } - }, - { - "matcher": "CourseRequirement", - "course": "AHST 2331", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-3" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 1301", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-4" - } - }, - { - "matcher": "CourseRequirement", - "course": "DANC 1305", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-5" - } - }, - { - "matcher": "CourseRequirement", - "course": "DANC 1310", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-6" - } - }, - { - "matcher": "CourseRequirement", - "course": "FILM 1303", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-7" - } - }, - { - "matcher": "CourseRequirement", - "course": "THEA 1310", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-8" - } - }, - { - "matcher": "CourseRequirement", - "course": "FILM 2332", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-9" - } - }, - { - "matcher": "CourseRequirement", - "course": "MUSI 1306", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-10" - } - }, - { - "matcher": "CourseRequirement", - "course": "MUSI 2322", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-11" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-0" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "COMM 1320", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-13" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 1315", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-14" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 2314", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-15" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 2317", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-16" - } - }, - { - "matcher": "CourseRequirement", - "course": "THEA 1351", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-17" - } - }, - { - "matcher": "CourseRequirement", - "course": "THEA 1352", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-18" - } - }, - { - "matcher": "CourseRequirement", - "course": "THEA 2372", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-19" - } - }, - { - "matcher": "CourseRequirement", - "course": "THEA 2373", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-20" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-12" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 3340", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-21" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4389", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-22" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "VPAS 4390", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-24" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4V99", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-25" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-23" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours of upper-level Related Courses from the School of Arts and Humanities (excluding the COMM prefix)", - "metadata": { - "id": "ac3dd31e-639d-4158-8e4b-502dcff944f8" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARTS 3311", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-27" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4310", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-28" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4370", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-29" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4371", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-30" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 3301", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-31" - } - }, - { - "matcher": "CourseRequirement", - "course": "ISAH 4V50", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-32" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4310", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-33" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-26" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 3351", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-34" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4360", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-35" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4314", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-36" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "COMM 3320", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-38" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 3321", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-39" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 3340", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-40" - } - }, - { - "matcher": "CourseRequirement", - "course": "THEA 3372", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-41" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-37" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 9, - "requirements": [ - { - "matcher": "PrefixBucketRequirement", - "prefix": "COMM", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-42" - } - } - ], - "metadata": { - "id": "6553dec8-9b57-4f77-ab43-0737ab163c8d" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-43" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 39, - "excluded_courses": [], - "metadata": { - "id": "Visual and Performing Arts with Communication Concentration (BA)-44" - } - } - ] - }, - "display_name": "Visual and Performing Arts with Communication Concentration(BA)", - "id": "af615bab-3065-44a1-b336-1ff7a40f3471" -} diff --git a/validator/degree_data/Visual Performing Arts Dance Concentration(BA).json b/validator/degree_data/Visual Performing Arts Dance Concentration(BA).json deleted file mode 100644 index f70de8008..000000000 --- a/validator/degree_data/Visual Performing Arts Dance Concentration(BA).json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/visual-and-performing-arts-dance", - "minimum_credit_hours": 120, - "school": "School of Arts, Humanities, and Technology", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "DANC 1310", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-0" - } - }, - { - "matcher": "CourseRequirement", - "course": "DANC 1305", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-1" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours from a DANC studio", - "metadata": { - "id": "5d273cbb-647c-44d1-ad17-495dd9cc7f22" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours from a DANC/THEA/MUSI studio ensemble course", - "metadata": { - "id": "b2ac2e7d-6314-4f0d-9217-64d87636c6b0" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 3340", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-2" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4389", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-3" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "VPAS 4390", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-5" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4V99", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-6" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-4" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours of upper-level Related Courses from the School of Arts and Humanities (excluding the DANC prefix)", - "metadata": { - "id": "f9b4b7c6-eba5-492f-881e-9fb202fc0eab" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARTS 3311", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4310", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-9" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4370", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-10" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4371", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-11" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 3301", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-12" - } - }, - { - "matcher": "CourseRequirement", - "course": "ISAH 4V50", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-13" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4310", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-14" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-7" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "DANC 3340", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-16" - } - }, - { - "matcher": "OtherRequirement", - "description": "Upper-Level Visual and Performing Arts Historical Context course", - "metadata": { - "id": "c1a4e865-9ddc-4a32-ae83-d34aec63a190" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-15" - } - }, - { - "matcher": "OtherRequirement", - "description": "12 semester credit hours of 3000/4000-level Dance Studio and Ensemble courses", - "metadata": { - "id": "5a5874fa-f93b-4677-94aa-b84439a3cab1" - } - }, - { - "matcher": "CourseRequirement", - "course": "DANC 3347", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-17" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "DANC 3345", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-19" - } - }, - { - "matcher": "CourseRequirement", - "course": "DANC 4317", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-20" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-18" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours of upper-division Visual and Performing Arts elective", - "metadata": { - "id": "8ea0d952-6db7-427a-b610-f7dd9d8b6902" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-21" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 33, - "excluded_courses": [], - "metadata": { - "id": "Visual and Performing Arts with Dance Concentration (BA)-22" - } - } - ] - }, - "display_name": "Visual and Performing Arts with Dance Concentration(BA)", - "id": "190eb0af-1013-4401-87c3-a14129a9e46e" -} diff --git a/validator/degree_data/Visual Performing Arts Film Concentration(BA).json b/validator/degree_data/Visual Performing Arts Film Concentration(BA).json deleted file mode 100644 index da370a2fe..000000000 --- a/validator/degree_data/Visual Performing Arts Film Concentration(BA).json +++ /dev/null @@ -1,339 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/visual-and-performing-arts-film", - "minimum_credit_hours": 120, - "school": "School of Arts, Humanities, and Technology", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "FILM 2332", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-0" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours of lower-level Visual and Performing Arts Prep Course", - "metadata": { - "id": "e9ce0d6f-c441-4c77-ab0b-063ec483bf2f" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 3340", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-1" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4389", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-2" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "VPAS 4390", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-4" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4V99", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-5" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-3" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours of upper-level Related Courses from the School of Arts and Humanities (excluding the AHST prefix)", - "metadata": { - "id": "0ff2d0b1-571f-4cda-ada8-1a95db7b0c36" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARTS 3311", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-7" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4310", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-8" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4370", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-9" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4371", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-10" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 3301", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-11" - } - }, - { - "matcher": "CourseRequirement", - "course": "ISAH 4V50", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-12" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4310", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-13" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-6" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 9, - "requirements": [ - { - "matcher": "SomeRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "FILM 3321", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-15" - } - }, - { - "matcher": "CourseRequirement", - "course": "FILM 3325", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-16" - } - } - ], - "metadata": { - "id": "22c4107e-17ee-4774-9ebc-5c051400092c" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-14" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "FILM 3321", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-18" - } - }, - { - "matcher": "CourseRequirement", - "course": "FILM 3325", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-19" - } - }, - { - "matcher": "CourseRequirement", - "course": "FILM 3342", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-20" - } - }, - { - "matcher": "CourseRequirement", - "course": "FILM 4V71", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-21" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-17" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 6, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "AHST 3324", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-23" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2322", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-24" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 2321", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-25" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3321", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-26" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3325", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-27" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 3331", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-28" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4322", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-29" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4323", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-30" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4325", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-31" - } - }, - { - "matcher": "CourseRequirement", - "course": "ATCM 4327", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-32" - } - }, - { - "matcher": "CourseRequirement", - "course": "BIS 3320", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-33" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 3352", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-34" - } - }, - { - "matcher": "CourseRequirement", - "course": "CRWT 3354", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-35" - } - }, - { - "matcher": "CourseRequirement", - "course": "CRWT 4355", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-36" - } - }, - { - "matcher": "CourseRequirement", - "course": "GST 2300", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-37" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-22" - } - }, - { - "matcher": "OtherRequirement", - "description": "6 semester credit hours of upper-division Visual and Performing Arts electives: Students may select any combination of upper-division courses in Art History, Communication, Dance, Film Studies, Music, Theatre, Visual Art, and/or Visual and Performing Arts.", - "metadata": { - "id": "a33242cb-a20d-4831-8162-6a46fe61d196" - } - }, - { - "matcher": "OtherRequirement", - "description": "6 semester credit hours of Major Related courses: Students may select any combination of upper-division courses from the School of Arts and Humanities.", - "metadata": { - "id": "cd45515c-f6be-4cde-a2c3-da3d5244c24f" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-38" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 30, - "excluded_courses": [], - "metadata": { - "id": "Visual and Performing Arts with Film Concentration (BA)-39" - } - } - ] - }, - "display_name": "Visual and Performing Arts with Film Concentration(BA)", - "id": "8dbe0f05-4418-4e9c-9aca-7fb43da79d6e" -} diff --git a/validator/degree_data/Visual Performing Arts Interdisciplinary Arts Concentration(BA).json b/validator/degree_data/Visual Performing Arts Interdisciplinary Arts Concentration(BA).json deleted file mode 100644 index ff035c6ab..000000000 --- a/validator/degree_data/Visual Performing Arts Interdisciplinary Arts Concentration(BA).json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/visual-and-performing-arts-interdisciplinary-arts", - "minimum_credit_hours": 120, - "school": "School of Arts, Humanities, and Technology", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "OtherRequirement", - "description": "Discipline I Prep Course: 15 semester credit hours of lower-division AHST, ARTS, COMM, FILM, DANC, MUSI, or THEA courses.", - "metadata": { - "id": "46fb6f19-951a-4b8e-ae45-ecf5219a4e99" - } - }, - { - "matcher": "OtherRequirement", - "description": "Discipline II Prep Course: 15 semester credit hours of lower-division AHST, ARTS, COMM, FILM, DANC, MUSI, or THEA courses.", - "metadata": { - "id": "eb4b3c85-93fd-475f-8c08-5d897c721717" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 3340", - "metadata": { - "id": "Visual and Performing Arts with Interdisciplinary Arts Concentration (BA)-1" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4389", - "metadata": { - "id": "Visual and Performing Arts with Interdisciplinary Arts Concentration (BA)-2" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "VPAS 4390", - "metadata": { - "id": "Visual and Performing Arts with Interdisciplinary Arts Concentration (BA)-4" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4V99", - "metadata": { - "id": "Visual and Performing Arts with Interdisciplinary Arts Concentration (BA)-5" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Interdisciplinary Arts Concentration (BA)-3" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours of upper-level Related Courses from the School of Arts and Humanities (excluding prefixes used in Discipline I and II)", - "metadata": { - "id": "900fc105-a13e-447e-9424-9920151fbc83" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "VPAS 4310", - "metadata": { - "id": "f6a5c266-f737-4e56-a4e3-0e8bd400435f" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 3311", - "metadata": { - "id": "73bfaecd-4ff8-4d21-af50-6b52a2a6990f" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4310", - "metadata": { - "id": "238f32b6-552a-4edd-b13c-512fc0a2e449" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4370", - "metadata": { - "id": "c4160033-f843-4705-af24-6e701c4ec3a8" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4371", - "metadata": { - "id": "53a923d1-0a86-4c15-bc92-c9e51410547e" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 3301", - "metadata": { - "id": "7156634f-3a25-49ea-af76-e8d49e0829c8" - } - }, - { - "matcher": "CourseRequirement", - "course": "ISAH 4V50", - "metadata": { - "id": "2d540f59-d3b1-47c1-9940-421fb52bc180" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Interdisciplinary Arts Concentration (BA)-6" - } - }, - { - "matcher": "OtherRequirement", - "description": "Discipline I: Select 15 semester credit hours of upper-division AHST, ARTS, COMM, FILM, DANC, MUSI, or THEA courses (within the same prefix)", - "metadata": { - "id": "8f2a8027-9cb1-4af2-ab99-325625504da0" - } - }, - { - "matcher": "OtherRequirement", - "description": "Discipline I: Select 3 semester credit hours of upper-division AHST, ARTS, COMM, FILM, DANC, MUSI, or THEA courses (within the same prefix, but not the same prefix as Discipline I).", - "metadata": { - "id": "50e75242-7d20-4374-aca3-0ff6c21fe7f2" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Interdisciplinary Arts Concentration (BA)-14" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 33, - "excluded_courses": [], - "metadata": { - "id": "Visual and Performing Arts with Interdisciplinary Arts Concentration (BA)-15" - } - } - ] - }, - "display_name": "Visual and Performing Arts with Interdisciplinary Arts Concentration(BA)", - "id": "fe134434-be66-42d0-b9bc-a3e3010d47b5" -} diff --git a/validator/degree_data/Visual Performing Arts Music Concentration(BA).json b/validator/degree_data/Visual Performing Arts Music Concentration(BA).json deleted file mode 100644 index 9c0f8404c..000000000 --- a/validator/degree_data/Visual Performing Arts Music Concentration(BA).json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/visual-and-performing-arts-music", - "minimum_credit_hours": 120, - "school": "School of Arts, Humanities, and Technology", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "MUSI 2328", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-0" - } - }, - { - "matcher": "CourseRequirement", - "course": "MUSI 2329", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-1" - } - }, - { - "matcher": "CourseRequirement", - "course": "MUSI 2330", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-2" - } - }, - { - "matcher": "CourseRequirement", - "course": "MUSI 2322", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-3" - } - }, - { - "matcher": "CourseRequirement", - "course": "MUSI 3330", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-4" - } - }, - { - "matcher": "CourseRequirement", - "course": "MUSI 3328", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-5" - } - }, - { - "matcher": "OtherRequirement", - "description": "12 semester credit hours of Applied Music courses in primary instrument or voice (at least 8 semester credit hours must be upper-level)", - "metadata": { - "id": "b257f32a-da43-41ed-be36-c41ea9aeef9e" - } - }, - { - "matcher": "OtherRequirement", - "description": "8 semester credit hours of MUSI ensemble participation. Placement by audition", - "metadata": { - "id": "0f85c796-5ee8-4df9-99b7-10caca8b2c8b" - } - }, - { - "matcher": "OtherRequirement", - "description": "15 semester credit hours of upper-level MUSI Electives", - "metadata": { - "id": "86b9c3bc-26ca-49cb-a471-fa36f89d2b1c" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 3340", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-6" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4389", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-7" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "VPAS 4390", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-9" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4V99", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-10" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-8" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours of upper-level Related Courses from the School of Arts and Humanities (excluding the MUSI prefix)", - "metadata": { - "id": "80dbd6e3-28a9-4f1f-9bf3-181ba89cd0d5" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARTS 3311", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-12" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4310", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-13" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4370", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-14" - } - }, - { - "matcher": "CourseRequirement", - "course": "COMM 4371", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-15" - } - }, - { - "matcher": "CourseRequirement", - "course": "ENTP 3301", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-16" - } - }, - { - "matcher": "CourseRequirement", - "course": "ISAH 4V50", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-17" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4310", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-18" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-11" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-19" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 13, - "excluded_courses": [], - "metadata": { - "id": "Visual and Performing Arts with Music Concentration (BA)-20" - } - } - ] - }, - "display_name": "Visual and Performing Arts with Music Concentration(BA)", - "id": "b32153b8-4fa2-4c56-b16f-4e6d9877b9f8" -} diff --git a/validator/degree_data/Visual Performing Arts Photo Video Digital Concentration(BA).json b/validator/degree_data/Visual Performing Arts Photo Video Digital Concentration(BA).json deleted file mode 100644 index 047cf443d..000000000 --- a/validator/degree_data/Visual Performing Arts Photo Video Digital Concentration(BA).json +++ /dev/null @@ -1,344 +0,0 @@ -{ - "catalog_uri": "https://catalog.utdallas.edu/2022/undergraduate/programs/ah/visual-and-performing-arts-photo-video-digital", - "minimum_credit_hours": 120, - "school": "School of Arts, Humanities, and Technology", - "subtype": "Major", - "year": "2022-2023", - "requirements": { - "core": "@import ./core.json", - "major": [ - { - "matcher": "CourseRequirement", - "course": "ARTS 2380", - "metadata": { - "id": "3a14e050-b67c-4e2d-9535-cdda646d3ef3" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "AHST 1303", - "metadata": { - "id": "c1dbdf05-1be2-4665-a6af-966c292fb978" - } - }, - { - "matcher": "CourseRequirement", - "course": "AHST 1304", - "metadata": { - "id": "e9160627-ee49-4ab4-863d-3ba3f885e4e2" - } - }, - { - "matcher": "CourseRequirement", - "course": "AHST 2331", - "metadata": { - "id": "8677690d-0297-48de-9dfa-86c332342ddc" - } - }, - { - "matcher": "CourseRequirement", - "course": "FILM 2332", - "metadata": { - "id": "44bde8ba-5e2e-4d26-aff8-aba6630e2c6a" - } - } - ], - "metadata": { - "id": "d1d23add-6edc-4b60-9ab4-7b6ff5f38b74" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 9, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARTS 1316", - "metadata": { - "id": "7e84cfff-e5f6-4009-8df4-22f592ca8e96" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 2315", - "metadata": { - "id": "ffe5c226-7ead-4b2c-a57c-be56948454b4" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 2316", - "metadata": { - "id": "adaf0c7f-01b8-4157-a315-c0074dc20e31" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 2350", - "metadata": { - "id": "ad67ce13-e769-46ec-bb57-14b16e5c84d7" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 2381", - "metadata": { - "id": "5d2add7f-d353-474a-a9f5-eb513971bf9b" - } - } - ], - "metadata": { - "id": "ebbaa99f-90d4-44ac-96a1-738ef8ed2f22" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 3340", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-0" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4389", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-1" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "VPAS 4390", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-3" - } - }, - { - "matcher": "CourseRequirement", - "course": "VPAS 4V99", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-4" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-2" - } - }, - { - "matcher": "OtherRequirement", - "description": "3 semester credit hours of upper-level Related Courses from the School of Arts and Humanities (excluding the ARTS prefix)", - "metadata": { - "id": "32cd2fb0-4ffa-43e0-a4fb-b5708b0f9874" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARTS 3311", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-6" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4310", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-7" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-5" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "AHST 3318", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-14" - } - }, - { - "matcher": "CourseRequirement", - "course": "AHST 3319", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-15" - } - }, - { - "matcher": "OrRequirement", - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "AHST 3324", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-16" - } - }, - { - "matcher": "PrefixBucketRequirement", - "prefix": "FILM 3", - "metadata": { - "id": "259c203a-a4ea-4b52-bb95-61f725bca8f0" - } - }, - { - "matcher": "PrefixBucketRequirement", - "prefix": "FILM 4", - "metadata": { - "id": "0341b5f1-bccc-4b91-9667-da077f2b9159" - } - } - ], - "metadata": { - "id": "56df9843-3297-49ba-a216-8381075b9e41" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-13" - } - }, - { - "matcher": "OtherRequirement", - "description": "Select any 3 semester credit hours of upper-level AHST or FILM courses", - "metadata": { - "id": "aea5d237-8416-44bb-93f7-9090f2ee3383" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 9, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARTS 3371", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-18" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 3372", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-19" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 3376", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-20" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 3377", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-21" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 3379", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-22" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 3381", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-23" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-17" - } - }, - { - "matcher": "HoursRequirement", - "required_hours": 3, - "requirements": [ - { - "matcher": "CourseRequirement", - "course": "ARTS 4308", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-25" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4368", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-26" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4372", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-27" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARTS 4V71", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-28" - } - } - ], - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-24" - } - }, - { - "matcher": "OtherRequirement", - "description": "Select any 3 semester credit hours from any 4000 level ARTS studio course", - "metadata": { - "id": "0d399b67-8a65-47b0-808d-7e92b4d6bb83" - } - }, - { - "matcher": "OtherRequirement", - "description": "Select any 6 semester credit hours upper level VPA courses from the following prefixes: AHST, ARTS, COMM, DANC, FILM, MUSI, THEA", - "metadata": { - "id": "189fb207-8e41-4626-be32-95491fc8feae" - } - }, - { - "matcher": "CourseRequirement", - "course": "ARHM 1100", - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-29" - } - }, - { - "matcher": "FreeElectiveRequirement", - "required_hours": 24, - "excluded_courses": [], - "metadata": { - "id": "Visual and Performing Arts with Photo-Video-Digital Concentration (BA)-30" - } - } - ] - }, - "display_name": "Visual and Performing Arts with Photo-Video-Digital Concentration(BA)", - "id": "1b1cf724-d5ba-44fa-b996-65fb3d916f3d" -} diff --git a/validator/degree_solver.py b/validator/degree_solver.py index b2b5ae06f..4d79f5d7c 100644 --- a/validator/degree_solver.py +++ b/validator/degree_solver.py @@ -1,11 +1,12 @@ from __future__ import annotations from enum import Enum from glob import glob -from collections import Counter +from collections import Counter, defaultdict +from pathlib import Path from pydantic import Json -from typing import Any +from typing import Any, DefaultDict import core from major.requirements import AbstractRequirement, FreeElectiveRequirement @@ -24,11 +25,14 @@ # Read all degree plan JSON files and store their contents in a hashmap # This is so that we can avoid reading all the files each time we want to get the data for a certain course -degree_plans = {} -for fname in glob("degree_data/*.json"): +degree_plans: DefaultDict[str, DefaultDict[str, dict[str, Any]]] = defaultdict( + lambda: defaultdict(dict) +) + +for fname in glob("degree_data/*/*.json"): with open(fname, "r") as f: data = json.load(f) - degree_plans[data["display_name"]] = data + degree_plans[Path(fname).parts[1]][data["display_name"]] = data @dataclass @@ -78,6 +82,7 @@ class DegreeRequirementsInput: Sample DegreeRequirementsInput: core: true + year: 2022 majors: ["Computer Science(BS)"] minors: ["History"] other: [] @@ -86,6 +91,7 @@ class DegreeRequirementsInput: Computer Science, and History requirements. """ + year: int # We use an int for year because we perform arithmetic to find a fallback year majors: list[str] # TODO: Change to Enum in the future minors: list[str] # TODO: Change to Enum in the future other: list[str] # TODO: Change to Enum in the future @@ -139,6 +145,12 @@ class DegreeRequirementsSolverException(Exception): pass +class DegreeNotFoundException(Exception): + """Exception raised if the requested degree plan could not be found.""" + + pass + + class DegreeRequirementsSolver: def __init__( self, @@ -175,10 +187,32 @@ def load_requirements( # Logic for adding majors for input_req in degree_requirements_input.majors: # Get major data from json - if input_req not in degree_plans: - print("Error: degree plan not found!") - return [] - requirements_data = degree_plans[input_req]["requirements"]["major"] + year = degree_requirements_input.year + if input_req not in degree_plans[str(year)]: + # Check if the years before this one have it + y = year + while str(y := y - 1) in degree_plans: + if input_req in degree_plans[str(y)]: + year = y + break + if ( + year != degree_requirements_input.year + ): # The using_year has been replaced to a working year + break + # Check if the years after this one have it + y = year + while str(y := y + 1) in degree_plans: + if input_req in degree_plans[str(y)]: + year = y + break + if ( + year != degree_requirements_input.year + ): # The using_year has been replaced to a working year + break + raise DegreeNotFoundException + requirements_data = degree_plans[str(year)][input_req]["requirements"][ + "major" + ] major_req = DegreeRequirement( input_req, diff --git a/validator/major/tests/test_degrees.py b/validator/major/tests/test_degrees.py index f578dd790..2836a4f1f 100644 --- a/validator/major/tests/test_degrees.py +++ b/validator/major/tests/test_degrees.py @@ -3,18 +3,18 @@ from jsonschema import Draft7Validator, validate from major.requirements import loader import json -from os import DirEntry, scandir +from glob import glob import pytest -DEGREE_DATA_FILES = list(scandir("./degree_data")) +DEGREE_DATA_FILES = glob("./degree_data/*/*") # ensure degree data's are valid @pytest.mark.parametrize( "file", DEGREE_DATA_FILES, ids=lambda file: "file={}".format(file) ) -def test_degrees(file: DirEntry[str]) -> None: +def test_degrees(file: str) -> None: data = json.loads(open(file, "r").read()) requirements = data["requirements"]["major"] @@ -35,10 +35,7 @@ def test_degrees(file: DirEntry[str]) -> None: @pytest.mark.parametrize( "file", DEGREE_DATA_FILES, ids=lambda file: "file={}".format(file) ) -def test_degrees_include_first_year_seminar(file: DirEntry[str]) -> None: - degrees_with_no_seminar = ["Data Science(BS).json"] - if file.name in degrees_with_no_seminar: - return +def test_degrees_include_first_year_seminar(file: str) -> None: f = open(file, "r").read() data = json.loads(f) first_year_seminar_courses = { @@ -64,7 +61,7 @@ def test_degrees_include_first_year_seminar(file: DirEntry[str]) -> None: @pytest.mark.parametrize( "file", DEGREE_DATA_FILES, ids=lambda file: "file={}".format(file) ) -def test_req_metadata(file: DirEntry[str]) -> None: +def test_req_metadata(file: str) -> None: data = json.loads(open(file, "r").read()) requirements = data["requirements"]["major"] @@ -86,7 +83,7 @@ def check_metadata(requirement: dict[str, Any]) -> None: @pytest.mark.parametrize( "file", DEGREE_DATA_FILES, ids=lambda file: "file={}".format(file) ) -def test_degree_schema(file: DirEntry[str]) -> None: +def test_degree_schema(file: str) -> None: # NOTE: if this test fails, there's probably something wrong with the format of the degree data. In VSCode, make an edit to the degree data file and save it. This will trigger the schema validation, then any errors will be highlighted and displayed in the Problems tab. # The schema generation is kinda jank so feel free to ignore/disable this test if it's being annoying data = json.loads(open(file, "r").read()) diff --git a/validator/major/tests/test_solver.py b/validator/major/tests/test_solver.py index 7d51979b1..f64c2092a 100644 --- a/validator/major/tests/test_solver.py +++ b/validator/major/tests/test_solver.py @@ -92,7 +92,7 @@ def test_computer_science_solver() -> None: "DEF 9199", ] - data = json.loads(open("degree_data/Computer Science(BS).json", "r").read()) + data = json.loads(open("degree_data/2022/Computer Science(BS).json", "r").read()) requirements_data = data["requirements"]["major"] @@ -185,7 +185,7 @@ def test_accounting_solver() -> None: "MKT 4360", ] - data = json.loads(open("degree_data/Accounting(BS).json", "r").read()) + data = json.loads(open("degree_data/2022/Accounting(BS).json", "r").read()) requirements_data = data["requirements"]["major"] @@ -294,7 +294,9 @@ def test_software_engineering_solver() -> None: "ABC 4499", ] - data = json.loads(open("degree_data/Software Engineering(BS).json", "r").read()) + data = json.loads( + open("degree_data/2022/Software Engineering(BS).json", "r").read() + ) requirements_data = data["requirements"]["major"] diff --git a/validator/scripts/diff.py b/validator/scripts/diff.py index 931faccb9..2e008213f 100644 --- a/validator/scripts/diff.py +++ b/validator/scripts/diff.py @@ -12,73 +12,101 @@ requirement change information """ -jira_api_key = os.environ['JIRA_API_KEY'] +jira_api_key = os.environ["JIRA_API_KEY"] major_json_path = "/home/runner/work/planner/planner/validator/degree_data" -#Extracts html from url and sends it to course extractor + +# Extracts html from url and sends it to course extractor def get_req_content(url: str) -> str: response = requests.get(url) - if(response.status_code == 200): + if response.status_code == 200: return response.text else: return "Webpage not found" -#Extracts the courses from each major and sends them to a set + +# Extracts the courses from each major and sends them to a set def extract_courses(webData: str) -> set[str]: bs = BeautifulSoup(webData, features="html.parser") courses = set() - course_elements = bs.find_all('a', href=True) + course_elements = bs.find_all("a", href=True) for course_element in course_elements: course_name = course_element.text.strip() - pattern = r'\b[A-Z]{2,4} \d{4}\b' - + pattern = r"\b[A-Z]{2,4} \d{4}\b" + if re.search(pattern, course_name): courses.add(course_name) return courses -#Diffs between webpages and works with the course diff sets -def htmldiff(previousYearURL: str, currentYearURL: str, oldCourses: set[str], newCourses: set[str]) -> str: + +# Diffs between webpages and works with the course diff sets +def htmldiff( + previousYearURL: str, + currentYearURL: str, + oldCourses: set[str], + newCourses: set[str], +) -> str: oldContent = get_req_content(previousYearURL) newContent = get_req_content(currentYearURL) oldCourses.update(extract_courses(oldContent)) newCourses.update(extract_courses(newContent)) - - bsOld = BeautifulSoup(oldContent, features="lxml").find('div', attrs = {'id':'bukku-page'}) - bsNew = BeautifulSoup(newContent, features="lxml").find('div', attrs = {'id':'bukku-page'}) + + bsOld = BeautifulSoup(oldContent, features="lxml").find( + "div", attrs={"id": "bukku-page"} + ) + bsNew = BeautifulSoup(newContent, features="lxml").find( + "div", attrs={"id": "bukku-page"} + ) if bsNew is None or bsOld is None: return "" - bsOldLines = bsOld.get_text().split('\n') - bsNewLines = bsNew.get_text().split('\n') + bsOldLines = bsOld.get_text().split("\n") + bsNewLines = bsNew.get_text().split("\n") diff = difflib.ndiff(bsOldLines, bsNewLines) diffString = "```" for line in diff: - diffString+=line+'\n' + diffString += line + "\n" return diffString + "```" -#Creates a ticket based on issue type, including URI and impacted courses in ticket -#C issue type = Course renamed/added/removed -#R issue type = Major/concentration removed -def createTicket(issueType: str, jira_connection: JIRA, URI: str, coursesImpacted: set[str], diffCodeBlock: str) -> None: - description = "This is an automated diff script used to detect discrepancies between major requirements\nURI: " + URI + "\n" - description += "Major: " + URI.split("/")[-1] + "\n" + +# Creates a ticket based on issue type, including URI and impacted courses in ticket +# C issue type = Course renamed/added/removed +# R issue type = Major/concentration removed +def create_ticket( + issueType: str, + jira_connection: JIRA, + uri: str, + major_name: str, + coursesImpacted: set[str], + diffCodeBlock: str, +) -> None: + description = ( + "This is an automated diff script used to detect discrepancies between major requirements\nURI: " + + uri + + "\n" + ) + description += f"Major: {major_name}\n" f = open("description.txt", "w") - if issueType == 'R': + if issueType == "R": description += "This major/concentration has been renamed or removed\n\n" - elif issueType == 'C': - description += "See attachment for the course(s) that have been renamed/added/removed:\n" + str(coursesImpacted) + "\n\n" + elif issueType == "C": + description += ( + "See attachment for the course(s) that have been renamed/added/removed:\n" + + str(coursesImpacted) + + "\n\n" + ) f.write(diffCodeBlock) f.close() ticket = jira_connection.create_issue( - project='NP', - summary='Course requirement version changes: ' + URI.split("/")[-1], + project="NP", + summary=f"Course requirement version changes: {major_name}", description=description, - issuetype={'name': 'Task'}, + issuetype={"name": "Task"}, customfield_10016=1, labels=["Engineering"], ) @@ -87,26 +115,46 @@ def createTicket(issueType: str, jira_connection: JIRA, URI: str, coursesImpacte jira_connection.add_attachment(issue=ticket, attachment=descriptionFile) os.remove("description.txt") -#Establishes JIRA connection and ierates through each major for versioning issues + +# Establishes JIRA connection and ierates through each major for versioning issues if __name__ == "__main__": jira_connection = JIRA( - basic_auth=('planner@utdnebula.com', jira_api_key), - server="https://nebula-labs.atlassian.net" + basic_auth=("planner@utdnebula.com", jira_api_key), + server="https://nebula-labs.atlassian.net", ) for majorReqJson in os.scandir(major_json_path): - data = json.loads(open(f"/home/runner/work/planner/planner/validator/degree_data/" + majorReqJson.name, "r").read()) - catalog_uri=data["catalog_uri"] - yearRegex = r'/(\d{4})/' + data = json.loads( + open( + f"/home/runner/work/planner/planner/validator/degree_data/" + + majorReqJson.name, + "r", + ).read() + ) + catalog_uri = data["catalog_uri"] + yearRegex = r"/(\d{4})/" result = re.search(yearRegex, catalog_uri) if result: - match = str(int(result.group(1))+1) + match = str(int(result.group(1)) + 1) previousYearURL = data["catalog_uri"] - currentYearURL = re.sub(yearRegex, f'/{ str(match) }/', data["catalog_uri"]) + currentYearURL = re.sub(yearRegex, f"/{ str(match) }/", data["catalog_uri"]) oldCourses: set[str] = set() newCourses: set[str] = set() pageDiff = htmldiff(previousYearURL, currentYearURL, oldCourses, newCourses) if len(newCourses) == 0: - createTicket('R', jira_connection, re.sub(yearRegex, f'/{ match }/', data["catalog_uri"]), set(), pageDiff) + create_ticket( + "R", + jira_connection, + re.sub(yearRegex, f"/{ match }/", data["catalog_uri"]), + data["display_name"], + set(), + pageDiff, + ) else: - createTicket('C', jira_connection, re.sub(yearRegex, f'/{ match }/', data["catalog_uri"]), (newCourses-oldCourses).union(oldCourses-newCourses), pageDiff) - \ No newline at end of file + create_ticket( + "C", + jira_connection, + re.sub(yearRegex, f"/{ match }/", data["catalog_uri"]), + data["display_name"], + (newCourses - oldCourses).union(oldCourses - newCourses), + pageDiff, + ) diff --git a/validator/test_degree_solver.py b/validator/test_degree_solver.py index 9f2cf2d22..6d0b35e29 100644 --- a/validator/test_degree_solver.py +++ b/validator/test_degree_solver.py @@ -1,6 +1,6 @@ from degree_solver import BypassInput, DegreeRequirementsSolver, DegreeRequirementsInput -input = DegreeRequirementsInput(["Computer Science(BS)"], [], []) +input = DegreeRequirementsInput(2022, ["Computer Science(BS)"], [], []) GRADUATEABLE_COURSES = [ "ATCM 2340",