diff --git a/.config/husky/pre-push b/.config/husky/pre-push index 2ded2d6..26efd04 100755 --- a/.config/husky/pre-push +++ b/.config/husky/pre-push @@ -4,14 +4,18 @@ set -e . "$(dirname -- "$0")/_/husky.sh" echo "************************************************************************" -echo "** Running sim-core's 'yarn fmt-check' **" -echo "** If this fails, run 'yarn fmt' and commit your fixes. **" +echo "** Running sim-core's 'yarn lint' **" +echo "** **" +echo "** If this fails, run 'yarn lint' for details. **" +echo "** You'll need to either fix formatting ('yarn fmt'), **" +echo "** or fix the typescript build ('yarn lint') **" +echo "** **" echo "** (Output is stored in .config/husky/husky.log) **" echo "** This takes about 10 seconds... **" echo "************************************************************************" cd apps/sim-core || exit 1 -yarn fmt-check > ../../.config/husky/husky.log 2>&1; +yarn lint > ../../.config/husky/husky.log 2>&1; echo "** Formatting check success. **" echo "************************************************************************" diff --git a/apps/sim-core/.gitignore b/apps/sim-core/.gitignore index 93b87e4..c7e0568 100644 --- a/apps/sim-core/.gitignore +++ b/apps/sim-core/.gitignore @@ -24,4 +24,8 @@ yarn-error.log # eslint cache .eslintcache -packages/hashai/.eslintcache \ No newline at end of file +packages/hashai/.eslintcache + +#ts cache +tsconfig.tsbuildinfo +.vercel diff --git a/apps/sim-core/package.json b/apps/sim-core/package.json index bcbb328..42623df 100644 --- a/apps/sim-core/package.json +++ b/apps/sim-core/package.json @@ -10,10 +10,10 @@ "postinstall": "yarn build:utils && yarn build:engine-web", "prepare": "cd ../.. && husky install .config/husky", "all": "npx npm-run-all", - "fmt:scripts": "prettier \"scripts/**/*.{ts,tsx,js,json}\" --write", - "fmt-check:scripts": "prettier \"scripts/**/*.{ts,tsx,js,json}\" --check", + "fmt:scripts": "prettier --write --cache \"scripts/**/*.{ts,tsx,js,json}\" ", + "lint:scripts": "prettier --check --cache \"scripts/**/*.{ts,tsx,js,json}\" && tsc --noEmit", "fmt": "yarn all fmt:*", - "fmt-check": "yarn all fmt-check:*", + "lint": "yarn all lint:*", "test": "yarn all test:*", "clippy": "touch packages/engine/src/lib.rs && cargo clippy --all", "// 03": "", @@ -24,7 +24,7 @@ "clean:engine-web": "yarn ws:engine-web clean", "fmt:rustfmt": "cargo fmt -v --all", "fmt:engine-web": "yarn ws:engine-web fmt", - "fmt-check:engine-web": "yarn ws:engine-web fmt-check", + "lint:engine-web": "yarn ws:engine-web lint", "test:engine-web": "yarn ws:engine-web test", "test:rust-engine": "cargo test --verbose", "// 06": "", @@ -38,10 +38,11 @@ "predeploy:core": "yarn build:engine-web", "deploy:core": "yarn ws:core deploy", "fmt:core": "yarn ws:core fmt", - "fmt-check:core": "yarn ws:core fmt-check", + "lint:core": "yarn ws:core lint", "preserve:core": "yarn build:engine-web", "serve:core": "yarn ws:core serve", "start:core": "yarn ws:core start", + "preview:core": "yarn ws:core preview", "test:core": "yarn ws:core test", "g": "yarn ws:core g", "// 09": "", @@ -56,7 +57,7 @@ "ws:utils": "yarn workspace @hashintel/utils", "build:utils": "yarn ws:utils build", "fmt:utils": "yarn ws:utils fmt", - "fmt-check:utils": "yarn ws:utils fmt-check" + "lint:utils": "yarn ws:utils lint" }, "workspaces": [ "packages/core", @@ -66,11 +67,12 @@ ], "devDependencies": { "@babel/core": "7.12.3", - "@babel/plugin-proposal-class-properties": "7.12.1", - "@babel/plugin-proposal-numeric-separator": "7.12.7", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-string-parser": "^7.23.4", "@babel/preset-env": "7.12.11", "@babel/preset-react": "7.14.5", "@babel/preset-typescript": "7.12.1", + "@jridgewell/gen-mapping": "^0.3.3", "@types/classnames": "2.2.11", "@types/dom-mediacapture-record": "1.0.7", "@types/file-saver": "2.0.2", @@ -97,55 +99,43 @@ "@types/stats": "0.16.30", "@types/url-join": "4.0.0", "@types/uuid": "8.3.0", - "@typescript-eslint/eslint-plugin": "4.8.1", - "@typescript-eslint/parser": "4.15.2", + "@typescript-eslint/eslint-plugin": "^6.12.0", + "@typescript-eslint/parser": "^6.10.0", "babel-jest": "26.6.3", "babel-loader": "8.2.1", - "core-js": "3.7.0", - "cross-env": "7.0.2", - "css-loader": "4.3.0", - "dotenv": "8.2.0", - "eslint": "7.29.0", - "eslint-config-prettier": "8.3.0", - "eslint-plugin-react-hooks": "4.2.0", - "file-loader": "6.2.0", + "babel-plugin-dynamic-import-node": "^2.3.3", + "caniuse-lite": "^1.0.30001563", + "cross-env": "7.0.3", + "eslint": "^8.53.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-import": "^2.29.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", "fork-ts-checker-webpack-plugin": "6.0.3", - "html-webpack-plugin": "4.5.1", "husky": "^8.0.0", "identity-obj-proxy": "3.0.0", "jest": "26.6.3", "jest-canvas-mock": "2.3.0", "npm-run-all": "4.1.5", - "null-loader": "4.0.1", - "prettier": "2.2.1", + "prettier": "3.1.0", "prop-types": "15.7.2", "random-emoji": "1.0.2", "request": "2.88.2", "request-promise-native": "1.0.9", "rimraf": "3.0.2", "shelljs": "0.8.5", - "source-map-loader": "1.1.2", - "style-loader": "2.0.0", "time-stamp": "2.2.0", "tmp": "0.2.1", "ts-jest": "26.4.4", "ts-node": "9.1.1", - "typescript": "4.1.3", - "unused-modules-webpack-plugin": "1.0.1", - "url-loader": "4.1.1", + "typescript": "^4.3.5", "webpack": "4.44.2", "webpack-cli": "3.3.12", - "webpack-dev-server": "3.11.0", - "webpack-manifest-plugin": "2.2.0", - "webpack-messages": "2.0.4", - "webpack-retry-chunk-load-plugin": "1.4.0", "yarn-audit-fix": "^10.0.1", "yarn-run-all": "3.1.1" }, "resolutions": { "@types/react": "16.9.56" }, - "dependencies": { - "@sentry/tracing": "6.3.6" - } + "dependencies": {} } diff --git a/apps/sim-core/packages/core/.eslintrc b/apps/sim-core/packages/core/.eslintrc deleted file mode 100644 index 9da1b63..0000000 --- a/apps/sim-core/packages/core/.eslintrc +++ /dev/null @@ -1,38 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - "parserOptions": { - "jsx": true, - "useJSXTextNode": true - }, - "extends": [ - "plugin:@typescript-eslint/base", - "prettier" - ], - "plugins": ["@typescript-eslint", "react-hooks", "react", "import"], - "rules": { - "id-length": ["error", { - "min": 2, - "exceptions": ["_", "x", "y", "z", "a", "b"], - "properties": "never" - }], - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": [ - "warn", - { - "additionalHooks": "(^useModal$)|(^useUserGatedEffect$)" - } - ], - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [ - "error", - { "argsIgnorePattern": "^_+", "varsIgnorePattern": "^_+" } - ], - "no-unused-expressions": "error", - "prefer-const": "error", - "react/jsx-key": "error", - "react/jsx-no-useless-fragment": "error", - "import/no-default-export": "error", - "react/self-closing-comp": "warn", - "eqeqeq": ["error", "always", { "null": "ignore" }] - } -} diff --git a/apps/sim-core/packages/core/.eslintrc.cjs b/apps/sim-core/packages/core/.eslintrc.cjs new file mode 100644 index 0000000..2c78548 --- /dev/null +++ b/apps/sim-core/packages/core/.eslintrc.cjs @@ -0,0 +1,83 @@ +module.exports = { + parser: "@typescript-eslint/parser", + parserOptions: { + jsx: true, + useJSXTextNode: true, + ecmaVersion: "latest", + sourceType: "module", + project: ["./tsconfig.json"], + tsconfigRootDir: __dirname, + }, + env: { browser: true, es2020: true, node: true }, + ignorePatterns: ["dist"], + settings: { + react: { + version: "detect", + }, + }, + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended-type-checked", + "plugin:react-hooks/recommended", + "plugin:@typescript-eslint/stylistic-type-checked", + "plugin:react/jsx-runtime", + "plugin:react/recommended", + "prettier", + ], + plugins: ["@typescript-eslint", "react-hooks", "react", "import"], + rules: { + // Augmentations + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": [ + "warn", + { + additionalHooks: "(^useModal$)|(^useUserGatedEffect$)", + }, + ], + + // Preferences + "@typescript-eslint/no-unused-vars": [ + "error", + { argsIgnorePattern: "^_+", varsIgnorePattern: "^_+" }, + ], + "no-unused-expressions": "error", + "prefer-const": "error", + "react/jsx-key": "error", + "react/jsx-no-useless-fragment": "error", + "react/self-closing-comp": "error", + eqeqeq: ["error", "always", { null: "ignore" }], + + // Disabled due to tech debt + // Ideally each of these would be brought back into play, but they're not small potatoes. + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unsafe-enum-comparison": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/prefer-nullish-coalescing": [ + "error", + { ignoreMixedLogicalExpressions: true, ignorePrimitives: true }, + ], + + // Deliberately disabled to ease use of React/Redux + "@typescript-eslint/await-thenable": "off", // Redux/Dispatch uses this a lot. + "@typescript-eslint/no-empty-function": "off", // React uses this a lot. + "@typescript-eslint/no-floating-promises": "off", // redux 'dispatch' and other react hooks create lots of floating promises. + "@typescript-eslint/no-misused-promises": [ + "error", + { + checksVoidReturn: false, // Void-returned promises come up a lot in react + }, + ], + "react/prop-types": [ + "error", + { skipUndeclared: true, ignore: ["children"] }, // 'children' prop type detection is buggy + ], + "react/display-name": "off", // Set automatically during transpilation, so disable it here. + "react/no-unescaped-entities": "off", // Permits more natural language in html, e.g. aprostrophies. + }, +}; diff --git a/apps/sim-core/packages/core/.gitignore b/apps/sim-core/packages/core/.gitignore index 466c154..e86ef84 100644 --- a/apps/sim-core/packages/core/.gitignore +++ b/apps/sim-core/packages/core/.gitignore @@ -1,4 +1,2 @@ coverage - -# auto-generated types for API queries -src/util/api/auto-types.ts \ No newline at end of file +dist \ No newline at end of file diff --git a/apps/sim-core/packages/core/.prettierignore b/apps/sim-core/packages/core/.prettierignore deleted file mode 100644 index 33e8c3d..0000000 --- a/apps/sim-core/packages/core/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -src/util/api/graphql-schema.json -src/util/api/auto-types.ts diff --git a/apps/sim-core/packages/core/babel.config.js b/apps/sim-core/packages/core/babel.config.cjs similarity index 61% rename from apps/sim-core/packages/core/babel.config.js rename to apps/sim-core/packages/core/babel.config.cjs index 8c3f167..5f49a12 100644 --- a/apps/sim-core/packages/core/babel.config.js +++ b/apps/sim-core/packages/core/babel.config.cjs @@ -4,8 +4,5 @@ module.exports = { ["@babel/preset-env", { useBuiltIns: "usage", corejs: { version: "3.8" } }], "@babel/preset-typescript", ], - plugins: [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-proposal-numeric-separator", - ], + plugins: [], }; diff --git a/apps/sim-core/packages/core/codegen.yml b/apps/sim-core/packages/core/codegen.yml deleted file mode 100644 index ddf1d53..0000000 --- a/apps/sim-core/packages/core/codegen.yml +++ /dev/null @@ -1,13 +0,0 @@ -schema: ./src/util/api/graphql-schema.json -overwrite: true -generates: - ./src/util/api/auto-types.ts: - plugins: - - add: - content: "// tslint:disable" - - "typescript" - - "typescript-operations" - config: - skipTypename: true - maybeValue: T | null | undefined - documents: ./src/util/api/queries/*.ts diff --git a/apps/sim-core/packages/core/package.json b/apps/sim-core/packages/core/package.json index 5a95aa2..1d57430 100644 --- a/apps/sim-core/packages/core/package.json +++ b/apps/sim-core/packages/core/package.json @@ -1,5 +1,6 @@ { "name": "@hashintel/core", + "type": "module", "version": "0.1.0", "description": "HASH Core (hCore) frontend", "repository": "https://github.com/hashintel/labs", @@ -7,15 +8,14 @@ "private": true, "scripts": { "clean": "rimraf dist", - "serve": "yarn codegen && yarn dev-env webpack-dev-server --mode development", - "prod-env": "cross-env-shell NODE_OPTIONS=--max_old_space_size=8192 NODE_ENV=production NODE_OPTIONS=--openssl-legacy-provider", - "dev-env": "cross-env-shell NODE_OPTIONS=--max_old_space_size=4096 NODE_ENV=development NODE_OPTIONS=--openssl-legacy-provider", - "build": "yarn codegen && yarn prod-env webpack --mode production", - "build-dev": "yarn codegen && yarn dev-env webpack --mode development", - "start": "yarn codegen && yarn prod-env webpack-dev-server --mode production", - "codegen": "graphql-codegen --config codegen.yml # core", - "fmt": "prettier \"*.{ts,tsx,js,jsx,json,css,scss}\" \"{scripts,src}/**/*.{ts,tsx,js,jsx,json,css,scss}\" --write; eslint --quiet --fix \"*.{ts,tsx,js}\" \"{scripts,src}/**/*.{ts,tsx,js}\"", - "fmt-check": "prettier \"*.{ts,tsx,js,jsx,json,css,scss}\" \"{scripts,src}/**/*.{ts,tsx,js,jsx,json,css,scss}\" --check || exit 1; eslint --quiet \"*.{ts,tsx,js}\" \"{scripts,src}/**/*.{ts,tsx,js}\"", + "serve": "yarn dev-env vite serve", + "prod-env": "cross-env-shell NODE_OPTIONS=\"--max_old_space_size=8192 --openssl-legacy-provider\" NODE_ENV=production", + "dev-env": "cross-env-shell NODE_OPTIONS=\"--max_old_space_size=4096 --openssl-legacy-provider\" NODE_ENV=development", + "build": "yarn prod-env vite build", + "start": "yarn prod-env vite build && vite preview", + "preview": "yarn prod-env vite preview", + "fmt": "prettier --write --cache \"*.{ts,tsx,js,jsx,json,css,scss,cjs}\" \"{scripts,src}/**/*.{ts,tsx,js,jsx,json,css,scss,cjs}\" && eslint --quiet --fix \"*.{ts,tsx,js,cjs}\" \"{scripts,src}/**/*.{ts,tsx,js,cjs}\"", + "lint": "prettier --check --cache \"*.{ts,tsx,js,jsx,json,css,scss,cjs}\" \"{scripts,src}/**/*.{ts,tsx,js,jsx,json,css,scss,cjs}\" && eslint --quiet \"*.{ts,tsx,js,cjs}\" \"{scripts,src}/**/*.{ts,tsx,js,cjs}\" && tsc --noEmit", "deploy": "ts-node --project scripts/tsconfig.json scripts/deploy.ts", "g": "ts-node --project scripts/tsconfig.json scripts/cli", "test": "jest --forceExit --testPathIgnorePatterns '/node_modules/|/tests/e2e/'" @@ -39,19 +39,11 @@ "/node_modules/(?!monaco-editor).+\\.js$" ] }, - "// browserslist": [ - "this list is an `intersection` of browsers (organized as they are in `https://caniuse.com/`", - "for easier reference) that support the features we need/use, namely (really wish this was a", - "`featureslist` instead):", - "", - "We have compiled a browserlist query based on the below at https://docs.google.com/spreadsheets/d/1pCjtbvxIgnbzIbgfrJuYIk6TLHhLhqIxNAA2Iord1gE/edit#gid=0", - "" - ], "browserslist": [ - "edge >= 79", - "firefox >= 67", - "chrome >= 66", - "safari >= 12.1" + "edge >= 88", + "firefox >= 78", + "chrome >= 87", + "safari >= 14" ], "// dependencies": [ "We compile to a single-page app, so technically everything should be in '/devDependencies'", @@ -64,26 +56,20 @@ "@fullstory/browser": "1.4.5", "@hashintel/engine-web": "0.1.1", "@hashintel/utils": "0.0.1", - "@juggle/resize-observer": "3.2.0", + "@juggle/resize-observer": "^3.4.0", "@loaders.gl/core": "*", "@luma.gl/core": "8.3.1", "@material-ui/core": "4.11.4", "@material-ui/lab": "4.0.0-alpha.56", "@msrvida/sanddance-explorer": "3.1.0", + "@react-three/drei": "1.5.9", "@reduxjs/toolkit": "1.5.0", - "@sentry/browser": "6.2.0", - "@sentry/fullstory": "1.1.5", - "@sentry/integrations": "6.2.0", "@svgr/core": "5.5.0", - "@svgr/plugin-jsx": "5.5.0", - "@svgr/plugin-svgo": "5.5.0", + "@types/node": "14.14.7", "bowser": "2.11.0", "classnames": "2.3.1", "clipboard-polyfill": "3.0.2", - "comlink": "4.3.0", - "css-color-names": "1.0.1", "date-fns": "2.17.0", - "drei": "1.5.7", "empty-module": "0.0.2", "escape-string-regexp": "4.0.0", "file-saver": "2.0.2", @@ -101,8 +87,7 @@ "monaco-themes": "0.3.3", "monocle-ts": "2.3.5", "neverthrow": "4.2.1", - "plotly.js": "1.57.1", - "raw-loader": "4.0.2", + "plotly.js": "2.27.1", "react": "16.14.0", "react-dom": "16.14.0", "react-dropzone": "11.2.4", @@ -118,7 +103,7 @@ "react-shepherd": "3.3.3", "react-splitter-layout": "4.0.0", "react-svg": "11.1.1", - "react-tabs": "3.1.2", + "react-tabs": "4.3.0", "react-three-fiber": "5.0.6", "react-timeago": "5.2.0", "react-tiny-popover": "5.1.0", @@ -129,32 +114,22 @@ "rxjs": "6.6.6", "simplebar-react": "3.0.0-beta.6", "slugify": "1.4.6", - "stats.js": "0.17.0", "three": "0.119.1", "url-join": "4.0.1", "uuid": "8.3.1", "vega": "5.17.3" }, "devDependencies": { - "@graphql-codegen/add": "2.0.2", - "@graphql-codegen/cli": "1.21.1", - "@graphql-codegen/typescript": "1.21.0", - "@graphql-codegen/typescript-operations": "1.17.14", - "@sentry/webpack-plugin": "1.15.0", "@testing-library/react": "11.2.2", - "@testing-library/user-event": "^14.5.1", "@types/js-levenshtein": "^1.1.1", "@types/line-column": "^1.0.0", - "@welldone-software/why-did-you-render": "6.0.3", + "@vitejs/plugin-react": "^4.2.0", "autoprefixer": "10.0.2", - "dotenv": "^16.3.1", - "eslint-plugin-import": "2.22.1", - "eslint-plugin-react": "7.22.0", - "graphql": "15.5.0", - "monaco-editor-webpack-plugin": "4.0.0", "postcss": "8.2.13", - "postcss-loader": "4.1.0", "sass": "1.29.0", - "sass-loader": "10.1.0" + "vite": "^5.0.0", + "vite-plugin-monaco-editor": "^1.1.0", + "vite-plugin-top-level-await": "^1.3.1", + "vite-plugin-wasm": "^3.2.2" } } diff --git a/apps/sim-core/packages/core/postcss.config.js b/apps/sim-core/packages/core/postcss.config.js new file mode 100644 index 0000000..5be578e --- /dev/null +++ b/apps/sim-core/packages/core/postcss.config.js @@ -0,0 +1,6 @@ +/** @type {import('postcss-load-config').Config} */ +import autoprefixer from "autoprefixer"; + +export default { + plugins: [autoprefixer], +}; diff --git a/apps/sim-core/packages/core/scripts/cli/index.ts b/apps/sim-core/packages/core/scripts/cli/index.ts index 7b81946..a48e0ce 100755 --- a/apps/sim-core/packages/core/scripts/cli/index.ts +++ b/apps/sim-core/packages/core/scripts/cli/index.ts @@ -20,8 +20,8 @@ export function cli() { if (isValidIcon && _.length > 1) { throw new Error( `Can't use \`--fromIcon\` while generating multiple components, got ${_.map( - (arg) => `"${arg}"` - ).join(", ")} with \`--fromIcon "${fromIcon}"\`` + (arg) => `"${arg}"`, + ).join(", ")} with \`--fromIcon "${fromIcon}"\``, ); } @@ -29,7 +29,7 @@ export function cli() { // n.b. `fromIcon!` is fine(?) below, because `isValidIcon` checks for string // value, `.svg` extension, and file existence const names = - isValidIcon && _.length === 0 ? [basename(fromIcon!, ".svg")] : _; + isValidIcon && _.length === 0 ? [basename(fromIcon, ".svg")] : _; names.forEach(generateFiles({ dryRun, verbose, isValidIcon, fromIcon })); } diff --git a/apps/sim-core/packages/core/scripts/cli/utils/generateFile.ts b/apps/sim-core/packages/core/scripts/cli/utils/generateFile.ts index 868d76d..0c3f4f6 100644 --- a/apps/sim-core/packages/core/scripts/cli/utils/generateFile.ts +++ b/apps/sim-core/packages/core/scripts/cli/utils/generateFile.ts @@ -4,11 +4,11 @@ import { format } from "prettier"; type NameContentTuple = [string, string]; type FileGenerator = (pair: NameContentTuple) => void; -type FileGeneratorContext = { +interface FileGeneratorContext { dryRun: boolean; verbose: boolean; componentDir: string; -}; +} type FileGeneratorFactory = (ctx: FileGeneratorContext) => FileGenerator; /** @@ -19,44 +19,42 @@ type FileGeneratorFactory = (ctx: FileGeneratorContext) => FileGenerator; * * it does not write over existing files */ -export const generateFile: FileGeneratorFactory = ({ - dryRun = false, - verbose = false, - componentDir, -}) => ([fileName, content]) => { - const filePath = join(componentDir, fileName); - - const relPath = relative(process.cwd(), filePath); - const ext = extname(filePath).substr(1); - - const fileContent = format(content, { - parser: ext === "css" ? "css" : "babel", - }); - - if (!existsSync(componentDir)) { - mkdirSync(componentDir); - } - - if (existsSync(filePath) && !dryRun) { - console.warn( - `file already exists at \`${relPath}\` ${ - dryRun ? "will skip" : "skipping" - }` - ); - return; - } - - if (verbose || dryRun) { - console.log(`\ +export const generateFile: FileGeneratorFactory = + ({ dryRun = false, verbose = false, componentDir }) => + async ([fileName, content]) => { + const filePath = join(componentDir, fileName); + + const relPath = relative(process.cwd(), filePath); + const ext = extname(filePath).substr(1); + + const fileContent = await format(content, { + parser: ext === "css" ? "css" : "babel", + }); + + if (!existsSync(componentDir)) { + mkdirSync(componentDir); + } + + if (existsSync(filePath) && !dryRun) { + console.warn( + `file already exists at \`${relPath}\` ${ + dryRun ? "will skip" : "skipping" + }`, + ); + return; + } + + if (verbose || dryRun) { + console.log(`\ ${dryRun ? "will write" : "writing"} file to: \`${relPath}\` with \`${ext}\` contents: ${fileContent} `); - } + } - if (!dryRun) { - writeFileSync(filePath, fileContent); - } -}; + if (!dryRun) { + writeFileSync(filePath, fileContent); + } + }; diff --git a/apps/sim-core/packages/core/scripts/cli/utils/generateFiles.ts b/apps/sim-core/packages/core/scripts/cli/utils/generateFiles.ts index 58177fb..872253e 100644 --- a/apps/sim-core/packages/core/scripts/cli/utils/generateFiles.ts +++ b/apps/sim-core/packages/core/scripts/cli/utils/generateFiles.ts @@ -11,12 +11,12 @@ import { import { generateFile, parseIcon } from "."; type FilesGenerator = (name: string) => void; -type FilesGeneratorContext = { +interface FilesGeneratorContext { dryRun: boolean; verbose: boolean; isValidIcon: boolean; fromIcon?: string; -}; +} type FilesGeneratorFactory = (ctx: FilesGeneratorContext) => FilesGenerator; const pascalCase = (words: string) => upperFirst(camelCase(words)); @@ -32,42 +32,39 @@ const componentsDir = join(__dirname, "../../../src/components"); * * @see ./generateFile.ts */ -export const generateFiles: FilesGeneratorFactory = ({ - dryRun = false, - verbose = false, - isValidIcon, - fromIcon, -}) => (name) => { - const folderName = pascalCase(name); - const componentName = `${isValidIcon ? "Icon" : ""}${folderName}`; - const componentDir = join( - componentsDir, - isValidIcon ? "Icon" : "", - folderName - ); +export const generateFiles: FilesGeneratorFactory = + ({ dryRun = false, verbose = false, isValidIcon, fromIcon }) => + (name) => { + const folderName = pascalCase(name); + const componentName = `${isValidIcon ? "Icon" : ""}${folderName}`; + const componentDir = join( + componentsDir, + isValidIcon ? "Icon" : "", + folderName, + ); - const styleFileName = `${componentName}.css`; - const styleFileContent = styleTemplate(componentName); + const styleFileName = `${componentName}.css`; + const styleFileContent = styleTemplate(componentName); - const testFileName = `${componentName}.spec.tsx`; - const testFileContent = testTemplate(componentName); + const testFileName = `${componentName}.spec.tsx`; + const testFileContent = testTemplate(componentName); - const componentFileName = `${componentName}.tsx`; - const componentFileContent = isValidIcon - ? iconTemplate(componentName, ...parseIcon(fromIcon!, componentName)) - : componentTemplate(componentName); + const componentFileName = `${componentName}.tsx`; + const componentFileContent = isValidIcon + ? iconTemplate(componentName, ...parseIcon(fromIcon!, componentName)) + : componentTemplate(componentName); - const indexFileName = "index.ts"; - const indexFileContent = indexTemplate(componentName); + const indexFileName = "index.ts"; + const indexFileContent = indexTemplate(componentName); - Object.entries({ - ...(isValidIcon - ? {} - : { - [styleFileName]: styleFileContent, - }), - [testFileName]: testFileContent, - [componentFileName]: componentFileContent, - [indexFileName]: indexFileContent, - }).forEach(generateFile({ dryRun, verbose, componentDir })); -}; + Object.entries({ + ...(isValidIcon + ? {} + : { + [styleFileName]: styleFileContent, + }), + [testFileName]: testFileContent, + [componentFileName]: componentFileContent, + [indexFileName]: indexFileContent, + }).forEach(generateFile({ dryRun, verbose, componentDir })); + }; diff --git a/apps/sim-core/packages/core/scripts/cli/utils/templates.ts b/apps/sim-core/packages/core/scripts/cli/utils/templates.ts index f9d2c24..00971bb 100644 --- a/apps/sim-core/packages/core/scripts/cli/utils/templates.ts +++ b/apps/sim-core/packages/core/scripts/cli/utils/templates.ts @@ -4,7 +4,6 @@ import { theme } from "../../../src/util/theme"; /** * give the new component one of our brighter theme colors to make it stand out - * more … also because empty classes are a lint error … also whimsy! */ const themeColors = Object.keys(theme) .filter((key) => key.match(/white|grey|dark|black/) === null) diff --git a/apps/sim-core/packages/core/scripts/cli/utils/validateIcon.ts b/apps/sim-core/packages/core/scripts/cli/utils/validateIcon.ts index 6fe61b2..8c19910 100644 --- a/apps/sim-core/packages/core/scripts/cli/utils/validateIcon.ts +++ b/apps/sim-core/packages/core/scripts/cli/utils/validateIcon.ts @@ -11,7 +11,7 @@ export function validateIcon(iconPath: string): boolean { `Got \`--fromIcon "${iconPath}"\`, but ${[ ...(isSvg ? [] : ["it's missing the `.svg` extension"]), ...(isFile ? [] : ["there's no file at that location"]), - ].join(", and ")}` + ].join(", and ")}`, ); } diff --git a/apps/sim-core/packages/core/scripts/deploy.ts b/apps/sim-core/packages/core/scripts/deploy.ts index 039ecba..14e4029 100644 --- a/apps/sim-core/packages/core/scripts/deploy.ts +++ b/apps/sim-core/packages/core/scripts/deploy.ts @@ -29,7 +29,7 @@ function getNotifier(notifySlack: boolean) { if (notifySlack) { await request.post( "https://hooks.slack.com/services/T5Z49HZPW/B01QB9PQNE8/4Ur5MWKteJFdxvGYCCxiD", - { json: { text: `${logging_prefix} ${message}` } } + { json: { text: `${logging_prefix} ${message}` } }, ); } }; @@ -40,7 +40,7 @@ function getNotifier(notifySlack: boolean) { * * @return {string} The build stamp */ -async function buildAndStageAssets(): Promise { +function buildAndStageAssets(): Promise { // 1. clean build: exec("yarn clean"); exec("yarn build"); @@ -56,7 +56,7 @@ async function buildAndStageAssets(): Promise { throw "Couldn't find a manifest."; } const manifest = JSON.parse(cat(manifests[0])); - if (!manifest || !manifest.BUILD_STAMP) { + if (!manifest?.BUILD_STAMP) { throw "Build stamp not found in manifest, aborting."; } const stamp = manifest.BUILD_STAMP; @@ -78,7 +78,7 @@ async function buildAndStageAssets(): Promise { // Copy the wasm file onto itself so we can mutate its metadata to set content-type wasm exec( - `aws s3 cp ${s3Path} ${s3Path} --content-type application/wasm --metadata-directive REPLACE` + `aws s3 cp ${s3Path} ${s3Path} --content-type application/wasm --metadata-directive REPLACE`, ); // Check our work: @@ -86,11 +86,7 @@ async function buildAndStageAssets(): Promise { }); // 4. Notify relevant apps: - // Notify Sentry.io that a new deploy exists - await request.post( - "https://sentry.io/api/hooks/release/builtin/1509252/efc0273443d500ecd145d41ac4e0b48999648d378b828dca8b4a1b8fb3d42ef8/", - { json: { version: stamp } } - ); + // (nothing to do at the moment) return stamp; } @@ -114,7 +110,7 @@ async function buildAndStageAssets(): Promise { * * @param stamp -- build stamp to deploy (should already be present in s3) */ -async function setLive(stamp: string) { +function setLive(stamp: string) { const rootIndexPath = `s3://${S3_BUCKET}/index.html`; const manifestIndexPath = `s3://${S3_BUCKET}/${stamp}/index.html`; const rootEmbedPath = `s3://${S3_BUCKET}/embed.html`; @@ -122,20 +118,20 @@ async function setLive(stamp: string) { try { exec( - `aws s3api head-object --bucket ${S3_BUCKET} --key ${stamp}/index.html` + `aws s3api head-object --bucket ${S3_BUCKET} --key ${stamp}/index.html`, ); } catch (err) { console.error("Build stamp not found in s3", stamp); process.exit(1); } exec( - `aws s3 cp ${manifestIndexPath} ${rootIndexPath} --cache-control no-cache --content-type text/html --metadata-directive REPLACE` + `aws s3 cp ${manifestIndexPath} ${rootIndexPath} --cache-control no-cache --content-type text/html --metadata-directive REPLACE`, ); // Older builds may not have an embed.html (linked to when embedding hCore) try { exec( - `aws s3 cp ${manifestEmbedPath} ${rootEmbedPath} --cache-control no-cache --content-type text/html --metadata-directive REPLACE` + `aws s3 cp ${manifestEmbedPath} ${rootEmbedPath} --cache-control no-cache --content-type text/html --metadata-directive REPLACE`, ); } catch (err) { console.warn("*** Build does not contain an embed.html! ***"); @@ -179,12 +175,12 @@ async function run() { `Built from: \`${commitUrl}\` ${ localChanges ? "(plus local modifications)" : "" }`, - ].join("\n") + ].join("\n"), ); } } catch (err) { console.error(`Deploy failed with error:`); - console.error("```" + err.toString() + "```"); + console.error(`\`\`\`${String(err)}\`\`\``); process.exit(1); } } diff --git a/apps/sim-core/packages/core/scripts/types.d.ts b/apps/sim-core/packages/core/scripts/types.d.ts index 8831c9d..7ed38e3 100644 --- a/apps/sim-core/packages/core/scripts/types.d.ts +++ b/apps/sim-core/packages/core/scripts/types.d.ts @@ -10,20 +10,20 @@ declare module "@svgr/core" { dimensions: boolean; expandProps: "start" | "end" | false; prettier: boolean; - prettierConfig: { [key: string]: any }; + prettierConfig: Record; svgo: boolean; svgoConfig: { - plugins: { [key: string]: any }[]; + plugins: Record[]; }; ref: boolean; - replaceAttrValues: { [key: string]: string }; - svgProps: { [key: string]: string }; + replaceAttrValues: Record; + svgProps: Record; title: boolean; template: ({ template }: any, _: any, { jsx }: any) => string; // only partially documented, but necessary // @see: https://www.smooth-code.com/open-source/svgr/docs/node-api/#plugins plugins: string[]; - }> + }>, ): string; } declare module "random-emoji"; diff --git a/apps/sim-core/packages/core/site.d.ts b/apps/sim-core/packages/core/site.d.ts index 6ce8b2b..520c932 100644 --- a/apps/sim-core/packages/core/site.d.ts +++ b/apps/sim-core/packages/core/site.d.ts @@ -1,11 +1,8 @@ /** - * provided by webpack build - * @see: ./webpack.config.js + * provided by vite + * @see: ./vite.config.ts */ -declare var WEBPACK_PUBLIC_PATH: string; -declare var WEBPACK_BUILD_STAMP: string; -declare var LOCAL_API: boolean; -declare var MAPBOX_API_TOKEN: string; +declare let BUILD_STAMP: string; /** * Like `Omit` but distributes over unions diff --git a/apps/sim-core/packages/core/src/boot.ts b/apps/sim-core/packages/core/src/boot.ts index 27384ad..2178781 100644 --- a/apps/sim-core/packages/core/src/boot.ts +++ b/apps/sim-core/packages/core/src/boot.ts @@ -3,7 +3,6 @@ import { enableMapSet } from "immer"; import * as api from "./util/api"; import { buildSimulationProvider } from "./features/simulator/simulate/buildprovider"; import { configureMonaco } from "./util/monaco-config"; -import { initSentry } from "./util/initSentry"; import { resizeObserverPromise } from "./util/resizeObserverPromise"; import { simulatorStore } from "./features/simulator/store"; import { store } from "./features/store"; @@ -25,7 +24,6 @@ export const boot = async (forExperiments: boolean) => { simulatorStore, }); - initSentry(); configureTheme(); enableMapSet(); configureMonaco(); diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistory.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistory.tsx index da8ae87..a8c87e1 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistory.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistory.tsx @@ -40,24 +40,22 @@ export const ActivityHistory: FC<{ visible: boolean }> = ({ visible }) => { const containerRef = useRef(null); const [setScrollStateRef, fadeVisible, scrollable] = useScrollState(); const historyComplete = useSimulatorSelector(selectHistoryComplete); - const [ - spinnerRef, - shouldShowHistory, - historyInitialized, - ] = useInfiniteScrollingHistory(containerRef, visible); + const [spinnerRef, shouldShowHistory, historyInitialized] = + useInfiniteScrollingHistory(containerRef, visible); const canEdit = useScope(Scope.edit); const projectRef = useSelector(selectProjectRef); const historyItemsFromStore = useSimulatorSelector( - historySelectors.selectAll + historySelectors.selectAll, ); const [selected, setSelected] = useState<"All" | FilterOption>("All"); - const historyItems = (selected === "All" - ? historyItemsFromStore - : historyItemsFromStore.filter( - (item) => item.itemType === filterOptionToItemType[selected] - ) + const historyItems = ( + selected === "All" + ? historyItemsFromStore + : historyItemsFromStore.filter( + (item) => item.itemType === filterOptionToItemType[selected], + ) ).map((item) => { switch (item.itemType) { case SimulatorHistoryItemType.ExperimentRun: @@ -94,7 +92,7 @@ export const ActivityHistory: FC<{ visible: boolean }> = ({ visible }) => { containerRef.current = node; setScrollStateRef(node); }, - [setScrollStateRef] + [setScrollStateRef], ); return ( diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryGroup/ActivityHistoryGroupSectionItem.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryGroup/ActivityHistoryGroupSectionItem.tsx index e84ee23..79909b8 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryGroup/ActivityHistoryGroupSectionItem.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryGroup/ActivityHistoryGroupSectionItem.tsx @@ -25,7 +25,7 @@ export const ActivityHistoryGroupSectionItem = forwardRef< ActivityHistoryGroupSectionItemProps >(function ActivityHistoryGroupSectionItem( { children, className, open, viewable, loading, label, ...props }, - ref + ref, ) { return ( {loading ? ( diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryItem.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryItem.tsx index f123918..b4544e8 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryItem.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryItem.tsx @@ -5,12 +5,12 @@ import { Link, LinkProps } from "../Link/Link"; import "./ActivityHistoryItem.scss"; -type ActivityHistoryItemPropsShared = { +interface ActivityHistoryItemPropsShared { open?: boolean; tooltip?: ReactNode | null; viewable?: boolean; after?: ReactNode | null; -}; +} type ActivityHistoryItemPropsDiv = ActivityHistoryItemPropsShared & Omit, "ref" | "as">; @@ -35,7 +35,7 @@ export const ActivityHistoryItem = forwardRef< after = null, ...props }, - ref + ref, ) { const { as, ...otherProps } = props; const Component = as === "link" ? Link : "div"; @@ -53,7 +53,7 @@ export const ActivityHistoryItem = forwardRef< "ActivityHistoryItem__Row--tooltip": !!tooltip && viewable, "ActivityHistoryItem__Row--viewable": viewable, }, - className + className, )} ref={ref as any} {...(otherProps as any)} diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryItemCommit.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryItemCommit.tsx index 6215493..53be8a0 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryItemCommit.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryItemCommit.tsx @@ -21,7 +21,7 @@ export const ActivityHistoryItemCommit: FC<{ const { currentlySwitchingTo, actuallyCurrent, current } = useCurrentRefItem( commit.id, - domRef + domRef, ); return ( diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryRelease.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryRelease.tsx index 11b4bdd..012fd5b 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryRelease.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ActivityHistoryRelease.tsx @@ -46,7 +46,7 @@ export const ActivityHistoryRelease: FC<{ {currentlySwitchingTo ? (
- +
) : null} {createdAt === null ? null : } diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroup.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroup.tsx index c706ed1..2b9ae85 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroup.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroup.tsx @@ -41,7 +41,7 @@ import "./ExperimentGroup.scss"; const useReadyToShowExperiment = ( selected: boolean, pending: boolean, - startedTime: number + startedTime: number, ) => { const alreadyReady = selected || @@ -96,7 +96,7 @@ const makeSelectExperimentById = (id: string) => } return experimentRun; - } + }, ); export const ExperimentGroup: FC<{ @@ -125,7 +125,7 @@ export const ExperimentGroup: FC<{ return simIds.some((id) => simulationViewable(simData[id])); }, - [simIds] + [simIds], ); const anySimsViewable = useSimulatorSelector(anySimsViewableSelector); @@ -181,10 +181,10 @@ export const ExperimentGroup: FC<{ open ? hovered ? theme["dark-hover-hover"] - : theme["black"] + : theme.black : hovered - ? theme["dark-hover"] - : theme["dark"] + ? theme["dark-hover"] + : theme.dark } /> diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupRun.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupRun.tsx index 34dbb10..ce6362d 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupRun.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupRun.tsx @@ -53,11 +53,8 @@ export const ExperimentGroupRun: FC<{ const finished = simulationComplete(run); const viewable = simulationViewable(run, finished); - const [ - onContextMenu, - exportingTooltip, - exporting, - ] = useSimulationRunContextMenu(itemRef, id, viewable); + const [onContextMenu, exportingTooltip, exporting] = + useSimulationRunContextMenu(itemRef, id, viewable); if (!run?.steps) { return null; diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupSectionItem.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupSectionItem.tsx index 01d4ccc..769f847 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupSectionItem.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupSectionItem.tsx @@ -56,7 +56,7 @@ export const ExperimentGroupSectionItem = forwardRef< * by the time they render. We hide it with CSS instead */} )} diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupSections.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupSections.tsx index caa9df4..57f1c98 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupSections.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/ExperimentGroupSections.tsx @@ -46,7 +46,7 @@ const ExperimentGroupAnalysisSection: FC<{ (id) => !!simData[id]?.analysis || !!simData[id]?.plots || - simulationHasSteps(simData[id]) + simulationHasSteps(simData[id]), ); }); @@ -75,7 +75,7 @@ const ExperimentGroupAnalysisSection: FC<{ const [onContextMenu, exportingTooltip] = useExperimentRunContextMenu( allRunItemRef, data.experimentId, - analysisViewable + analysisViewable, ); return ( @@ -162,7 +162,7 @@ export const ExperimentGroupSections: FC<{ id={id} plan={initializedData.plan[id]} experimentFinished={hasExperimentFinished( - initializedData.status + initializedData.status, )} metricOutcome={initializedData.metricOutcome} /> diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/hooks.ts b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/hooks.ts index 8b711ff..e7eb49c 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/hooks.ts +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/hooks.ts @@ -33,7 +33,7 @@ const humanFileSize = (bytes: number, si = false, decimalPlaces = 1) => { const buildJsonString = async ( steps: SimulationStates, stepCount: number, - signal?: AbortSignal + signal?: AbortSignal, ) => { let str = ""; @@ -61,7 +61,7 @@ const defaultSteps = {}; export const useFileSize = ( experimentFinished: boolean, - run: SimulationData | null | undefined + run: SimulationData | null | undefined, ) => { const steps = run?.steps ?? defaultSteps; const stepCount = run?.stepsCount ?? 0; @@ -71,7 +71,7 @@ export const useFileSize = ( run?.status === "errored" && !viewable ? "N/A" : defaultSize; const [size, setSize] = useState( - (canCalculateSize ? stepsMap.get(steps) : null) ?? currentDefaultSize + (canCalculateSize ? stepsMap.get(steps) : null) ?? currentDefaultSize, ); useEffect(() => { @@ -93,7 +93,7 @@ export const useFileSize = ( const str = await buildJsonString( steps, stepCount, - controller.signal + controller.signal, ); if (typeof str !== "string") { diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/utils.ts b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/utils.ts index 4cb4887..733d765 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/utils.ts +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/ExperimentGroup/utils.ts @@ -19,12 +19,12 @@ export type ExperimentGroupSectionItemStatus = * @todo clean this up */ export const collapseExperimentOrSimulationRunStatus = ( - status: ExperimentRun["status"] | SimulationData["status"] + status: ExperimentRun["status"] | SimulationData["status"], ): ExperimentGroupSectionItemStatus => status === "downloading" ? "downloading" : status === "queued" - ? "queued" - : status === "paused" || status === "stopping" - ? "running" - : status; + ? "queued" + : status === "paused" || status === "stopping" + ? "running" + : status; diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/Inspector/Inspector.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/Inspector/Inspector.tsx index 99e4030..5d3462d 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/Inspector/Inspector.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/Inspector/Inspector.tsx @@ -12,7 +12,7 @@ import { WrappedSplitterLayout } from "../../WrappedSplitterLayout/WrappedSplitt export const AgentInspector: FC = () => { const [selectedAgentIds, setSelectedAgents] = useRecoilState( - sceneState.SelectedAgentIds + sceneState.SelectedAgentIds, ); const agentIds = Object.keys(selectedAgentIds).reverse(); @@ -56,7 +56,7 @@ const AgentInfo: FC<{ id: string }> = ({ id }) => { // Provide a way to deselect the agent const [selectedAgents, setSelectedAgents] = useRecoilState( - sceneState.SelectedAgentIds + sceneState.SelectedAgentIds, ); const unselectAgent = () => { const tempIds = { ...selectedAgents }; @@ -84,7 +84,7 @@ const AgentInfo: FC<{ id: string }> = ({ id }) => { if (otherFields.length === 0) { otherFields.push( - + , ); } @@ -109,7 +109,7 @@ const AgentInfo: FC<{ id: string }> = ({ id }) => {
{identifier} @@ -198,7 +198,7 @@ const AgentProperty: FC<{ const agentProps = Object.entries(value).map( ([key, value]: [string, any]) => { return ; - } + }, ); return {agentProps}; } @@ -222,7 +222,7 @@ const InfoHeader: FC<{ name: string }> = ({ name, children }) => {
{name} diff --git a/apps/sim-core/packages/core/src/components/ActivityHistory/SingleRun/ActivityHistorySingleRun.tsx b/apps/sim-core/packages/core/src/components/ActivityHistory/SingleRun/ActivityHistorySingleRun.tsx index 7cdbe8d..9d20c81 100644 --- a/apps/sim-core/packages/core/src/components/ActivityHistory/SingleRun/ActivityHistorySingleRun.tsx +++ b/apps/sim-core/packages/core/src/components/ActivityHistory/SingleRun/ActivityHistorySingleRun.tsx @@ -36,11 +36,8 @@ export const ActivityHistorySingleRun: FC<{ const selectRun = useSelectRun(id); const open = useRunOpen(id); - const [ - onContextMenu, - exportingTooltip, - exporting, - ] = useSimulationRunContextMenu(itemRef, id); + const [onContextMenu, exportingTooltip, exporting] = + useSimulationRunContextMenu(itemRef, id); return ( ( itemRef: RefObject, id: string, - finished = true + finished = true, ) => { const [exporting, setExporting] = useState(false); const [contextMenuStyle, setContextMenuStyle] = useState< @@ -108,7 +108,7 @@ export const useExperimentRunContextMenu = ( const experiment = selectExperimentRuns(store.getState())[id]; const simRuns = experiment.simulationIds.map( - (id) => selectAllSimulationData(store.getState())[id] + (id) => selectAllSimulationData(store.getState())[id], ); const experimentAnalysisBySimRun: { @@ -126,7 +126,7 @@ export const useExperimentRunContextMenu = ( ? Promise.resolve(existingOutputs) : createSubscriptionToDispatchPlotData( [simRunId], - store.getState + store.getState, ) .pipe(first((results) => results[0] === simRunId)) .toPromise() @@ -141,12 +141,12 @@ export const useExperimentRunContextMenu = ( outputs, simRunId, }; - }) + }), ); const content = new Blob( [JSON.stringify(experimentAnalysisBySimRun, null, 2)], - { type: "application/json" } + { type: "application/json" }, ); saveAs(content, `experimentrun-${id}.json`); @@ -163,7 +163,7 @@ export const useExperimentRunContextMenu = ( ), - [contextMenuStyle, id, store, finished] + [contextMenuStyle, id, store, finished], ); useOnClickOutside(itemRef, hideContextMenu); @@ -189,7 +189,7 @@ export const useExperimentRunContextMenu = ( export const useSimulationRunContextMenu = ( itemRef: RefObject, id: string, - finished = true + finished = true, ) => { const [exporting, setExporting] = useState(false); const [contextMenuStyle, setContextMenuStyle] = useState< @@ -243,10 +243,10 @@ export const useSimulationRunContextMenu = ( ? Promise.resolve(existingOutputs) : createSubscriptionToDispatchPlotData( [simRun.simulationRunId], - store.getState + store.getState, ) .pipe( - first((results) => results[0] === simRun.simulationRunId) + first((results) => results[0] === simRun.simulationRunId), ) .toPromise() .then((results) => results[1]?.outputs); @@ -286,7 +286,7 @@ export const useSimulationRunContextMenu = ( ), - [contextMenuStyle, id, store, finished] + [contextMenuStyle, id, store, finished], ); useOnClickOutside(itemRef, hideContextMenu); @@ -324,7 +324,7 @@ export const useRunOpen = (id: string) => { const useWheeling = ( containerRef: RefObject, - deferral = 40 + deferral = 40, ) => { const [wheeling, setWheeling] = useState(false); @@ -370,7 +370,7 @@ const useWheeling = ( */ const useHistoryRequestMore = ( containerRef: RefObject, - ready: boolean + ready: boolean, ) => { const [spinnerRef, spinnerInView] = useInView(); const simDispatch = useSimulatorDispatch(); @@ -396,7 +396,7 @@ const useHistoryRequestMore = ( */ const useCheckIfHistoryFilledScreen = ( ready: boolean, - containerRef: React.RefObject + containerRef: React.RefObject, ) => { const simDispatch = useSimulatorDispatch(); const [checking, setChecking] = useState(false); @@ -417,7 +417,7 @@ const useCheckIfHistoryFilledScreen = ( }, [ready, checking, containerRef, simDispatch]); const historyItemsFromStore = useSimulatorSelector( - historySelectors.selectAll + historySelectors.selectAll, ); const itemsRef = useRef(null); const nextPage = useSimulatorSelector(selectHistoryNextPage); @@ -440,14 +440,14 @@ const useCheckIfHistoryFilledScreen = ( export const useInfiniteScrollingHistory = ( containerRef: RefObject, - visible: boolean + visible: boolean, ) => { const ready = useSimulatorSelector(selectHistoryReady); const complete = useSimulatorSelector(selectHistoryComplete); const spinnerRef = useHistoryRequestMore(containerRef, ready); const [checking, hasFilledScreen] = useCheckIfHistoryFilledScreen( ready, - containerRef + containerRef, ); const simDispatch = useSimulatorDispatch(); @@ -473,7 +473,7 @@ export const useInfiniteScrollingHistory = ( */ export const useCurrentRefItem = ( tag: string | null | undefined, - ref: RefObject + ref: RefObject, ) => { const projectRef = useSelector(selectProjectRef); const switchingTo = useSelector(selectVersionSwitchingTo); diff --git a/apps/sim-core/packages/core/src/components/AgentScene/AgentScene.tsx b/apps/sim-core/packages/core/src/components/AgentScene/AgentScene.tsx index d83ae0a..222b5b2 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/AgentScene.tsx +++ b/apps/sim-core/packages/core/src/components/AgentScene/AgentScene.tsx @@ -3,7 +3,7 @@ import { useSelector } from "react-redux"; import { Canvas } from "react-three-fiber"; import * as THREE from "three"; import { Json, SerializableAgentState } from "@hashintel/engine-web"; -import { Stats } from "drei"; +// import { Stats } from "@react-three/drei"; import { useRecoilBridgeAcrossReactRoots_UNSTABLE, useRecoilCallback, @@ -29,7 +29,7 @@ import "./AgentScene.css"; // - https://threejs.org/examples/#webgl_trails // - https://github.com/mrdoob/three.js/blob/master/examples/webgl_buffergeometry_drawrange.html -export type SimulationStepProps = { +export interface SimulationStepProps { simulationRunId: string | undefined; properties: Json; simulationStep: SerializableAgentState[] | null; @@ -37,7 +37,7 @@ export type SimulationStepProps = { visible: boolean; resetting: boolean; errored: boolean; -}; +} THREE.Object3D.DefaultUp.set(0, 0, 1); @@ -59,12 +59,12 @@ export const AgentScene = ({ simulationRunId, }: SimulationStepProps) => { const [mappedTransitions, setMappedTransitions] = useRecoilState( - SceneState.MappedTransitions + SceneState.MappedTransitions, ); // Stats element - const showStats = useRecoilValue(SceneState.StatsEnabled); - const statsContainerRef = useRef(null); + // const showStats = useRecoilValue(SceneState.StatsEnabled); + // const statsContainerRef = useRef(null); const updatesEnabled = useRecoilValue(SceneState.UpdatesEnabled); const edgesEnabled = useRecoilValue(SceneState.EdgesEnabled); @@ -78,10 +78,7 @@ export const AgentScene = ({ * whenever you want to schedule an update to the stage, and it'll wait until * the last update was done. */ - const stageUpdateChainRef = useRef>(null as any); - if (!stageUpdateChainRef.current) { - stageUpdateChainRef.current = Promise.resolve(); - } + const stageUpdateChainRef = useRef>(Promise.resolve()); const { resetViewer, updateTransitionMap } = use3DViewer(); useEffect(() => { @@ -115,7 +112,7 @@ export const AgentScene = ({ console.error(err); }) .then(() => - updateTransitionMap(mappedTransitions, simulationStep ?? []) + updateTransitionMap(mappedTransitions, simulationStep ?? []), ); } }, [resetting, simulationStep, updateTransitionMap]); @@ -135,13 +132,13 @@ export const AgentScene = ({ return (
- +
*/} gl.setClearColor("#0e0d15")} invalidateFrameloop={!updatesEnabled} > + {/* eslint-disable react/no-unknown-property */} + + {/* eslint-disable react/no-unknown-property */} {!embedded && }
diff --git a/apps/sim-core/packages/core/src/components/AgentScene/components/AgentMesh.tsx b/apps/sim-core/packages/core/src/components/AgentScene/components/AgentMesh.tsx index 1002f79..548616b 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/components/AgentMesh.tsx +++ b/apps/sim-core/packages/core/src/components/AgentScene/components/AgentMesh.tsx @@ -9,13 +9,13 @@ import * as sceneState from "../state/SceneState"; import { RawGeometry, loadGeometryMesh } from "../util/geometry-loader"; import { lerpAnimValue } from "../util/anim"; -type PolyMeshProps = { +interface PolyMeshProps { meshId: string; clock: { lastTime: number; animLength: number; }; -}; +} const tempObject = new THREE.Object3D(); tempObject.up = new THREE.Vector3(0, 0, 1); @@ -28,10 +28,10 @@ export const AgentMesh: FC = ({ meshId, clock }) => { const ref = useRef(); const [hoveredAgentId, setHoveredAgentIds] = useRecoilState( - sceneState.HoveredAgent + sceneState.HoveredAgent, ); const [selectedAgentIds, setSelectedAgentIds] = useRecoilState( - sceneState.SelectedAgentIds + sceneState.SelectedAgentIds, ); // Only update the render agents when agents changes @@ -53,7 +53,7 @@ export const AgentMesh: FC = ({ meshId, clock }) => { // We know that the color buffer is a BufferGeometry, but that specificiy // is lost when injected into three. Our casting is a type narrowing const colorBuffer = (ref.current!.geometry as BufferGeometry).getAttribute( - "color" + "color", ) as InstancedBufferAttribute | undefined; const lerpVal = @@ -119,6 +119,8 @@ export const AgentMesh: FC = ({ meshId, clock }) => { }); return ( + /* eslint-disable react/no-unknown-property */ + = ({ meshId, clock }) => { } } }} + /* eslint-enable react/no-unknown-property */ + // Agent is being clicked onPointerDown={(evt) => { const id = evt.instanceId; @@ -141,7 +145,7 @@ export const AgentMesh: FC = ({ meshId, clock }) => { const [agentId] = renderAgents[id]; const temp = { ...selectedAgentIds }; - if (selectedAgentIds.hasOwnProperty(agentId)) { + if (Object.prototype.hasOwnProperty.call(selectedAgentIds, agentId)) { delete temp[agentId]; setSelectedAgentIds(temp); } else { diff --git a/apps/sim-core/packages/core/src/components/AgentScene/components/AgentRenderer.tsx b/apps/sim-core/packages/core/src/components/AgentScene/components/AgentRenderer.tsx index 54d69d1..950129f 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/components/AgentRenderer.tsx +++ b/apps/sim-core/packages/core/src/components/AgentScene/components/AgentRenderer.tsx @@ -6,9 +6,9 @@ import { AgentMesh } from "./AgentMesh"; import { PositionedMeshes } from "../state/SceneState"; import { RenderSummary } from "../util/anim"; -type AgentRendererProps = { +interface AgentRendererProps { mappedTransitions: RenderSummary; -}; +} export const AgentRenderer: FC = ({ mappedTransitions, diff --git a/apps/sim-core/packages/core/src/components/AgentScene/components/Controls.tsx b/apps/sim-core/packages/core/src/components/AgentScene/components/Controls.tsx index 48b585b..3ad9ec7 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/components/Controls.tsx +++ b/apps/sim-core/packages/core/src/components/AgentScene/components/Controls.tsx @@ -1,7 +1,7 @@ import React, { FC, useEffect, useRef, useState } from "react"; import { CanvasProps, useThree } from "react-three-fiber"; import * as THREE from "three"; -import { MapControls, OrbitControls } from "drei"; +import { MapControls, OrbitControls } from "@react-three/drei"; import { useRecoilValue } from "recoil"; import * as sceneState from "../state/SceneState"; @@ -73,7 +73,7 @@ export const ViewerControls: FC<{ camera.lookAt(0, 0, 0); // Flatten the camera - // @ts-ignore + // @ts-expect-error 'fov' does in fact exist. camera.fov = 1; camera.updateProjectionMatrix(); @@ -110,7 +110,7 @@ export const ViewerControls: FC<{ const { pxMax, pxMin, pyMax, pyMin } = dimensions; const box = new THREE.Box3( new THREE.Vector3(pxMin, pyMin, 0), - new THREE.Vector3(pxMax, pyMax, 1) + new THREE.Vector3(pxMax, pyMax, 1), ); const size = box.getSize(new THREE.Vector3()); diff --git a/apps/sim-core/packages/core/src/components/AgentScene/components/HoveredAgent.tsx b/apps/sim-core/packages/core/src/components/AgentScene/components/HoveredAgent.tsx index 0734a62..05e1d46 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/components/HoveredAgent.tsx +++ b/apps/sim-core/packages/core/src/components/AgentScene/components/HoveredAgent.tsx @@ -9,9 +9,9 @@ import { RenderSummary } from "../util/anim"; const tempObject = new THREE.Object3D(); tempObject.up = new THREE.Vector3(0, 0, 1); -type HoveredAgentProps = { +interface HoveredAgentProps { transitions: RenderSummary; -}; +} /* * Creates the appropriate ThreeJS representation of a "hovered" agent */ @@ -38,6 +38,7 @@ export const HoveredAgent: FC = ({ transitions }) => { const [posx, posy, posz] = agent.position.to; const pos: Vec3 = [posx, posy, posz + offsetZ]; + /* eslint-disable react/no-unknown-property */ return ( = ({ transitions }) => { /> ); + /* eslint-enable react/no-unknown-property */ } } return null; diff --git a/apps/sim-core/packages/core/src/components/AgentScene/components/NetworkEdges.tsx b/apps/sim-core/packages/core/src/components/AgentScene/components/NetworkEdges.tsx index 0cf8841..5ecc013 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/components/NetworkEdges.tsx +++ b/apps/sim-core/packages/core/src/components/AgentScene/components/NetworkEdges.tsx @@ -5,9 +5,9 @@ import { useRecoilValue } from "recoil"; import * as sceneState from "../state/SceneState"; import { RenderSummary } from "../util/anim"; -type NetworkEdgesProps = { +interface NetworkEdgesProps { mappedTransitions: RenderSummary; -}; +} // Arguments for constructing THREE arrowHelper type ArrowConstructorArgs = typeof ArrowHelper extends new ( @@ -16,7 +16,10 @@ type ArrowConstructorArgs = typeof ArrowHelper extends new ( ? U : never; -type ArrowData = { key: string; args: ArrowConstructorArgs }; +interface ArrowData { + key: string; + args: ArrowConstructorArgs; +} /** * Convert the array vector in agent state to a THREE Vector3 @@ -42,7 +45,7 @@ export const NetworkEdges: FC = ({ mappedTransitions }) => { const selectedAgents = useRecoilValue(sceneState.SelectedAgentIds); const selectedAgentIds = Object.keys(selectedAgents); const highlightedAgents = [hoveredAgentId, ...selectedAgentIds].filter( - Boolean + Boolean, ); const arrowData: ArrowData[] = useMemo(() => { @@ -75,7 +78,7 @@ export const NetworkEdges: FC = ({ mappedTransitions }) => { }; for (const [relationship, neighborList] of Object.entries( - networkNeighborMap + networkNeighborMap, )) { if (!isValidNetworkArray(neighborList)) { continue; @@ -107,7 +110,7 @@ export const NetworkEdges: FC = ({ mappedTransitions }) => { // Highlight edges connected to the hovered or selected agent(s) const hovered = highlightedAgents.find( - (id) => id === agentId || id === neighborId + (id) => id === agentId || id === neighborId, ); const color = hovered ? 0xffffff : 0xfc03e8; @@ -135,6 +138,7 @@ export const NetworkEdges: FC = ({ mappedTransitions }) => { return ( <> {arrowData.map(({ key, args }) => ( + // eslint-disable-next-line react/no-unknown-property ))} diff --git a/apps/sim-core/packages/core/src/components/AgentScene/components/Stage.tsx b/apps/sim-core/packages/core/src/components/AgentScene/components/Stage.tsx index 026ebed..cfc4923 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/components/Stage.tsx +++ b/apps/sim-core/packages/core/src/components/AgentScene/components/Stage.tsx @@ -22,9 +22,10 @@ export const ViewerStage: FC = () => { pxMax, pxMin, pyMax, - pyMin + pyMin, ); + /* eslint-disable react/no-unknown-property */ return ( <> { ); + /* eslint-enable react/no-unknown-property */ }; function getStagePlacement( pxMax: number, pxMin: number, pyMax: number, - pyMin: number + pyMin: number, ) { const center: [number, number] = [ Math.floor((pxMax + pxMin) / 2), diff --git a/apps/sim-core/packages/core/src/components/AgentScene/state/SceneState.ts b/apps/sim-core/packages/core/src/components/AgentScene/state/SceneState.ts index 4df274d..5034e6a 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/state/SceneState.ts +++ b/apps/sim-core/packages/core/src/components/AgentScene/state/SceneState.ts @@ -19,16 +19,16 @@ export const MappedTransitions = autoAtom({ }); export const SelectedAgentIds = autoAtom({ - default: {} as { - [id: string]: true; - }, + default: {} as Record, }); export const SelectedAgentData = autoreadSelectorFamily({ - get: (agentId: string) => ({ get }): AgentTransition | null | undefined => { - const transitions = get(MappedTransitions); - return transitions[agentId]; - }, + get: + (agentId: string) => + ({ get }): AgentTransition | null | undefined => { + const transitions = get(MappedTransitions); + return transitions[agentId]; + }, // Because we're selecting agent data, we *also* need to allow mutability dangerouslyAllowMutability: true, @@ -54,11 +54,9 @@ export const SelectedMeshes = autoSelector({ export const PositionedMeshes = autoSelector({ get: ({ get }) => { const mappedTransitions = get(MappedTransitions); - const meshes: { - [meshType: string]: RenderSummary; - } = {}; + const meshes: Record = {}; for (const [id, agent] of Object.entries(mappedTransitions)) { - if (!meshes.hasOwnProperty(agent.shape)) { + if (!Object.prototype.hasOwnProperty.call(meshes, agent.shape)) { meshes[agent.shape] = {}; } meshes[agent.shape][id] = agent; @@ -67,29 +65,33 @@ export const PositionedMeshes = autoSelector({ }, }); export const ShapedMeshes = autoreadSelectorFamily({ - get: (shape: string) => ({ get }) => { - const meshes = get(PositionedMeshes); - if (shape === "pickedAgent") { - const selected = get(SelectedAgentIds); - const transitions = get(MappedTransitions); - const output: RenderSummary = {}; - for (const id of Object.keys(selected)) { - const trans = transitions[id]; - if (trans) { - output[id] = trans; + get: + (shape: string) => + ({ get }) => { + const meshes = get(PositionedMeshes); + if (shape === "pickedAgent") { + const selected = get(SelectedAgentIds); + const transitions = get(MappedTransitions); + const output: RenderSummary = {}; + for (const id of Object.keys(selected)) { + const trans = transitions[id]; + if (trans) { + output[id] = trans; + } } + return output; + } else { + return meshes[shape] ?? {}; } - return output; - } else { - return meshes[shape] ?? {}; - } - }, + }, }); export const ShapedMeshesEntries = autoreadSelectorFamily({ - get: (shape: string) => ({ get }) => { - const meshes = get(ShapedMeshes(shape)); - return Object.entries(meshes); - }, + get: + (shape: string) => + ({ get }) => { + const meshes = get(ShapedMeshes(shape)); + return Object.entries(meshes); + }, }); type HoveredAgent = string | null; @@ -101,61 +103,62 @@ export const HoveredAgent = autoAtom({ // For each setting, store the lastSet value plus any project-specific value type ViewerSettingValue = number | string | boolean; -type ViewerSettingsStorageObject = { +interface ViewerSettingsStorageObject { lastSet: ViewerSettingValue; [projectPath: string]: ViewerSettingValue; -}; +} // Persist and retrieve 3D settings state to localStorage, // for settings configurable in SceneSettings -const localStorageSyncEffect = ( - settingName: string -) => ({ setSelf, onSet }: Parameters>[0]) => { - const storageKey = `sceneSettings.${settingName}`; - - const getProjectPath = () => selectProjectPathWithNamespace(store.getState()); +const localStorageSyncEffect = + (settingName: string) => + ({ setSelf, onSet }: Parameters>[0]) => { + const storageKey = `sceneSettings.${settingName}`; - const loadValueFromLocalStorage = () => { - const currentProjectPath = getProjectPath(); + const getProjectPath = () => + selectProjectPathWithNamespace(store.getState()); - // Get the last used value for this setting, if any - const savedSettings = getItem(storageKey); - let savedSetting = savedSettings?.lastSet; + const loadValueFromLocalStorage = () => { + const currentProjectPath = getProjectPath(); - // If we have a project-specific value for this setting, prefer it - if (currentProjectPath && savedSettings?.[currentProjectPath]) { - savedSetting = savedSettings[currentProjectPath]; - } + // Get the last used value for this setting, if any + const savedSettings = getItem(storageKey); + let savedSetting = savedSettings?.lastSet; - if (savedSetting != null) { - setSelf(savedSetting as T); - } - }; - - projectChangeObservable(store).subscribe(() => { - loadValueFromLocalStorage(); - }); - - // Called when the atom is updated from elsewhere (e.g. on user input) - onSet((newValue) => { - const currentProjectPath = getProjectPath(); + // If we have a project-specific value for this setting, prefer it + if (currentProjectPath && savedSettings?.[currentProjectPath]) { + savedSetting = savedSettings[currentProjectPath]; + } - // Store the value as last set and (if project scoped) project-specific - const savedSettings: ViewerSettingsStorageObject = { - ...(getItem(storageKey) ?? {}), - lastSet: newValue as ViewerSettingValue, + if (savedSetting != null) { + setSelf(savedSetting as T); + } }; - if (currentProjectPath) { - savedSettings[currentProjectPath] = newValue as ViewerSettingValue; - } - setItem(storageKey, savedSettings); - }); -}; + projectChangeObservable(store).subscribe(() => { + loadValueFromLocalStorage(); + }); + + // Called when the atom is updated from elsewhere (e.g. on user input) + onSet((newValue) => { + const currentProjectPath = getProjectPath(); + + // Store the value as last set and (if project scoped) project-specific + const savedSettings: ViewerSettingsStorageObject = { + ...(getItem(storageKey) ?? {}), + lastSet: newValue as ViewerSettingValue, + }; + if (currentProjectPath) { + savedSettings[currentProjectPath] = newValue as ViewerSettingValue; + } + + setItem(storageKey, savedSettings); + }); + }; const settingAtom = ( key: string, - defaultValue: T + defaultValue: T, ) => autoAtom({ default: defaultValue, diff --git a/apps/sim-core/packages/core/src/components/AgentScene/state/resetViewer.ts b/apps/sim-core/packages/core/src/components/AgentScene/state/resetViewer.ts index 8840632..0b3898e 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/state/resetViewer.ts +++ b/apps/sim-core/packages/core/src/components/AgentScene/state/resetViewer.ts @@ -14,35 +14,37 @@ import { store } from "../../../features/store"; * Also clears some recoil state * @see Controls for camera reset */ -export const resetViewer = ({ set, reset }: CallbackInterface) => async () => { - // Set the dimensions of the stage on reset - let { pxMin, pxMax, pyMin, pyMax } = dimensionDefaults; +export const resetViewer = + ({ set, reset }: CallbackInterface) => + () => { + // Set the dimensions of the stage on reset + let { pxMin, pxMax, pyMin, pyMax } = dimensionDefaults; - // The user may have defined their own initial stage bounds in globals.json - const globals = selectGlobals(store.getState()); - if (globals) { - try { - const { topology } = JSON.parse(globals); - if (topology) { - // Fallback to default values if user has failed to specify any - pxMin = topology.x_bounds?.[0] ?? pxMin; - pxMax = topology.x_bounds?.[1] ?? pxMax; - pyMin = topology.y_bounds?.[0] ?? pyMin; - pyMax = topology.y_bounds?.[1] ?? pyMax; + // The user may have defined their own initial stage bounds in globals.json + const globals = selectGlobals(store.getState()); + if (globals) { + try { + const { topology } = JSON.parse(globals); + if (topology) { + // Fallback to default values if user has failed to specify any + pxMin = topology.x_bounds?.[0] ?? pxMin; + pxMax = topology.x_bounds?.[1] ?? pxMax; + pyMin = topology.y_bounds?.[0] ?? pyMin; + pyMax = topology.y_bounds?.[1] ?? pyMax; + } + } catch { + // globals.json is not valid JSON } - } catch { - // globals.json is not valid JSON } - } - set(StageDimensions, { - pxMin, - pxMax, - pyMin, - pyMax, - }); + set(StageDimensions, { + pxMin, + pxMax, + pyMin, + pyMax, + }); - // Clear selected agents while we're at it - reset(SelectedAgentIds); - reset(HoveredAgent); -}; + // Clear selected agents while we're at it + reset(SelectedAgentIds); + reset(HoveredAgent); + }; diff --git a/apps/sim-core/packages/core/src/components/AgentScene/state/updateTransitionMap.ts b/apps/sim-core/packages/core/src/components/AgentScene/state/updateTransitionMap.ts index 72e02f4..14b4620 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/state/updateTransitionMap.ts +++ b/apps/sim-core/packages/core/src/components/AgentScene/state/updateTransitionMap.ts @@ -11,161 +11,157 @@ const tempColor = new THREE.Color(); Uses the previous RenderSummary to create a new RenderSummary that describes transitions that the 3D viewer must take. */ -export const updateTransitionMap = ({ - set, - snapshot, -}: CallbackInterface) => async ( - oldSummary: RenderSummary, - states: AgentState[] -) => { - /** - * Update the agents themselves - */ - const removals = new Set(Object.keys(oldSummary)); - const newSummary = { ...oldSummary }; - for (const agent of states) { - const agentId = agent.agent_id ?? "AGENT_ID_NOT_FOUND"; - if (!agent.position) { - continue; - } +export const updateTransitionMap = + ({ set, snapshot }: CallbackInterface) => + async (oldSummary: RenderSummary, states: AgentState[]) => { + /** + * Update the agents themselves + */ + const removals = new Set(Object.keys(oldSummary)); + const newSummary = { ...oldSummary }; + for (const agent of states) { + const agentId = agent.agent_id ?? "AGENT_ID_NOT_FOUND"; + if (!agent.position) { + continue; + } - /* + /* OF NOTE: This agent data is coming from recoil. We can "dangerouslyMutate" it while making sure it gets committed back using the normal recoilSetState. */ - // This can be undefined, dont' rely on it - const oldAgent = newSummary[agentId] as AgentTransition | undefined; + // This can be undefined, dont' rely on it + const oldAgent = newSummary[agentId] as AgentTransition | undefined; - // 1. Extract position - const [posX, posY, posZ] = [...(agent.position ?? [1, 1, 1])]; - const newPosition: Vec3 = [posX, posY ?? 0, posZ ?? 0]; + // 1. Extract position + const [posX, posY, posZ] = [...(agent.position ?? [1, 1, 1])]; + const newPosition: Vec3 = [posX, posY ?? 0, posZ ?? 0]; - // 2. Extract scaling - const scalex = agent.scale ? agent.scale[0] : 1; - const scaley = agent.scale ? agent.scale[1] : 1; - const scalez = agent.height ?? (agent.scale ? agent.scale[2] : 1); - const newScale: Vec3 = [scalex, scaley, scalez]; - const useHeight = agent.scale === undefined || agent.height !== undefined; + // 2. Extract scaling + const scalex = agent.scale ? agent.scale[0] : 1; + const scaley = agent.scale ? agent.scale[1] : 1; + const scalez = agent.height ?? (agent.scale ? agent.scale[2] : 1); + const newScale: Vec3 = [scalex, scaley, scalez]; + const useHeight = agent.scale === undefined || agent.height !== undefined; - // 3. Extract Direction - const [newDirX, newDirY, newDirZ] = [ - ...((Array.isArray(agent.direction) ? agent.direction : null) ?? - (Array.isArray(agent.velocity) ? agent.velocity : null) ?? [0, 0, 0]), - ]; + // 3. Extract Direction + const [newDirX, newDirY, newDirZ] = [ + ...((Array.isArray(agent.direction) ? agent.direction : null) ?? + (Array.isArray(agent.velocity) ? agent.velocity : null) ?? [0, 0, 0]), + ]; - // If the velocity goes to zero, try using the previous state's direction - // This helps prevent agents from flipping rotations around - const newDirection: Vec3 = [newDirX ?? 0, newDirY ?? 0, newDirZ ?? 0]; - if ( - newDirection[0] === 0 && - newDirection[1] === 0 && - newDirection[2] === 0 - ) { - const oldDir = oldAgent?.direction.to ?? oldAgent?.direction.current; - if (oldDir) { - newDirection[0] = oldDir[0]; - newDirection[1] = oldDir[1]; - newDirection[2] = oldDir[2]; + // If the velocity goes to zero, try using the previous state's direction + // This helps prevent agents from flipping rotations around + const newDirection: Vec3 = [newDirX ?? 0, newDirY ?? 0, newDirZ ?? 0]; + if ( + newDirection[0] === 0 && + newDirection[1] === 0 && + newDirection[2] === 0 + ) { + const oldDir = oldAgent?.direction.to ?? oldAgent?.direction.current; + if (oldDir) { + newDirection[0] = oldDir[0]; + newDirection[1] = oldDir[1]; + newDirection[2] = oldDir[2]; + } } - } - - // 4. Extract Color - // - // Agents can have a "color" field and even an "rgb" field - // RGB is specified is [r,g,b] whereas color is any three-compatible color description - tempColor.set(agent.color ?? "green"); - const newColor: Vec3 = [tempColor.r, tempColor.g, tempColor.b]; - if (agent.rgb && !agent.color) { - newColor[0] = agent.rgb[0] / 255; - newColor[1] = agent.rgb[1] / 255; - newColor[2] = agent.rgb[2] / 255; - } - // Weird carry over from before, any agents with a direction but no shape - // are turned into "arrows" (ie pointed cones) - let shape = agent.shape ?? oldAgent?.shape; - if (!shape) { - if (agent.direction || agent.velocity) { - shape = "cone"; - } else { - shape = "box"; + // 4. Extract Color + // + // Agents can have a "color" field and even an "rgb" field + // RGB is specified is [r,g,b] whereas color is any three-compatible color description + tempColor.set(agent.color ?? "green"); + const newColor: Vec3 = [tempColor.r, tempColor.g, tempColor.b]; + if (agent.rgb && !agent.color) { + newColor[0] = agent.rgb[0] / 255; + newColor[1] = agent.rgb[1] / 255; + newColor[2] = agent.rgb[2] / 255; } - } - // 5. Assign a slot in the transitions - // - // Grab out any old data from the agent to act as the previous animation frame - if (oldAgent) { - newSummary[agentId] = { - ...oldAgent, - shape, - original: agent, - hidden: agent.hidden ?? false, - color: { current: [...oldAgent.color.to], to: newColor }, - direction: { current: oldAgent.direction.to, to: newDirection }, - scale: { current: oldAgent.scale.to, to: newScale }, - position: { current: oldAgent.position.to, to: newPosition }, - network_neighbor_ids: agent.network_neighbor_ids, - network_neighbor_in_ids: agent.network_neighbor_in_ids, - network_neighbor_out_ids: agent.network_neighbor_out_ids, - }; - } else { - // If no existing agent exists, create a new one - newSummary[agentId] = { - color: { current: newColor, to: newColor }, - direction: { current: newDirection, to: newDirection }, - position: { current: newPosition, to: newPosition }, - scale: { current: [0, 0, 0], to: newScale }, - network_neighbor_ids: agent.network_neighbor_ids, - network_neighbor_in_ids: agent.network_neighbor_in_ids, - network_neighbor_out_ids: agent.network_neighbor_out_ids, - useHeight, - remove: false, - shape, - original: agent, - hidden: agent.hidden ?? false, - }; - } - removals.delete(agentId); - } + // Weird carry over from before, any agents with a direction but no shape + // are turned into "arrows" (ie pointed cones) + let shape = agent.shape ?? oldAgent?.shape; + if (!shape) { + if (agent.direction ?? agent.velocity) { + shape = "cone"; + } else { + shape = "box"; + } + } - // ID didn't show up in the new list of agents - for (const removal of removals.values()) { - const oldAgent = newSummary[removal]; - // Make sure this is actually actionable - if (oldAgent) { - if (oldAgent.remove) { - // Either it was scheduled for deletion or should be deleted - delete newSummary[removal]; - } else { - // Or it needs to be scheduled for deletion - newSummary[removal] = { + // 5. Assign a slot in the transitions + // + // Grab out any old data from the agent to act as the previous animation frame + if (oldAgent) { + newSummary[agentId] = { ...oldAgent, - remove: true, - scale: { ...oldAgent.scale, to: [0, 0, 0] }, + shape, + original: agent, + hidden: agent.hidden ?? false, + color: { current: [...oldAgent.color.to], to: newColor }, + direction: { current: oldAgent.direction.to, to: newDirection }, + scale: { current: oldAgent.scale.to, to: newScale }, + position: { current: oldAgent.position.to, to: newPosition }, + network_neighbor_ids: agent.network_neighbor_ids, + network_neighbor_in_ids: agent.network_neighbor_in_ids, + network_neighbor_out_ids: agent.network_neighbor_out_ids, + }; + } else { + // If no existing agent exists, create a new one + newSummary[agentId] = { + color: { current: newColor, to: newColor }, + direction: { current: newDirection, to: newDirection }, + position: { current: newPosition, to: newPosition }, + scale: { current: [0, 0, 0], to: newScale }, + network_neighbor_ids: agent.network_neighbor_ids, + network_neighbor_in_ids: agent.network_neighbor_in_ids, + network_neighbor_out_ids: agent.network_neighbor_out_ids, + useHeight, + remove: false, + shape, + original: agent, + hidden: agent.hidden ?? false, }; } + removals.delete(agentId); } - } - set(MappedTransitions, newSummary); + // ID didn't show up in the new list of agents + for (const removal of removals.values()) { + const oldAgent = newSummary[removal]; + // Make sure this is actually actionable + if (oldAgent) { + if (oldAgent.remove) { + // Either it was scheduled for deletion or should be deleted + delete newSummary[removal]; + } else { + // Or it needs to be scheduled for deletion + newSummary[removal] = { + ...oldAgent, + remove: true, + scale: { ...oldAgent.scale, to: [0, 0, 0] }, + }; + } + } + } - /** - * Set the dimensions of the stage - */ - const dims = await snapshot.getPromise(StageDimensions); - let { pxMax, pxMin, pyMax, pyMin } = dims; - for (const agent of Object.values(newSummary)) { - pxMax = Math.max(agent.position.to[0], pxMax); - pxMin = Math.min(agent.position.to[0], pxMin); - pyMax = Math.max(agent.position.to[1], pyMax); - pyMin = Math.min(agent.position.to[1], pyMin); - } - set(StageDimensions, { - pxMax, - pxMin, - pyMax, - pyMin, - }); -}; + set(MappedTransitions, newSummary); + + /** + * Set the dimensions of the stage + */ + const dims = await snapshot.getPromise(StageDimensions); + let { pxMax, pxMin, pyMax, pyMin } = dims; + for (const agent of Object.values(newSummary)) { + pxMax = Math.max(agent.position.to[0], pxMax); + pxMin = Math.min(agent.position.to[0], pxMin); + pyMax = Math.max(agent.position.to[1], pyMax); + pyMin = Math.min(agent.position.to[1], pyMin); + } + set(StageDimensions, { + pxMax, + pxMin, + pyMax, + pyMin, + }); + }; diff --git a/apps/sim-core/packages/core/src/components/AgentScene/state/util.ts b/apps/sim-core/packages/core/src/components/AgentScene/state/util.ts index f9fa4e6..08c6ae1 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/state/util.ts +++ b/apps/sim-core/packages/core/src/components/AgentScene/state/util.ts @@ -23,7 +23,7 @@ export function autoAtom(options: Omit, "key">) { } export function autoSelector( - options: Omit, "key"> + options: Omit, "key">, ) { return recoilSelector({ key: uuidv4(), @@ -37,7 +37,7 @@ export function autoSelector( } export function autoreadSelectorFamily( - options: Omit, "key"> + options: Omit, "key">, ) { return selectorFamily({ key: uuidv4(), diff --git a/apps/sim-core/packages/core/src/components/AgentScene/util/anim.ts b/apps/sim-core/packages/core/src/components/AgentScene/util/anim.ts index c19608a..27a84c7 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/util/anim.ts +++ b/apps/sim-core/packages/core/src/components/AgentScene/util/anim.ts @@ -1,7 +1,10 @@ import { AgentState, Vec3 } from "@hashintel/engine-web"; -export type AnimValue = { current: A; to: A }; -export type AgentTransition = { +export interface AnimValue { + current: A; + to: A; +} +export interface AgentTransition { position: AnimValue; direction: AnimValue; color: AnimValue; @@ -15,16 +18,14 @@ export type AgentTransition = { network_neighbor_ids?: unknown; network_neighbor_in_ids: unknown; network_neighbor_out_ids: unknown; -}; +} -export type RenderSummary = { - [agent_id: string]: AgentTransition; -}; +export type RenderSummary = Record; // Mutably advances "cur" to "to" based on the lerpval export function lerpAnimValue( { current, to }: AnimValue, - lerpVal: number + lerpVal: number, ): [number, number, number] { if (current) { return [ diff --git a/apps/sim-core/packages/core/src/components/AgentScene/util/builtinmodels.ts b/apps/sim-core/packages/core/src/components/AgentScene/util/builtinmodels.ts index c37838e..2ee168a 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/util/builtinmodels.ts +++ b/apps/sim-core/packages/core/src/components/AgentScene/util/builtinmodels.ts @@ -1,13 +1,13 @@ -type PolyModel = { +interface PolyModel { folderPath: string; resourceUrls: string[]; slug: string; -}; +} -export const BUILTIN_MODELS: { - // rotation as degrees - [id: string]: { rotX?: number; rotY?: number; rotZ?: number }; -} = { +export const BUILTIN_MODELS: Record< + string, + { rotX?: number; rotY?: number; rotZ?: number } +> = { "elm-tree": {}, "palm-tree": {}, "spruce-tree": {}, diff --git a/apps/sim-core/packages/core/src/components/AgentScene/util/geometry-loader.ts b/apps/sim-core/packages/core/src/components/AgentScene/util/geometry-loader.ts index 818bc57..4b97cc7 100644 --- a/apps/sim-core/packages/core/src/components/AgentScene/util/geometry-loader.ts +++ b/apps/sim-core/packages/core/src/components/AgentScene/util/geometry-loader.ts @@ -9,12 +9,12 @@ export type RawGeometry = [THREE.BufferGeometry, THREE.Material]; export const loadGeometryMesh = async ( userMeshName: string, - num: number + num: number, ): Promise => { switch (userMeshName) { case "box": return geoHelper("BoxBufferGeometry", num, [1, 1, 1]); - case "cone": + case "cone": { const [geo, mat] = geoHelper("ConeBufferGeometry", num, [0.5, 1, 30]); // Our cones point in the forward direction // Cones normally point up @@ -22,13 +22,16 @@ export const loadGeometryMesh = async ( geo.rotateX(Math.PI); geo.rotateY(Math.PI / 2); return [geo, mat]; - case "flatplane": - const [geoPlane, matPlane] = geoHelper("PlaneBufferGeometry", num, [ - 1, - 1, - ]); + } + case "flatplane": { + const [geoPlane, matPlane] = geoHelper( + "PlaneBufferGeometry", + num, + [1, 1], + ); geoPlane.translate(0, 0, -0.5); return [geoPlane, matPlane]; + } case "cylinder": return geoHelper("CylinderBufferGeometry", num, [0.5, 0.5]); case "dodecahedron": @@ -77,7 +80,7 @@ type SupportedShapes = const geoHelper = ( geoType: SupportedShapes, numMeshes: number, - args: number[] + args: number[], ): RawGeometry => { const geometry = new THREE[geoType](...args); geometry.computeVertexNormals(); @@ -134,9 +137,8 @@ export const polyLoader = async (meshName: string): Promise => { const { rotX, rotY, rotZ } = builtin; - const { folderPath, objectUrl, materialUrl } = await fetchPolyFromBuiltinDb( - meshName - ); + const { folderPath, objectUrl, materialUrl } = + await fetchPolyFromBuiltinDb(meshName); // Three has built-in loaders that know how to fetch from URLs, but the most reliable // method is to just fetch the texts manually and have the loaders parse them @@ -170,7 +172,7 @@ export const polyLoader = async (meshName: string): Promise => { mergedMaterials.concat(Object.values(materials.materials)); const geometry = BufferGeometryUtils.mergeBufferGeometries( mergedGeometries, - true + true, ); // Yes, it's deprecated, but it's the only way to get material merging to work @@ -201,17 +203,17 @@ export const polyLoader = async (meshName: string): Promise => { return [geometry, material]; }; -const fetchPolyFromBuiltinDb = async (slug: string) => { +const fetchPolyFromBuiltinDb = (slug: string) => { const { folderPath, resourceUrls } = BUILTIN_MODELS_DB.find((model) => { return model.slug === slug; - }) || { folderPath: null, resourceUrls: [] }; + }) ?? { folderPath: null, resourceUrls: [] }; if (!folderPath) { throw new Error("No folderPath found for built-in model " + slug); } const objectUrl = resourceUrls.find((url) => - url.toLowerCase().endsWith(".obj") + url.toLowerCase().endsWith(".obj"), ); if (!objectUrl) { @@ -219,7 +221,7 @@ const fetchPolyFromBuiltinDb = async (slug: string) => { } const materialUrl = resourceUrls.find((url) => - url.toLowerCase().endsWith(".mtl") + url.toLowerCase().endsWith(".mtl"), ); if (!materialUrl) { diff --git a/apps/sim-core/packages/core/src/components/Analysis/AnalysisViewer.tsx b/apps/sim-core/packages/core/src/components/Analysis/AnalysisViewer.tsx index 39cae67..4f417a6 100644 --- a/apps/sim-core/packages/core/src/components/Analysis/AnalysisViewer.tsx +++ b/apps/sim-core/packages/core/src/components/Analysis/AnalysisViewer.tsx @@ -37,10 +37,8 @@ export const AnalysisViewer: FC = ({ currentStep }) => { const embedded = useSelector(selectEmbedded); const canEdit = useScope(Scope.edit); - const { - analysis: analysisString, - readonly: analysisReadOnly, - } = useAnalysisSrcForCurrentActivityItem(); + const { analysis: analysisString, readonly: analysisReadOnly } = + useAnalysisSrcForCurrentActivityItem(); const [analysisState, setAnalysis] = useParseAnalysis(analysisString); // @todo remove this any @@ -48,7 +46,7 @@ export const AnalysisViewer: FC = ({ currentStep }) => { // TODO: discuss if we also need the useCancellableDebounce trick here - const outputs = (analysis && analysis.outputs) || {}; + const outputs = analysis?.outputs || {}; const metricKeys = Object.keys(outputs); const analysisOutputMetricsDataAvailable = metricKeys.length > 0; const analysisPlotsDataAvailable = analysis?.plots?.length > 0; @@ -56,8 +54,8 @@ export const AnalysisViewer: FC = ({ currentStep }) => { ? 0 : sum( analysis.plots.map((plot: Plot) => - parseInt(plot.layout?.height?.replace?.("%", "") ?? 0, 10) - ) + parseInt(plot.layout?.height?.replace?.("%", "") ?? 0, 10), + ), ); // @todo collapse state @@ -67,8 +65,8 @@ export const AnalysisViewer: FC = ({ currentStep }) => { const currentTab = hasTouchedCurrentTab ? _currentTab : !embedded && analysisPlotsDataAvailable - ? 1 - : 0; + ? 1 + : 0; const onOutputMetricsModalSaveHandler = useCallback( (data: any, previousKey?: string) => @@ -80,7 +78,7 @@ export const AnalysisViewer: FC = ({ currentStep }) => { data, previousKey, }), - [dispatch, setAnalysis, analysis, analysisString] + [dispatch, setAnalysis, analysis, analysisString], ); const onOutputMetricsModalDeleteHandler = (keyToDelete: string) => @@ -111,7 +109,7 @@ export const AnalysisViewer: FC = ({ currentStep }) => { dispatch, setAnalysis, }), - [analysis, analysisString, dispatch] + [analysis, analysisString, dispatch], ); const onPlotsModalDeleteHandler = (indexToDelete: number) => @@ -132,7 +130,7 @@ export const AnalysisViewer: FC = ({ currentStep }) => { existingMetricKeys={metricKeys} /> ), - [metricKeys, onOutputMetricsModalSaveHandler] + [metricKeys, onOutputMetricsModalSaveHandler], ); const [showPlotsModal, hidePlotsModal] = useModal( @@ -145,38 +143,39 @@ export const AnalysisViewer: FC = ({ currentStep }) => { combinedHeightOfAllPlots={combinedHeightOfAllPlots} /> ), - [outputs, onPlotsModalSaveHandler, combinedHeightOfAllPlots] + [outputs, onPlotsModalSaveHandler, combinedHeightOfAllPlots], ); const tabContainerWidthObserver = useResizeObserver( ({ width }) => { document.documentElement.style.setProperty( "--analysis-tab-container-width", - `${Math.floor(width)}px` + `${Math.floor(width)}px`, ); }, - { onObserve: null } + { onObserve: null }, ); useEffect(() => { if (analysisOutputMetricsDataAvailable && currentTab === 0 && !embedded) { const viewerSecondaryPane = document.querySelector( - ".HashCoreSection-splitter > .splitter-layout > .layout-pane:not(.layout-pane-primary)" + ".HashCoreSection-splitter > .splitter-layout > .layout-pane:not(.layout-pane-primary)", ); - const analysisSecondaryPane = viewerSecondaryPane?.querySelector( - ".HashCoreViewer > .splitter-layout > .layout-pane:not(.layout-pane-primary)" - ); + const analysisSecondaryPane = + viewerSecondaryPane?.querySelector( + ".HashCoreViewer > .splitter-layout > .layout-pane:not(.layout-pane-primary)", + ); viewerSecondaryPane?.classList.add("AnalysisViewerSplitterController"); viewerSecondaryPane?.style.setProperty( "--avsc-analysis-width", - `${analysisSecondaryPane?.getBoundingClientRect().width ?? 0}px` + `${analysisSecondaryPane?.getBoundingClientRect().width ?? 0}px`, ); return () => { viewerSecondaryPane?.classList.remove( - "AnalysisViewerSplitterController" + "AnalysisViewerSplitterController", ); viewerSecondaryPane?.style.removeProperty("--avsc-analysis-width"); }; @@ -223,7 +222,8 @@ export const AnalysisViewer: FC = ({ currentStep }) => { AnalysisViewer__TabPanel: true, "react-tabs__tab-panel--selected": true, AnalysisViewer__LoggedOut: true, - "AnalysisViewer__TabPanel__Plots--nodata": !analysisPlotsDataAvailable, + "AnalysisViewer__TabPanel__Plots--nodata": + !analysisPlotsDataAvailable, })} > {plotsTab} @@ -269,7 +269,8 @@ export const AnalysisViewer: FC = ({ currentStep }) => { = ({ icon, @@ -31,7 +31,7 @@ const ListItem: FC = ({
  • @@ -49,7 +49,9 @@ const ListItem: FC = ({
  • ); -export const AnalysisViewerActionButtons: FC = ({ +export const AnalysisViewerActionButtons: FC< + AnalysisViewerActionButtonsProps +> = ({ canCreateNewPlot = false, showPlotsModal, showOutputMetricsModal, @@ -57,7 +59,7 @@ export const AnalysisViewerActionButtons: FC = }) => { if (!canEdit) { throw new Error( - "Should not be rendering analysis viewer action buttons in a read only context" + "Should not be rendering analysis viewer action buttons in a read only context", ); } diff --git a/apps/sim-core/packages/core/src/components/Analysis/ButtonCallToAction.spec.tsx b/apps/sim-core/packages/core/src/components/Analysis/ButtonCallToAction.spec.tsx index a942a5d..81cbcb5 100644 --- a/apps/sim-core/packages/core/src/components/Analysis/ButtonCallToAction.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Analysis/ButtonCallToAction.spec.tsx @@ -12,6 +12,7 @@ import { store } from "../../features/store"; it("renders without crashing", () => { const div = document.createElement("div"); + //@ts-expect-error Redux types need to be repaired. store.dispatch(setProjectWithMeta(mockProject)); ReactDOM.render( @@ -24,7 +25,7 @@ it("renders without crashing", () => { , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Analysis/HelpParagraph.tsx b/apps/sim-core/packages/core/src/components/Analysis/HelpParagraph.tsx index 0837756..3c7e65f 100644 --- a/apps/sim-core/packages/core/src/components/Analysis/HelpParagraph.tsx +++ b/apps/sim-core/packages/core/src/components/Analysis/HelpParagraph.tsx @@ -2,9 +2,9 @@ import React, { FC } from "react"; import { IconHelpCircleOutline } from "../Icon/HelpCircleOutline"; -type HelpParagraphProps = { +interface HelpParagraphProps { text: string; -}; +} export const HelpParagraph: FC = ({ text }) => (
    diff --git a/apps/sim-core/packages/core/src/components/Analysis/OutputMetricsGrid.spec.tsx b/apps/sim-core/packages/core/src/components/Analysis/OutputMetricsGrid.spec.tsx index 746325a..d48339b 100644 --- a/apps/sim-core/packages/core/src/components/Analysis/OutputMetricsGrid.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Analysis/OutputMetricsGrid.spec.tsx @@ -25,6 +25,7 @@ const metrics = { metricName: operations }; it("renders without crashing", () => { const div = document.createElement("div"); + //@ts-expect-error Redux types need to be repaired. store.dispatch(setProjectWithMeta(mockProject)); ReactDOM.render( @@ -39,7 +40,7 @@ it("renders without crashing", () => { , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Analysis/OutputMetricsGrid.tsx b/apps/sim-core/packages/core/src/components/Analysis/OutputMetricsGrid.tsx index 381c8f6..77d706b 100644 --- a/apps/sim-core/packages/core/src/components/Analysis/OutputMetricsGrid.tsx +++ b/apps/sim-core/packages/core/src/components/Analysis/OutputMetricsGrid.tsx @@ -30,7 +30,7 @@ const reducer = (state: any, action: any) => { }; default: throw new Error( - `OutputMetricsGrid: reducer received an unknown action: "${action.type}"` + `OutputMetricsGrid: reducer received an unknown action: "${action.type}"`, ); } }; @@ -61,7 +61,7 @@ export const OutputMetricsGrid: FC = ({ existingMetricKeys={state.existingMetricKeys} /> ), - [state, onOutputMetricsModalSave, onOutputMetricsModalDelete] + [state, onOutputMetricsModalSave, onOutputMetricsModalDelete], ); if (!metrics) { @@ -101,8 +101,9 @@ export const OutputMetricsGrid: FC = ({ className={classNames( "AnalysisViewer__OutputMetricsGrid__ListItem", { - "AnalysisViewer__OutputMetricsGrid__ListItem--readonly": readonly, - } + "AnalysisViewer__OutputMetricsGrid__ListItem--readonly": + readonly, + }, )} onClick={(evt) => { evt.preventDefault(); diff --git a/apps/sim-core/packages/core/src/components/Analysis/TabListActionButtons.scss b/apps/sim-core/packages/core/src/components/Analysis/TabListActionButtons.scss index a5579ee..cc06394 100644 --- a/apps/sim-core/packages/core/src/components/Analysis/TabListActionButtons.scss +++ b/apps/sim-core/packages/core/src/components/Analysis/TabListActionButtons.scss @@ -1,7 +1,8 @@ .AnalysisViewer__ActionButtons__Tooltip { max-width: calc( - (var(--analysis-tab-container-width) - 10px) - - var(--AnalysisViewer__ActionButtons__Tooltip--index) * 38px + (var(--analysis-tab-container-width) - 10px) - var( + --AnalysisViewer__ActionButtons__Tooltip--index + ) * 38px ); min-width: 0; --clip-y-below: -50px; diff --git a/apps/sim-core/packages/core/src/components/Analysis/modals.ts b/apps/sim-core/packages/core/src/components/Analysis/modals.ts index 4e82904..2cd6975 100644 --- a/apps/sim-core/packages/core/src/components/Analysis/modals.ts +++ b/apps/sim-core/packages/core/src/components/Analysis/modals.ts @@ -1,4 +1,3 @@ -import { PlotDefinition } from "@hashintel/engine-web"; import { omit } from "lodash"; import { ChartTypes, Operation, Plot, YAxisItemType } from "./types"; @@ -8,17 +7,17 @@ import { updateFile } from "../../features/files/slice"; export const MAGIC_STEPS_KEY = "Use steps on the X Axis"; -type ModalsBaseProps = { +interface ModalsBaseProps { dispatch: Function; setAnalysis: Function; analysis: any; analysisString?: string; -}; +} -type OutputMetricsModalSubmitType = { +interface OutputMetricsModalSubmitType { title: string; operations: Operation[]; -}; +} type OnOutputMetricsModalSaveInputType = ModalsBaseProps & { data: OutputMetricsModalSubmitType; @@ -37,51 +36,51 @@ type OnPlotsModalDeleteType = ModalsBaseProps & { indexToDelete: number; }; -type PlotsModalChartTypeOption = { +interface PlotsModalChartTypeOption { value: string; label: string; -}; +} -type PlotsModalYAxisItemType = { +interface PlotsModalYAxisItemType { name: string; metric: string; -}; +} -type PlotsModalXAxisItemType = { +interface PlotsModalXAxisItemType { name: string; metric: string; -}; +} -type PlotsModalLayoutType = { +interface PlotsModalLayoutType { width: string; height: string; -}; +} -type PlotsModalPositionType = { +interface PlotsModalPositionType { x: string; y: string; -}; +} -type PlotsModalSubmitType = { +interface PlotsModalSubmitType { title: string; chartType: PlotsModalChartTypeOption; yitems?: PlotsModalYAxisItemType[]; xitems?: PlotsModalXAxisItemType[]; layout: PlotsModalLayoutType; position: PlotsModalPositionType; -}; +} type OnPlotsModalSaveType = ModalsBaseProps & { data: PlotsModalSubmitType; plotIndex?: number; }; -type saveToAnalysisFile = { +interface saveToAnalysisFile { dispatch: Function; setAnalysis: Function; analysisString?: string; newValues: any; -}; +} const saveToAnalysisFile = ({ dispatch, @@ -160,8 +159,8 @@ export const onDuplicateMetric = ({ // Reads the data definition and transforms it to a format understood // by the Plots modal export const getYAxisItemsFromDataDefinition = ( - input: PlotDefinition & any -): Array => { + input: any, +): YAxisItemType[] => { if (!input.type && input[ChartTypes.timeseries]) { return input.timeseries.map((metric: any) => ({ name: metric, @@ -196,8 +195,8 @@ export const getYAxisItemsFromDataDefinition = ( // Reads the data definition and transforms it to a format understood // by the Plots modal export const getXAxisItemsFromDataDefinition = ( - input: PlotDefinition & any -): Array => { + input: any, +): YAxisItemType[] => { if (!input.type) { return input.data; } @@ -211,16 +210,13 @@ export const getXAxisItemsFromDataDefinition = ( ); }; -export const getPlotTypeFromDataDefinition = ( - input: PlotDefinition & any -): string => input.type ?? ChartTypes.timeseries; +export const getPlotTypeFromDataDefinition = (input: any): string => + input.type ?? ChartTypes.timeseries; const chartItemLabel = (item: { name?: string; metric?: string }) => item.name ?? item.metric; -export const transformPlotDataBasedOnChartType = ( - input: PlotDefinition & any -) => { +export const transformPlotDataBasedOnChartType = (input: any) => { const result = Object.assign({}, input); switch (input.type) { // http://localhost:8080/@hash/city-infection-model/6.1.1 @@ -265,7 +261,7 @@ export const transformPlotDataBasedOnChartType = ( break; case ChartTypes.line: - case ChartTypes.scatter: + case ChartTypes.scatter: { // this assumes we have both X and Y OR we have only Y and X=steps const hasMagicStepsKey = input.data?.xitems.length === 1 && @@ -276,7 +272,7 @@ export const transformPlotDataBasedOnChartType = ( : input.data?.xitems.length > 0; if (!hasYItems && !hasXItems) { console.log( - "Caught invalid configuration for line or scatter plot. The validation for this should be added to the Plots modal." + "Caught invalid configuration for line or scatter plot. The validation for this should be added to the Plots modal.", ); result.data = []; // we shouldnt get to this case, so prevent writing invalid stuff } @@ -294,7 +290,7 @@ export const transformPlotDataBasedOnChartType = ( } break; - + } case ChartTypes.bar: default: result.data = input.data?.yitems?.map((item: any) => ({ diff --git a/apps/sim-core/packages/core/src/components/Analysis/types.ts b/apps/sim-core/packages/core/src/components/Analysis/types.ts index 19cacf3..984f020 100644 --- a/apps/sim-core/packages/core/src/components/Analysis/types.ts +++ b/apps/sim-core/packages/core/src/components/Analysis/types.ts @@ -4,24 +4,24 @@ import { PlotParams } from "react-plotly.js"; import { AnalysisMode } from "../../features/simulator/simulate/enum"; import { ReactSelectOption } from "../Dropdown/types"; -export type AnalysisProps = { +export interface AnalysisProps { currentStep: number; visible?: boolean; -}; +} -export type AnalysisViewerPlotsTabProps = { +export interface AnalysisViewerPlotsTabProps { analysisPlotsDataAvailable: boolean; analysisOutputMetricsDataAvailable: boolean; currentStep: number; - outputs: { [index: string]: any[] }; + outputs: Record; analysisMode?: AnalysisMode | null; onPlotsModalSaveHandler: Function; onPlotsModalDeleteHandler: Function; showPlotsModal: (event: MouseEvent) => void; readonly: boolean; -}; +} -export type AnalysisViewerOutputMetricsTabProps = { +export interface AnalysisViewerOutputMetricsTabProps { analysisOutputMetricsDataAvailable: boolean; showOutputMetricsModal: (event: MouseEvent) => void; analysis: any; @@ -29,7 +29,7 @@ export type AnalysisViewerOutputMetricsTabProps = { onOutputMetricsModalDeleteHandler: Function; onDuplicateMetricHandler: Function; readonly: boolean; -}; +} export type OutputPlotProps = PlotParams & { key: string; @@ -42,12 +42,12 @@ export enum ButtonCallToActionType { PLOTS = "PLOTS", } -export type ButtonCallToActionProps = { +export interface ButtonCallToActionProps { children: JSX.Element | JSX.Element[]; onClick?: (event: MouseEvent) => void; -}; +} -export type AnalysisViewerActionButtonsProps = { +export interface AnalysisViewerActionButtonsProps { canCreateNewPlot?: boolean; showOutputMetricsModal: (event: MouseEvent) => void; showPlotsModal: (event: MouseEvent) => void; @@ -57,7 +57,7 @@ export type AnalysisViewerActionButtonsProps = { * it */ canEdit: true; -}; +} export enum ComparisonTypes { eq = "eq", @@ -78,7 +78,7 @@ export enum OperationTypes { mean = "mean", } -export type OperationItemProps = { +export interface OperationItemProps { operation: Operation; index: number; onDelete: (event: MouseEvent) => void; @@ -86,33 +86,33 @@ export type OperationItemProps = { permittedOperations: ReactSelectOption[]; // the operations that preceed this one. hideDelete?: boolean; behaviorKeysOptions?: ReactSelectOption[]; // used for "field" -}; +} -export type Operation = { +export interface Operation { op: OperationTypes; field?: string; comparison?: ComparisonTypes; value?: any; -}; +} -export type OutputMetricsGridProps = { +export interface OutputMetricsGridProps { onOutputMetricsModalSave: Function; - metrics?: { [index: string]: Operation[] }; + metrics?: Record; onOutputMetricsModalDelete?: Function; onDuplicateMetric?: Function; sizeClassname?: string; readonly: boolean; -}; +} -type PlotLayout = { +interface PlotLayout { width: string; height: string; -}; +} -type PlotPosition = { +interface PlotPosition { x: string; y: string; -}; +} enum PlotType { timeseries, @@ -121,39 +121,39 @@ enum PlotType { line, } -type PlotData = { +interface PlotData { y: string; name: string; -}; +} -export type Plot = { +export interface Plot { title: string; layout: PlotLayout; position: PlotPosition; type?: PlotType; data?: PlotData[]; timeseries?: string[]; -}; +} -export type AnalysisObject = { - outputs: { [index: string]: Operation[] }; +export interface AnalysisObject { + outputs: Record; plots: Plot[]; -}; +} -export type AnalysisState = { +export interface AnalysisState { lastAnalysisString?: any; analysis?: AnalysisObject; error: any; -}; +} -export type OnOutputMetricsModalSaveType = { +export interface OnOutputMetricsModalSaveType { title: string; operations: Operation[]; -}; +} -export type OnOutputMetricsModalSaveProps = { +export interface OnOutputMetricsModalSaveProps { data: OnOutputMetricsModalSaveType; -}; +} export enum ChartTypes { area = "area", @@ -171,18 +171,18 @@ export enum ChartTypes { // scatter3d = "scatter3d", } -type AxisItemType = { +interface AxisItemType { name: string; metric: string; -}; +} export type YAxisItemType = AxisItemType; export type XAxisItemType = AxisItemType; -export type YAxisItemProps = { +export interface YAxisItemProps { item: YAxisItemType; index: number; metricKeysOptions: ReactSelectOption[]; onDelete: (event: MouseEvent) => void; onChange: Function; hideDelete: boolean; -}; +} diff --git a/apps/sim-core/packages/core/src/components/Analysis/utils.ts b/apps/sim-core/packages/core/src/components/Analysis/utils.ts index 7b49a76..156bb81 100644 --- a/apps/sim-core/packages/core/src/components/Analysis/utils.ts +++ b/apps/sim-core/packages/core/src/components/Analysis/utils.ts @@ -13,7 +13,7 @@ const _getErrorPosition = (error: string): number => const _getErrorLineInformation = ( sourceCode: string, - errorPosition: number + errorPosition: number, ): { slicedJsonLines: string[]; leftSpacePaddingLength: number; @@ -36,8 +36,10 @@ const _getErrorLineInformation = ( return; } const matchingChar = sourceCode?.slice(errorPosition - 1, errorPosition); - leftSpacePaddingLength = line.substring(0, line.indexOf(matchingChar)) - .length; + leftSpacePaddingLength = line.substring( + 0, + line.indexOf(matchingChar), + ).length; }); return { slicedJsonLines, leftSpacePaddingLength, lineForError }; }; @@ -60,7 +62,7 @@ const _getErrorWithSurroundingCode = ({ .slice(lineForError - 2, lineForError) .map( (item: string, index: number) => - `${lineForError - 1 + index}: ${spacer}${item}` + `${lineForError - 1 + index}: ${spacer}${item}`, ) .join("\n"); // we can comment this line but sometimes the error is way too long @@ -69,7 +71,7 @@ const _getErrorWithSurroundingCode = ({ export const getHelpForSyntaxError = ( error: string, - analysisString?: string + analysisString?: string, ): string => { if (!analysisString) { return ""; diff --git a/apps/sim-core/packages/core/src/components/App/App.tsx b/apps/sim-core/packages/core/src/components/App/App.tsx index cc018d7..1132412 100644 --- a/apps/sim-core/packages/core/src/components/App/App.tsx +++ b/apps/sim-core/packages/core/src/components/App/App.tsx @@ -11,9 +11,9 @@ import { SimulatorProvider } from "../../features/simulator/context"; import "./App.css"; -type AppProps = { +interface AppProps { store: Store; -}; +} export const App: FC = ({ store, children }) => ( diff --git a/apps/sim-core/packages/core/src/components/BehaviorKeys/BehaviorKeys.tsx b/apps/sim-core/packages/core/src/components/BehaviorKeys/BehaviorKeys.tsx index 92e1af9..d3bef8c 100644 --- a/apps/sim-core/packages/core/src/components/BehaviorKeys/BehaviorKeys.tsx +++ b/apps/sim-core/packages/core/src/components/BehaviorKeys/BehaviorKeys.tsx @@ -20,10 +20,10 @@ export const BehaviorKeys: FC<{ }> = ({ data, onChange, fileId, autosuggest, disabled }) => { const [projection, setProjection] = useState([]); - const projectedData = useMemo(() => reduceProjection(projection, data), [ - projection, - data, - ]); + const projectedData = useMemo( + () => reduceProjection(projection, data), + [projection, data], + ); const onProjectedDataChange = (rows: BehaviorKeysDraftRow[]) => { if (!disabled) { diff --git a/apps/sim-core/packages/core/src/components/BehaviorKeys/BehaviorKeysFieldForm.tsx b/apps/sim-core/packages/core/src/components/BehaviorKeys/BehaviorKeysFieldForm.tsx index d840b3c..0031f94 100644 --- a/apps/sim-core/packages/core/src/components/BehaviorKeys/BehaviorKeysFieldForm.tsx +++ b/apps/sim-core/packages/core/src/components/BehaviorKeys/BehaviorKeysFieldForm.tsx @@ -62,7 +62,7 @@ export const BehaviorKeysFieldForm: FC = ({ }, }, } - : {} + : {}, ); const debouncedOnAdd = debounce(onAddField); @@ -98,7 +98,7 @@ export const BehaviorKeysFieldForm: FC = ({ name={`${row.uuid}.type`} className="BehaviorKeys__FieldForm__Type" options={behaviorKeysRowTypes.flatMap((type) => - type === "any" && projection.length > 0 ? [] : [{ value: type }] + type === "any" && projection.length > 0 ? [] : [{ value: type }], )} value={row.meta.type} onChange={(evt) => { @@ -128,7 +128,7 @@ export const BehaviorKeysFieldForm: FC = ({ {fieldHasRows(row) ? (
    ); - } + }, ); diff --git a/apps/sim-core/packages/core/src/components/DataTable/Head/DataTableHead.tsx b/apps/sim-core/packages/core/src/components/DataTable/Head/DataTableHead.tsx index fe15b8a..c0730ed 100644 --- a/apps/sim-core/packages/core/src/components/DataTable/Head/DataTableHead.tsx +++ b/apps/sim-core/packages/core/src/components/DataTable/Head/DataTableHead.tsx @@ -3,9 +3,9 @@ import { kebabCase } from "lodash"; import "./DataTableHead.css"; -type DataTableHeadProps = { +interface DataTableHeadProps { headings: string[]; -}; +} export const DataTableHead: FC = memo(({ headings }) => ( <> diff --git a/apps/sim-core/packages/core/src/components/DataTable/Pagination/DataTablePagination.spec.tsx b/apps/sim-core/packages/core/src/components/DataTable/Pagination/DataTablePagination.spec.tsx index 1aa6562..3af3ef9 100644 --- a/apps/sim-core/packages/core/src/components/DataTable/Pagination/DataTablePagination.spec.tsx +++ b/apps/sim-core/packages/core/src/components/DataTable/Pagination/DataTablePagination.spec.tsx @@ -11,7 +11,7 @@ it("renders without crashing", () => { setCurrentPage={() => {}} totalPages={1} />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/DataTable/Pagination/DataTablePagination.tsx b/apps/sim-core/packages/core/src/components/DataTable/Pagination/DataTablePagination.tsx index 930d85d..ad7ffc9 100644 --- a/apps/sim-core/packages/core/src/components/DataTable/Pagination/DataTablePagination.tsx +++ b/apps/sim-core/packages/core/src/components/DataTable/Pagination/DataTablePagination.tsx @@ -4,11 +4,11 @@ import { FancyButton } from "../../Fancy"; import "./DataTablePagination.css"; -type DataTablePaginationProps = { +interface DataTablePaginationProps { currentPage: number; setCurrentPage: Dispatch>; totalPages: number; -}; +} export const DataTablePagination: FC = memo( ({ currentPage, setCurrentPage, totalPages }) => ( @@ -31,5 +31,5 @@ export const DataTablePagination: FC = memo( } />
    - ) + ), ); diff --git a/apps/sim-core/packages/core/src/components/DataTable/Row/DataTableRow.tsx b/apps/sim-core/packages/core/src/components/DataTable/Row/DataTableRow.tsx index 824f8ee..940cf14 100644 --- a/apps/sim-core/packages/core/src/components/DataTable/Row/DataTableRow.tsx +++ b/apps/sim-core/packages/core/src/components/DataTable/Row/DataTableRow.tsx @@ -2,10 +2,10 @@ import React, { FC, memo } from "react"; import { DataTableCell } from "../Cell"; -type DataTableRowProps = { +interface DataTableRowProps { rowIndex: number; record: any[]; -}; +} export const DataTableRow: FC = memo( ({ rowIndex, record }) => ( @@ -15,5 +15,5 @@ export const DataTableRow: FC = memo( ))} - ) + ), ); diff --git a/apps/sim-core/packages/core/src/components/DiscordWidget/DiscordWidget.tsx b/apps/sim-core/packages/core/src/components/DiscordWidget/DiscordWidget.tsx index bcaa8ac..643c77c 100644 --- a/apps/sim-core/packages/core/src/components/DiscordWidget/DiscordWidget.tsx +++ b/apps/sim-core/packages/core/src/components/DiscordWidget/DiscordWidget.tsx @@ -29,7 +29,9 @@ export const BasicDiscordWidget: FC<{ try { loggedIn = selectScope[Scope.useAccount](store.getState()); - } catch {} + } catch { + // Store may not be present, so hide that error. + } const children = ; const props = { className: classNames("DiscordWidget", className) }; diff --git a/apps/sim-core/packages/core/src/components/Dropdown/Dropdown.spec.tsx b/apps/sim-core/packages/core/src/components/Dropdown/Dropdown.spec.tsx index 97a9782..68d9095 100644 --- a/apps/sim-core/packages/core/src/components/Dropdown/Dropdown.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Dropdown/Dropdown.spec.tsx @@ -7,7 +7,7 @@ it("renders without crashing", () => { const div = document.createElement("div"); ReactDOM.render( {}} />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Dropdown/Dropdown.tsx b/apps/sim-core/packages/core/src/components/Dropdown/Dropdown.tsx index e5fb928..4603b39 100644 --- a/apps/sim-core/packages/core/src/components/Dropdown/Dropdown.tsx +++ b/apps/sim-core/packages/core/src/components/Dropdown/Dropdown.tsx @@ -12,7 +12,7 @@ import "./Dropdown.scss"; const caseInsensitiveIsValidNewOption = ( inputValue: string, _selectValue: ReactSelectOption[], - selectOptions: ReactSelectOption[] + selectOptions: ReactSelectOption[], ) => { const exactValueExists = selectOptions.find((el) => el.value === inputValue); // Without this, it will show create option for empty values. @@ -62,7 +62,7 @@ export const Dropdown: FC = ({ const handleSearchInput = (inputValue: string, { action }: any) => { if (action === "input-change") { let foundOptions = options.filter((option) => - option.label.toLowerCase().includes(inputValue.toLowerCase()) + option.label.toLowerCase().includes(inputValue.toLowerCase()), ); if (inputValue !== "") { foundOptions = foundOptions.sort((a, b) => { diff --git a/apps/sim-core/packages/core/src/components/Dropdown/MenuList/DropdownMenuList.spec.tsx b/apps/sim-core/packages/core/src/components/Dropdown/MenuList/DropdownMenuList.spec.tsx index 293754b..744fe0d 100644 --- a/apps/sim-core/packages/core/src/components/Dropdown/MenuList/DropdownMenuList.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Dropdown/MenuList/DropdownMenuList.spec.tsx @@ -5,6 +5,6 @@ import { DropdownMenuList } from "./DropdownMenuList"; it("renders without crashing", () => { const div = document.createElement("div"); - ReactDOM.render(, div); + ReactDOM.render({[]}, div); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Dropdown/MenuList/DropdownMenuList.tsx b/apps/sim-core/packages/core/src/components/Dropdown/MenuList/DropdownMenuList.tsx index 5bca77d..e8aa0c5 100644 --- a/apps/sim-core/packages/core/src/components/Dropdown/MenuList/DropdownMenuList.tsx +++ b/apps/sim-core/packages/core/src/components/Dropdown/MenuList/DropdownMenuList.tsx @@ -3,9 +3,9 @@ import { VariableSizeList } from "react-window"; import type { ReactSelectOption } from "../types"; -type DropdownMenuListProps = { +interface DropdownMenuListProps { options: ReactSelectOption[]; -}; +} /** * these numbers are kinda magic numbers, it's known and tolerated for @@ -40,8 +40,8 @@ export const DropdownMenuList: FC = ({ return !subLabel || subLabel.length === 0 ? SUB_LABEL_MIN_SIZE : subLabel.length < SUB_LABEL_AVG_LENGTH - ? SUB_LABEL_AVG_SIZE - : SUB_LABEL_MAX_SIZE; + ? SUB_LABEL_AVG_SIZE + : SUB_LABEL_MAX_SIZE; }; return ( diff --git a/apps/sim-core/packages/core/src/components/Dropdown/types.ts b/apps/sim-core/packages/core/src/components/Dropdown/types.ts index 6365ba0..a3a5093 100644 --- a/apps/sim-core/packages/core/src/components/Dropdown/types.ts +++ b/apps/sim-core/packages/core/src/components/Dropdown/types.ts @@ -1,12 +1,12 @@ import { SelectComponents } from "react-select/src/components"; -export type ReactSelectOption = { +export interface ReactSelectOption { label: string; subLabel?: string; value: string; -}; +} -export type DropdownProps = { +export interface DropdownProps { options: ReactSelectOption[]; value: ReactSelectOption | ReactSelectOption[] | undefined; onChange: (option: any) => void; @@ -28,4 +28,4 @@ export type DropdownProps = { largeList?: boolean; className?: string; creatableIsCaseInsensitive?: boolean; -}; +} diff --git a/apps/sim-core/packages/core/src/components/EmbedApp/bootEmbed.tsx b/apps/sim-core/packages/core/src/components/EmbedApp/bootEmbed.tsx index ba5b6d0..757fcf5 100644 --- a/apps/sim-core/packages/core/src/components/EmbedApp/bootEmbed.tsx +++ b/apps/sim-core/packages/core/src/components/EmbedApp/bootEmbed.tsx @@ -29,7 +29,7 @@ import { store } from "../../features/store"; export const bootEmbed = async ( params: ValidatedEmbedParams, prefetchedProjectPromise: Promise, - basicUserPromise: Promise + basicUserPromise: Promise, ) => { await boot(false); @@ -39,12 +39,13 @@ export const bootEmbed = async ( await Promise.all([ store.dispatch( + //@ts-expect-error redux problems fetchProject({ project: { pathWithNamespace: params.project, ref: params.ref }, prefetchedRemoteProject: prefetchedProjectPromise, redirect: false, access: params.access, - }) + }), ), basicUserPromise.then((basicUser) => { if (basicUser) { @@ -57,6 +58,6 @@ export const bootEmbed = async ( , - document.getElementById("root") + document.getElementById("root"), ); }; diff --git a/apps/sim-core/packages/core/src/components/ErrorBoundary/ErrorBoundary.tsx b/apps/sim-core/packages/core/src/components/ErrorBoundary/ErrorBoundary.tsx index cfa0b0e..d014e1e 100644 --- a/apps/sim-core/packages/core/src/components/ErrorBoundary/ErrorBoundary.tsx +++ b/apps/sim-core/packages/core/src/components/ErrorBoundary/ErrorBoundary.tsx @@ -1,13 +1,11 @@ import React, { Component, createContext, - ErrorInfo, FC, useContext, useMemo, useState, } from "react"; -import * as Sentry from "@sentry/browser"; import { customAlphabet } from "nanoid"; import { BasicDiscordWidget } from "../DiscordWidget/DiscordWidget"; @@ -15,7 +13,6 @@ import { BigModal } from "../Modal"; import { ErrorDetails } from "../ErrorDetails"; import { FancyButton } from "../Fancy"; import { IS_LOCAL } from "../../util/api"; -import { sentryConsoleLogAbortController } from "../../util/initSentry"; import "./ErrorBoundary.css"; @@ -34,7 +31,7 @@ import "./ErrorBoundary.css"; const quotableId = (() => { const generateHashEventId = customAlphabet( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", - 6 + 6, ); return () => @@ -44,8 +41,9 @@ const quotableId = (() => { .padStart(2, "0")}${generateHashEventId()}`; })(); -type ErrorBoundaryProps = {}; -type ErrorBoundaryState = { +// eslint-disable-next-line @typescript-eslint/no-empty-interface +interface ErrorBoundaryProps {} +interface ErrorBoundaryState { didError: boolean; errorName?: string; errorMessage?: string; @@ -53,7 +51,7 @@ type ErrorBoundaryState = { eventId: string | null; detailsHidden: boolean; hashEventId: string | null; -}; +} type TErrorBoundaryContext = { handlePromiseRejection: (promise: Promise) => void; @@ -132,23 +130,6 @@ export class ErrorBoundary extends Component< hashEventId: null, }; - componentDidCatch(error: Error, errorInfo: ErrorInfo) { - const { hashEventId } = this.state; - - /** - * Cancel the in-flight sentry log of this error caused by React calling - * console.error before notifying the error boundary - */ - sentryConsoleLogAbortController.abort(); - - Sentry.withScope((scope) => { - scope.setTag("hashId", hashEventId); - scope.setExtras(errorInfo as any); - const eventId = Sentry.captureException(error); - this.setState({ eventId }); - }); - } - render() { const { didError, @@ -180,6 +161,7 @@ export class ErrorBoundary extends Component< troubleshooting guide diff --git a/apps/sim-core/packages/core/src/components/ErrorDetails/ErrorDetails.spec.tsx b/apps/sim-core/packages/core/src/components/ErrorDetails/ErrorDetails.spec.tsx index 364896b..e3517de 100644 --- a/apps/sim-core/packages/core/src/components/ErrorDetails/ErrorDetails.spec.tsx +++ b/apps/sim-core/packages/core/src/components/ErrorDetails/ErrorDetails.spec.tsx @@ -12,7 +12,7 @@ it("renders without crashing", () => { errorStack={"errorStack"} hidden={true} />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/ErrorDetails/ErrorDetails.tsx b/apps/sim-core/packages/core/src/components/ErrorDetails/ErrorDetails.tsx index 3e58304..224e44b 100644 --- a/apps/sim-core/packages/core/src/components/ErrorDetails/ErrorDetails.tsx +++ b/apps/sim-core/packages/core/src/components/ErrorDetails/ErrorDetails.tsx @@ -2,12 +2,12 @@ import React, { FC, CSSProperties } from "react"; import "./ErrorDetails.css"; -type ErrorDetailsProps = { +interface ErrorDetailsProps { errorName?: string; errorMessage?: string; errorStack?: string; hidden: boolean; -}; +} const hiddenStyle: CSSProperties = { display: "none", diff --git a/apps/sim-core/packages/core/src/components/Fancy/Anchor/FancyAnchor.tsx b/apps/sim-core/packages/core/src/components/Fancy/Anchor/FancyAnchor.tsx index ae4db28..8d390e3 100644 --- a/apps/sim-core/packages/core/src/components/Fancy/Anchor/FancyAnchor.tsx +++ b/apps/sim-core/packages/core/src/components/Fancy/Anchor/FancyAnchor.tsx @@ -26,7 +26,7 @@ export const FancyAnchor: FC = ({ if (numChildren > 2) { throw new Error( - `FancyAnchor expected no more than 2 children, got ${numChildren}` + `FancyAnchor expected no more than 2 children, got ${numChildren}`, ); } @@ -35,7 +35,7 @@ export const FancyAnchor: FC = ({ {...props} className={classNames( `Fancy FancyAnchor Fancy-${theme} Fancy-${size}`, - className + className, )} style={{ ...style, diff --git a/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButton.tsx b/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButton.tsx index cfd35f4..5bc70c5 100644 --- a/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButton.tsx +++ b/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButton.tsx @@ -29,7 +29,7 @@ export const FancyButton: FC = ({ if (numChildren > 2) { throw new Error( - `FancyButton expected no more than 2 children, got ${numChildren}` + `FancyButton expected no more than 2 children, got ${numChildren}`, ); } @@ -38,7 +38,7 @@ export const FancyButton: FC = ({ className={classNames( `Fancy Fancy-${theme} Fancy-${size} Fancy-${icon}`, { "Fancy-no-label": numChildren === 0 }, - className + className, )} style={{ ...style, diff --git a/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButtonAsyncTask.tsx b/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButtonAsyncTask.tsx index f94b968..620843c 100644 --- a/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButtonAsyncTask.tsx +++ b/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButtonAsyncTask.tsx @@ -58,7 +58,7 @@ export const FancyButtonAsyncTask: FC< controllerRef.current?.abort(); controllerRef.current = new AbortController(); - const signal = controllerRef.current!.signal; + const signal = controllerRef.current.signal; const progressAbortController = new AbortController(); signal.addEventListener("abort", () => progressAbortController.abort()); @@ -68,7 +68,7 @@ export const FancyButtonAsyncTask: FC< setState("progress"); }, 100, - progressAbortController.signal + progressAbortController.signal, ); await onTaskBegin(); @@ -86,7 +86,7 @@ export const FancyButtonAsyncTask: FC< await onTaskEnd?.(); }, 1_000, - signal + signal, ); } } diff --git a/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButtonWithDropdown.tsx b/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButtonWithDropdown.tsx index 1374ead..fe034d2 100644 --- a/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButtonWithDropdown.tsx +++ b/apps/sim-core/packages/core/src/components/Fancy/Button/FancyButtonWithDropdown.tsx @@ -25,7 +25,7 @@ export const FancyButtonWithDropdown: FC< const dropdownArrowRef = useRef(null); const [state, setState] = useState<"closed" | "open">("closed"); const [selectedOption, setSelectedOption] = useState( - dropdownOptions[0] + dropdownOptions[0], ); return ( @@ -37,9 +37,9 @@ export const FancyButtonWithDropdown: FC< if (dropdownArrowRef.current === null) { return; } - const clickedDropdownArrow = ((dropdownArrowRef.current as unknown) as Node).contains( - (evt.target as unknown) as Node - ); + const clickedDropdownArrow = ( + dropdownArrowRef.current as unknown as Node + ).contains(evt.target as unknown as Node); if (clickedDropdownArrow) { return; } diff --git a/apps/sim-core/packages/core/src/components/Fancy/Fancy.scss b/apps/sim-core/packages/core/src/components/Fancy/Fancy.scss index fed3a93..502b9b7 100644 --- a/apps/sim-core/packages/core/src/components/Fancy/Fancy.scss +++ b/apps/sim-core/packages/core/src/components/Fancy/Fancy.scss @@ -91,7 +91,9 @@ background-color: var(--background); fill: var(--theme-white); color: var(--theme-white); - transition: border-color 0.2s ease, background-color 0.2s ease; + transition: + border-color 0.2s ease, + background-color 0.2s ease; } .Fancy-blue:hover { diff --git a/apps/sim-core/packages/core/src/components/Fancy/index.tsx b/apps/sim-core/packages/core/src/components/Fancy/index.tsx index 00d22ab..5579978 100644 --- a/apps/sim-core/packages/core/src/components/Fancy/index.tsx +++ b/apps/sim-core/packages/core/src/components/Fancy/index.tsx @@ -58,7 +58,7 @@ export type FancyIcon = export type FancySize = "regular" | "compact"; -export type FancyProps = { +export interface FancyProps { theme?: FancyTheme; icon?: FancyIcon; size?: FancySize; @@ -66,7 +66,7 @@ export type FancyProps = { onClick?: (event: MouseEvent) => void; target?: string; className?: string; -}; +} export function getIcon(icon: FancyIcon, size: FancySize): ReactChild { return ( diff --git a/apps/sim-core/packages/core/src/components/FileBanner/Choose/FileBannerChoose.spec.tsx b/apps/sim-core/packages/core/src/components/FileBanner/Choose/FileBannerChoose.spec.tsx index 4cea3be..5ee8cce 100644 --- a/apps/sim-core/packages/core/src/components/FileBanner/Choose/FileBannerChoose.spec.tsx +++ b/apps/sim-core/packages/core/src/components/FileBanner/Choose/FileBannerChoose.spec.tsx @@ -12,7 +12,7 @@ it("renders without crashing", () => { labelB="" onChooseB={() => {}} />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/FileBanner/Choose/FileBannerChoose.tsx b/apps/sim-core/packages/core/src/components/FileBanner/Choose/FileBannerChoose.tsx index f4d41b2..d8387e2 100644 --- a/apps/sim-core/packages/core/src/components/FileBanner/Choose/FileBannerChoose.tsx +++ b/apps/sim-core/packages/core/src/components/FileBanner/Choose/FileBannerChoose.tsx @@ -5,12 +5,12 @@ import { FancyButton } from "../../Fancy"; import "../FileBanner.css"; import "./FileBannerChoose.css"; -type FileBannerChooseProps = { +interface FileBannerChooseProps { labelA: ReactNode; onChooseA: () => void; labelB: ReactNode; onChooseB: () => void; -}; +} export const FileBannerChoose: FC = ({ labelA, diff --git a/apps/sim-core/packages/core/src/components/FileBanner/Shared/FileBannerShared.spec.tsx b/apps/sim-core/packages/core/src/components/FileBanner/Shared/FileBannerShared.spec.tsx index 072c015..22d3687 100644 --- a/apps/sim-core/packages/core/src/components/FileBanner/Shared/FileBannerShared.spec.tsx +++ b/apps/sim-core/packages/core/src/components/FileBanner/Shared/FileBannerShared.spec.tsx @@ -36,7 +36,7 @@ it("renders without crashing", () => { /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/FileBanner/Shared/FileBannerShared.tsx b/apps/sim-core/packages/core/src/components/FileBanner/Shared/FileBannerShared.tsx index 47c7759..6628b0b 100644 --- a/apps/sim-core/packages/core/src/components/FileBanner/Shared/FileBannerShared.tsx +++ b/apps/sim-core/packages/core/src/components/FileBanner/Shared/FileBannerShared.tsx @@ -15,10 +15,10 @@ import { useModalNameBehavior } from "../../HashCore/Files/hooks/useModalNameBeh import "../FileBanner.css"; import "./FileBannerShared.css"; -type FileBannerSharedProps = { +interface FileBannerSharedProps { file: HcSharedBehaviorFile; project: SimulationProject; -}; +} export const FileBannerShared: FC = ({ file, @@ -26,7 +26,7 @@ export const FileBannerShared: FC = ({ }) => { const destination = useMemo( () => parse({ name: file.path.name, ext: file.path.ext }), - [file] + [file], ); const dispatch = useDispatch(); @@ -41,7 +41,7 @@ export const FileBannerShared: FC = ({ placeholder: "Name your forked behavior", onSubmit: copy, }, - destination + destination, ); const files = useSelector(selectIdKindAndPathFromFiles); diff --git a/apps/sim-core/packages/core/src/components/FileBanner/Wrapper/FileBannerWrapper.tsx b/apps/sim-core/packages/core/src/components/FileBanner/Wrapper/FileBannerWrapper.tsx index bfd3957..31c24d3 100644 --- a/apps/sim-core/packages/core/src/components/FileBanner/Wrapper/FileBannerWrapper.tsx +++ b/apps/sim-core/packages/core/src/components/FileBanner/Wrapper/FileBannerWrapper.tsx @@ -29,11 +29,11 @@ import { } from "../../../features/project/selectors"; import { store } from "../../../features/store"; -type FileBannerWrapperProps = { +interface FileBannerWrapperProps { file: HcFile; nextContents: string | null; setNextContents: (nextContents: string | null) => void; -}; +} export const FileBannerWrapper: FC = ({ file, @@ -82,7 +82,7 @@ export const FileBannerWrapper: FC = ({ }); const nextFile = releases[0]?.files.find( - (nextFile) => nextFile.dependencyPath === file.path.formatted + (nextFile) => nextFile.dependencyPath === file.path.formatted, ); if (!nextFile) { @@ -101,20 +101,21 @@ export const FileBannerWrapper: FC = ({ labelB={`Upgrade to (v${latestTag})`} onChooseB={async () => { await dispatch( + //@ts-expect-error redux problems addDependencies({ [file.path.formatted]: latestTag, - }) + }), ); const nextFile = selectAllFiles(store.getState()).find( (potentialFile) => potentialFile.path.formatted === file.path.formatted && - (potentialFile as HcSharedBehaviorFile).ref === file.latestTag + (potentialFile as HcSharedBehaviorFile).ref === file.latestTag, ); if (!nextFile) { throw new Error( - `Tried to get dependency: ${file.path.formatted} (v${file.latestTag}) but it doesn't exist (yet)` + `Tried to get dependency: ${file.path.formatted} (v${file.latestTag}) but it doesn't exist (yet)`, ); } diff --git a/apps/sim-core/packages/core/src/components/FileName/FileName.tsx b/apps/sim-core/packages/core/src/components/FileName/FileName.tsx index b743ebe..5160265 100644 --- a/apps/sim-core/packages/core/src/components/FileName/FileName.tsx +++ b/apps/sim-core/packages/core/src/components/FileName/FileName.tsx @@ -8,5 +8,5 @@ export const FileName = forwardRef>(
    {children}
    - ) + ), ); diff --git a/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortname.tsx b/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortname.tsx index 2833533..fee6922 100644 --- a/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortname.tsx +++ b/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortname.tsx @@ -7,7 +7,7 @@ import { } from "./FileNameWithShortnameInner"; export const FileNameWithShortname: FC = ( - props + props, ) => ( diff --git a/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortnameIcon.tsx b/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortnameIcon.tsx index cdcf8c5..b5c41fb 100644 --- a/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortnameIcon.tsx +++ b/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortnameIcon.tsx @@ -7,7 +7,7 @@ import { } from "./FileNameWithShortnameInner"; export const FileNameWithShortnameIcon: FC = ( - props + props, ) => ( diff --git a/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortnameInner.tsx b/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortnameInner.tsx index 410df72..b8e6b18 100644 --- a/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortnameInner.tsx +++ b/apps/sim-core/packages/core/src/components/FileName/FileNameWithShortnameInner.tsx @@ -5,11 +5,11 @@ import type { ParsedPath } from "../../util/files/types"; import "./FileNameWithShortnameInner.css"; -export type FileNameWithShortnameProps = { +export interface FileNameWithShortnameProps { current?: boolean; path: ParsedPath; hasTitle?: boolean; -}; +} export const FileNameWithShortnameInner: FC = ({ current = false, diff --git a/apps/sim-core/packages/core/src/components/FontsPreloader/FontsPreloader.tsx b/apps/sim-core/packages/core/src/components/FontsPreloader/FontsPreloader.tsx index 58283f6..a3a3533 100644 --- a/apps/sim-core/packages/core/src/components/FontsPreloader/FontsPreloader.tsx +++ b/apps/sim-core/packages/core/src/components/FontsPreloader/FontsPreloader.tsx @@ -53,7 +53,7 @@ export const FontsPreloader: FC = ({ children }) => { ))} , - target + target, )} ); diff --git a/apps/sim-core/packages/core/src/components/GeospatialMap/GeospatialMap.tsx b/apps/sim-core/packages/core/src/components/GeospatialMap/GeospatialMap.tsx index c0ca29b..9ce360a 100644 --- a/apps/sim-core/packages/core/src/components/GeospatialMap/GeospatialMap.tsx +++ b/apps/sim-core/packages/core/src/components/GeospatialMap/GeospatialMap.tsx @@ -13,22 +13,22 @@ import { useResizeObserver } from "../../hooks/useResizeObserver/useResizeObserv import "mapbox-gl/dist/mapbox-gl.css"; import "./GeospatialMap.css"; -export type GeospatialMapProps = { +export interface GeospatialMapProps { simulationStep: AgentState[] | null; simulationId: string | null | undefined; errored: boolean; -}; +} -type PopupData = { +interface PopupData { coordinates: [number, number]; description: string; -}; +} -// Injected by webpack. +// Injected by vite. // To specify, add a '.env' file containing, e.g., // MAPBOX_API_TOKEN=pk.eyJ1IjoianV[...]kZWFsbHtbinwPK4yA // Then rebuild. -const accessToken = MAPBOX_API_TOKEN; +const accessToken = import.meta.env.MAPBOX_API_TOKEN; const MapComponent = accessToken ? ReactMapboxGl({ accessToken, @@ -36,13 +36,12 @@ const MapComponent = accessToken }) : null; -const onClick = (setPopup: (popup: PopupData) => void) => ( - evt: MapLayerMouseEvent -) => - setPopup({ - coordinates: evt.lngLat.toArray() as [number, number], - description: evt.features![0]!.properties!.description, - }); +const onClick = + (setPopup: (popup: PopupData) => void) => (evt: MapLayerMouseEvent) => + setPopup({ + coordinates: evt.lngLat.toArray() as [number, number], + description: evt.features![0]!.properties!.description, + }); type AgentStateLngLat = AgentState & { lng_lat: [number, number]; @@ -62,19 +61,23 @@ function hasLngLatNotHidden(agent: AgentState): agent is AgentStateLngLat { const debounced = debounce((fn) => fn(), 100); -// If there's no MapBox API key, we'll crash instantiating the MapComponent. +// If there's no Mapbox API key, we'll crash instantiating the MapComponent. // So instead return a placeholder GeospatialMap with user instructions. const GeospatialMapPlaceholder: FC = () => (
    -

    MapBox requires an API token.

    +

    Mapbox requires an API token.

    Please add MAPBOX_API_TOKEN=your-token to the{" "} - .env file if you wish to enable MapBox. + .env file if you wish to enable Mapbox.

    You can create the .env file if it doesn't exist.

    - MapBox API access tokens can be found at{" "} - + Mapbox API access tokens can be found at{" "} + https://account.mapbox.com/access-tokens/

    @@ -88,7 +91,7 @@ export const GeospatialMap: FC = !MapComponent ? GeospatialMapPlaceholder : ({ simulationStep, simulationId, errored }) => { const lngLatAgents: AgentStateLngLat[] = (simulationStep ?? []).filter( - hasLngLatNotHidden + hasLngLatNotHidden, ); const agentAverageCenter: [number, number] | undefined = @@ -99,13 +102,13 @@ export const GeospatialMap: FC = !MapComponent acc[0] + agent.lng_lat[0], acc[1] + agent.lng_lat[1], ], - [0, 0] + [0, 0], ) .map((val) => val / lngLatAgents.length) as [number, number]) : undefined; const [center, setCenter] = useState<[number, number] | undefined>( - agentAverageCenter + agentAverageCenter, ); const [popup, setPopup] = useState(undefined); @@ -128,7 +131,7 @@ export const GeospatialMap: FC = !MapComponent instanceRef.current = instance; setResizeRef(instance?.container); }, - [setResizeRef] + [setResizeRef], ); if (!simulationStep && simulationId && !errored) { @@ -162,21 +165,21 @@ export const GeospatialMap: FC = !MapComponent properties: { description: JSON.stringify( r.filterWithIndex((idx) => - ((agent.popup_fields as Array) ?? []).includes( - idx - ) + ((agent.popup_fields as string[]) ?? []).includes(idx), )(agent), null, - 2 + 2, ), agent_idx: idx, color: `#${o.getOrElse(() => "ffffff")( o.map((color: number) => color.toString(16))( - mapColor( - agent.geo_color ?? agent.color ?? "random", - agent.agent_id - ) - ) + o.fromNullable( + mapColor( + agent.geo_color ?? agent.color ?? "random", + agent.agent_id, + ), + ), + ), )}`, radius: agent.geo_radius ?? 5, opacity: agent.geo_opacity ?? 1, diff --git a/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsArray.tsx b/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsArray.tsx index 536dbca..b68c38d 100644 --- a/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsArray.tsx +++ b/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsArray.tsx @@ -25,7 +25,7 @@ export const GlobalsArray: FC< onChange(newArray); }, - [onChange] + [onChange], ); const items = schema?.items; @@ -44,7 +44,7 @@ export const GlobalsArray: FC< onChange={onFieldChange} depth={depth} /> - ) : null + ) : null, )} ); diff --git a/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsEditor.tsx b/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsEditor.tsx index ce329a9..437e0f2 100644 --- a/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsEditor.tsx +++ b/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsEditor.tsx @@ -95,7 +95,7 @@ export const GlobalsEditor: FC = () => { }); }, 200); }, - [dispatch, scheduleUpdate] + [dispatch, scheduleUpdate], ); /** @@ -115,7 +115,7 @@ export const GlobalsEditor: FC = () => { }, } : globalConfigSchema, - [globals?.schema] + [globals?.schema], ); if (!globals) { diff --git a/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsObject.tsx b/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsObject.tsx index 6e7ce05..5d52a7c 100644 --- a/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsObject.tsx +++ b/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsObject.tsx @@ -43,7 +43,7 @@ export const GlobalsObject: FC< [field]: value, }); }, - [onChange] + [onChange], ); return globalsList.length ? ( @@ -58,7 +58,7 @@ export const GlobalsObject: FC< schema={getChildSchema(schema?.properties?.[field])} {...props} /> - ) : null + ) : null, )} ) : ( diff --git a/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsRowField.tsx b/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsRowField.tsx index 7154a94..b4c5fb4 100644 --- a/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsRowField.tsx +++ b/apps/sim-core/packages/core/src/components/GlobalsEditor/GlobalsRowField.tsx @@ -24,7 +24,7 @@ export const GlobalsRowField = ({ (json: JsonMap | JsonArray) => { onChange(field, json); }, - [onChange, field] + [onChange, field], ); const fieldName = field.toString(); @@ -76,8 +76,8 @@ export const GlobalsRowField = ({ schema?.type === "number" ? "number" : schema?.type === "string" - ? "string" - : null + ? "string" + : null } onChange={(value) => { onChange(field, parseNumber(value, schema?.type)); diff --git a/apps/sim-core/packages/core/src/components/GlobalsEditor/types.ts b/apps/sim-core/packages/core/src/components/GlobalsEditor/types.ts index 7094bc6..eac6f1e 100644 --- a/apps/sim-core/packages/core/src/components/GlobalsEditor/types.ts +++ b/apps/sim-core/packages/core/src/components/GlobalsEditor/types.ts @@ -1,6 +1,6 @@ import { JSONSchema7 } from "json-schema"; -export type SharedGlobalsProps = { +export interface SharedGlobalsProps { schema?: JSONSchema7 | undefined; depth: number; -}; +} diff --git a/apps/sim-core/packages/core/src/components/GlobalsEditor/utils.ts b/apps/sim-core/packages/core/src/components/GlobalsEditor/utils.ts index fc97ffa..2f2c7bc 100644 --- a/apps/sim-core/packages/core/src/components/GlobalsEditor/utils.ts +++ b/apps/sim-core/packages/core/src/components/GlobalsEditor/utils.ts @@ -5,12 +5,12 @@ import { ParsedGlobals } from "../../features/files/types"; import { safeParseJsonTracked } from "../../util/safeParseJsonTracked"; export const getChildSchema = ( - value: T | boolean + value: T | boolean, ): T | undefined => (typeof value === "boolean" ? undefined : value); export const parseNumber = ( value: string | number, - schemaType: JSONSchema7["type"] | undefined + schemaType: JSONSchema7["type"] | undefined, ): string | number => { if (typeof value === "string" && schemaType !== "string") { const parsed = parseFloat(value); @@ -24,7 +24,7 @@ export const parseNumber = ( }; export const parseGlobals = ( - globalsString?: string | null + globalsString?: string | null, ): { lastGlobalsString: null | string; globals: null | ParsedGlobals | Json; diff --git a/apps/sim-core/packages/core/src/components/HashCore/AccessGate/HashCoreAccessGate.tsx b/apps/sim-core/packages/core/src/components/HashCore/AccessGate/HashCoreAccessGate.tsx index 69142e4..b29f304 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/AccessGate/HashCoreAccessGate.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/AccessGate/HashCoreAccessGate.tsx @@ -12,7 +12,7 @@ function throwBadGate(gate: HashCoreAccessGateKindWithProps) { const accessGateToNode = ( gate: HashCoreAccessGateKindWithProps, - embedded: boolean + embedded: boolean, ): ReactNode => { switch (gate.kind) { case HashCoreAccessGateKind.NotFound: diff --git a/apps/sim-core/packages/core/src/components/HashCore/AccessGate/NotFound/HashCoreAccessGateNotFound.spec.tsx b/apps/sim-core/packages/core/src/components/HashCore/AccessGate/NotFound/HashCoreAccessGateNotFound.spec.tsx index 735c132..85a9ffd 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/AccessGate/NotFound/HashCoreAccessGateNotFound.spec.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/AccessGate/NotFound/HashCoreAccessGateNotFound.spec.tsx @@ -11,7 +11,7 @@ it("renders without crashing", () => { , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/HashCore/AccessGate/NotFound/HashCoreAccessGateNotFound.tsx b/apps/sim-core/packages/core/src/components/HashCore/AccessGate/NotFound/HashCoreAccessGateNotFound.tsx index 95ba53a..0240d6c 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/AccessGate/NotFound/HashCoreAccessGateNotFound.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/AccessGate/NotFound/HashCoreAccessGateNotFound.tsx @@ -3,9 +3,9 @@ import React, { FC } from "react"; import { IconFileFind } from "../../../Icon"; import { LinkableProject } from "../../../../features/project/types"; -export type HashCoreAccessGateNotFoundProps = { +export interface HashCoreAccessGateNotFoundProps { requestedProject: LinkableProject | null; -}; +} export const HashCoreAccessGateNotFound: FC< HashCoreAccessGateNotFoundProps & { embedded: boolean } diff --git a/apps/sim-core/packages/core/src/components/HashCore/AccessGate/types.ts b/apps/sim-core/packages/core/src/components/HashCore/AccessGate/types.ts index 692398f..5d3f778 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/AccessGate/types.ts +++ b/apps/sim-core/packages/core/src/components/HashCore/AccessGate/types.ts @@ -1,7 +1,7 @@ import { HashCoreAccessGateKind } from "./enums"; import { HashCoreAccessGateNotFoundProps } from "./NotFound"; -export type HashCoreAccessGateKindWithProps = { +export interface HashCoreAccessGateKindWithProps { kind: HashCoreAccessGateKind.NotFound; props: HashCoreAccessGateNotFoundProps; -}; +} diff --git a/apps/sim-core/packages/core/src/components/HashCore/AccessGate/util.ts b/apps/sim-core/packages/core/src/components/HashCore/AccessGate/util.ts index aaaeb2f..2ba5561 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/AccessGate/util.ts +++ b/apps/sim-core/packages/core/src/components/HashCore/AccessGate/util.ts @@ -5,7 +5,7 @@ import { QueryError } from "../../../util/api"; export const queryErrorToAccessGate = ( { onlyErrorCode: code }: QueryError, - { requestedProject }: { requestedProject: LinkableProject } + { requestedProject }: { requestedProject: LinkableProject }, ): HashCoreAccessGateKindWithProps | null => { /** * @todo Support access gates when there are multiple errors diff --git a/apps/sim-core/packages/core/src/components/HashCore/Console/HashCoreConsole.tsx b/apps/sim-core/packages/core/src/components/HashCore/Console/HashCoreConsole.tsx index bf590d2..47124f7 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Console/HashCoreConsole.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Console/HashCoreConsole.tsx @@ -34,7 +34,7 @@ export const HashCoreConsole: FC = memo(function HashCoreConsole() { const filesMap = useMemo( () => Object.fromEntries(files.map((file) => [file.path.formatted, file])), - [files] + [files], ); // Show a modal on more important alert messages diff --git a/apps/sim-core/packages/core/src/components/HashCore/Console/HashCoreConsoleAlert.tsx b/apps/sim-core/packages/core/src/components/HashCore/Console/HashCoreConsoleAlert.tsx index 10b5805..b275224 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Console/HashCoreConsoleAlert.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Console/HashCoreConsoleAlert.tsx @@ -7,12 +7,12 @@ import type { UserAlertInState } from "../../../features/viewer/types"; import { setCurrentFileId } from "../../../features/files/slice"; import { trackEvent } from "../../../features/analytics"; -type HashCoreConsoleAlertProps = { +interface HashCoreConsoleAlertProps { alert: UserAlertInState; files: Record>; -}; +} -const filesRegex = /((?:(?:[@\/](?:[\w-]+\/)+)|(?:\/))?[\w-]+\.[a-z]+)/i; +const filesRegex = /((?:(?:[@/](?:[\w-]+\/)+)|(?:\/))?[\w-]+\.[a-z]+)/i; /** * Convert internal error language into something more widely accessible. @@ -43,16 +43,16 @@ export const HashCoreConsoleAlert: FC = ({ ) : ( {makeErrorMessageFriendlier(piece)} - ) + ), ), - [files, alert.message, dispatch] + [files, alert.message, dispatch], ); const messageIncludesFiles = useMemo( () => filesRegex.test(alert.message) && alert.message.split(filesRegex).some((piece) => files[piece]), - [alert.message, files] + [alert.message, files], ); useEffect(() => { @@ -60,7 +60,7 @@ export const HashCoreConsoleAlert: FC = ({ trackEvent({ action: "User Alert", label: Object.values(alert).join(" - "), - }) + }), ); }, [alert, dispatch]); diff --git a/apps/sim-core/packages/core/src/components/HashCore/ContextMenu/HashCoreContextMenu.tsx b/apps/sim-core/packages/core/src/components/HashCore/ContextMenu/HashCoreContextMenu.tsx index df6c254..b880504 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/ContextMenu/HashCoreContextMenu.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/ContextMenu/HashCoreContextMenu.tsx @@ -2,9 +2,9 @@ import React, { FC, CSSProperties } from "react"; import "./HashCoreContextMenu.css"; -type HashCoreContextMenuProps = { +interface HashCoreContextMenuProps { style: Pick; -}; +} export const HashCoreContextMenu: FC = ({ children, diff --git a/apps/sim-core/packages/core/src/components/HashCore/Editor/HashCoreEditor.tsx b/apps/sim-core/packages/core/src/components/HashCore/Editor/HashCoreEditor.tsx index f60dcef..ef64b47 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Editor/HashCoreEditor.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Editor/HashCoreEditor.tsx @@ -84,10 +84,8 @@ export const HashCoreEditor: FC = () => { const replaceProposal = useSelector(selectReplaceProposal); const analysis = useSelector(selectParsedAnalysis); - const [ - diffEditorInstance, - monacoDiffContainerRef, - ] = useMonacoContainerFromContext(true); + const [diffEditorInstance, monacoDiffContainerRef] = + useMonacoContainerFromContext(true); const [nextContents, setNextContents] = useState(null); useEffect(() => { @@ -113,13 +111,13 @@ export const HashCoreEditor: FC = () => { setTabsContentHeight( tabsContainer && tabsList ? tabsContainer.clientHeight - tabsList.clientHeight - : undefined + : undefined, ); }, []); const setTabsContainerResizeObserver = useResizeObserver( updateTabsContentHeight, - { onObserve: null } + { onObserve: null }, ); const setTabsListResizeObserver = useResizeObserver(updateTabsContentHeight, { onObserve: null, @@ -132,7 +130,7 @@ export const HashCoreEditor: FC = () => { if (node) { const tabsList = node.querySelector( - ".react-tabs__tab-list" + ".react-tabs__tab-list", ); tabsListRef.current = tabsList; @@ -148,7 +146,7 @@ export const HashCoreEditor: FC = () => { setTabsContainerResizeObserver, setTabsListResizeObserver, updateTabsContentHeight, - ] + ], ); const editorVisible = useSelector(selectEditorVisible); @@ -216,7 +214,7 @@ export const HashCoreEditor: FC = () => { ), - [contextMenuStyle, dispatch, currentOpenFileInEditor] + [contextMenuStyle, dispatch, currentOpenFileInEditor], ); useOnClickOutside(tabsRef, hideContextMenu); @@ -266,7 +264,7 @@ export const HashCoreEditor: FC = () => { ) : null} - ) : null + ) : null, )} {editorVisible ? ( <> @@ -337,14 +335,15 @@ export const HashCoreEditor: FC = () => { * @todo fix this */ dispatch( + //@ts-expect-error redux problems trackEvent({ action: "Validate Analysis JSON Button clicked: Core", label: "analysis.json", - }) + }), ); validateAnalysisJsonAndDispatchErrorsIfAny( analysis as any, - dispatch + dispatch, ); } }} @@ -370,12 +369,14 @@ export const HashCoreEditor: FC = () => { target="_blank" onClick={() => dispatch( + //@ts-expect-error redux problems trackEvent({ action: "Docs Link Clicked: Core", label: section, - }) + }), ) } + rel="noreferrer" > { replaceProposal.proposal ? openFileIds.length : currentFileId - ? openFileIds.indexOf(currentFileId) - : openFileIds.length - 1 + ? openFileIds.indexOf(currentFileId) + : openFileIds.length - 1 } > {openFiles.map((file) => ( @@ -446,6 +447,6 @@ export const HashCoreEditor: FC = () => { // // `displayName` is `undefined` ... apparently `@welldone-software/why-did- // // you-render`'s types are somewhat incomplete // // -// // @ts-ignore +// // @ts-expect-error // customName: "HashCoreEditor" // }; diff --git a/apps/sim-core/packages/core/src/components/HashCore/Editor/HashCoreEditorBehaviorKeysFileAction.tsx b/apps/sim-core/packages/core/src/components/HashCore/Editor/HashCoreEditorBehaviorKeysFileAction.tsx index dccd8b1..6bbd51b 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Editor/HashCoreEditorBehaviorKeysFileAction.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Editor/HashCoreEditorBehaviorKeysFileAction.tsx @@ -22,7 +22,7 @@ export const HashCoreEditorBehaviorKeysFileAction = () => { return (
    ); diff --git a/apps/sim-core/packages/core/src/components/HashCore/Resources/SearchableIndex/hooks.ts b/apps/sim-core/packages/core/src/components/HashCore/Resources/SearchableIndex/hooks.ts index b39ccba..f18f707 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Resources/SearchableIndex/hooks.ts +++ b/apps/sim-core/packages/core/src/components/HashCore/Resources/SearchableIndex/hooks.ts @@ -23,7 +23,7 @@ export const useSearchIndex = (): { | { type: "SEARCH"; payload: string } | { type: "BEGIN_SEARCH" } | { type: "FINISHED_SEARCHING"; payload: ResourceProject[] } - | { type: "ERROR" } + | { type: "ERROR" }, ) => { switch (action.type) { case "SEARCH": @@ -39,7 +39,7 @@ export const useSearchIndex = (): { return { ...state, loading: false, results: action.payload }; } }, - { loading: true, results: [], searchTerm: "" } + { loading: true, results: [], searchTerm: "" }, ); // migration shim diff --git a/apps/sim-core/packages/core/src/components/HashCore/Resources/selectors.ts b/apps/sim-core/packages/core/src/components/HashCore/Resources/selectors.ts index 5975058..f976a13 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Resources/selectors.ts +++ b/apps/sim-core/packages/core/src/components/HashCore/Resources/selectors.ts @@ -22,9 +22,9 @@ export const selectPathsForDependencies = createSelector( * @todo remove this when we remove the old format */ .flatMap((dep) => [...new Set([dep, mapLegacyDependencyFormat(dep)])]) - .concat(pending) + .concat(pending), ), - ] + ], ); export const makeSelectPresentItemsFromResource = () => @@ -38,5 +38,5 @@ export const makeSelectPresentItemsFromResource = () => } return result; - }, []) + }, []), ); diff --git a/apps/sim-core/packages/core/src/components/HashCore/Section/HashCoreSection.css b/apps/sim-core/packages/core/src/components/HashCore/Section/HashCoreSection.css index c892a4c..9ac30e6 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Section/HashCoreSection.css +++ b/apps/sim-core/packages/core/src/components/HashCore/Section/HashCoreSection.css @@ -26,7 +26,9 @@ } .HashCoreSection-splitter - > .splitter-layout:not(.splitter-primary-hidden):not(.splitter-layout-vertical) + > .splitter-layout:not(.splitter-primary-hidden):not( + .splitter-layout-vertical + ) > .layout-pane:not(.layout-pane-primary) { max-width: calc(100% - 1px - var(--hcs-primary-min-width)); } diff --git a/apps/sim-core/packages/core/src/components/HashCore/Tour/HashCoreTour.css b/apps/sim-core/packages/core/src/components/HashCore/Tour/HashCoreTour.css index b754be3..b767436 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Tour/HashCoreTour.css +++ b/apps/sim-core/packages/core/src/components/HashCore/Tour/HashCoreTour.css @@ -115,14 +115,20 @@ pointer-events: none; position: fixed; top: 0; - transition: all 0.1s ease-out, height 0ms 0.1s, opacity 0.1s 0ms; + transition: + all 0.1s ease-out, + height 0ms 0.1s, + opacity 0.1s 0ms; width: 100vw; z-index: 9997; } .shepherd-modal-overlay-container.shepherd-modal-is-visible { height: 100vh; opacity: 0.5; - transition: all 0.1s ease-out, height 0s 0s, opacity 0.1s 0s; + transition: + all 0.1s ease-out, + height 0s 0s, + opacity 0.1s 0s; } .shepherd-modal-overlay-container.shepherd-modal-is-visible path { pointer-events: all; diff --git a/apps/sim-core/packages/core/src/components/HashCore/Tour/HashCoreTour.tsx b/apps/sim-core/packages/core/src/components/HashCore/Tour/HashCoreTour.tsx index 2dca3cc..9f3ac35 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Tour/HashCoreTour.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Tour/HashCoreTour.tsx @@ -47,9 +47,9 @@ const useTourPosition = (tour: Tour): [number, number, boolean] => { const [{ activeIdx, prevIdx, stepId }, update] = useReducer( ( state: S, - action: S + action: S, ) => ({ ...state, ...action }), - { activeIdx: TOUR_HIDDEN_IDX, prevIdx: TOUR_HIDDEN_IDX, stepId: null } + { activeIdx: TOUR_HIDDEN_IDX, prevIdx: TOUR_HIDDEN_IDX, stepId: null }, ); const isVisible = activeIdx !== TOUR_HIDDEN_IDX; @@ -110,10 +110,8 @@ const useAutoTriggerTour = (tour: Tour, isVisible: boolean) => { const projectLoaded = useSelector(selectProjectLoaded); const tourProgress = useSelector(selectTourProgress); - const [ - { triggerTour, fromOnboardingRoute }, - setQueryParams, - ] = useSafeQueryParams(); + const [{ triggerTour, fromOnboardingRoute }, setQueryParams] = + useSafeQueryParams(); const gettingStartedSim = useGettingStartedProject(); const gettingStarted = [ @@ -188,12 +186,12 @@ const useSyncProgressBar = (activeIdx: number, prevIdx: number) => { useEffect(() => { document.documentElement.style.setProperty( "--tour-progress", - `${((activeIdx + 1) / steps.length) * 100}%` + `${((activeIdx + 1) / steps.length) * 100}%`, ); document.documentElement.style.setProperty( "--tour-prev-progress", - `${((prevIdx + 1) / steps.length) * 100}%` + `${((prevIdx + 1) / steps.length) * 100}%`, ); }, [activeIdx, prevIdx]); }; @@ -212,7 +210,7 @@ const useHashTourConfig = (isVisible: boolean): HashTourConfigContextType => { ...action, } : initialState, - initialState + initialState, ); useEffect(() => { @@ -233,14 +231,14 @@ const useHashTourConfig = (isVisible: boolean): HashTourConfigContextType => { shouldCenter, }, }), - [shouldCenter, shouldShowBackdrop, tourShowcase, isVisible] + [shouldCenter, shouldShowBackdrop, tourShowcase, isVisible], ); }; const useIsCompleted = ( tour: Tour, tourProgress: TourProgress | null, - activeIdx: number + activeIdx: number, ) => { const { completed = false } = tourProgress ?? {}; const [isCompleted, setIsCompleted] = useState(completed); @@ -264,7 +262,7 @@ const useTrackProgress = ( tour: Tour, activeIdx: number, prevIdx: number, - isCompleted: boolean + isCompleted: boolean, ) => { const dispatch = useDispatch(); @@ -285,7 +283,7 @@ const useTrackProgress = ( completed: isCompleted, version: VERSION, lastStepViewed, - }) + }), ); }, [activeIdx, dispatch, isCompleted, prevIdx, tour]); }; @@ -328,11 +326,11 @@ const TourWithBackdrop: FC = () => { ref, })} /> - ) + ), )} , - document.body + document.body, )} {steps.map((step, idx) => ( @@ -343,7 +341,7 @@ const TourWithBackdrop: FC = () => { {step.jsx} ) : null, - step.text + step.text, )} ))} diff --git a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepAgents.tsx b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepAgents.tsx index 8ba2dfa..f23bb08 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepAgents.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepAgents.tsx @@ -30,6 +30,7 @@ export const HashCoreTourStepAgents: FC = () => { HASH is oriented around agents. {" "} diff --git a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepDatasets.tsx b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepDatasets.tsx index b7b0f80..3aeb0fc 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepDatasets.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepDatasets.tsx @@ -23,12 +23,13 @@ export const HashCoreTourStepDatasets: FC = () => { you can import datasets to customize your agents and behaviors . Data, behaviors, and simulations that others users have shared are also available in{" "} - + HASH , which you can add to your own simulations. @@ -36,7 +37,7 @@ export const HashCoreTourStepDatasets: FC = () => {

    Your simulation and datasets are auto-saved to your{" "} {url ? ( - + profile ) : ( diff --git a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepDone.tsx b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepDone.tsx index dcc5dd3..b506122 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepDone.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepDone.tsx @@ -51,6 +51,7 @@ export const HashCoreTourStepDone: FC = () => { Getting Started tutorial {" "} @@ -77,7 +78,7 @@ export const HashCoreTourStepDone: FC = () => { })} thumb={} /> - ) + ), )} { const elem = Array.from( document.querySelectorAll( - ".SimulationViewerMain .react-tabs__tab" - ) + ".SimulationViewerMain .react-tabs__tab", + ), ).find((tab) => tab.innerText.includes("Plots")); if (elem) { diff --git a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepRefresh.tsx b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepRefresh.tsx index a68288e..4a83efa 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepRefresh.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/HashCoreTourStepRefresh.tsx @@ -30,7 +30,7 @@ enum RefreshAction { function refreshReducer( state: typeof refreshInitialState, - action: RefreshAction + action: RefreshAction, ) { switch (action) { case RefreshAction.OPEN_PROPERTIES: @@ -67,7 +67,7 @@ export const HashCoreTourStepRefresh: FC = () => { const resetButton = useMemo( () => document.querySelector(".reset.simulation-control"), - [] + [], ); return ( @@ -87,6 +87,7 @@ export const HashCoreTourStepRefresh: FC = () => { globals.json is where you define global properties {" "} @@ -97,6 +98,7 @@ export const HashCoreTourStepRefresh: FC = () => { context diff --git a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/steps.tsx b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/steps.tsx index a751135..1308336 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/steps.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/steps.tsx @@ -62,6 +62,7 @@ export const steps = [ Behaviors are “actions” that, if attached to an agent, run every timestep. @@ -102,6 +103,7 @@ export const steps = [ HASH plots charts from your simulation diff --git a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/util.tsx b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/util.tsx index 8e4da3d..7f0994a 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/util.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Tour/Step/util.tsx @@ -32,14 +32,14 @@ export const Indicator: FC<{ position: "left-overlap" | "right-overlap" | "right"; }> = ({ element, show, position }) => { const calculateRef = useRef(null); - const immediateIdRef = useRef | null>(null); + const immediateIdRef = useRef(null); const calculateOnResize = () => { if (immediateIdRef.current !== null) { - clearImmediate(immediateIdRef.current); + clearTimeout(immediateIdRef.current); } - immediateIdRef.current = setImmediate(() => calculateRef.current?.()); + immediateIdRef.current = setTimeout(() => calculateRef.current?.()); }; const setTargetObserverRef = useResizeObserver(calculateOnResize, { @@ -156,7 +156,7 @@ export const Indicator: FC<{ } indicator.classList[shouldShow ? "add" : "remove"]( - "HashCoreTour-Indicator--showing" + "HashCoreTour-Indicator--showing", ); }, [element, show, indicator]); @@ -166,7 +166,7 @@ export const Indicator: FC<{ export const PlayIndicator: FC<{ show: boolean }> = ({ show }) => { const element = useMemo( () => document.querySelector(".simulation-control.simulate"), - [] + [], ); return ; diff --git a/apps/sim-core/packages/core/src/components/HashCore/Tour/react-shepherd-wrapper.tsx b/apps/sim-core/packages/core/src/components/HashCore/Tour/react-shepherd-wrapper.tsx index 93a2c88..9dd8ac2 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Tour/react-shepherd-wrapper.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Tour/react-shepherd-wrapper.tsx @@ -47,9 +47,8 @@ export interface HashTourConfigContextType { update(tourConfig: HashCoreTourConfig | null): void; } -export const HashTourConfigContext = createContext( - null -); +export const HashTourConfigContext = + createContext(null); /** * @warning this only works once per mount– it will not update to reflect diff --git a/apps/sim-core/packages/core/src/components/HashCore/Viewer/HashCoreViewer.tsx b/apps/sim-core/packages/core/src/components/HashCore/Viewer/HashCoreViewer.tsx index aca2fc8..754879f 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/Viewer/HashCoreViewer.tsx +++ b/apps/sim-core/packages/core/src/components/HashCore/Viewer/HashCoreViewer.tsx @@ -17,7 +17,7 @@ const LazyOpenInCore = lazy(() => /* webpackChunkName: "OpenInCore" */ "../../OpenInCore/OpenInCore" ).then((module) => ({ default: module.OpenInCore, - })) + })), ); export const HashCoreViewer: FC = () => { @@ -34,10 +34,10 @@ export const HashCoreViewer: FC = () => { ({ width }) => { document.documentElement.style.setProperty( "--viewer-width", - `${Math.round(width)}px` + `${Math.round(width)}px`, ); }, - { onObserve: null } + { onObserve: null }, ); return ( diff --git a/apps/sim-core/packages/core/src/components/HashCore/useInstructionReceiver.ts b/apps/sim-core/packages/core/src/components/HashCore/useInstructionReceiver.ts index f15bc8f..3af03f2 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/useInstructionReceiver.ts +++ b/apps/sim-core/packages/core/src/components/HashCore/useInstructionReceiver.ts @@ -20,37 +20,46 @@ import { useSimulatorStore, } from "../../features/simulator/context"; -type InstructionUpdateFile = { +interface InstructionUpdateFile { contents: string; file: string; id: string; type: "updateFile"; -}; +} -type InstructionUpsertCreatorAgent = { +interface InstructionUpsertCreatorAgent { contents: string; file: string; id: string; type: "upsertCreatorAgent"; -}; +} -type InstructionAddDependencies = { - contents: { [key: string]: string }; +interface InstructionAddDependencies { + contents: Record; id: string; type: "addDependencies"; -}; +} -type InstructionIntialize = { id: string; type: "initialize" }; +interface InstructionIntialize { + id: string; + type: "initialize"; +} -type InstructionResetAndRun = { id: string; type: "resetAndRun" }; +interface InstructionResetAndRun { + id: string; + type: "resetAndRun"; +} -type InstructionSendState = { id: string; type: "sendState" }; +interface InstructionSendState { + id: string; + type: "sendState"; +} -type InstructionUpdateAnalysis = { +interface InstructionUpdateAnalysis { contents: AnalysisObject; id: string; type: "updateAnalysis"; -}; +} type InstructionData = | InstructionAddDependencies @@ -62,7 +71,7 @@ type InstructionData = | InstructionUpsertCreatorAgent; const isPluginMessage = ( - event: MessageEvent + event: MessageEvent, ): event is MessageEvent => [ "addDependencies", @@ -97,9 +106,9 @@ export const useInstructionReceiver = () => { type: "files", contents: files, }, - "*" + "*", ), - [] + [], ); useEffect(() => { // If it has been requested from a plugin via an 'initialize' call, @@ -131,10 +140,10 @@ export const useInstructionReceiver = () => { simulatorDispatch(toggleCurrentSimulator()); return; - case "updateFile": + case "updateFile": { const { file, contents } = event.data; const foundFile = Object.values(files)?.find( - (fileOption) => fileOption?.path.formatted === file + (fileOption) => fileOption?.path.formatted === file, ); if (foundFile) { dispatch(updateFile({ id: foundFile.id, contents })); @@ -142,20 +151,24 @@ export const useInstructionReceiver = () => { console.error(`Could not find file at path ${file} to update`); } return; - + } case "upsertCreatorAgent": { const { file, contents } = event.data; const foundFile = Object.values(files)?.find( - (fileOption) => fileOption?.path.formatted === file + (fileOption) => fileOption?.path.formatted === file, ); if (foundFile) { dispatch(updateFile({ id: foundFile.id, contents })); } else { dispatch( - createBehavior({ contents, path: parse(file), project: project! }) + createBehavior({ + contents, + path: parse(file), + project: project!, + }), ); const initJson = Object.values(files)?.find( - (file) => file.path.base === "init.json" + (file) => file.path.base === "init.json", ); try { const initParsed = JSON.parse(initJson!.contents); @@ -166,7 +179,7 @@ export const useInstructionReceiver = () => { updateFile({ id: initJson!.id, contents: JSON.stringify(initParsed, null, 2), - }) + }), ); } catch (err) { console.error("init.json is not valid JSON - could not update."); @@ -177,9 +190,9 @@ export const useInstructionReceiver = () => { // Add supplied outputs and plots to analysis.json // Replace if we can find a match for the name / key - case "updateAnalysis": + case "updateAnalysis": { const analysisJson = Object.values(files)?.find( - (file) => file.path.base === "analysis.json" + (file) => file.path.base === "analysis.json", ); try { @@ -195,12 +208,12 @@ export const useInstructionReceiver = () => { analysisParsed.plots = plots.filter( (existingPlot: any) => !(event.data as InstructionUpdateAnalysis).contents.plots.find( - (plot) => plot.title === existingPlot?.title - ) + (plot) => plot.title === existingPlot?.title, + ), ); const lowestPlot = maxBy(analysisParsed.plots, (plot: Plot) => - stringToNumber(plot.position.y) + stringToNumber(plot.position.y), ); let nextPosition = stringToNumber(lowestPlot?.position?.y ?? 0) + @@ -213,7 +226,7 @@ export const useInstructionReceiver = () => { } for (const [title, data] of Object.entries( - event.data.contents.outputs + event.data.contents.outputs, )) { outputs[title] = data; } @@ -221,15 +234,15 @@ export const useInstructionReceiver = () => { updateFile({ id: analysisJson!.id, contents: JSON.stringify(analysisParsed, null, 2), - }) + }), ); } catch (err) { console.error( - "analysis.json is not valid JSON - could not update." + "analysis.json is not valid JSON - could not update.", ); } return; - + } // A message to indicate that a plugin is embedding hCore, // so that we don't attempt to communicate with one otherwise. case "initialize": @@ -238,7 +251,7 @@ export const useInstructionReceiver = () => { { type: "initialized", }, - "*" + "*", ); sendFiles(files); return; @@ -249,12 +262,12 @@ export const useInstructionReceiver = () => { type: "state", contents: selectCurrentSimulationData(simStore.getState()), }, - "*" + "*", ); return; } }, - [dispatch, files, project, sendFiles, simStore] + [dispatch, files, project, sendFiles, simStore], ); useEffect(() => { diff --git a/apps/sim-core/packages/core/src/components/HashCore/utils/getUserOrgs.ts b/apps/sim-core/packages/core/src/components/HashCore/utils/getUserOrgs.ts index 70afd81..111aea6 100644 --- a/apps/sim-core/packages/core/src/components/HashCore/utils/getUserOrgs.ts +++ b/apps/sim-core/packages/core/src/components/HashCore/utils/getUserOrgs.ts @@ -14,7 +14,7 @@ export const getUserOrgs: (u: User | null) => Org[] = (currentUser) => id, shortname, name, - }) - ) + }), + ), ) : []; diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/DefaultProject.tsx b/apps/sim-core/packages/core/src/components/HashRouter/Effect/DefaultProject.tsx index 1f4e568..b72fd27 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/DefaultProject.tsx +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/DefaultProject.tsx @@ -17,7 +17,7 @@ export const HashRouterEffectDefaultProject: FC = () => { useEffect(() => { if (bootstrapped) { const defaultProject = selectDefaultLinkableProject( - storeRef.current.getState() + storeRef.current.getState(), ); if (!defaultProject) { diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/Fork.tsx b/apps/sim-core/packages/core/src/components/HashRouter/Effect/Fork.tsx index 068b51a..e086eaf 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/Fork.tsx +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/Fork.tsx @@ -21,7 +21,7 @@ import { useNavigateAway } from "./hooks"; const useEnsureProject = ( project: LinkableProject, - onCancel: VoidFunction + onCancel: VoidFunction, ): SimulationProject | null => { const dispatch = useDispatch(); const currentProject = useSelector(selectCurrentProject); @@ -38,17 +38,19 @@ const useEnsureProject = ( useEffect(() => { if (bootstrapped && !isCurrentProject && project) { + //@ts-expect-error redux problems const promise = dispatch(fetchProject({ project, redirect: false })); (async () => { try { + //@ts-expect-error redux problems const result = unwrapResult(await promise); if (!result) { onCancelRef.current(); } } catch (err) { - if (err?.name !== "AbortError") { + if (err instanceof Error && err?.name !== "AbortError") { fatalError(err); } } @@ -71,10 +73,10 @@ export const HashRouterEffectFork: FC<{ const { canFork, canForkIfSignedIn, canLogin } = useScopes( Scope.fork, Scope.forkIfSignedIn, - Scope.login + Scope.login, ); const project = useEnsureProject(targetProject, () => - canLogin ? forceLogIn(true) : navigateAway(true) + canLogin ? forceLogIn(true) : navigateAway(true), ); const projectName = project?.name; const projectVisibility = project?.visibility; @@ -86,6 +88,7 @@ export const HashRouterEffectFork: FC<{ { + //@ts-expect-error redux problems await dispatch(forkProject(project, values)); hideForkModal(); }} @@ -95,7 +98,7 @@ export const HashRouterEffectFork: FC<{ visibilityDisabled={projectVisibility === "private"} /> ) : null, - [dispatch, navigateAway, project, projectName, projectVisibility] + [dispatch, navigateAway, project, projectName, projectVisibility], ); useEffect(() => { diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/LegacySimulation.tsx b/apps/sim-core/packages/core/src/components/HashRouter/Effect/LegacySimulation.tsx index 267533a..939d347 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/LegacySimulation.tsx +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/LegacySimulation.tsx @@ -2,7 +2,6 @@ import { FC, useEffect } from "react"; import { useDispatch } from "react-redux"; import { navigate } from "hookrouter"; -import type { AppDispatch } from "../../../features/types"; import { HashCoreAccessGateKind } from "../../HashCore/AccessGate"; import { linkableProjectByLegacyId } from "../../../util/api/queries"; import { setAccessGate } from "../../../features/project/slice"; @@ -12,7 +11,7 @@ import { useHandlePromiseRejection } from "../../ErrorBoundary"; export const HashRouterEffectLegacySimulation: FC<{ id: string }> = ({ id, }) => { - const dispatch = useDispatch() as AppDispatch; + const dispatch = useDispatch(); const handlePromiseRejection = useHandlePromiseRejection(); useEffect(() => { @@ -22,7 +21,7 @@ export const HashRouterEffectLegacySimulation: FC<{ id: string }> = ({ try { const simulation = await linkableProjectByLegacyId( id, - controller.signal + controller.signal, ); navigate(urlFromProject(simulation), true, { fromLegacy: true }, false); @@ -34,7 +33,7 @@ export const HashRouterEffectLegacySimulation: FC<{ id: string }> = ({ props: { requestedProject: null }, }, url: window.location.pathname, - }) + }), ); } } diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/NewProject.tsx b/apps/sim-core/packages/core/src/components/HashRouter/Effect/NewProject.tsx index f1c176d..c7eee2a 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/NewProject.tsx +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/NewProject.tsx @@ -25,7 +25,7 @@ export const HashRouterEffectNewProject: FC<{ template?: string }> = ({ const [{ namespace }] = useSafeQueryParams(); const { canNewProject, canNewProjectIfSignedIn } = useScopes( Scope.newProject, - Scope.newProjectIfSignedIn + Scope.newProjectIfSignedIn, ); const fatalError = useFatalError(); @@ -33,6 +33,7 @@ export const HashRouterEffectNewProject: FC<{ template?: string }> = ({ () => ( { //migration shim @@ -41,17 +42,19 @@ export const HashRouterEffectNewProject: FC<{ template?: string }> = ({ values.path, values.name, values.visibility, - template + template, ); dispatch( + //@ts-expect-error redux problems trackEvent({ action: "New Project: Core", label: project.pathWithNamespace, - }) + }), ); dispatch(addUserProject(preparePartialSimulationProject(project))); + //@ts-expect-error redux problems dispatch(setProjectWithMeta(project)); navigate(urlFromProject(project), false, {}, true); }} @@ -59,7 +62,7 @@ export const HashRouterEffectNewProject: FC<{ template?: string }> = ({ defaultNamespace={namespace} /> ), - [dispatch, namespace, navigateAway] + [dispatch, namespace, navigateAway], ); useEffect(() => { @@ -73,7 +76,7 @@ export const HashRouterEffectNewProject: FC<{ template?: string }> = ({ forceLogIn(true); } else { fatalError( - "Should never not be able to new project if signed while at /new" + "Should never not be able to new project if signed while at /new", ); } }, [ diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/NotFound.tsx b/apps/sim-core/packages/core/src/components/HashRouter/Effect/NotFound.tsx index c8503ee..d927e3d 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/NotFound.tsx +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/NotFound.tsx @@ -15,7 +15,7 @@ export const HashRouterEffectNotFound: FC = () => { props: { requestedProject: null }, }, url: window.location.pathname, - }) + }), ); }, [dispatch]); diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/Project.tsx b/apps/sim-core/packages/core/src/components/HashRouter/Effect/Project.tsx index a9026d7..5c0a884 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/Project.tsx +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/Project.tsx @@ -16,12 +16,12 @@ import { urlFromProject } from "../../../routes"; import { useHandlePromiseRejection } from "../../ErrorBoundary"; import { withSignal } from "../../../util/withSignal"; -type ProjectParams = { +interface ProjectParams { namespace: string; path: string; ref: string; fork?: boolean; -}; +} const routeHandler = ({ namespace, @@ -54,7 +54,7 @@ const HashRouterEffectProjectFetch: FC<{ const { fromLegacy, file, ...params } = getSafeQueryParams(); const { access, ...otherParams } = parseAccessCodeInParams( params, - ProjectAccessScope.Read + ProjectAccessScope.Read, ); setQueryParams( @@ -64,7 +64,7 @@ const HashRouterEffectProjectFetch: FC<{ file: undefined, accessCode: access?.code ?? undefined, }, - true + true, ); // Assigning here due to a bug in TS typing @@ -72,15 +72,17 @@ const HashRouterEffectProjectFetch: FC<{ async function fetch() { await withSignal( + //@ts-expect-error redux problems dispatch( + //@ts-expect-error redux problems fetchProject({ project, fromLegacy: !!fromLegacy, file, access, - }) + }), ), - controller.signal + controller.signal, ); } @@ -112,7 +114,7 @@ export const HashRouterEffectProject: FC = () => { const project = useMemo( () => (pathWithNamespace && ref ? { pathWithNamespace, ref } : null), - [pathWithNamespace, ref] + [pathWithNamespace, ref], ); return project ? ( diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/Signin.tsx b/apps/sim-core/packages/core/src/components/HashRouter/Effect/Signin.tsx index 8d83790..a891e02 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/Signin.tsx +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/Signin.tsx @@ -13,7 +13,7 @@ export const HashRouterEffectSignin: FC = () => { const [showModal, hideModal] = useModal( () => navigateAway(false)} route={route} />, - [navigateAway, route] + [navigateAway, route], ); useEffect(() => { diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/Signup.tsx b/apps/sim-core/packages/core/src/components/HashRouter/Effect/Signup.tsx index 1c2d6fb..a69dc7d 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/Signup.tsx +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/Signup.tsx @@ -13,7 +13,7 @@ export const HashRouterEffectSignup: FC = () => { const [showModal, hideModal] = useModal( () => navigateAway(false)} route={route} />, - [navigateAway, route] + [navigateAway, route], ); useEffect(() => { diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/hooks.ts b/apps/sim-core/packages/core/src/components/HashRouter/Effect/hooks.ts index bb7e810..0454550 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/hooks.ts +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/hooks.ts @@ -62,6 +62,6 @@ export const useLoggedInNavigateAway = (route?: string) => { setQueryParams({ route: undefined }, true); } }, - [navigateAway] + [navigateAway], ); }; diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/routes.tsx b/apps/sim-core/packages/core/src/components/HashRouter/Effect/routes.tsx index 76608b8..de75aac 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/routes.tsx +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/routes.tsx @@ -36,7 +36,7 @@ const routes: HookRouter.RouteObject = { * @todo route handlers should be side effect free – handle this elsewhere */ "/:buildstamp/index.html": () => { - setImmediate(() => { + setTimeout(() => { /** * hookrouter's navigate has a bug where it incorrectly strips queries * included in the path, so we have to separate them. diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/empty.ts b/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/empty.ts index 5c65fc5..cd74152 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/empty.ts +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/empty.ts @@ -1,4 +1,4 @@ -import { CommitActionVerb } from "../../../../util/api/auto-types"; +import { CommitActionVerb } from "../../../../util/api/types"; import { ProjectTemplate } from "./types"; import { defaultJsBehaviorSrc } from "../../../../util/defaultJsBehaviorSrc"; diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/starter.ts b/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/starter.ts index 5b7aef5..9fa1865 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/starter.ts +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/starter.ts @@ -1,4 +1,4 @@ -import { CommitActionVerb } from "../../../../util/api/auto-types"; +import { CommitActionVerb } from "../../../../util/api/types"; import { ProjectTemplate } from "./types"; const starterSimAnalysis = `\ diff --git a/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/templates.ts b/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/templates.ts index 41efc46..6906ad3 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/templates.ts +++ b/apps/sim-core/packages/core/src/components/HashRouter/Effect/templates/templates.ts @@ -24,11 +24,11 @@ export const createNewSimulationProjectFromTemplate = ( path: string, name: string, visibility: ProjectVisibility, - template: string + template: string, ): SimulationProjectWithHcFiles => { if (!(namespace && path && name)) { throw Error( - "Namespace, path, and name must be specified when creating a project." + "Namespace, path, and name must be specified when creating a project.", ); } diff --git a/apps/sim-core/packages/core/src/components/HashRouter/HashRouter.tsx b/apps/sim-core/packages/core/src/components/HashRouter/HashRouter.tsx index 418636d..22658fb 100644 --- a/apps/sim-core/packages/core/src/components/HashRouter/HashRouter.tsx +++ b/apps/sim-core/packages/core/src/components/HashRouter/HashRouter.tsx @@ -16,6 +16,7 @@ export const HashRouter: FC = memo(function HashApp() { const routeEffect = useRouteEffect(); useEffect(() => { + //@ts-expect-error redux problems handlePromiseRejection(dispatch(bootstrapApp())); }, [handlePromiseRejection, dispatch]); @@ -31,7 +32,7 @@ export const HashRouter: FC = memo(function HashApp() { ); }); -// // @ts-ignore +// // @ts-expect-error // HashApp.whyDidYouRender = { // customName: "HashApp" // }; diff --git a/apps/sim-core/packages/core/src/components/Icon/Loading/IconLoading.tsx b/apps/sim-core/packages/core/src/components/Icon/Loading/IconLoading.tsx index 5795fd2..e3d3f5b 100644 --- a/apps/sim-core/packages/core/src/components/Icon/Loading/IconLoading.tsx +++ b/apps/sim-core/packages/core/src/components/Icon/Loading/IconLoading.tsx @@ -1,5 +1,5 @@ import React, { FC, memo, useLayoutEffect, useRef } from "react"; -// @ts-ignore +// @ts-expect-error unclear what the issue is here import GradientPath from "gradient-path"; import { IconLoadingProps } from "./types"; diff --git a/apps/sim-core/packages/core/src/components/Icon/index.ts b/apps/sim-core/packages/core/src/components/Icon/index.ts index e3493f1..af278a2 100644 --- a/apps/sim-core/packages/core/src/components/Icon/index.ts +++ b/apps/sim-core/packages/core/src/components/Icon/index.ts @@ -53,6 +53,6 @@ export { IconTableLarge } from "./TableLarge"; export { IconTrash } from "./Trash"; export { IconHCoreMono } from "./HCoreMono"; -export type IconProps = { +export interface IconProps { size?: number; -}; +} diff --git a/apps/sim-core/packages/core/src/components/Inputs/EnumInput/EnumInput.tsx b/apps/sim-core/packages/core/src/components/Inputs/EnumInput/EnumInput.tsx index 0117dca..09db7f7 100644 --- a/apps/sim-core/packages/core/src/components/Inputs/EnumInput/EnumInput.tsx +++ b/apps/sim-core/packages/core/src/components/Inputs/EnumInput/EnumInput.tsx @@ -4,12 +4,12 @@ import { RoundedSelect } from "../Select/RoundedSelect"; import "./EnumInput.scss"; -export type EnumInputProps = { +export interface EnumInputProps { name: string; value: string; options: string[] | string; onChange: (val: string) => void; -}; +} export const EnumInput: FC = memo( ({ name, value, options, onChange }) => { @@ -35,5 +35,5 @@ export const EnumInput: FC = memo( onChange={(evt) => onChange(evt.target.value)} /> ); - } + }, ); diff --git a/apps/sim-core/packages/core/src/components/Inputs/Select/RoundedSelect.tsx b/apps/sim-core/packages/core/src/components/Inputs/Select/RoundedSelect.tsx index 92c0f21..3893f38 100644 --- a/apps/sim-core/packages/core/src/components/Inputs/Select/RoundedSelect.tsx +++ b/apps/sim-core/packages/core/src/components/Inputs/Select/RoundedSelect.tsx @@ -13,12 +13,12 @@ export const RoundedSelect = forwardRef( className={classNames( "RoundedSelect", { "RoundedSelect--disabled": disabled }, - className + className, )} ref={ref} disabled={disabled} {...props} /> ); - } + }, ); diff --git a/apps/sim-core/packages/core/src/components/Inputs/Select/Select.tsx b/apps/sim-core/packages/core/src/components/Inputs/Select/Select.tsx index 9b259a0..4f4a10e 100644 --- a/apps/sim-core/packages/core/src/components/Inputs/Select/Select.tsx +++ b/apps/sim-core/packages/core/src/components/Inputs/Select/Select.tsx @@ -24,7 +24,7 @@ export const Select = forwardRef< style, ...props }, - ref + ref, ) { const passedValue = defaultValue ?? value; const currentValue = options.find((option) => option.value === passedValue); diff --git a/apps/sim-core/packages/core/src/components/KeepInView/KeepInView.tsx b/apps/sim-core/packages/core/src/components/KeepInView/KeepInView.tsx index 237fd45..4b5c644 100644 --- a/apps/sim-core/packages/core/src/components/KeepInView/KeepInView.tsx +++ b/apps/sim-core/packages/core/src/components/KeepInView/KeepInView.tsx @@ -56,7 +56,7 @@ export const useKeepInView = () => { if (childRef.current && parentRef.current) { parentRef.current.scrollTo( childRef.current.offsetLeft - parentRef.current.offsetLeft, - childRef.current.offsetTop - parentRef.current.offsetTop + childRef.current.offsetTop - parentRef.current.offsetTop, ); } }, []); @@ -82,7 +82,7 @@ export const useKeepInView = () => { parentRef.current = node; scroll(); }, - [scroll] + [scroll], ); const setChildRef = useCallback( @@ -94,7 +94,7 @@ export const useKeepInView = () => { childRef.current = node; scroll(); }, - [scroll] + [scroll], ); return [setParentRef, setChildRef]; diff --git a/apps/sim-core/packages/core/src/components/LabeledInputRadio/LabeledInputRadio.tsx b/apps/sim-core/packages/core/src/components/LabeledInputRadio/LabeledInputRadio.tsx index 2a62675..e0a34b9 100644 --- a/apps/sim-core/packages/core/src/components/LabeledInputRadio/LabeledInputRadio.tsx +++ b/apps/sim-core/packages/core/src/components/LabeledInputRadio/LabeledInputRadio.tsx @@ -3,14 +3,14 @@ import classNames from "classnames"; import "./LabeledInputRadio.css"; -type LabeledInputRadioProps = { +interface LabeledInputRadioProps { label: string; group: string; isChecked: (htmlFor: string) => boolean; onClick?: (event: MouseEvent) => void; onMouseEnter?: (event: MouseEvent) => void; disabled?: boolean; -}; +} export const LabeledInputRadio: FC = ({ label, diff --git a/apps/sim-core/packages/core/src/components/Link/Link.tsx b/apps/sim-core/packages/core/src/components/Link/Link.tsx index 14dbcac..5e890d1 100644 --- a/apps/sim-core/packages/core/src/components/Link/Link.tsx +++ b/apps/sim-core/packages/core/src/components/Link/Link.tsx @@ -34,7 +34,7 @@ export const Link: FC = forwardRef( target, ...props }, - ref + ref, ) { /** * defaulting to Scope.login because we cannot dynamically call this hook. @@ -50,8 +50,8 @@ export const Link: FC = forwardRef( let filteredQuery = Object.fromEntries( Object.entries(query).filter( - ([_, value]) => value !== null && typeof value !== "undefined" - ) + ([_, value]) => value !== null && typeof value !== "undefined", + ), ); let route = path; @@ -89,5 +89,5 @@ export const Link: FC = forwardRef( {children} ); - } + }, ); diff --git a/apps/sim-core/packages/core/src/components/LoadingIcon/LoadingIcon.tsx b/apps/sim-core/packages/core/src/components/LoadingIcon/LoadingIcon.tsx index 566f213..8b7125a 100644 --- a/apps/sim-core/packages/core/src/components/LoadingIcon/LoadingIcon.tsx +++ b/apps/sim-core/packages/core/src/components/LoadingIcon/LoadingIcon.tsx @@ -2,9 +2,9 @@ import React from "react"; import "./LoadingIcon.css"; -type LoadingIconProps = { +interface LoadingIconProps { fullScreen?: boolean; -}; +} export const LoadingIcon: React.FC = ({ fullScreen }) => (

    diff --git a/apps/sim-core/packages/core/src/components/Logo/Logo.tsx b/apps/sim-core/packages/core/src/components/Logo/Logo.tsx index ad16c78..1a56499 100644 --- a/apps/sim-core/packages/core/src/components/Logo/Logo.tsx +++ b/apps/sim-core/packages/core/src/components/Logo/Logo.tsx @@ -4,12 +4,12 @@ import classNames from "classnames"; import "./Logo.css"; -type LogoProps = { +interface LogoProps { size?: number; logoSize?: number; textSize?: number; className?: string; -}; +} export const Logo: FC = ({ size = 1, diff --git a/apps/sim-core/packages/core/src/components/Modal/Analysis/AnalysisModal.tsx b/apps/sim-core/packages/core/src/components/Modal/Analysis/AnalysisModal.tsx index 0ede240..4f88271 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Analysis/AnalysisModal.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Analysis/AnalysisModal.tsx @@ -7,7 +7,7 @@ import { ModalExit } from "../ModalExit"; import "./AnalysisModal.scss"; -type AnalysisModalProps = { +interface AnalysisModalProps { onClose?: () => void; cancelButton?: boolean; className?: string; @@ -15,7 +15,7 @@ type AnalysisModalProps = { footerLegend: ReactNode | string | null; submitButtonText: string; onSubmit: FormEventHandler; -}; +} export const AnalysisModal: FC = ({ onClose, diff --git a/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.scss b/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.scss index 963d566..3b80ecf 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.scss +++ b/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.scss @@ -13,7 +13,9 @@ border-radius: 8px 0 0 8px; } - .AnalysisModal__RepeatableContentItem--metric:not(.AnalysisModal__RepeatableContentItem--single) + .AnalysisModal__RepeatableContentItem--metric:not( + .AnalysisModal__RepeatableContentItem--single + ) & { border-right: none !important; } diff --git a/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.spec.tsx b/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.spec.tsx index 61774c4..3093dd2 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.spec.tsx @@ -15,6 +15,7 @@ const noop = () => {}; it("renders without crashing", () => { const div = document.createElement("div"); + //@ts-expect-error redux problems store.dispatch(setProjectWithMeta(mockProject)); ReactDOM.render( @@ -25,7 +26,7 @@ it("renders without crashing", () => { , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); @@ -38,7 +39,7 @@ it("renders the right title and headings (create)", () => { - + , ); expect(getByText("Define new metric")).toBeDefined(); // title expect(getByText("METRIC NAME")).toBeDefined(); // first input label @@ -47,7 +48,7 @@ it("renders the right title and headings (create)", () => { expect(getByText("Add additional operation")).toBeDefined(); // Finish? heading expect(getByText("Finished?")).toBeDefined(); // Finish? heading expect( - getByText("You'll be able to use your new metric in any plot.") + getByText("You'll be able to use your new metric in any plot."), ).toBeDefined(); // Finish? span expect(getByText("Create new metric")).toBeDefined(); // submit button }); @@ -60,7 +61,7 @@ it("renders the right title and headings (edit)", () => { - + , ); expect(getByText("Edit metric")).toBeDefined(); // title expect(getByText("METRIC NAME")).toBeDefined(); // first input label @@ -81,7 +82,7 @@ it("calls onClose when pressing ESCAPE key", () => { - + , ); fireEvent.keyDown(baseElement, { key: "Escape", code: "Escape" }); expect(mockFn).toHaveBeenCalled(); diff --git a/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.tsx b/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.tsx index 55baaf4..ab223ee 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalOutputMetrics.tsx @@ -17,7 +17,7 @@ import { validateTitle } from "../../../features/analysis/validation"; import "./ModalOutputMetrics.scss"; -type ModalOutputMetricsProps = { +interface ModalOutputMetricsProps { onClose: VoidFunction; onSave: Function; onDelete?: Function; @@ -25,12 +25,12 @@ type ModalOutputMetricsProps = { metricKey?: string; operations?: Operation[]; isCreate?: boolean; -}; +} -type FormInputs = { +interface FormInputs { title: string; operations: Operation[]; -}; +} export const defaultNewOperation: Operation = { op: OperationTypes.get, @@ -79,7 +79,7 @@ export const ModalOutputMetrics: FC = ({ const validate = () => { const validationResults = validateOutput( - currentOperations as OutputOperation[] + currentOperations as OutputOperation[], ); if ( validationResults instanceof Error || @@ -88,7 +88,7 @@ export const ModalOutputMetrics: FC = ({ setValidationErrors( Array.isArray(validationResults) ? validationResults - : [validationResults] + : [validationResults], ); return false; } @@ -96,7 +96,7 @@ export const ModalOutputMetrics: FC = ({ return true; }; - const onSubmit = async (values: FormInputs) => { + const onSubmit = (values: FormInputs) => { const result = { ...values, operations: currentOperations, @@ -128,7 +128,7 @@ export const ModalOutputMetrics: FC = ({ const deleteOperationItem = (index: number) => { setIsFormDirty(true); setCurrentOperations( - currentOperations.filter((_val: Operation, idx: number) => idx !== index) + currentOperations.filter((_val: Operation, idx: number) => idx !== index), ); }; const updateOperationItem = (index: number, newValues: Operation) => { @@ -157,7 +157,7 @@ export const ModalOutputMetrics: FC = ({ const safeOnClose = useSafeOnClose(!isFormDirty, true, onClose); const localBehaviorKeys = useSelector( selectLocalBehaviorKeyFieldNames, - shallowEqual + shallowEqual, ); const behaviorKeys = [...localBehaviorKeys, ...RESERVED_BUILT_IN_KEYS].sort(); const behaviorKeysOptions: ReactSelectOption[] = behaviorKeys.map((key) => ({ diff --git a/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalPlots.spec.tsx b/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalPlots.spec.tsx index ed4ef83..4e014a0 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalPlots.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalPlots.spec.tsx @@ -11,6 +11,7 @@ import { store } from "../../../features/store"; it("renders without crashing", () => { const div = document.createElement("div"); + //@ts-expect-error redux problems store.dispatch(setProjectWithMeta(mockProject)); ReactDOM.render( @@ -23,7 +24,7 @@ it("renders without crashing", () => { /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalPlots.tsx b/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalPlots.tsx index dfb329d..5305c24 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalPlots.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Analysis/ModalPlots.tsx @@ -21,10 +21,10 @@ import { validatePlot } from "../../../features/analysis/analysisJsonValidation" import "./ModalPlots.scss"; -type ModalPlotsProps = { +interface ModalPlotsProps { onClose: VoidFunction; onSave: Function; - outputs: { [index: string]: any[] }; + outputs: Record; onDelete?: Function; plotKey?: number; plotTitle?: string; @@ -39,14 +39,14 @@ type ModalPlotsProps = { XAxisItems?: XAxisItemType[]; isCreate?: boolean; combinedHeightOfAllPlots?: number; -}; +} -type FormInputs = { +interface FormInputs { title: string; chartType: ChartTypes; YAxisItems: YAxisItemType[]; XAxisItems: XAxisItemType[]; -}; +} const chartTypeOptions: ReactSelectOption[] = [ ChartTypes.area, @@ -67,13 +67,13 @@ const plotSupportsXAxis = (type: ChartTypes) => ["histogram", "scatter", "line"].includes(type); const plotSupportsYAxis = (type: ChartTypes) => ["area", "box", "bar", "histogram", "timeseries", "scatter", "line"].includes( - type + type, ); const shouldShowXAxis = ( chartType: ChartTypes, _xAxisItems: XAxisItemType[] = [], - yAxisItems: XAxisItemType[] = [] + yAxisItems: XAxisItemType[] = [], ) => { const plotSupportsIt = plotSupportsXAxis(chartType); if (!plotSupportsIt) { @@ -89,7 +89,7 @@ const shouldShowXAxis = ( const shouldShowYAxis = ( chartType: ChartTypes, xAxisItems: XAxisItemType[] = [], - _yAxisItems: YAxisItemType[] = [] + _yAxisItems: YAxisItemType[] = [], ) => { const plotSupportsIt = plotSupportsYAxis(chartType); if (!plotSupportsIt) { @@ -122,20 +122,18 @@ export const ModalPlots: FC = ({ }) => { const fatalError = useFatalError(); - const [currentYAxisItems, setCurrentYAxisItems] = useState( - YAxisItems - ); - const [currentXAxisItems, setCurrentXAxisItems] = useState( - XAxisItems - ); + const [currentYAxisItems, setCurrentYAxisItems] = + useState(YAxisItems); + const [currentXAxisItems, setCurrentXAxisItems] = + useState(XAxisItems); const [chartType, setChartType] = useState( isCreate ?? !plotChartType ? chartTypeOptions[0] - : { label: String(plotChartType), value: String(plotChartType) } + : { label: String(plotChartType), value: String(plotChartType) }, ); const [hideLegend, setHideLegend] = useState(!!layout.hideLegend); const [hideCollatedLegend, setHideCollatedLegend] = useState( - !!layout.hideCollatedLegend + !!layout.hideCollatedLegend, ); const [validationErrors, setValidationErrors] = useState([]); @@ -182,7 +180,7 @@ export const ModalPlots: FC = ({ const validate = (result: any) => { const validationResults = validatePlot( prepareDataForValidation(result), - outputs + outputs, ); if ( @@ -192,14 +190,14 @@ export const ModalPlots: FC = ({ setValidationErrors( !Array.isArray(validationResults) ? [validationResults] - : validationResults + : validationResults, ); return false; } return true; }; - const onSubmit = async (values: FormInputs) => { + const onSubmit = (values: FormInputs) => { const result = getFormState(values); if (!validate(result)) { return; @@ -228,11 +226,11 @@ export const ModalPlots: FC = ({ const deleteAxisItem = (axisToModify: "x" | "y", index: number) => { if (axisToModify === "x") { setCurrentXAxisItems( - currentXAxisItems.filter((_val, idx) => idx !== index) + currentXAxisItems.filter((_val, idx) => idx !== index), ); } else { setCurrentYAxisItems( - currentYAxisItems.filter((_val, idx) => idx !== index) + currentYAxisItems.filter((_val, idx) => idx !== index), ); } }; @@ -240,7 +238,7 @@ export const ModalPlots: FC = ({ const updateAxisItem = ( axisToUpdate: "x" | "y", index: number, - newValues: YAxisItemType | XAxisItemType + newValues: YAxisItemType, ) => { const items = axisToUpdate === "x" ? currentXAxisItems : currentYAxisItems; const newOps = [...items]; @@ -413,7 +411,7 @@ export const ModalPlots: FC = ({ {shouldShowXAxis( chartType.value as ChartTypes, currentXAxisItems, - currentYAxisItems + currentYAxisItems, ) && ( <>
    @@ -466,7 +464,7 @@ export const ModalPlots: FC = ({ {shouldShowYAxis( chartType.value as ChartTypes, currentXAxisItems, - currentYAxisItems + currentYAxisItems, ) && ( <>
    diff --git a/apps/sim-core/packages/core/src/components/Modal/Analysis/OperationItem.tsx b/apps/sim-core/packages/core/src/components/Modal/Analysis/OperationItem.tsx index 75568a5..49f4970 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Analysis/OperationItem.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Analysis/OperationItem.tsx @@ -44,7 +44,7 @@ export const OperationItem: FC = ({ }) => { const filterPropertiesBasedOnOperationType = ( OpType: OperationTypes, - newValues: Operation + newValues: Operation, ) => { if (operationSupportsFieldField(OpType) && !newValues.field) { newValues.field = "agent_id"; @@ -78,7 +78,7 @@ export const OperationItem: FC = ({ onChange={(option) => { const newValues = filterPropertiesBasedOnOperationType( option.value, - { ...operation, op: option.value } + { ...operation, op: option.value }, ); onChange(index, newValues); }} diff --git a/apps/sim-core/packages/core/src/components/Modal/BigModal.tsx b/apps/sim-core/packages/core/src/components/Modal/BigModal.tsx index 9ffccc8..9d9dc6d 100644 --- a/apps/sim-core/packages/core/src/components/Modal/BigModal.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/BigModal.tsx @@ -6,12 +6,12 @@ import { ModalExit } from "./ModalExit"; import "./BigModal.css"; -type BigModalProps = { +interface BigModalProps { onClose?: () => void; cancelButton?: boolean; className?: string; backdropClassName?: string; -}; +} export const BigModal: FC = ({ onClose, diff --git a/apps/sim-core/packages/core/src/components/Modal/CloudUsage/useModalCloudUsage.tsx b/apps/sim-core/packages/core/src/components/Modal/CloudUsage/useModalCloudUsage.tsx index b3728ee..a3326c2 100644 --- a/apps/sim-core/packages/core/src/components/Modal/CloudUsage/useModalCloudUsage.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/CloudUsage/useModalCloudUsage.tsx @@ -6,7 +6,7 @@ import { ModalCloudUsage } from "./ModalCloudUsage"; export const useModalCloudUsage = () => { const [showModal, hideModal] = useModal( () => , - [] + [], ); return [showModal, hideModal]; }; diff --git a/apps/sim-core/packages/core/src/components/Modal/Confirm/FileDelete/ModalConfirmFileDelete.tsx b/apps/sim-core/packages/core/src/components/Modal/Confirm/FileDelete/ModalConfirmFileDelete.tsx index b269d92..207821a 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Confirm/FileDelete/ModalConfirmFileDelete.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Confirm/FileDelete/ModalConfirmFileDelete.tsx @@ -6,10 +6,10 @@ import { useModalConfirm } from "../hooks"; import "./ModalConfirmFileDelete.css"; -type ModalConfirmFileDeleteProps = { +interface ModalConfirmFileDeleteProps { onAnswer: (answer: boolean) => void; fileName: string; -}; +} export const ModalConfirmFileDelete: FC = ({ onAnswer, diff --git a/apps/sim-core/packages/core/src/components/Modal/Experiments/ExperimentModal.tsx b/apps/sim-core/packages/core/src/components/Modal/Experiments/ExperimentModal.tsx index 94d1d3d..309ba79 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Experiments/ExperimentModal.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Experiments/ExperimentModal.tsx @@ -203,7 +203,7 @@ export const initialFormData = { }; const getFieldsForMonteCarloDistribution = ( - distribution: DistributionTypes + distribution: DistributionTypes, ): string[] => { switch (distribution) { case DistributionTypes.logNormal: @@ -231,7 +231,7 @@ const optimizationFieldTemplate = () => ({ }); const prepareExperimentForFormData = ( - experiment?: RawExperimentType + experiment?: RawExperimentType, ): FormDataType | undefined => { if (!experiment) { return; @@ -246,11 +246,10 @@ const prepareExperimentForFormData = ( clone.experimentType = convertToReactSelectOption(experimentType); if (experimentType === ExperimentTypes.values) { if (clone.dynamicFields[ExperimentTypes.values]) { - const originalValues = experiment.dynamicFields[ExperimentTypes.values]! - .values; - clone.dynamicFields[ - ExperimentTypes.values - ]!.values = serializeParsedValues(originalValues); + const originalValues = + experiment.dynamicFields[ExperimentTypes.values]!.values; + clone.dynamicFields[ExperimentTypes.values]!.values = + serializeParsedValues(originalValues); } } if (experimentType === ExperimentTypes.optimization) { @@ -262,9 +261,11 @@ const prepareExperimentForFormData = ( if (cloneFields) { if (Array.isArray(cloneFields.fields) && cloneFields.fields.length) { // @todo remove this casting - cloneFields.fields = ((cloneFields as any) as RawExperimentOptimizationType).fields.map( + cloneFields.fields = ( + cloneFields as any as RawExperimentOptimizationType + ).fields.map( ( - field: RawExperimentOptimizationField + field: RawExperimentOptimizationField, ): FormDataDynamicFieldOptimizationFieldType => { const newField = { name: field.name, @@ -287,14 +288,14 @@ const prepareExperimentForFormData = ( } else { return { ...newField, value: "" }; } - } + }, ); } else { cloneFields.fields = [optimizationFieldTemplate()]; } if (originalFields?.metricName) { - cloneFields!.metricName = { + cloneFields.metricName = { value: originalFields.metricName, label: originalFields.metricName, }; @@ -305,12 +306,12 @@ const prepareExperimentForFormData = ( originalFields?.metricObjective === FormDataDynamicFieldOptimizationMetricObjective.max ) { - cloneFields!.metricObjective = { + cloneFields.metricObjective = { value: originalFields?.metricObjective, label: originalFields?.metricObjective, }; } else { - cloneFields!.metricObjective = + cloneFields.metricObjective = initialFormDynamicFieldsData[ ExperimentTypes.optimization ].metricObjective; @@ -331,7 +332,7 @@ const prepareExperimentForFormData = ( } else { value = null; } - clone.dynamicFields![experimentType]!.runs = value; + clone.dynamicFields[experimentType]!.runs = value; return clone; } const fieldValue = experiment.dynamicFields?.[experimentType]?.field; @@ -340,14 +341,12 @@ const prepareExperimentForFormData = ( const hasFieldTypeString = typeof fieldValue === "string"; const hasDistributionTypeString = typeof distributionValue === "string"; // monte-carlo case if (hasFieldTypeString) { - clone.dynamicFields![experimentType]!.field = convertToReactSelectOption( - fieldValue - ); + clone.dynamicFields[experimentType]!.field = + convertToReactSelectOption(fieldValue); } if (hasDistributionTypeString) { - clone.dynamicFields![ - "monte-carlo" - ]!.distribution = convertToReactSelectOption(distributionValue); + clone.dynamicFields["monte-carlo"]!.distribution = + convertToReactSelectOption(distributionValue); } return clone; }; @@ -355,7 +354,7 @@ const prepareExperimentForFormData = ( const onSubmitSpecificExperimentHandler = ( experimentType: ExperimentTypes, formData: FormDataType, - fields: AllFormDataTypeDynamicFieldsType + fields: AllFormDataTypeDynamicFieldsType, ): Result => { let clone = JSON.parse(JSON.stringify(fields)); switch (experimentType) { @@ -380,7 +379,7 @@ const onSubmitSpecificExperimentHandler = ( formErrors.dynamicFields![experimentType]!.values = error.msg ?? "Error parsing values"; return formErrors; - } + }, ); if (res.isOk()) { clone.values = res.unwrapOr([]); @@ -397,17 +396,17 @@ const onSubmitSpecificExperimentHandler = ( clone.runs = clone.runs?.map((run: ReactSelectOption) => run.value) ?? []; return ok(clone); - case ExperimentTypes.optimization: + case ExperimentTypes.optimization: { clone.metricName = clone.metricName.value; clone.metricObjective = clone.metricObjective.value; let formErrors: FormErrorsType | null = null; const results = clone.fields.map( ( field: FormDataDynamicFieldOptimizationFieldType, - idx: number + idx: number, ): Result => { const parsedValue: ParseResult = parseValuesFromInput( - field.value + field.value, ); return parsedValue @@ -425,7 +424,7 @@ const onSubmitSpecificExperimentHandler = ( formErrors.dynamicFields![experimentType]!.fields![idx].value = error.msg ?? "Error parsing values"; }); - } + }, ); const res = combine(results) @@ -437,9 +436,9 @@ const onSubmitSpecificExperimentHandler = ( return res; } return ok(clone); - + } default: - if (clone.field && clone.field.value) { + if (clone.field?.value) { clone.field = clone.field.value; } return ok(clone); @@ -453,29 +452,25 @@ export const ExperimentModal: FC<{ // EFFECTS const [formErrors, setFormErrors] = useState({}); const [formData, setFormData] = useState( - () => prepareExperimentForFormData(experiment) ?? initialFormData + () => prepareExperimentForFormData(experiment) ?? initialFormData, ); const shouldRunExperimentAfterSaving = useRef(false); const dispatch = useDispatch(); const simulationTarget = useSimulatorSelector(selectProviderTarget); - const [ - newSimulationTarget, - setNewSimulationTarget, - newSimulationTargetRef, - ] = useRefState(simulationTarget); + const [newSimulationTarget, setNewSimulationTarget, newSimulationTargetRef] = + useRefState(simulationTarget); const simulatorDispatch = useSimulatorDispatch(); - const experiments: [string, RawExperimentType][] | null = useSelector( - selectExperiments - ); + const experiments: [string, RawExperimentType][] | null = + useSelector(selectExperiments); const globals = parseGlobals(useSelector(selectGlobals)); const fieldOptions = (globals?.globals ? flattenObjectKeysIntoString(globals.globals).map((global: string) => - convertToReactSelectOption(global) + convertToReactSelectOption(global), ) : null) ?? []; const metricOptions = useSelector(selectParsedAnalysisMetricNames).map( - (name): ReactSelectOption => ({ value: name, label: name }) + (name): ReactSelectOption => ({ value: name, label: name }), ); const canUseCloud = false; @@ -520,14 +515,14 @@ export const ExperimentModal: FC<{ const experimentType: ExperimentTypes | string = formData.experimentType.value; let fields = JSON.parse( - //@ts-ignore - JSON.stringify(formData.dynamicFields[experimentType]) + //@ts-expect-error tech debt + JSON.stringify(formData.dynamicFields[experimentType]), ); const res = onSubmitSpecificExperimentHandler( experimentType as ExperimentTypes, formData, - fields + fields, ).mapErr((err) => { setFormErrors(err); }); @@ -590,18 +585,17 @@ export const ExperimentModal: FC<{ */ const onChange = ( fieldName: string, - value: number | string | ReactSelectOption | ChangeEvent + value: number | string | ReactSelectOption | ChangeEvent, ): void => { const clone: any = JSON.parse(JSON.stringify(formData)); const splitted = fieldName.split("."); if (splitted.length === 1) { clone[fieldName] = value; - // @ts-ignore + // @ts-expect-error tech debt if (fieldName === "experimentType" && value.value !== clone[fieldName]) { // we changed the experiment type, thus we have to rebuild the dynamicFields - const clonedDynamicFields: typeof initialFormData.dynamicFields = JSON.parse( - JSON.stringify(initialFormData.dynamicFields) - ); + const clonedDynamicFields: typeof initialFormData.dynamicFields = + JSON.parse(JSON.stringify(initialFormData.dynamicFields)); clonedDynamicFields.optimization.fields = [optimizationFieldTemplate()]; clonedDynamicFields.optimization.metricName = metricOptions[0]; @@ -627,7 +621,7 @@ export const ExperimentModal: FC<{ if (value !== "") { // clear errors for this field const newErrors: any = JSON.parse(JSON.stringify(formErrors)); - if (newErrors.dynamicFields && newErrors.dynamicFields[experimentType]) { + if (newErrors.dynamicFields?.[experimentType]) { delete newErrors?.dynamicFields[experimentType][field]; } setFormErrors(newErrors); @@ -659,7 +653,7 @@ export const ExperimentModal: FC<{ context: "experiments.json", timestamp: Date.now(), simulationId: null, - }) + }), ); onClose(); }, [experiments, onClose, dispatch]); @@ -673,7 +667,7 @@ export const ExperimentModal: FC<{ : experiments ?.filter( (item: any) => - item[1].type !== "multiparameter" && item[1].type !== "group" + item[1].type !== "multiparameter" && item[1].type !== "group", ) .map((item: any) => convertToReactSelectOption(item[0])) ?? []; @@ -686,7 +680,7 @@ export const ExperimentModal: FC<{ const showMonteCarloNormal = shouldShowMonteCarlo(DistributionTypes.normal); const showMonteCarloLogNormal = shouldShowMonteCarlo( - DistributionTypes.logNormal + DistributionTypes.logNormal, ); const showMonteCarloPoisson = shouldShowMonteCarlo(DistributionTypes.poisson); const showMonteCarloBeta = shouldShowMonteCarlo(DistributionTypes.beta); @@ -757,7 +751,7 @@ export const ExperimentModal: FC<{ onChange("values.steps", evt.target.value)} @@ -765,12 +759,10 @@ export const ExperimentModal: FC<{ @@ -782,7 +774,7 @@ export const ExperimentModal: FC<{ @@ -810,9 +802,7 @@ export const ExperimentModal: FC<{ @@ -826,7 +816,7 @@ export const ExperimentModal: FC<{ min={0} label="START" className={getErrorClassname( - !!formErrors?.dynamicFields?.linspace?.start + !!formErrors?.dynamicFields?.linspace?.start, )} value={formData.dynamicFields?.linspace?.start} onChange={(evt) => @@ -840,7 +830,7 @@ export const ExperimentModal: FC<{ min={0} label="STOP" className={getErrorClassname( - !!formErrors?.dynamicFields?.linspace?.stop + !!formErrors?.dynamicFields?.linspace?.stop, )} value={formData.dynamicFields?.linspace?.stop} onChange={(evt) => @@ -853,7 +843,7 @@ export const ExperimentModal: FC<{ min={0} label="SAMPLES" className={getErrorClassname( - !!formErrors?.dynamicFields?.linspace?.samples + !!formErrors?.dynamicFields?.linspace?.samples, )} value={formData.dynamicFields?.linspace?.samples} onChange={(evt) => @@ -869,7 +859,7 @@ export const ExperimentModal: FC<{ onChange("arange.steps", evt.target.value)} @@ -877,9 +867,7 @@ export const ExperimentModal: FC<{ @@ -893,7 +881,7 @@ export const ExperimentModal: FC<{ min={0} label="START" className={getErrorClassname( - !!formErrors?.dynamicFields?.arange?.start + !!formErrors?.dynamicFields?.arange?.start, )} value={formData.dynamicFields?.arange?.start} onChange={(evt) => onChange("arange.start", evt.target.value)} @@ -905,7 +893,7 @@ export const ExperimentModal: FC<{ min={0} label="STOP" className={getErrorClassname( - !!formErrors?.dynamicFields?.arange?.stop + !!formErrors?.dynamicFields?.arange?.stop, )} value={formData.dynamicFields?.arange?.stop} onChange={(evt) => onChange("arange.stop", evt.target.value)} @@ -917,7 +905,7 @@ export const ExperimentModal: FC<{ min={0} label="INCREMENT" className={getErrorClassname( - !!formErrors?.dynamicFields?.arange?.increment + !!formErrors?.dynamicFields?.arange?.increment, )} value={formData.dynamicFields?.arange?.increment} onChange={(evt) => @@ -937,7 +925,7 @@ export const ExperimentModal: FC<{ min="1" step="1" className={getErrorClassname( - !!formErrors?.dynamicFields?.["monte-carlo"]?.steps + !!formErrors?.dynamicFields?.["monte-carlo"]?.steps, )} value={formData.dynamicFields?.["monte-carlo"]?.steps} errorMessage="" @@ -948,10 +936,7 @@ export const ExperimentModal: FC<{ @@ -959,7 +944,7 @@ export const ExperimentModal: FC<{ } data-testid="dropdown-monte-carlo-field" className={getErrorClassname( - !!formErrors.dynamicFields?.["monte-carlo"]?.field + !!formErrors.dynamicFields?.["monte-carlo"]?.field, )} /> @@ -978,10 +963,7 @@ export const ExperimentModal: FC<{ onChange("monte-carlo.distribution", selectedOption) @@ -996,7 +978,7 @@ export const ExperimentModal: FC<{ min={0} label="STD" className={getErrorClassname( - !!formErrors?.dynamicFields?.["monte-carlo"]?.std + !!formErrors?.dynamicFields?.["monte-carlo"]?.std, )} value={formData.dynamicFields?.["monte-carlo"]?.std} onChange={(evt) => @@ -1010,7 +992,7 @@ export const ExperimentModal: FC<{ min={0} label="MEAN" className={getErrorClassname( - !!formErrors?.dynamicFields?.["monte-carlo"]?.mean + !!formErrors?.dynamicFields?.["monte-carlo"]?.mean, )} value={formData.dynamicFields?.["monte-carlo"]?.mean} onChange={(evt) => @@ -1028,7 +1010,7 @@ export const ExperimentModal: FC<{ min={0} label="MU" className={getErrorClassname( - !!formErrors?.dynamicFields?.["monte-carlo"]?.mu + !!formErrors?.dynamicFields?.["monte-carlo"]?.mu, )} value={formData.dynamicFields?.["monte-carlo"]?.mu} onChange={(evt) => @@ -1042,7 +1024,7 @@ export const ExperimentModal: FC<{ min={0} label="SIGMA" className={getErrorClassname( - !!formErrors?.dynamicFields?.["monte-carlo"]?.sigma + !!formErrors?.dynamicFields?.["monte-carlo"]?.sigma, )} value={formData.dynamicFields?.["monte-carlo"]?.sigma} onChange={(evt) => @@ -1059,7 +1041,7 @@ export const ExperimentModal: FC<{ min={0} label="RATE" className={getErrorClassname( - !!formErrors?.dynamicFields?.["monte-carlo"]?.rate + !!formErrors?.dynamicFields?.["monte-carlo"]?.rate, )} value={formData.dynamicFields?.["monte-carlo"]?.rate} onChange={(evt) => @@ -1076,7 +1058,7 @@ export const ExperimentModal: FC<{ min={0} label="ALPHA" className={getErrorClassname( - !!formErrors?.dynamicFields?.["monte-carlo"]?.alpha + !!formErrors?.dynamicFields?.["monte-carlo"]?.alpha, )} value={formData.dynamicFields?.["monte-carlo"]?.alpha} onChange={(evt) => @@ -1090,7 +1072,7 @@ export const ExperimentModal: FC<{ min={0} label="BETA" className={getErrorClassname( - !!formErrors?.dynamicFields?.["monte-carlo"]?.beta + !!formErrors?.dynamicFields?.["monte-carlo"]?.beta, )} value={formData.dynamicFields?.["monte-carlo"]?.beta} onChange={(evt) => @@ -1108,7 +1090,7 @@ export const ExperimentModal: FC<{ min={0} label="SHAPE" className={getErrorClassname( - !!formErrors?.dynamicFields?.["monte-carlo"]?.shape + !!formErrors?.dynamicFields?.["monte-carlo"]?.shape, )} value={formData.dynamicFields?.["monte-carlo"]?.shape} onChange={(evt) => @@ -1122,7 +1104,7 @@ export const ExperimentModal: FC<{ min={0} label="SCALE" className={getErrorClassname( - !!formErrors?.dynamicFields?.["monte-carlo"]?.scale + !!formErrors?.dynamicFields?.["monte-carlo"]?.scale, )} value={formData.dynamicFields?.["monte-carlo"]?.scale} onChange={(evt) => @@ -1140,7 +1122,7 @@ export const ExperimentModal: FC<{ onChange("group.steps", evt.target.value)} @@ -1150,7 +1132,7 @@ export const ExperimentModal: FC<{ isMulti label="RUNS" className={getErrorClassname( - !!formErrors?.dynamicFields?.group?.runs + !!formErrors?.dynamicFields?.group?.runs, )} options={ experimentTitlesMinusGroupsAndMultiparameterAsOptions @@ -1159,7 +1141,7 @@ export const ExperimentModal: FC<{ onChange={(selectedOptions) => { onChange( "group.runs", - selectedOptions === null ? [] : selectedOptions + selectedOptions === null ? [] : selectedOptions, ); }} data-testid="dropdown-group-runs" @@ -1172,7 +1154,7 @@ export const ExperimentModal: FC<{ @@ -1184,7 +1166,7 @@ export const ExperimentModal: FC<{ isMulti label="RUNS" className={getErrorClassname( - !!formErrors?.dynamicFields?.multiparameter?.runs + !!formErrors?.dynamicFields?.multiparameter?.runs, )} options={ experimentTitlesMinusGroupsAndMultiparameterAsOptions @@ -1193,7 +1175,7 @@ export const ExperimentModal: FC<{ onChange={(selectedOptions) => { onChange( "multiparameter.runs", - selectedOptions === null ? [] : selectedOptions + selectedOptions === null ? [] : selectedOptions, ); }} data-testid="dropdown-multiparameter-runs" @@ -1214,18 +1196,18 @@ export const ExperimentModal: FC<{ step={1} label="Max Runs" className={getErrorClassname( - !!formErrors?.dynamicFields?.optimization?.maxRuns + !!formErrors?.dynamicFields?.optimization?.maxRuns, )} value={formData.dynamicFields?.optimization?.maxRuns} onChange={(evt) => onChange( "optimization.maxRuns", - parseInt(evt.target.value, 10) + parseInt(evt.target.value, 10), ) } // @todo this casting shouldn't be necessary errorMessage={ - formErrors.dynamicFields?.optimization?.maxRuns! + formErrors.dynamicFields?.optimization?.maxRuns } /> onChange( "optimization.minSteps", - parseInt(evt.target.value, 10) + parseInt(evt.target.value, 10), ) } // @todo this casting shouldn't be necessary errorMessage={ - formErrors.dynamicFields?.optimization?.minSteps! + formErrors.dynamicFields?.optimization?.minSteps } /> onChange( "optimization.maxSteps", - parseInt(evt.target.value, 10) + parseInt(evt.target.value, 10), ) } /> @@ -1268,7 +1250,7 @@ export const ExperimentModal: FC<{ label="Metric" options={metricOptions} className={getErrorClassname( - !!formErrors?.dynamicFields?.optimization?.metricName + !!formErrors?.dynamicFields?.optimization?.metricName, )} value={ formData.dynamicFields?.[ExperimentTypes.optimization] @@ -1285,7 +1267,8 @@ export const ExperimentModal: FC<{ isSearchable={false} label="Metric Objective" className={getErrorClassname( - !!formErrors?.dynamicFields?.optimization?.metricObjective + !!formErrors?.dynamicFields?.optimization + ?.metricObjective, )} options={optimizationMetricObjectiveOptions} value={ @@ -1341,7 +1324,7 @@ export const ExperimentModal: FC<{ onChange={(evt) => onChange( `optimization.fields.${idx}.name`, - evt.target.value + evt.target.value, ) } required @@ -1353,13 +1336,13 @@ export const ExperimentModal: FC<{ className={getErrorClassname( !!formErrors?.dynamicFields?.optimization?.fields?.[ idx - ]?.value + ]?.value, )} value={field.value} onChange={(evt) => { onChange( `optimization.fields.${idx}.value`, - evt.target.value + evt.target.value, ); }} placeholder="Value" @@ -1376,7 +1359,7 @@ export const ExperimentModal: FC<{ onClick={(evt) => { evt.preventDefault(); const clone: typeof formData = JSON.parse( - JSON.stringify(formData) + JSON.stringify(formData), ); clone.dynamicFields[ ExperimentTypes.optimization @@ -1400,7 +1383,7 @@ export const ExperimentModal: FC<{ onClick={(evt) => { evt.preventDefault(); const clone: typeof formData = JSON.parse( - JSON.stringify(formData) + JSON.stringify(formData), ); const fields = clone.dynamicFields[ExperimentTypes.optimization]?.fields ?? @@ -1408,10 +1391,10 @@ export const ExperimentModal: FC<{ fields.push(optimizationFieldTemplate()); setFormData(clone); - setImmediate(() => { + setTimeout(() => { document .querySelector( - `[name="fields.${fields.length - 1}.name"]` + `[name="fields.${fields.length - 1}.name"]`, ) ?.focus(); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/Experiments/ExperimentTypeTooltip.tsx b/apps/sim-core/packages/core/src/components/Modal/Experiments/ExperimentTypeTooltip.tsx index 7c5f714..ba1bc3a 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Experiments/ExperimentTypeTooltip.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Experiments/ExperimentTypeTooltip.tsx @@ -9,8 +9,10 @@ const BASE_DOCS_URL = const BASE_REGULAR_EXP_URL = `${BASE_DOCS_URL}experiment-types`; -interface ExperimentTypeHints - extends Record {} +type ExperimentTypeHints = Record< + ExperimentTypes, + { description: string; docsUrl: string } +>; const EXPERIMENT_TYPE_HINTS: ExperimentTypeHints = { values: { @@ -53,7 +55,11 @@ export const ExperimentTypeTooltip: FC<{ type: ExperimentTypes }> = ({ type, }) => (
    - + = ({ {EXPERIMENT_TYPE_HINTS[type].description}

    - + Read more.
    diff --git a/apps/sim-core/packages/core/src/components/Modal/Experiments/types.ts b/apps/sim-core/packages/core/src/components/Modal/Experiments/types.ts index 14d4a57..7f24993 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Experiments/types.ts +++ b/apps/sim-core/packages/core/src/components/Modal/Experiments/types.ts @@ -20,48 +20,48 @@ export enum DistributionTypes { gamma = "gamma", } -export type FormDataDynamicFieldValuesType = { +export interface FormDataDynamicFieldValuesType { steps: number; field: ReactSelectOption; values: string; -}; -export type FormDataDynamicFieldValuesErrorsType = { +} +export interface FormDataDynamicFieldValuesErrorsType { steps?: string; field?: string; values?: string; -}; +} -export type FormDataDynamicFieldLinspaceType = { +export interface FormDataDynamicFieldLinspaceType { steps: number; field: ReactSelectOption; start: number; stop: number; samples: number; -}; -export type FormDataDynamicFieldLinspaceErrorsType = { +} +export interface FormDataDynamicFieldLinspaceErrorsType { steps?: string; field?: string; start?: string; stop?: string; samples?: string; -}; +} -export type FormDataDynamicFieldArangeType = { +export interface FormDataDynamicFieldArangeType { steps: number; field: ReactSelectOption; start: number; stop: number; increment: number; -}; -export type FormDataDynamicFieldArangeErrorsType = { +} +export interface FormDataDynamicFieldArangeErrorsType { steps?: string; field?: string; start?: string; stop?: string; increment?: string; -}; +} -export type FormDataDynamicFieldMonteCarloType = { +export interface FormDataDynamicFieldMonteCarloType { steps: number; field: ReactSelectOption; samples: number; @@ -75,8 +75,8 @@ export type FormDataDynamicFieldMonteCarloType = { beta?: number; shape?: number; scale?: number; -}; -export type FormDataDynamicFieldMonteCarloErrorsType = { +} +export interface FormDataDynamicFieldMonteCarloErrorsType { steps?: string; field?: string; samples?: string; @@ -90,43 +90,43 @@ export type FormDataDynamicFieldMonteCarloErrorsType = { beta?: string; shape?: string; scale?: string; -}; +} -export type FormDataDynamicFieldGroupType = { +export interface FormDataDynamicFieldGroupType { steps: number; runs: ReactSelectOption[] | null; -}; -export type FormDataDynamicFieldGroupErrorsType = { +} +export interface FormDataDynamicFieldGroupErrorsType { steps?: string; runs?: string; -}; +} -export type FormDataDynamicFieldMultiparameterType = { +export interface FormDataDynamicFieldMultiparameterType { steps: number; runs: ReactSelectOption[] | null; // Used for react-select multi item -}; -export type FormDataDynamicFieldMultiparameterErrorsType = { +} +export interface FormDataDynamicFieldMultiparameterErrorsType { steps?: string; runs?: string; -}; +} export enum FormDataDynamicFieldOptimizationMetricObjective { min = "min", max = "max", } -export type FormDataDynamicFieldOptimizationFieldType = { +export interface FormDataDynamicFieldOptimizationFieldType { name: string; value: string; uuid: string; -}; -export type FormDataDynamicFieldOptimizationFieldErrorsType = { +} +export interface FormDataDynamicFieldOptimizationFieldErrorsType { name?: string; value?: string; uuid?: string; -}; +} -export type FormDataDynamicFieldOptimizationType = { +export interface FormDataDynamicFieldOptimizationType { maxRuns: number; minSteps: number; maxSteps: number; @@ -136,17 +136,17 @@ export type FormDataDynamicFieldOptimizationType = { label: string; }; fields: FormDataDynamicFieldOptimizationFieldType[]; -}; -export type FormDataDynamicFieldOptimizationErrorsType = { +} +export interface FormDataDynamicFieldOptimizationErrorsType { maxRuns?: string; minSteps?: string; maxSteps?: string; metricName?: string; metricObjective?: string; fields?: FormDataDynamicFieldOptimizationFieldErrorsType[]; -}; +} -export type FormDataType = { +export interface FormDataType { experimentTitle: string; experimentType: ReactSelectOption; // ReactSelectOption | string => Used for react-select single item @@ -159,7 +159,7 @@ export type FormDataType = { [ExperimentTypes.multiparameter]?: FormDataDynamicFieldMultiparameterType; [ExperimentTypes.optimization]?: FormDataDynamicFieldOptimizationType; }; -}; +} export type RawExperimentOptimizationFieldValue = | { range: string } @@ -184,7 +184,7 @@ export type RawExperimentOptimizationType = Omit< * * @todo fix this */ -export type RawExperimentType = { +export interface RawExperimentType { experimentTitle: string; experimentType: string; dynamicFields: { @@ -206,9 +206,9 @@ export type RawExperimentType = { }; optimization?: RawExperimentOptimizationType; }; -}; +} -export type DynamicFieldsErrorsType = { +export interface DynamicFieldsErrorsType { [ExperimentTypes.values]?: FormDataDynamicFieldValuesErrorsType; [ExperimentTypes.linspace]?: FormDataDynamicFieldLinspaceErrorsType; [ExperimentTypes.arange]?: FormDataDynamicFieldArangeErrorsType; @@ -216,19 +216,19 @@ export type DynamicFieldsErrorsType = { [ExperimentTypes.group]?: FormDataDynamicFieldGroupErrorsType; [ExperimentTypes.multiparameter]?: FormDataDynamicFieldMultiparameterErrorsType; [ExperimentTypes.optimization]?: FormDataDynamicFieldOptimizationErrorsType; -}; +} -export type FormErrorsType = { +export interface FormErrorsType { experimentTitle?: string; dynamicFields?: DynamicFieldsErrorsType; -}; +} export type AllFormDataTypeDynamicFieldsType = Required< FormDataType["dynamicFields"] >[keyof FormDataType["dynamicFields"]]; -export type ParseError = { +export interface ParseError { msg?: string; -}; +} export type ParseResult = Result; diff --git a/apps/sim-core/packages/core/src/components/Modal/Experiments/utils.tsx b/apps/sim-core/packages/core/src/components/Modal/Experiments/utils.tsx index 3dc59da..2be50d0 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Experiments/utils.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Experiments/utils.tsx @@ -13,10 +13,10 @@ export const flattenObjectKeysIntoString = (obj: any): any => isPlainObject(obj[key]) ? [key].concat( flattenObjectKeysIntoString(obj[key]).map( - (innerKey: string) => `${key}.${innerKey}` - ) + (innerKey: string) => `${key}.${innerKey}`, + ), ) - : [key] + : [key], ); export const getErrorClassname = (field?: boolean): string => { @@ -24,7 +24,7 @@ export const getErrorClassname = (field?: boolean): string => { }; export const convertToReactSelectOption = ( - value?: string + value?: string, ): ReactSelectOption => ({ label: value ?? "", value: value ?? "", @@ -62,7 +62,7 @@ export const errorsTypeHasError = (errors: FormErrorsType): boolean => { }; export const formErrorsTypeFromDataType = ( - formData: FormDataType + formData: FormDataType, ): FormErrorsType => { let experimentTitle = undefined; if (!formData.experimentTitle) { diff --git a/apps/sim-core/packages/core/src/components/Modal/Experiments/valuesParser.spec.ts b/apps/sim-core/packages/core/src/components/Modal/Experiments/valuesParser.spec.ts index a7c9587..0344e7b 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Experiments/valuesParser.spec.ts +++ b/apps/sim-core/packages/core/src/components/Modal/Experiments/valuesParser.spec.ts @@ -31,8 +31,8 @@ describe("valuesParser JSON", () => { test("complex with commas", () => expect( parseValuesFromInput( - ' abc, 123abc, [a, b, c], abc123, 123, "123", "abc", {"a": [1, 2, 3, "f", c, {a: abcv32}]}, 1, "\\"test\\""' - ) + ' abc, 123abc, [a, b, c], abc123, 123, "123", "abc", {"a": [1, 2, 3, "f", c, {a: abcv32}]}, 1, "\\"test\\""', + ), ).toEqual( ok([ "abc", @@ -45,7 +45,7 @@ describe("valuesParser JSON", () => { { a: [1, 2, 3, "f", "c", { a: "abcv32" }] }, 1, '"test"', - ]) + ]), )); }); @@ -71,9 +71,9 @@ test("valuesParser top-level resolver idDirectlyAfterNumber", () => test("valuesParser inverse soundness", () => { const parsed = parseValuesFromInput( - ' abc, 123abc, [a, b, c], abc123, 123, "123", "abc", {"a": [1, 2, 3, "f", c, {a: abcv32}]}, 1, "\\"test\\""' + ' abc, 123abc, [a, b, c], abc123, 123, "123", "abc", {"a": [1, 2, 3, "f", c, {a: abcv32}]}, 1, "\\"test\\""', ); expect(parsed).toEqual( - parseValuesFromInput(serializeParsedValues(parsed.unwrapOr([]))) + parseValuesFromInput(serializeParsedValues(parsed.unwrapOr([]))), ); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/Experiments/valuesParser.ts b/apps/sim-core/packages/core/src/components/Modal/Experiments/valuesParser.ts index 1cffac1..2f5b8a1 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Experiments/valuesParser.ts +++ b/apps/sim-core/packages/core/src/components/Modal/Experiments/valuesParser.ts @@ -18,7 +18,7 @@ const modifier = { const wrapSubstringInQuotes = ( input: string, from: number, - to: number + to: number, ): string => { const checkedMin = Math.min(from, to, input.length); const checkedMax = Math.max(from, to, 0); @@ -33,14 +33,14 @@ const wrapSubstringInQuotes = ( const numberMatch = /([+-]?\d+(?:\.\d*)?|(?:\.\d+))/; const numberPat = new RegExp( - /^\s*/.source + numberMatch.source + /\s*$/.source + /^\s*/.source + numberMatch.source + /\s*$/.source, ); const rangePat = new RegExp( /^\s*/.source + numberMatch.source + /\s*-\s*/.source + numberMatch.source + - /\s*$/.source + /\s*$/.source, ); const isNumber = (value: string): boolean => numberPat.test(value); export const isRange = (value: string): boolean => rangePat.test(value); @@ -89,17 +89,17 @@ const specialTransformers = { case "ArrayExpression": node.elements.forEach((element: any) => gathered.push( - ...specialTransformers._gatherIndentifierRanges(element) - ) + ...specialTransformers._gatherIndentifierRanges(element), + ), ); break; case "ObjectExpression": node.properties.forEach((property: any) => { gathered.push( - ...specialTransformers._gatherIndentifierRanges(property.key) + ...specialTransformers._gatherIndentifierRanges(property.key), ); gathered.push( - ...specialTransformers._gatherIndentifierRanges(property.value) + ...specialTransformers._gatherIndentifierRanges(property.value), ); }); break; @@ -115,7 +115,9 @@ const convertParsedValueFromInput = (value: string): ParseResult => { try { const obj = JSON.parse(value); return ok(obj); - } catch (error) {} + } catch (error) { + // Hide parsing errors. + } return ok(value.trim()); }; @@ -125,6 +127,7 @@ const parseValues = (values: string): ParseResult => { let modified = modifier.modify(values); let parsed: any[]; let remainingRetries = 100; + // eslint-disable-next-line no-constant-condition while (true) { try { parsed = (Parser.parse(modified) as any).body[0].expression.expressions; @@ -132,7 +135,7 @@ const parseValues = (values: string): ParseResult => { } catch (error) { if (remainingRetries === 0) { console.warn( - `Exceeded number of retries for parsing values: ${values}` + `Exceeded number of retries for parsing values: ${values}`, ); return err({ msg: "Invalid element data" }); } @@ -150,7 +153,7 @@ const parseValues = (values: string): ParseResult => { const modPos = (error as any).pos as number; const position = modPos - 1; // Account for wrap return err({ - msg: `Invalid value at character \'${modified[modPos]}\' [${position}]`, + msg: `Invalid value at character '${modified[modPos]}' [${position}]`, }); } @@ -160,15 +163,15 @@ const parseValues = (values: string): ParseResult => { const mappedModified = parsed.map((value: any) => specialTransformers.stringifyIdentifiers( - modified.slice(value.start, value.end) - ) + modified.slice(value.start, value.end), + ), ); return ok(modifier.unmodifyExpressionList(mappedModified)); }; export const parseValuesFromInput = (values: string): ParseResult => parseValues(values).andThen((arr) => - combine(arr.map(convertParsedValueFromInput)) + combine(arr.map(convertParsedValueFromInput)), ); export const serializeParsedValues = (values: any[]): string => diff --git a/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/ModalFormEntryDropdown.spec.tsx b/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/ModalFormEntryDropdown.spec.tsx index ffa5ee3..ebe5bbf 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/ModalFormEntryDropdown.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/ModalFormEntryDropdown.spec.tsx @@ -12,7 +12,7 @@ it("renders without crashing", () => { value={undefined} onChange={() => {}} />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useKeywords.ts b/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useKeywords.ts index b23bd9b..afbb61f 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useKeywords.ts +++ b/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useKeywords.ts @@ -15,15 +15,15 @@ const keywordToOption: FunctionN<[Keyword], ReactSelectOption> = ({ export const useKeywords = ( keywords?: Keyword[], - existingKeywords: string[] = [] + existingKeywords: string[] = [], ): [ ReactSelectOption[], ReactSelectOption[], - (newOptions: ReactSelectOption[]) => void + (newOptions: ReactSelectOption[]) => void, ] => { const options = keywords?.map(keywordToOption) ?? []; const [selected, setSelected] = useState( - options.filter((option) => existingKeywords.includes(option.value)) + options.filter((option) => existingKeywords.includes(option.value)), ); return [options, selected, setSelected]; diff --git a/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useLicenses.ts b/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useLicenses.ts index ffe5d65..afb1642 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useLicenses.ts +++ b/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useLicenses.ts @@ -15,11 +15,11 @@ const licenceToOption: FunctionN<[License], ReactSelectOption> = ({ export const useLicenses = ( licenses?: License[], - setDefaultLicense?: Pick | null + setDefaultLicense?: Pick | null, ): [ ReactSelectOption[], ReactSelectOption, - (option: ReactSelectOption) => void + (option: ReactSelectOption) => void, ] => { const options = licenses?.map(licenceToOption) ?? []; const defaultLicense = diff --git a/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/usePublishAs.ts b/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/usePublishAs.ts index 99e1e43..fed2854 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/usePublishAs.ts +++ b/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/usePublishAs.ts @@ -16,11 +16,11 @@ const publishAsToOptions: FunctionN<[Org], ReactSelectOption> = ({ export const usePublishAs = ( publishAs?: Org[], - currentNamespace?: string + currentNamespace?: string, ): [ ReactSelectOption[], ReactSelectOption, - (setOrg: ReactSelectOption) => void + (setOrg: ReactSelectOption) => void, ] => { const defaultOrg = (currentNamespace @@ -29,7 +29,7 @@ export const usePublishAs = ( const options = publishAs?.map(publishAsToOptions) ?? []; const defaultValue = options?.find( - (option) => option.subLabel === defaultOrg?.shortname + (option) => option.subLabel === defaultOrg?.shortname, ); if (!defaultValue) { diff --git a/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useSubjects.ts b/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useSubjects.ts index 1a4275b..adc3380 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useSubjects.ts +++ b/apps/sim-core/packages/core/src/components/Modal/FormEntry/Dropdown/hooks/useSubjects.ts @@ -15,11 +15,11 @@ const subjectsToOptions: FunctionN<[Subject], ReactSelectOption> = ({ }); export const useSubjects = ( - subjects?: Subject[] + subjects?: Subject[], ): [ ReactSelectOption[], ReactSelectOption[], - (newSubjects: ReactSelectOption[]) => void + (newSubjects: ReactSelectOption[]) => void, ] => { const options = subjects?.map(subjectsToOptions) ?? []; const [selected, setSelected] = useState([]); diff --git a/apps/sim-core/packages/core/src/components/Modal/FormEntry/ModalFormEntry.tsx b/apps/sim-core/packages/core/src/components/Modal/FormEntry/ModalFormEntry.tsx index 152b700..76cd14b 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FormEntry/ModalFormEntry.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/FormEntry/ModalFormEntry.tsx @@ -8,14 +8,14 @@ import { ShrinkWrap } from "../../ShrinkWrap/ShrinkWrap"; import "./ModalFormEntry.css"; -export type ModalFormEntryProps = { +export interface ModalFormEntryProps { label?: ReactNode; optional?: boolean; flex?: boolean; error?: string; errorInline?: boolean; className?: string; -}; +} export const ModalFormEntry: FC = ({ label, diff --git a/apps/sim-core/packages/core/src/components/Modal/FormEntry/PublishAs/ModalFormEntryPublishAs.spec.tsx b/apps/sim-core/packages/core/src/components/Modal/FormEntry/PublishAs/ModalFormEntryPublishAs.spec.tsx index 187698c..3ecd0e6 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FormEntry/PublishAs/ModalFormEntryPublishAs.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/FormEntry/PublishAs/ModalFormEntryPublishAs.spec.tsx @@ -18,7 +18,7 @@ it("renders without crashing", () => { selectedPublishAs={user} setSelectedPublishAs={() => {}} />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/FormEntry/PublishAs/ModalFormEntryPublishAs.tsx b/apps/sim-core/packages/core/src/components/Modal/FormEntry/PublishAs/ModalFormEntryPublishAs.tsx index 3f72c74..7d8618a 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FormEntry/PublishAs/ModalFormEntryPublishAs.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/FormEntry/PublishAs/ModalFormEntryPublishAs.tsx @@ -6,14 +6,14 @@ import type { ReactSelectOption } from "../../../Dropdown/types"; import "./ModalFormEntryPublishAs.css"; -type ModalFormEntryPublishAsProps = { +interface ModalFormEntryPublishAsProps { buttonLabel: string; publishAsOptions: ReactSelectOption[]; selectedPublishAs: ReactSelectOption; setSelectedPublishAs: (publishAs: ReactSelectOption) => void; disabled?: boolean; submitDisabled?: boolean; -}; +} export const ModalFormEntryPublishAs: FC = ({ buttonLabel, diff --git a/apps/sim-core/packages/core/src/components/Modal/FormEntry/RequiredText/ModalFormEntryRequiredText.spec.tsx b/apps/sim-core/packages/core/src/components/Modal/FormEntry/RequiredText/ModalFormEntryRequiredText.spec.tsx index 85d8482..de4354c 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FormEntry/RequiredText/ModalFormEntryRequiredText.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/FormEntry/RequiredText/ModalFormEntryRequiredText.spec.tsx @@ -14,7 +14,7 @@ it("renders without crashing", () => { onChange={() => undefined} onBlur={() => undefined} />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/FormEntry/RequiredText/ModalFormEntryRequiredText.tsx b/apps/sim-core/packages/core/src/components/Modal/FormEntry/RequiredText/ModalFormEntryRequiredText.tsx index f94419b..f8ef7d8 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FormEntry/RequiredText/ModalFormEntryRequiredText.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/FormEntry/RequiredText/ModalFormEntryRequiredText.tsx @@ -19,5 +19,5 @@ export const ModalFormEntryRequiredText: ForwardRefExoticComponent< - ) + ), ); diff --git a/apps/sim-core/packages/core/src/components/Modal/FullScreen/ModalFullScreen.tsx b/apps/sim-core/packages/core/src/components/Modal/FullScreen/ModalFullScreen.tsx index d42e165..4e6eb08 100644 --- a/apps/sim-core/packages/core/src/components/Modal/FullScreen/ModalFullScreen.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/FullScreen/ModalFullScreen.tsx @@ -19,12 +19,12 @@ export const ModalFullScreen: FC = ({ onClose={onClose} backdropClassName={classNames( backdropClassName, - `ModalFullScreen-backdrop--${theme}` + `ModalFullScreen-backdrop--${theme}`, )} modalClassName={classNames( "ModalFullScreen", `ModalFullScreen--${theme}`, - modalClassName + modalClassName, )} backdropExit={false} > diff --git a/apps/sim-core/packages/core/src/components/Modal/Modal.tsx b/apps/sim-core/packages/core/src/components/Modal/Modal.tsx index e0a95ab..7990507 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Modal.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Modal.tsx @@ -9,7 +9,7 @@ import classNames from "classnames"; import "./Modal.css"; -export type ModalProps = { +export interface ModalProps { onClose?: () => void; modalClassName?: string; backdropClassName?: string; @@ -18,7 +18,7 @@ export type ModalProps = { containerClassName?: string; children?: ReactNode | null; onClick?: HTMLProps["onClick"]; -}; +} export const Modal = forwardRef( ( @@ -32,17 +32,16 @@ export const Modal = forwardRef( containerClassName, onClick, }, - ref + ref, ) => { + function handler(evt: KeyboardEvent) { + if (evt.key === "Escape") { + evt.preventDefault(); + onClose?.(); + } + } useEffect(() => { if (esc) { - function handler(evt: KeyboardEvent) { - if (evt.key === "Escape") { - evt.preventDefault(); - onClose?.(); - } - } - window.addEventListener("keydown", handler); return () => { @@ -81,5 +80,5 @@ export const Modal = forwardRef(
    ); - } + }, ); diff --git a/apps/sim-core/packages/core/src/components/Modal/NameBehavior/ModalNameBehavior.spec.tsx b/apps/sim-core/packages/core/src/components/Modal/NameBehavior/ModalNameBehavior.spec.tsx index ff3d71a..65a8d54 100644 --- a/apps/sim-core/packages/core/src/components/Modal/NameBehavior/ModalNameBehavior.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/NameBehavior/ModalNameBehavior.spec.tsx @@ -18,7 +18,7 @@ it("renders without crashing", () => { action="Create" placeholder="Name your new file" />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/NameBehavior/ModalNameBehavior.tsx b/apps/sim-core/packages/core/src/components/Modal/NameBehavior/ModalNameBehavior.tsx index 4d288d1..00ed7ae 100644 --- a/apps/sim-core/packages/core/src/components/Modal/NameBehavior/ModalNameBehavior.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/NameBehavior/ModalNameBehavior.tsx @@ -19,7 +19,7 @@ import { useResizeObserver } from "../../../hooks/useResizeObserver/useResizeObs import "./ModalNameBehavior.css"; -type ModalNameBehaviorProps = { +interface ModalNameBehaviorProps { errorMessage: string | null; languageOptions: ReactSelectOption[]; name: string; @@ -30,7 +30,7 @@ type ModalNameBehaviorProps = { onSelectedLanguageChange: (language: ReactSelectOption) => void; action: string; placeholder: string; -}; +} export const ModalNameBehavior: FC = ({ onSubmit, @@ -64,7 +64,7 @@ export const ModalNameBehavior: FC = ({ const errorRect = errorRef.current?.getBoundingClientRect(); setTooltipError( - inputRect.width + (errorRect?.width ?? 0) > window.innerWidth * 0.7 + inputRect.width + (errorRect?.width ?? 0) > window.innerWidth * 0.7, ); }, []); @@ -88,7 +88,7 @@ export const ModalNameBehavior: FC = ({ errorRef.current = node; setErrorObserver(node); }, - [setErrorObserver] + [setErrorObserver], ); return ( @@ -142,7 +142,7 @@ export const ModalNameBehavior: FC = ({ ); }; -// // @ts-ignore +// // @ts-expect-error // ModalNameBehavior.whyDidYouRender = { // customName: "ModalNameBehavior" // }; diff --git a/apps/sim-core/packages/core/src/components/Modal/NewDataset/ModalNewDataset.tsx b/apps/sim-core/packages/core/src/components/Modal/NewDataset/ModalNewDataset.tsx index f4834d0..58b74a0 100644 --- a/apps/sim-core/packages/core/src/components/Modal/NewDataset/ModalNewDataset.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/NewDataset/ModalNewDataset.tsx @@ -15,7 +15,7 @@ export const ModalNewDataset: FC<{ onClose: VoidFunction }> = ({ onClose }) => { const dispatch = useDispatch(); const [state, setState] = useState<"uploading" | "failed" | "initial">( - "initial" + "initial", ); const onDrop = useCallback( @@ -29,6 +29,7 @@ export const ModalNewDataset: FC<{ onClose: VoidFunction }> = ({ onClose }) => { setState("uploading"); try { + //@ts-expect-error redux problems await dispatch(createDataset(file)); onClose(); } catch (err) { @@ -36,7 +37,7 @@ export const ModalNewDataset: FC<{ onClose: VoidFunction }> = ({ onClose }) => { setState("failed"); } }, - [onClose, dispatch] + [onClose, dispatch], ); const uploading = state === "uploading"; diff --git a/apps/sim-core/packages/core/src/components/Modal/NewProject/ModalNewProject.css b/apps/sim-core/packages/core/src/components/Modal/NewProject/ModalNewProject.css index da6bbbb..5128e8f 100644 --- a/apps/sim-core/packages/core/src/components/Modal/NewProject/ModalNewProject.css +++ b/apps/sim-core/packages/core/src/components/Modal/NewProject/ModalNewProject.css @@ -10,7 +10,9 @@ --error-color: var(--theme-red); } -.ModalNewProject__Field:not(:hover):not(.ModalNewProject__Field--focused):not(.ModalNewProject__Field--showTip) +.ModalNewProject__Field:not(:hover):not(.ModalNewProject__Field--focused):not( + .ModalNewProject__Field--showTip + ) .ModalNewProject__Field__Tip:not(.ModalNewProject__Field__Tip--withError) { visibility: hidden; } diff --git a/apps/sim-core/packages/core/src/components/Modal/NewProject/ModalNewProject.tsx b/apps/sim-core/packages/core/src/components/Modal/NewProject/ModalNewProject.tsx index d6b6fb0..96c3304 100644 --- a/apps/sim-core/packages/core/src/components/Modal/NewProject/ModalNewProject.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/NewProject/ModalNewProject.tsx @@ -87,7 +87,7 @@ export const ModalNewProject: FC<{ validate: validateName, }); }, - [register] + [register], ); useEffect(() => { @@ -98,7 +98,7 @@ export const ModalNewProject: FC<{ const safeOnCancel = useSafeOnClose( Object.keys(dirtyFields).length === 0, !isSubmitting, - onCancel + onCancel, ); const namespace = watch("namespace"); diff --git a/apps/sim-core/packages/core/src/components/Modal/NewProject/types.ts b/apps/sim-core/packages/core/src/components/Modal/NewProject/types.ts index 7eba791..48f924e 100644 --- a/apps/sim-core/packages/core/src/components/Modal/NewProject/types.ts +++ b/apps/sim-core/packages/core/src/components/Modal/NewProject/types.ts @@ -1,8 +1,8 @@ import { ProjectVisibility } from "../../../features/project/types"; -export type NewProjectModalValues = { +export interface NewProjectModalValues { name: string; path: string; namespace: string; visibility: ProjectVisibility; -}; +} diff --git a/apps/sim-core/packages/core/src/components/Modal/PrivateDependencies/ModalPrivateDependencies.spec.tsx b/apps/sim-core/packages/core/src/components/Modal/PrivateDependencies/ModalPrivateDependencies.spec.tsx index 83b1da6..353d571 100644 --- a/apps/sim-core/packages/core/src/components/Modal/PrivateDependencies/ModalPrivateDependencies.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/PrivateDependencies/ModalPrivateDependencies.spec.tsx @@ -10,13 +10,14 @@ import { store } from "../../../features/store"; it("renders without crashing", () => { const div = document.createElement("div"); + //@ts-expect-error redux problems store.dispatch(setProjectWithMeta(mockProject)); ReactDOM.render( {}} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/PrivateDependencies/ModalPrivateDependencies.tsx b/apps/sim-core/packages/core/src/components/Modal/PrivateDependencies/ModalPrivateDependencies.tsx index 4ac4383..c47168b 100644 --- a/apps/sim-core/packages/core/src/components/Modal/PrivateDependencies/ModalPrivateDependencies.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/PrivateDependencies/ModalPrivateDependencies.tsx @@ -51,6 +51,7 @@ export const ModalPrivateDependencies: FC<{ {dependency.path.formatted} @@ -65,6 +66,7 @@ export const ModalPrivateDependencies: FC<{ {makeCurrentProjectPrivateText} diff --git a/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseBehavior.tsx b/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseBehavior.tsx index 40af76d..ad86a17 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseBehavior.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseBehavior.tsx @@ -39,17 +39,17 @@ import { useOrgs } from "../NewProject/utils"; // actually want the `Option` component here const { Option } = components; -type FormInputs = { +interface FormInputs { name: string; path: string; description: string; -}; +} -type ModalPublishBehaviorToIndexProps = { +interface ModalPublishBehaviorToIndexProps { onHide: VoidFunction; data: ReleaseMeta; file: HcBehaviorFile; -}; +} export const ModalReleaseBehavior: FC = ({ onHide, @@ -81,12 +81,12 @@ export const ModalReleaseBehavior: FC = ({ /* KEYWORD OPTIONS */ const [keywordOptions, selectedKeywords, setSelectedKeywords] = useKeywords( - data?.keywords + data?.keywords, ); /* LICENSE OPTIONS */ const [licenseOptions, selectedLicense, setSelectedLicense] = useLicenses( - data?.licenses + data?.licenses, ); /* SUBJECT OPTIONS */ @@ -95,11 +95,8 @@ export const ModalReleaseBehavior: FC = ({ // ); /* PUBLISH AS OPTIONS */ - const [ - publishAsOptions, - selectedPublishAs, - setSelectedPublishAs, - ] = usePublishAs(orgs); + const [publishAsOptions, selectedPublishAs, setSelectedPublishAs] = + usePublishAs(orgs); const submitDisabled = toPublish.length === 0; @@ -111,6 +108,7 @@ export const ModalReleaseBehavior: FC = ({ try { await handleQueryCodeErrors(values, setError, async () => { const { forkedBehaviors } = await dispatch( + //@ts-expect-error redux problems forkAndReleaseBehaviors({ projectPath: project.pathWithNamespace, name: values.name, @@ -129,14 +127,14 @@ export const ModalReleaseBehavior: FC = ({ license: selectedLicense.value ?? "", // @todo allow for private behavior releases visibility: "public", - }) + }), ).then(unwrapResult); dispatch( displayToast({ kind: ToastKind.ReleaseBehaviorSuccess, data: forkedBehaviors, - }) + }), ); onHide(); diff --git a/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseChooseFiles.tsx b/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseChooseFiles.tsx index 832f43b..34711d0 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseChooseFiles.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseChooseFiles.tsx @@ -39,7 +39,7 @@ export const ModalReleaseChooseFiles: FC<{ const behaviorPath = behavior.path.formatted; const published = existingFiles.includes(behaviorPath); const toPublish = selectedFiles.some( - (behavior) => behavior.path.formatted === behaviorPath + (behavior) => behavior.path.formatted === behaviorPath, ); return ( @@ -55,8 +55,8 @@ export const ModalReleaseChooseFiles: FC<{ checked ? [...selectedFiles, behavior] : selectedFiles.filter( - (file) => file.path.formatted !== behaviorPath - ) + (file) => file.path.formatted !== behaviorPath, + ), ); }} /> diff --git a/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseCreate.tsx b/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseCreate.tsx index 21020f3..291ab48 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseCreate.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseCreate.tsx @@ -28,15 +28,15 @@ import { useFatalError } from "../../ErrorBoundary/ErrorBoundary"; // actually want the `Option` component here const { Option } = components; -type ModalCreateReleaseProps = { +interface ModalCreateReleaseProps { onClose: VoidFunction; data?: ReleaseMeta; -}; +} -type FormInputs = { +interface FormInputs { name: string; description: string; -}; +} export const ModalReleaseCreate: FC = ({ onClose, @@ -63,13 +63,13 @@ export const ModalReleaseCreate: FC = ({ /* KEYWORD OPTIONS */ const [keywordOptions, selectedKeywords, setSelectedKeywords] = useKeywords( data?.keywords, - project.keywords + project.keywords, ); /* LICENSE OPTIONS */ const [licenseOptions, selectedLicense, setSelectedLicense] = useLicenses( data?.licenses, - project.license + project.license, ); const onSubmit = async (values: FormInputs) => { @@ -85,7 +85,7 @@ export const ModalReleaseCreate: FC = ({ keywords: selectedKeywords.map((keyword) => keyword.value), license: selectedLicense.value ?? "", }, - }) + }), ); onClose(); diff --git a/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseUpdate.spec.tsx b/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseUpdate.spec.tsx index a1203aa..1885880 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseUpdate.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseUpdate.spec.tsx @@ -11,6 +11,7 @@ import { store } from "../../../features/store"; it("renders without crashing", () => { const div = document.createElement("div"); + //@ts-expect-error redux problems store.dispatch(setProjectWithMeta(mockProject)); ReactDOM.render( @@ -19,7 +20,7 @@ it("renders without crashing", () => { {}} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseUpdate.tsx b/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseUpdate.tsx index 04691d0..aa97eae 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseUpdate.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Release/ModalReleaseUpdate.tsx @@ -21,9 +21,9 @@ import { useFatalError } from "../../ErrorBoundary/ErrorBoundary"; import "./ModalReleaseUpdate.scss"; -type ModalReleaseUpdateProps = { +interface ModalReleaseUpdateProps { onClose: VoidFunction; -}; +} const parseVersion: (version: string) => [number, number, number] = (semver) => semver @@ -45,7 +45,7 @@ export const ModalReleaseUpdate: FC = ({ if (!project?.latestRelease) { throw new Error( - "Cannot update release for a project that has never been released" + "Cannot update release for a project that has never been released", ); } @@ -68,7 +68,7 @@ export const ModalReleaseUpdate: FC = ({ tag: selectedVersion, updateDescription: changeSummary, toPublish: toPublish.map((file) => file.path.formatted), - }) + }), ); onClose(); } catch (err) { diff --git a/apps/sim-core/packages/core/src/components/Modal/Release/VersionPicker/VersionPicker.spec.tsx b/apps/sim-core/packages/core/src/components/Modal/Release/VersionPicker/VersionPicker.spec.tsx index 9f00acf..d429844 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Release/VersionPicker/VersionPicker.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Release/VersionPicker/VersionPicker.spec.tsx @@ -13,7 +13,7 @@ it("renders without crashing", () => { selectedVersion="1.0.0" setSelectedVersion={() => {}} />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/Release/VersionPicker/VersionPicker.tsx b/apps/sim-core/packages/core/src/components/Modal/Release/VersionPicker/VersionPicker.tsx index 6c891a3..6e454f3 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Release/VersionPicker/VersionPicker.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Release/VersionPicker/VersionPicker.tsx @@ -4,13 +4,13 @@ import { RadioInput } from "../../../Inputs/Radio/RadioInput"; import "./VersionPicker.css"; -type VersionPickerProps = { +interface VersionPickerProps { nextMajorVersion: string; nextMinorVersion: string; nextPatchVersion: string; selectedVersion: string; setSelectedVersion: Dispatch>; -}; +} type VersionWithHint = [string, string, string]; @@ -22,11 +22,13 @@ export const VersionPicker: FC = ({ setSelectedVersion, }) => (
      - {([ - [nextMajorVersion, "major", "Major: breaking changes introduced"], - [nextMinorVersion, "minor", "Minor: for backward-compatible changes"], - [nextPatchVersion, "patch", "Patch: for backward-compatible bug fixes"], - ] as VersionWithHint[]).map(([version, bump, hint]) => ( + {( + [ + [nextMajorVersion, "major", "Major: breaking changes introduced"], + [nextMinorVersion, "minor", "Minor: for backward-compatible changes"], + [nextPatchVersion, "patch", "Patch: for backward-compatible bug fixes"], + ] as VersionWithHint[] + ).map(([version, bump, hint]) => (
    1. { const { requireAccessCode, accessCode, changedParams, baseUrl } = params; @@ -48,7 +48,7 @@ const generateUrl = (params: UrlParams) => { return urljoin( window.location.origin, - `${baseUrl}${searchParamString.length ? `?${searchParamString}` : ""}` + `${baseUrl}${searchParamString.length ? `?${searchParamString}` : ""}`, ); }; @@ -57,7 +57,7 @@ const useTargetVisibility = (project: SimulationProject) => { projectIsPrivate(project) && !!project.access?.code; const defaultTargetVisibility = privateSharingDisabled ? "public" : "private"; const [targetVisibility, setTargetVisibility] = useState( - defaultTargetVisibility + defaultTargetVisibility, ); if (privateSharingDisabled && targetVisibility !== defaultTargetVisibility) { @@ -84,19 +84,17 @@ export const ModalShareByLink: FC<{ onSelectedReleaseChange, hasReleases, }) => { + //@ts-expect-error Genuine type error here, please fix. const { params, setParams, changedParams } = useParams(defaultParams); const { accessCode, requestAccessCode } = useRequestAccessCode( project, - "Read" + "Read", ); const isPrivate = projectIsPrivate(project); - const [ - targetVisibility, - setTargetVisibility, - privateSharingDisabled, - ] = useTargetVisibility(project); + const [targetVisibility, setTargetVisibility, privateSharingDisabled] = + useTargetVisibility(project); const urlParams: UrlParams = { changedParams, @@ -164,6 +162,7 @@ export const ModalShareByLink: FC<{ ) : null} diff --git a/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareEmbed.tsx b/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareEmbed.tsx index 497b5a5..2f22fe2 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareEmbed.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareEmbed.tsx @@ -22,7 +22,7 @@ const linkToBuild = getSafeQueryParams()?.forceRootEmbed !== "true" ? IS_DEV : false; const embedViewerTabs = viewerTabs.filter((tab) => - embeddableTabs.includes(tab.kind) + embeddableTabs.includes(tab.kind), ); const defaultParams: ModalShareViewsParams = { @@ -33,7 +33,7 @@ const iframeSrcCode = ( pathWithNamespace: string, ref: string, accessCode: string | null, - params: (readonly [string, string])[] + params: (readonly [string, string])[], ) => { const query: Record = { project: pathWithNamespace, @@ -47,9 +47,9 @@ const iframeSrcCode = ( return `\ `; }; @@ -68,15 +68,16 @@ export const ModalShareEmbed: FC<{ }) => { const { accessCode, requesting, requestAccessCode } = useRequestAccessCode( project, - "ReadEmbed" + "ReadEmbed", ); + //@ts-expect-error Genuine type error here, please fix. const { params, setParams, changedParams } = useParams(defaultParams); const value = iframeSrcCode( project.pathWithNamespace, selectedRelease, accessCode, - changedParams + changedParams, ); const isPrivate = projectIsPrivate(project); @@ -131,6 +132,7 @@ export const ModalShareEmbed: FC<{
      diff --git a/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareSelect.tsx b/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareSelect.tsx index 3fa7e57..293abe7 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareSelect.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareSelect.tsx @@ -15,5 +15,5 @@ export const ModalShareSelect = forwardRef( {...props} /> ); - } + }, ); diff --git a/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareViews.tsx b/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareViews.tsx index 0e79c78..4500966 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareViews.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Share/ModalShareViews.tsx @@ -17,10 +17,10 @@ const allViewsOptions = [ }, ]; -export type ModalShareViewsParams = { +export interface ModalShareViewsParams { view?: TabKind; tabs?: TabKind[] | null; -}; +} export const ModalShareViews: FC<{ params: ModalShareViewsParams; @@ -32,8 +32,8 @@ export const ModalShareViews: FC<{ !options || options.length === 0 ? allViewsOptions : options.length > 1 - ? options.filter((opt) => opt.value !== "all") - : options; + ? options.filter((opt) => opt.value !== "all") + : options; const tabs = mappedOptions.length === 1 && mappedOptions[0].value === "all" diff --git a/apps/sim-core/packages/core/src/components/Modal/Share/hooks.ts b/apps/sim-core/packages/core/src/components/Modal/Share/hooks.ts index aa35659..e1c9f87 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Share/hooks.ts +++ b/apps/sim-core/packages/core/src/components/Modal/Share/hooks.ts @@ -12,7 +12,7 @@ import { requestPrivateProjectAccessCode } from "../../../util/api/queries/reque export const useSelectableRelease = ( project: LinkableProject, access: ProjectAccess, - onError?: VoidFunction + onError?: VoidFunction, ) => { const [reducerState, dispatch] = useReducer( ( @@ -24,7 +24,7 @@ export const useSelectableRelease = ( }, action: | { type: "RESULTS"; payload: string[] } - | { type: "CHOOSE"; payload: string } + | { type: "CHOOSE"; payload: string }, ) => { switch (action.type) { case "RESULTS": @@ -48,7 +48,7 @@ export const useSelectableRelease = ( releases: [] as string[], selectedRelease: "stable", hasReleases: false, - } + }, ); const onErrorRef = useRef(onError); @@ -65,11 +65,11 @@ export const useSelectableRelease = ( project.pathWithNamespace, project.ref, access?.code, - abortController.signal + abortController.signal, ); dispatch({ type: "RESULTS", payload: releases }); } catch (err) { - if (err?.name !== "AbortError") { + if (err instanceof Error && err?.name !== "AbortError") { console.error(err); onErrorRef.current?.(); } @@ -92,14 +92,14 @@ export const useSelectableRelease = ( export const useRequestAccessCode = ( project: SimulationProject, - level: ProjectAccessCodeAccessType + level: ProjectAccessCodeAccessType, ) => { const [{ accessCode, requesting }, accessCodeDispatch] = useReducer( ( state: { accessCode: string | null; requesting: boolean }, action: | { type: "requesting" } - | { type: "requested"; result: string | null } + | { type: "requested"; result: string | null }, ) => { switch (action.type) { case "requesting": @@ -111,7 +111,7 @@ export const useRequestAccessCode = ( { accessCode: project.access?.code ?? null, requesting: false, - } + }, ); if (project.access?.code && !accessCode) { diff --git a/apps/sim-core/packages/core/src/components/Modal/Share/utils.ts b/apps/sim-core/packages/core/src/components/Modal/Share/utils.ts index 84bda1f..5b82b7a 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Share/utils.ts +++ b/apps/sim-core/packages/core/src/components/Modal/Share/utils.ts @@ -1,26 +1,28 @@ import { useState } from "react"; +import { TabKind } from "../../../features/viewer/enums"; -type ValidParamType = string | string[] | boolean; +type ValidParamType = string | string[] | boolean | TabKind; type TotalParamType = ValidParamType | null | undefined; export const useParams = >( - defaultParams: T + defaultParams: T, ) => { const [params, setParams] = useState(defaultParams); const changedParams = Object.entries(params) - .filter((pair: [string, ValidParamType | TotalParamType]): pair is [ - string, - ValidParamType - ] => { - const [key, value] = pair; + .filter( + ( + pair: [string, ValidParamType | TotalParamType], + ): pair is [string, ValidParamType] => { + const [key, value] = pair; - return ( - value !== undefined && - value !== null && - !!key && - defaultParams[key] !== value - ); - }) + return ( + value !== undefined && + value !== null && + !!key && + defaultParams[key] !== value + ); + }, + ) .map(([key, value]): [string, string] => [key, value.toString()]); return { params, setParams, changedParams }; diff --git a/apps/sim-core/packages/core/src/components/Modal/Signin/ModalSignin.css b/apps/sim-core/packages/core/src/components/Modal/Signin/ModalSignin.css index ee81b5a..ec52754 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Signin/ModalSignin.css +++ b/apps/sim-core/packages/core/src/components/Modal/Signin/ModalSignin.css @@ -50,7 +50,9 @@ color: inherit; text-decoration: inherit; border-bottom: 0.2rem solid var(--theme-blue); - transition: color 0.2s, border-color 0.3s; + transition: + color 0.2s, + border-color 0.3s; font-weight: 600; } diff --git a/apps/sim-core/packages/core/src/components/Modal/Signin/ModalSignin.tsx b/apps/sim-core/packages/core/src/components/Modal/Signin/ModalSignin.tsx index 73a716f..3b75f26 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Signin/ModalSignin.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Signin/ModalSignin.tsx @@ -26,6 +26,7 @@ export const ModalSignin: FC<{ onClose: VoidFunction; route: string }> = ({ const onMessage = async (message: any) => { if (message.origin === API_LOGIN_URL) { window.removeEventListener("message", onMessage, false); + //@ts-expect-error dispatch await dispatch(bootstrapApp()); } }; diff --git a/apps/sim-core/packages/core/src/components/Modal/Signup/ModalSignup.css b/apps/sim-core/packages/core/src/components/Modal/Signup/ModalSignup.css index d8a68a4..1fb07f3 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Signup/ModalSignup.css +++ b/apps/sim-core/packages/core/src/components/Modal/Signup/ModalSignup.css @@ -61,7 +61,9 @@ color: inherit; text-decoration: inherit; border-bottom: 0.2rem solid var(--theme-blue); - transition: color 0.2s, border-color 0.3s; + transition: + color 0.2s, + border-color 0.3s; font-weight: 600; } diff --git a/apps/sim-core/packages/core/src/components/Modal/Signup/ModalSignup.tsx b/apps/sim-core/packages/core/src/components/Modal/Signup/ModalSignup.tsx index 740d38b..76e8661 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Signup/ModalSignup.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Signup/ModalSignup.tsx @@ -53,11 +53,19 @@ export const ModalSignup: FC<{ onClose: VoidFunction; route: string }> = ({

      © HASH {year} By continuing, you agree to our{" "} - + Terms of Service {" "} and{" "} - + Privacy Policy . diff --git a/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplit.tsx b/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplit.tsx index 35407ce..392e6fc 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplit.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplit.tsx @@ -9,11 +9,11 @@ import "./ModalSplit.scss"; type ModalSplitOuterProps = ModalProps & { loading?: boolean }; -type ModalSplitInnerProps = { +interface ModalSplitInnerProps { top?: ReactNode | null; bottom?: ReactNode | null; innerClassName?: string; -}; +} export const ModalSplitOuter = forwardRef( ({ modalClassName, children, loading, onClose, ...props }, ref) => ( @@ -26,7 +26,7 @@ export const ModalSplitOuter = forwardRef( { "ModalSplit--loading": loading, }, - modalClassName + modalClassName, )} > {loading ? ( @@ -43,7 +43,7 @@ export const ModalSplitOuter = forwardRef(

      )} - ) + ), ); export const ModalSplitInner: FC = ({ diff --git a/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplitBottomSection.scss b/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplitBottomSection.scss index 7763e1a..ce89dec 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplitBottomSection.scss +++ b/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplitBottomSection.scss @@ -38,7 +38,9 @@ } } -.ModalSplitBottomSection:not(.ModalSplitBottomSection--divide):not(:last-child) { +.ModalSplitBottomSection:not(.ModalSplitBottomSection--divide):not( + :last-child + ) { padding-right: calc(var(--padding-horizontal) / 2); + .ModalSplitBottomSection { diff --git a/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplitBottomSection.tsx b/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplitBottomSection.tsx index dbc2c7d..5d4e68a 100644 --- a/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplitBottomSection.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/Split/ModalSplitBottomSection.tsx @@ -14,7 +14,7 @@ export const ModalSplitBottomSection = forwardRef< >( ( { className, children, small, scrollable, flex, divide = true, ...props }, - ref + ref, ) => (
      {children}
      - ) + ), ); diff --git a/apps/sim-core/packages/core/src/components/Modal/TwoColumn/ModalTwoColumn.spec.tsx b/apps/sim-core/packages/core/src/components/Modal/TwoColumn/ModalTwoColumn.spec.tsx index b61a0df..f0d6ce0 100644 --- a/apps/sim-core/packages/core/src/components/Modal/TwoColumn/ModalTwoColumn.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/TwoColumn/ModalTwoColumn.spec.tsx @@ -13,7 +13,7 @@ it("renders without crashing", () => { leftChildren={null} rightChildren={null} />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Modal/TwoColumn/ModalTwoColumn.tsx b/apps/sim-core/packages/core/src/components/Modal/TwoColumn/ModalTwoColumn.tsx index e98aa00..ebf46a3 100644 --- a/apps/sim-core/packages/core/src/components/Modal/TwoColumn/ModalTwoColumn.tsx +++ b/apps/sim-core/packages/core/src/components/Modal/TwoColumn/ModalTwoColumn.tsx @@ -5,7 +5,7 @@ import { ModalForm } from "../ModalForm"; import "./ModalTwoColumn.css"; -type ModalTwoColumnProps = { +interface ModalTwoColumnProps { title: ReactNode; intro: ReactNode; onSubmit: () => Promise; @@ -13,7 +13,7 @@ type ModalTwoColumnProps = { rightChildren: ReactNode; className?: string; disabled?: boolean; -}; +} /** * @deprecated diff --git a/apps/sim-core/packages/core/src/components/MonacoContainer/MonacoContainer.tsx b/apps/sim-core/packages/core/src/components/MonacoContainer/MonacoContainer.tsx index 626e73c..1ebe62c 100644 --- a/apps/sim-core/packages/core/src/components/MonacoContainer/MonacoContainer.tsx +++ b/apps/sim-core/packages/core/src/components/MonacoContainer/MonacoContainer.tsx @@ -8,9 +8,9 @@ import React, { import "./MonacoContainer.css"; -type MonacoContainerProps = { +interface MonacoContainerProps { hidden: boolean; -}; +} const hiddenStyle: CSSProperties = { display: "none", @@ -25,10 +25,10 @@ export const MonacoContainer: ForwardRefExoticComponent< style={hidden ? hiddenStyle : undefined} ref={ref} /> - )) + )), ); -// // @ts-ignore +// // @ts-expect-error // MonacoContainer.whyDidYouRender = { // customName: "MonacoContainer" // }; diff --git a/apps/sim-core/packages/core/src/components/OpenInCore/OpenInCore.tsx b/apps/sim-core/packages/core/src/components/OpenInCore/OpenInCore.tsx index 5c0c9e6..f2f56d1 100644 --- a/apps/sim-core/packages/core/src/components/OpenInCore/OpenInCore.tsx +++ b/apps/sim-core/packages/core/src/components/OpenInCore/OpenInCore.tsx @@ -15,6 +15,7 @@ export const OpenInCore = () => { className="OpenInCore" href={`${window.location.origin}${projectUrl}`} target="_blank" + rel="noreferrer" >

      diff --git a/apps/sim-core/packages/core/src/components/PlotViewer/ErrorNotification.tsx b/apps/sim-core/packages/core/src/components/PlotViewer/ErrorNotification.tsx index 120eb96..bd7aa02 100644 --- a/apps/sim-core/packages/core/src/components/PlotViewer/ErrorNotification.tsx +++ b/apps/sim-core/packages/core/src/components/PlotViewer/ErrorNotification.tsx @@ -2,9 +2,9 @@ import React, { FC } from "react"; import { IconAlertOutline } from "../Icon/AlertOutline"; -type ErrorNotificationProps = { +interface ErrorNotificationProps { plots: any; -}; +} const SinglePlot: FC = ({ plots }) => { const title = plots[0].plot.definition.title; diff --git a/apps/sim-core/packages/core/src/components/PlotViewer/OutputPlot.tsx b/apps/sim-core/packages/core/src/components/PlotViewer/OutputPlot.tsx index 7c5cff6..120ebdd 100644 --- a/apps/sim-core/packages/core/src/components/PlotViewer/OutputPlot.tsx +++ b/apps/sim-core/packages/core/src/components/PlotViewer/OutputPlot.tsx @@ -16,7 +16,7 @@ import { yieldToBrowser } from "../../util/yieldToBrowser"; const mapLayout = ( layout: Partial, currentStep: number, - hideStep: boolean | undefined + hideStep: boolean | undefined, ): Partial => { const cloned = JSON.parse(JSON.stringify(layout)); @@ -40,16 +40,16 @@ const mapLayout = ( }, }, ] - : [] + : [], ), }; }; const getLastOperationFromOperationChain = ( definition: any, - outputs: { [index: string]: any[] }, + outputs: Record, axisToUse: "x" | "y", - index: number + index: number, ) => { const outputMetricKey = definition?.data?.[index][axisToUse]; if (!outputMetricKey) { @@ -65,18 +65,18 @@ const getLastOperationFromOperationChain = ( const isAxisAvailable = ( definition: any, index: number, - axisToUse: "x" | "y" -) => !!(definition?.data?.[index] && definition.data[index][axisToUse]); + axisToUse: "x" | "y", +) => !!definition?.data?.[index]?.[axisToUse]; const doLastOperationTypesMatch = ( definition: any, - outputs: { [index: string]: any[] }, - index: number + outputs: Record, + index: number, ) => { const x = isASingleStepAggregationOperation( - getLastOperationFromOperationChain(definition, outputs, "x", index) + getLastOperationFromOperationChain(definition, outputs, "x", index), ); const y = isASingleStepAggregationOperation( - getLastOperationFromOperationChain(definition, outputs, "y", index) + getLastOperationFromOperationChain(definition, outputs, "y", index), ); return x === y; }; @@ -89,9 +89,9 @@ const doLastOperationTypesMatch = ( */ const prepareDataBasedOnOutputMetricsLastOperation = async ( definition: any, - outputs: { [index: string]: any[] }, + outputs: Record, clonedData: any, - currentStep: number + currentStep: number, ) => { const result = JSON.parse(JSON.stringify(clonedData)); if (!definition.type) { @@ -125,11 +125,10 @@ const prepareDataBasedOnOutputMetricsLastOperation = async ( definition, outputs, "y", - index - ); - const lastYOperationIsAnAggregationOperation = isASingleStepAggregationOperation( - lastOp + index, ); + const lastYOperationIsAnAggregationOperation = + isASingleStepAggregationOperation(lastOp); if (!yAxisAvailable || xAxisAvailable) { continue; } @@ -166,7 +165,7 @@ const prepareDataBasedOnOutputMetricsLastOperation = async ( definition, outputs, axisToUse, - index + index, ); if (!lastOperation) { continue; @@ -192,7 +191,7 @@ const prepareDataBasedOnOutputMetricsLastOperation = async ( // Covering Range case result[index][axisToUse] = clonedData[index][axisToUse].slice( 0, - currentStep + currentStep, ); } await yieldToBrowser(); @@ -208,11 +207,12 @@ const prepareDataBasedOnOutputMetricsLastOperation = async ( const lastOperationsTypesAreMatching = doLastOperationTypesMatch( definition, outputs, - index - ); - const lastXOperationIsAnAggregationOperation = isASingleStepAggregationOperation( - getLastOperationFromOperationChain(definition, outputs, "x", index) + index, ); + const lastXOperationIsAnAggregationOperation = + isASingleStepAggregationOperation( + getLastOperationFromOperationChain(definition, outputs, "x", index), + ); result[index].type = "scatter"; result[index].mode = definition.type === "scatter" ? "markers" : "lines"; @@ -254,21 +254,21 @@ const prepareDataBasedOnOutputMetricsLastOperation = async ( const usePreparePlotsObserver = ( definition: any, - outputs: { [index: string]: any[] }, + outputs: Record, clonedData: any, - currentStep: number + currentStep: number, ) => { // @todo type this const ref = useRef< Subject<{ definition: any; - outputs: { [index: string]: any[] }; + outputs: Record; clonedData: any; currentStep: number; }> >(null as any); // @todo type this - const [result, setResult] = useState(null); + const [result, setResult] = useState(null); if (!ref.current) { ref.current = new Subject(); @@ -282,9 +282,9 @@ const usePreparePlotsObserver = ( obj.definition, obj.outputs, obj.clonedData, - obj.currentStep - ) - ) + obj.currentStep, + ), + ), ) .subscribe((result) => { setResult(result); @@ -325,10 +325,10 @@ export const OutputPlot: FC< onEdit, }) => { const [plotlyConfig, setPlotlyConfig] = useState(() => - JSON.parse(JSON.stringify(config)) + JSON.parse(JSON.stringify(config)), ); const [plotlyLayout, setPlotlyLayout] = useState( - mapLayout({ ...layout, title: undefined }, currentStep, hideStep) + mapLayout({ ...layout, title: undefined }, currentStep, hideStep), ); const clonedData = useMemo(() => JSON.parse(JSON.stringify(data)), [data]); @@ -341,13 +341,13 @@ export const OutputPlot: FC< }, { onObserve: null, - } + }, ); // if a new layout comes through, update the state useEffect(() => { setPlotlyLayout( - mapLayout({ ...layout, title: undefined }, currentStep, hideStep) + mapLayout({ ...layout, title: undefined }, currentStep, hideStep), ); }, [currentStep, hideStep, layout]); @@ -362,7 +362,7 @@ export const OutputPlot: FC< definition, outputs ?? {}, clonedData, - currentStep + currentStep, ); return ( diff --git a/apps/sim-core/packages/core/src/components/PlotViewer/OutputPlotCollated.tsx b/apps/sim-core/packages/core/src/components/PlotViewer/OutputPlotCollated.tsx index e5367eb..ea4c665 100644 --- a/apps/sim-core/packages/core/src/components/PlotViewer/OutputPlotCollated.tsx +++ b/apps/sim-core/packages/core/src/components/PlotViewer/OutputPlotCollated.tsx @@ -12,7 +12,7 @@ import { useResizeObserver } from "../../hooks/useResizeObserver/useResizeObserv const mapLayout = ( layout: Partial, currentStep: number, - hideStep: boolean | undefined + hideStep: boolean | undefined, ): Partial => { const cloned = JSON.parse(JSON.stringify(layout)); @@ -36,7 +36,7 @@ const mapLayout = ( }, }, ] - : [] + : [], ), }; }; @@ -55,10 +55,10 @@ export const OutputPlotCollated: FC< } > = ({ data, layout, config, currentStep, hideStep, readonly, onEdit }) => { const [plotlyConfig, setPlotlyConfig] = useState(() => - JSON.parse(JSON.stringify(config)) + JSON.parse(JSON.stringify(config)), ); const [plotlyLayout, setPlotlyLayout] = useState( - mapLayout({ ...layout, title: undefined }, currentStep, hideStep) + mapLayout({ ...layout, title: undefined }, currentStep, hideStep), ); const clonedData = useMemo(() => JSON.parse(JSON.stringify(data)), [data]); @@ -71,13 +71,13 @@ export const OutputPlotCollated: FC< }, { onObserve: null, - } + }, ); // if a new layout comes through, update the state useEffect(() => { setPlotlyLayout( - mapLayout({ ...layout, title: undefined }, currentStep, hideStep) + mapLayout({ ...layout, title: undefined }, currentStep, hideStep), ); }, [currentStep, hideStep, layout]); diff --git a/apps/sim-core/packages/core/src/components/PlotViewer/PlotViewerCollatedExperiment.tsx b/apps/sim-core/packages/core/src/components/PlotViewer/PlotViewerCollatedExperiment.tsx index eeab1b2..ce8d4be 100644 --- a/apps/sim-core/packages/core/src/components/PlotViewer/PlotViewerCollatedExperiment.tsx +++ b/apps/sim-core/packages/core/src/components/PlotViewer/PlotViewerCollatedExperiment.tsx @@ -67,10 +67,10 @@ export const PlotViewerCollatedExperiment: FC = (props) => { return plots.filter( (plot) => VALID_PLOT_TYPES.includes(plot.definition.type ?? "") || - plot.definition.timeseries + plot.definition.timeseries, ); }, - [] + [], ); for (const plot of collatedPlots) { diff --git a/apps/sim-core/packages/core/src/components/PlotViewer/PlotViewerSingleRun.tsx b/apps/sim-core/packages/core/src/components/PlotViewer/PlotViewerSingleRun.tsx index 8a22458..103392d 100644 --- a/apps/sim-core/packages/core/src/components/PlotViewer/PlotViewerSingleRun.tsx +++ b/apps/sim-core/packages/core/src/components/PlotViewer/PlotViewerSingleRun.tsx @@ -27,7 +27,7 @@ export const PlotViewerSingleRun: FC = ({ }) => { const runId = useSimulatorSelector(selectCurrentSimulationId); const { retentionPolicy } = useSimulatorSelector( - selectCurrentSimStepRetention + selectCurrentSimStepRetention, ); const plots = usePlots()[runId]; @@ -77,9 +77,9 @@ export const PlotViewerSingleRun: FC = ({ return null; } const definedKeys: string[] = - plot.definition.data?.map((item) => String(item.y)) || []; + plot.definition.data?.map((item) => String(item.y)) ?? []; const missingKeys: string[] = definedKeys?.filter( - (key) => !metricKeys.includes(key) + (key) => !metricKeys.includes(key), ); return { plot, missingKeys }; }) @@ -129,7 +129,7 @@ export const PlotViewerSingleRun: FC = ({ - inv?.plot.outputProps.key === plot.outputProps.key + inv?.plot.outputProps.key === plot.outputProps.key, )} /> )} diff --git a/apps/sim-core/packages/core/src/components/PlotViewer/analyze.ts b/apps/sim-core/packages/core/src/components/PlotViewer/analyze.ts index c77abb2..341bedd 100644 --- a/apps/sim-core/packages/core/src/components/PlotViewer/analyze.ts +++ b/apps/sim-core/packages/core/src/components/PlotViewer/analyze.ts @@ -1,4 +1,3 @@ -import urljoin from "url-join"; import { AnalyzerProvider, OutputSeries, @@ -9,25 +8,21 @@ import { import { OutputPlotProps } from "./types"; import { buildData, buildPlots } from "./utils"; +import analyzerWorkerUrl from "../../workers/analyzer-worker/index?worker&url"; -export const analyzer = new AnalyzerProvider( - urljoin(WEBPACK_PUBLIC_PATH, "analyzerworker.js") -); - -type PlotDefinitionIsInvalidType = { +export const analyzer = new AnalyzerProvider(analyzerWorkerUrl); +interface PlotDefinitionIsInvalidType { isInvalid?: boolean; -}; +} -export type PlotDataItem = { +export interface PlotDataItem { definition: PlotDefinition & PlotDefinitionIsInvalidType; outputProps: OutputPlotProps; data: Plotly.Data[]; -}; -export type PlotDataMap = { - [id: string]: PlotDataItem; -}; +} +export type PlotDataMap = Record; -export type OutputPlots = { +export interface OutputPlots { outputs: OutputSeries; /** * @todo what is this for – we don't have it in cloud analysis which makes @@ -35,7 +30,7 @@ export type OutputPlots = { */ rawOutputs: Outputs[]; plots: PlotDataMap; -}; +} /** * Analyzing returns an array of output maps. @@ -56,7 +51,7 @@ export type OutputPlots = { * analyzer.analyze() -> {[outputId]: value}[] */ export const refreshAnalysisSource = async ( - source: string + source: string, // simId: string ): Promise => { const { plots } = await analyzer.setAnalysisSrc(source); @@ -81,7 +76,7 @@ export const refreshAnalysisSource = async ( export const analyzeSteps = async ( agentData: SimulationStates, lastOutputs: Outputs[] = [], - stepsCount: number + stepsCount: number, ): Promise<{ total: Outputs[]; added: Outputs[] }> => { if (lastOutputs.length === stepsCount) { return { total: lastOutputs, added: [] }; @@ -106,7 +101,7 @@ export const analyzeSteps = async ( export const mutatingPlotData = ( outputs: OutputSeries, plots: PlotDataMap, - stepCount: number + stepCount: number, ) => { // Build that data on the plot definitions @@ -136,7 +131,7 @@ export const mutatingPlotData = ( export const mutatingUpdatePlotsForSingleRun = async ( agentData: SimulationStates, plotsData: OutputPlots, - stepsCount: number + stepsCount: number, ): Promise => { const { outputs, plots, rawOutputs } = plotsData; diff --git a/apps/sim-core/packages/core/src/components/PlotViewer/hooks.ts b/apps/sim-core/packages/core/src/components/PlotViewer/hooks.ts index 0c756d6..9f70bc9 100644 --- a/apps/sim-core/packages/core/src/components/PlotViewer/hooks.ts +++ b/apps/sim-core/packages/core/src/components/PlotViewer/hooks.ts @@ -13,7 +13,7 @@ const makeSelectPlots = (simIds: string[]) => const plots = simIds .map( (simId) => - [simId, Object.values(data[simId].plots?.plots ?? {})] as const + [simId, Object.values(data[simId].plots?.plots ?? {})] as const, ) .filter(([_, plots]) => plots?.length); diff --git a/apps/sim-core/packages/core/src/components/PlotViewer/types.ts b/apps/sim-core/packages/core/src/components/PlotViewer/types.ts index 63bb9b4..e80d568 100644 --- a/apps/sim-core/packages/core/src/components/PlotViewer/types.ts +++ b/apps/sim-core/packages/core/src/components/PlotViewer/types.ts @@ -1,12 +1,12 @@ import { PlotParams } from "react-plotly.js"; -export type PlotViewerProps = { +export interface PlotViewerProps { currentStep: number; - outputs: { [index: string]: any[] }; + outputs: Record; onPlotsModalSave: Function; onPlotsModalDelete: Function; readonly: boolean; -}; +} export type OutputPlotProps = PlotParams & { key: string; @@ -14,5 +14,5 @@ export type OutputPlotProps = PlotParams & { definition: any; hideCollatedLegend?: boolean; hideStep?: boolean; - outputs?: { [index: string]: any[] }; + outputs?: Record; }; diff --git a/apps/sim-core/packages/core/src/components/PlotViewer/utils.ts b/apps/sim-core/packages/core/src/components/PlotViewer/utils.ts index 7326942..06a0179 100644 --- a/apps/sim-core/packages/core/src/components/PlotViewer/utils.ts +++ b/apps/sim-core/packages/core/src/components/PlotViewer/utils.ts @@ -20,7 +20,7 @@ import { theme } from "../../util/theme"; function timeseriesToData( timeseries: string[], series: OutputSeries, - step: number + step: number, ) { const data = []; for (const name of timeseries) { @@ -47,22 +47,22 @@ function or(a: any, b: any) { function scatterToData(scatter: string[], series: OutputSeries, step: number) { const data = []; for (const name of scatter) { - if (!series[name] || !series[name][step]) { + if (!series[name]?.[step]) { continue; } const color = extractColor(name); data.push({ name, x: (series[name][step] as Datum[]).map((a: any) => - or(a.position[0], a.x) + or(a.position[0], a.x), ), y: (series[name][step] as Datum[]).map((a: any) => - or(a.position[1], a.y) + or(a.position[1], a.y), ), mode: "markers", marker: { color: (series[name][step] as Datum[]).map( - (agent: any) => agent.color || agent.rgb || color + (agent: any) => agent.color || agent.rgb || color, ), }, type: "scattergl", @@ -74,29 +74,29 @@ function scatterToData(scatter: string[], series: OutputSeries, step: number) { function scatter3dToData( scatter: string[], series: OutputSeries, - step: number + step: number, ) { const data = []; for (const name of scatter) { - if (!series[name] || !series[name][step]) { + if (!series[name]?.[step]) { continue; } const color = extractColor(name); data.push({ name, x: (series[name][step] as Datum[]).map((a: any) => - or(a.position[0], a.x) + or(a.position[0], a.x), ), y: (series[name][step] as Datum[]).map((a: any) => - or(a.position[1], a.y) + or(a.position[1], a.y), ), z: (series[name][step] as Datum[]).map((a: any) => - or(a.position[2], a.z) + or(a.position[2], a.z), ), mode: "markers", marker: { color: (series[name][step] as Datum[]).map( - (agent: any) => agent.color || agent.rgb || color + (agent: any) => agent.color || agent.rgb || color, ), }, type: "scatter3d", @@ -105,13 +105,17 @@ function scatter3dToData( return data; } -const extractColor = (name: Color) => - typeof name === "string" - ? name === "white" - ? "gray" - : `#${mapColor(name) ?? intToRGB(hashCode(name))}` - : name; +const extractColor = (name: Color) => { + if (typeof name !== "string") { + return name; + } + if (name === "white") { + return "gray"; + } + const colorHashCode = mapColor(name) ?? intToRGB(hashCode(name)); + return `#${colorHashCode}`; +}; // https://stackoverflow.com/a/3426956 function hashCode(str: string) { // java String#hashCode @@ -189,7 +193,7 @@ export function buildPlots(def: PlotDefinition): OutputPlotProps { style, hideCollatedLegend: def.layout?.hideCollatedLegend, hideStep: ["bar", "box", "histogram", "line", "scatter"].includes( - def.type ?? "" + def.type ?? "", ) ? true : def.hideStep, @@ -211,7 +215,7 @@ const lineLens = m.Optional.fromNullableProp()("line"); const colorLens = m.Optional.fromNullableProp>()("color"); const flattenSlice = ( - series: OutputSeriesValue[] + series: OutputSeriesValue[], ): PlotData[K] => pipe( series, @@ -220,23 +224,23 @@ const flattenSlice = ( series === null || typeof series === "number" ? series : series.map((value) => - value instanceof Array && value.length === 1 ? value[0] : value - ) + value instanceof Array && value.length === 1 ? value[0] : value, + ), ) as PlotData[K]; -const mapAxis = (series: OutputSeries, step: number) => ( - value: HashDatum -): PlotData[K] => - typeof value === "string" - ? (series[value].slice(0, step + 1) as PlotData[K]) - : isOutputSlice(value) - ? flattenSlice(series[value.name].slice(...value.slice)) - : (value as PlotData[K]); +const mapAxis = + (series: OutputSeries, step: number) => + (value: HashDatum): PlotData[K] => + typeof value === "string" + ? (series[value].slice(0, step + 1) as PlotData[K]) + : isOutputSlice(value) + ? flattenSlice(series[value.name].slice(...value.slice)) + : value; export function buildData( def: PlotDefinition, series: OutputSeries, - step: number + step: number, ): Plotly.Data[] { if (def.timeseries) { return timeseriesToData(def.timeseries, series, step) as Plotly.Data[]; @@ -251,18 +255,18 @@ export function buildData( datumLenses.y.modify(mapAxis<"y">(series, step)), datumLenses.z.modify(mapAxis<"z">(series, step)), lineLens.compose(colorLens).modify(extractColor), - (plot) => Object.assign({ type: def.type }, plot) as PlotData - ) + (plot) => Object.assign({ type: def.type }, plot) as PlotData, + ), ); } else { return []; } } -type SetPlotlyThemeProps = { +interface SetPlotlyThemeProps { theme: "HASH_dark"; layout: Partial; -}; +} // Plotly.js doesn't have this function but plotly.py does // Colors taken from: https://github.com/plotly/plotly.py/blob/master/packages/python/plotly/templategen/definitions.py @@ -319,7 +323,7 @@ const colorBars = { const plotlyClrs = { "HASH Light": theme.white, "Rhino Medium 2": theme["light-grey"], - "Rhino Medium 1": theme["grey"], + "Rhino Medium 1": theme.grey, "Rhino Dark": "#171b1f", "Rhino Core": "#2a3f5f", }; @@ -335,19 +339,19 @@ interface PlotStyle { table_cell_clr: string; table_header_clr: string; table_line_clr: string; - colorscale: Array; + colorscale: string[]; } -const PlotStyles: { [name: string]: PlotStyle } = { +const PlotStyles: Record = { HASH_dark: { - paper_clr: theme["dark"], + paper_clr: theme.dark, font_clr: plotlyClrs["HASH Light"], font_family: "Inter", - panel_background_clr: theme["dark"], - panel_grid_clr: theme["dark"], + panel_background_clr: theme.dark, + panel_grid_clr: theme.dark, axis_ticks_clr: plotlyClrs["Rhino Medium 1"], zerolinecolor_clr: plotlyClrs["Rhino Medium 2"], - table_cell_clr: theme["dark"], + table_cell_clr: theme.dark, table_header_clr: plotlyClrs["Rhino Core"], table_line_clr: "#000000", colorscale: colorBars.plasma, diff --git a/apps/sim-core/packages/core/src/components/ProcessChart/ProcessChart.tsx b/apps/sim-core/packages/core/src/components/ProcessChart/ProcessChart.tsx index bb4b177..df73033 100644 --- a/apps/sim-core/packages/core/src/components/ProcessChart/ProcessChart.tsx +++ b/apps/sim-core/packages/core/src/components/ProcessChart/ProcessChart.tsx @@ -19,9 +19,7 @@ import { trackEvent } from "../../features/analytics"; import "./ProcessChart.scss"; -type LocalStorageDrafts = { - [processName: string]: string; -}; +type LocalStorageDrafts = Record; type ProcessChartMessage = | { @@ -53,7 +51,7 @@ export const ProcessChart: FC = () => { const frameRef = useRef(null); const project = useSelector(selectCurrentProject); const projectRef = useRef( - `${project?.pathWithNamespace}:${project?.ref}` + `${project?.pathWithNamespace}:${project?.ref}`, ); useEffect(() => { @@ -63,7 +61,7 @@ export const ProcessChart: FC = () => { }, []); const savedChart = chartFiles.find( - (file) => file.path.name === processChartOption + (file) => file.path.name === processChartOption, ); // Hide activity on tab load, restore it on unload (if it was visible) @@ -112,7 +110,7 @@ export const ProcessChart: FC = () => { contents: data.contents, project: project!, repoPath, - }) + }), ); // Update the tab to use the new name and clear the 'new' draft @@ -130,14 +128,14 @@ export const ProcessChart: FC = () => { context: { processName: data.processName, }, - }) + }), ); } else if (savedChart) { dispatch( updateFile({ id: savedChart.id, contents: data.contents, - }) + }), ); dispatch( trackEvent({ @@ -148,7 +146,7 @@ export const ProcessChart: FC = () => { context: { processName: data.processName, }, - }) + }), ); } setSaving(false); @@ -168,7 +166,7 @@ export const ProcessChart: FC = () => { if (projectRef.current !== projectUid) { // we've just switched project, default to the first defined chart dispatch( - setProcessChart(chartFiles[0]?.path.name || newProcessChartValue) + setProcessChart(chartFiles[0]?.path.name || newProcessChartValue), ); projectRef.current = projectUid; } else { @@ -201,7 +199,7 @@ export const ProcessChart: FC = () => { existingProcess, value: projectRef.current, }, - "*" + "*", ); }; useEffect(setProjectRefAndSendChart, [ diff --git a/apps/sim-core/packages/core/src/components/ResizingInputText/hooks/useMeasurable.ts b/apps/sim-core/packages/core/src/components/ResizingInputText/hooks/useMeasurable.ts index 3380e72..3834d1d 100644 --- a/apps/sim-core/packages/core/src/components/ResizingInputText/hooks/useMeasurable.ts +++ b/apps/sim-core/packages/core/src/components/ResizingInputText/hooks/useMeasurable.ts @@ -4,12 +4,12 @@ import { useResizeObserver } from "../../../hooks/useResizeObserver/useResizeObs export function useMeasurable(): [ RefCallback, - number + number, ] { const [width, setWidth] = useState(0); const setObserver = useResizeObserver((entry) => - setWidth(Math.ceil(entry.width)) + setWidth(Math.ceil(entry.width)), ); return [setObserver, width]; diff --git a/apps/sim-core/packages/core/src/components/ResourceListItem/Button/ResourceListItemButton.spec.tsx b/apps/sim-core/packages/core/src/components/ResourceListItem/Button/ResourceListItemButton.spec.tsx index bd176da..3e4482d 100644 --- a/apps/sim-core/packages/core/src/components/ResourceListItem/Button/ResourceListItemButton.spec.tsx +++ b/apps/sim-core/packages/core/src/components/ResourceListItem/Button/ResourceListItemButton.spec.tsx @@ -12,7 +12,7 @@ it("renders without crashing", () => { resourceName="name" resourceType="Behavior" />, - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/ResourceListItem/Button/ResourceListItemButton.tsx b/apps/sim-core/packages/core/src/components/ResourceListItem/Button/ResourceListItemButton.tsx index e65d3c7..c5b6bb8 100644 --- a/apps/sim-core/packages/core/src/components/ResourceListItem/Button/ResourceListItemButton.tsx +++ b/apps/sim-core/packages/core/src/components/ResourceListItem/Button/ResourceListItemButton.tsx @@ -10,12 +10,12 @@ import { ResourceProjectType } from "../../../features/project/types"; import "./ResourceListItemButton.css"; -type ResourceListItemButtonProps = { +interface ResourceListItemButtonProps { alreadyPresent: boolean; setIsPopoverOpen: Dispatch>; resourceName: string; resourceType: ResourceProjectType; -}; +} export const ResourceListItemButtonIcon: FC<{ type: ResourceProjectType }> = ({ type, @@ -51,7 +51,7 @@ export const ResourceListItemButton = forwardRef<
      {resourceName} @@ -59,7 +59,7 @@ export const ResourceListItemButton = forwardRef<
      {resourceType} diff --git a/apps/sim-core/packages/core/src/components/ResourceListItem/Popup/ResourceListItemPopup.spec.tsx b/apps/sim-core/packages/core/src/components/ResourceListItem/Popup/ResourceListItemPopup.spec.tsx index c458b27..d02de2d 100644 --- a/apps/sim-core/packages/core/src/components/ResourceListItem/Popup/ResourceListItemPopup.spec.tsx +++ b/apps/sim-core/packages/core/src/components/ResourceListItem/Popup/ResourceListItemPopup.spec.tsx @@ -14,10 +14,21 @@ import { ResourceListItemPopup } from "./ResourceListItemPopup"; import { defaultBehaviorKeys } from "../../../features/files/utils"; import { parse } from "../../../util/files"; import { store } from "../../../features/store"; +import { noop } from "lodash"; jest.mock("./util", () => ({ scrollBy: jest.fn() })); -const mockRect = { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }; +const mockRect: ClientRect = { + top: 0, + right: 0, + bottom: 0, + left: 0, + width: 0, + height: 0, + x: 0, + y: 0, + toJSON: noop, +}; const datasetOne: HcSharedDatasetFile = { pathWithNamespace: "@publisher/dataset/one.csv", @@ -100,7 +111,7 @@ it("renders without crashing with one dataset with none present", () => { }} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); @@ -142,7 +153,7 @@ it("renders without crashing with one dataset with it present", () => { }} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); @@ -183,7 +194,7 @@ it("renders without crashing with one trusted dataset with it present", () => { }} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); @@ -224,7 +235,7 @@ it("renders without crashing with two datasets with none present", () => { }} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); @@ -265,7 +276,7 @@ it("renders without crashing with two datasets with one present", () => { }} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); @@ -309,7 +320,7 @@ it("renders without crashing with two datasets with two present", () => { }} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); @@ -350,7 +361,7 @@ it("renders without crashing one behavior with none present", () => { }} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); @@ -391,7 +402,7 @@ it("renders without crashing one behavior with one present", () => { }} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/ResourceListItem/Popup/ResourceListItemPopup.tsx b/apps/sim-core/packages/core/src/components/ResourceListItem/Popup/ResourceListItemPopup.tsx index e8a8f13..b2da6c7 100644 --- a/apps/sim-core/packages/core/src/components/ResourceListItem/Popup/ResourceListItemPopup.tsx +++ b/apps/sim-core/packages/core/src/components/ResourceListItem/Popup/ResourceListItemPopup.tsx @@ -22,13 +22,13 @@ import { useResizeObserver } from "../../../hooks/useResizeObserver/useResizeObs import "./ResourceListItemPopup.css"; -type ResourceListItemPopupProps = { +interface ResourceListItemPopupProps { position: Position; targetRect: ClientRect; popoverRect: ClientRect; resource: ResourceProject; presentItems: string[]; -}; +} const style = { opacity: "0.95" }; @@ -60,11 +60,11 @@ const useRepositionPopoverOnElementResize = () => */ scrollBy(0, 1); - setImmediate(() => { + setTimeout(() => { scrollBy(0, -1); }); }, - { onObserve: null } + { onObserve: null }, ); const infoTextByType: { [type in ResourceProjectType]: string } = { @@ -92,7 +92,7 @@ export function linkShortnames(text?: string): string { for (let idx = 1; idx < parts.length; idx += 2) { parts[idx] = ` [${parts[idx].slice(1)}](https://hash.ai/${parts[idx].slice( - 1 + 1, )})`; } return parts.join(""); @@ -106,11 +106,9 @@ const ResourceMarkdownDescription: FC<{ description: string; trusted: boolean; }> = ({ description, trusted }) => ( - + + {linkShortnames(description)} + ); export const ResourceListItemPopup: FC = ({ @@ -125,7 +123,7 @@ export const ResourceListItemPopup: FC = ({ const [deselectedItems, setDeselectedItems] = useState([]); const selectableItems = resource.files.filter( - (file) => !presentItems.includes(file.path.formatted) + (file) => !presentItems.includes(file.path.formatted), ); const selectableItemsCount = selectableItems.length; const addButtonDisabled = deselectedItems.length === selectableItemsCount; @@ -144,7 +142,7 @@ export const ResourceListItemPopup: FC = ({ trackEvent({ action: "Import Dataset", label: `${resource.name} - ${resource.pathWithNamespace}`, - }) + }), ); break; @@ -153,7 +151,7 @@ export const ResourceListItemPopup: FC = ({ trackEvent({ action: "Import Behavior", label: `${resource.name} - ${resource.pathWithNamespace}`, - }) + }), ); break; } @@ -165,11 +163,11 @@ export const ResourceListItemPopup: FC = ({ .filter( (files) => !deselectedItems.includes(files.path.formatted) && - !presentItems.includes(files.path.formatted) + !presentItems.includes(files.path.formatted), ) - .map((item) => [item.path.formatted, tag]) - ) - ) + .map((item) => [item.path.formatted, tag]), + ), + ), ); }; @@ -213,7 +211,7 @@ export const ResourceListItemPopup: FC = ({ deselectedItems={deselectedItems} onDeselectAllItems={() => { setDeselectedItems( - selectableItems.map((item) => item.path.formatted) + selectableItems.map((item) => item.path.formatted), ); }} onDeselectItem={(itemId: string) => { @@ -224,7 +222,7 @@ export const ResourceListItemPopup: FC = ({ }} onSelectItem={(itemPath: string) => { setDeselectedItems( - deselectedItems.filter((path) => path !== itemPath) + deselectedItems.filter((path) => path !== itemPath), ); }} presentItems={presentItems} @@ -254,6 +252,7 @@ export const ResourceListItemPopup: FC = ({ {subject.name} diff --git a/apps/sim-core/packages/core/src/components/ResourceListItem/ResourceListItem.tsx b/apps/sim-core/packages/core/src/components/ResourceListItem/ResourceListItem.tsx index eacb5ad..4a3b5cb 100644 --- a/apps/sim-core/packages/core/src/components/ResourceListItem/ResourceListItem.tsx +++ b/apps/sim-core/packages/core/src/components/ResourceListItem/ResourceListItem.tsx @@ -8,21 +8,21 @@ import { ResourceProject } from "../../features/project/types"; import type { RootState } from "../../features/types"; import { makeSelectPresentItemsFromResource } from "../HashCore/Resources/selectors"; -type ResourceListItemProps = { +interface ResourceListItemProps { resource: ResourceProject; -}; +} export const ResourceListItem: FC = ({ resource }) => { const [isPopoverOpen, setIsPopoverOpen] = useState(false); const selectPresentItemsFromResource = useMemo( makeSelectPresentItemsFromResource, - [] + [], ); const memoSelector = useCallback( (state: RootState) => selectPresentItemsFromResource(state, resource), - [selectPresentItemsFromResource, resource] + [selectPresentItemsFromResource, resource], ); const presentItems = useSelector(memoSelector); diff --git a/apps/sim-core/packages/core/src/components/Search/Search.spec.tsx b/apps/sim-core/packages/core/src/components/Search/Search.spec.tsx index 3982954..e2d11dc 100644 --- a/apps/sim-core/packages/core/src/components/Search/Search.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Search/Search.spec.tsx @@ -6,7 +6,11 @@ import { Search } from "./Search"; jest.useFakeTimers(); jest.mock("lodash", () => ({ - debounce: jest.fn((fn) => (...args: any[]) => setTimeout(() => fn(...args))), + debounce: jest.fn( + (fn) => + (...args: any[]) => + setTimeout(() => fn(...args)), + ), })); it("renders without crashing", () => { @@ -16,7 +20,7 @@ it("renders without crashing", () => { it("calls onChange when the value has changed", () => { const onChange = jest.fn(); const { getByPlaceholderText } = render( - + , ); fireEvent.change(getByPlaceholderText("Search..."), { diff --git a/apps/sim-core/packages/core/src/components/Search/Search.tsx b/apps/sim-core/packages/core/src/components/Search/Search.tsx index 77213bc..5f34c2d 100644 --- a/apps/sim-core/packages/core/src/components/Search/Search.tsx +++ b/apps/sim-core/packages/core/src/components/Search/Search.tsx @@ -6,11 +6,11 @@ import { RoundedTextInput } from "../Inputs/RoundedTextInput"; import "./Search.css"; -type SearchProps = { +interface SearchProps { onChange: (term: string) => void; loading: boolean; searchTerm: string; -}; +} export const Search: FC = ({ onChange, loading, searchTerm }) => { const clearable = searchTerm.length > 0; diff --git a/apps/sim-core/packages/core/src/components/ShrinkWrap/ShrinkWrap.tsx b/apps/sim-core/packages/core/src/components/ShrinkWrap/ShrinkWrap.tsx index 2a33318..2dfd555 100644 --- a/apps/sim-core/packages/core/src/components/ShrinkWrap/ShrinkWrap.tsx +++ b/apps/sim-core/packages/core/src/components/ShrinkWrap/ShrinkWrap.tsx @@ -27,8 +27,8 @@ export const ShrinkWrap: FC< span.style.removeProperty("max-width"); const lineHeight = Math.floor( parseFloat( - window.getComputedStyle(span).lineHeight.replace("normal", "16px") - ) + window.getComputedStyle(span).lineHeight.replace("normal", "16px"), + ), ); while (Math.ceil(span.offsetHeight / lineHeight) < lineCount + 1) { diff --git a/apps/sim-core/packages/core/src/components/SimpleTooltip/SimpleTooltip.tsx b/apps/sim-core/packages/core/src/components/SimpleTooltip/SimpleTooltip.tsx index 042106c..3985699 100644 --- a/apps/sim-core/packages/core/src/components/SimpleTooltip/SimpleTooltip.tsx +++ b/apps/sim-core/packages/core/src/components/SimpleTooltip/SimpleTooltip.tsx @@ -66,9 +66,8 @@ export const SimpleTooltip: FC = ({ }) => { const popoverRef = useRef(null); const [open, setOpen, openRef] = useRefState(false); - const [clicked, setClicked, clickedRef] = useRefState( - defaultClickedState - ); + const [clicked, setClicked, clickedRef] = + useRefState(defaultClickedState); const [width, setWidth] = useState(0); if (clicked !== defaultClickedState && !persistent) { @@ -96,7 +95,7 @@ export const SimpleTooltip: FC = ({ (target === tooltip || !!tooltip?.contains(target))) ); }, - [interactive, openRef] + [interactive, openRef], ); const openTooltip = useCallback(() => { @@ -134,7 +133,7 @@ export const SimpleTooltip: FC = ({ const mouseEvent = (evt: MouseEvent | TouchEvent) => { const target = evt.target as HTMLElement; const clickedOpenState: boolean | null = clickedToOpen( - clickedRef.current + clickedRef.current, ); const withinParent = isTargetWithinParent(target); @@ -237,7 +236,7 @@ export const SimpleTooltip: FC = ({ }, { Modal__Tooltip: inModal, - } + }, )} content={
      ; -}; +} export const SimulationRunContextMenu: FC = ({ children, diff --git a/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsListError.tsx b/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsListError.tsx index 19e468a..e339615 100644 --- a/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsListError.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsListError.tsx @@ -30,6 +30,7 @@ export const ExperimentsListError: FC = () => { our docs {" "} diff --git a/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsMenu.tsx b/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsMenu.tsx index e9f16d0..a3732dc 100644 --- a/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsMenu.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsMenu.tsx @@ -12,10 +12,10 @@ import { useCloseTooltip } from "../../../SimpleTooltip/context"; import "./ExperimentsMenu.css"; -type ExperimentsMenuProps = { +interface ExperimentsMenuProps { openModal: VoidFunction; setCurrentExperiment: Dispatch>; -}; +} const ExperimentsMenuList: FC = ({ openModal, diff --git a/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsRunner.tsx b/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsRunner.tsx index a415f12..acf0329 100644 --- a/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsRunner.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/ExperimentsRunner.tsx @@ -24,17 +24,14 @@ export const ExperimentsRunner: FC = () => { RawExperimentType | undefined >(); - const [ - openCreateExperimentModal, - hideCreateExperimentModal, - ] = useModal( + const [openCreateExperimentModal, hideCreateExperimentModal] = useModal( () => ( ), - [currentExperiment] + [currentExperiment], ); if (!shouldShowExperiments) { diff --git a/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/selectors.ts b/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/selectors.ts index 6db3cf3..d908df1 100644 --- a/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/selectors.ts +++ b/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/Experiments/selectors.ts @@ -15,5 +15,5 @@ export const selectExperiments = createSelector( console.error("Error parsing experiments.json", err); return null; } - } + }, ); diff --git a/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/PlayPause/PlayPauseTooltipModeSwitcher.tsx b/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/PlayPause/PlayPauseTooltipModeSwitcher.tsx index 3051c5d..d10f9d1 100644 --- a/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/PlayPause/PlayPauseTooltipModeSwitcher.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationRunner/Controls/PlayPause/PlayPauseTooltipModeSwitcher.tsx @@ -40,7 +40,7 @@ export const PlayPauseTooltipModeSwitcher: FC = () => { const speed = useSimulatorSelector(selectPresentingSpeed); const mode = useSimulatorSelector(selectCurrentSimMode); const { retentionPolicy, stepsToRetain } = useSimulatorSelector( - selectCurrentSimStepRetention + selectCurrentSimStepRetention, ); const hasSteps = useSimulatorSelector(selectCurrentRunnerHasSteps); const dispatch = useSimulatorDispatch(); diff --git a/apps/sim-core/packages/core/src/components/SimulationRunner/SimulationRunner.tsx b/apps/sim-core/packages/core/src/components/SimulationRunner/SimulationRunner.tsx index 3f76b12..ea400f7 100644 --- a/apps/sim-core/packages/core/src/components/SimulationRunner/SimulationRunner.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationRunner/SimulationRunner.tsx @@ -44,19 +44,19 @@ export const SimulationRunner: FC = () => { // @todo use refs for all of these const reset = containerRef.current.querySelector( - ".reset.simulation-control" + ".reset.simulation-control", )?.offsetLeft ?? 0; const experiments = containerRef.current.querySelector( - ".ExperimentsRunner" + ".ExperimentsRunner", )?.offsetLeft ?? 0; const step = containerRef.current.querySelector( - ".step.simulation-control" + ".step.simulation-control", )?.offsetLeft ?? 0; const simulate = containerRef.current.querySelector( - ".simulate.simulation-control" + ".simulate.simulation-control", )?.offsetLeft ?? 0; for (const [key, value] of Object.entries({ reset, @@ -75,7 +75,7 @@ export const SimulationRunner: FC = () => { }, { onObserve: null, - } + }, ); const setRef = useCallback( @@ -84,7 +84,7 @@ export const SimulationRunner: FC = () => { attachResizeObserver(node); }, - [attachResizeObserver] + [attachResizeObserver], ); return ( diff --git a/apps/sim-core/packages/core/src/components/SimulationViewer/AgentSceneLazy.tsx b/apps/sim-core/packages/core/src/components/SimulationViewer/AgentSceneLazy.tsx index 82463cd..3387887 100644 --- a/apps/sim-core/packages/core/src/components/SimulationViewer/AgentSceneLazy.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationViewer/AgentSceneLazy.tsx @@ -7,7 +7,7 @@ import { agentScene } from "./lazy"; const AgentSceneLazy = lazy(() => agentScene().then((module) => ({ default: module.AgentScene, - })) + })), ); export const AgentScene: FC = (props) => ( diff --git a/apps/sim-core/packages/core/src/components/SimulationViewer/AnalysisViewerLazy.tsx b/apps/sim-core/packages/core/src/components/SimulationViewer/AnalysisViewerLazy.tsx index cdb1c15..11f5a61 100644 --- a/apps/sim-core/packages/core/src/components/SimulationViewer/AnalysisViewerLazy.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationViewer/AnalysisViewerLazy.tsx @@ -7,7 +7,7 @@ import { analysis } from "./lazy"; const AnalysisViewerLazy = lazy(() => analysis().then((module) => ({ default: module.AnalysisViewer, - })) + })), ); export const AnalysisViewer: FC = ({ diff --git a/apps/sim-core/packages/core/src/components/SimulationViewer/GeospatialMapLazy.tsx b/apps/sim-core/packages/core/src/components/SimulationViewer/GeospatialMapLazy.tsx index 4a59d6c..790c229 100644 --- a/apps/sim-core/packages/core/src/components/SimulationViewer/GeospatialMapLazy.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationViewer/GeospatialMapLazy.tsx @@ -7,7 +7,7 @@ import { geo } from "./lazy"; const GeospatialMapLazy = lazy(() => geo().then((module) => ({ default: module.GeospatialMap, - })) + })), ); export const GeospatialMap: FC = ({ diff --git a/apps/sim-core/packages/core/src/components/SimulationViewer/PyodideIndicator/SimulationViewerPyodideIndicator.tsx b/apps/sim-core/packages/core/src/components/SimulationViewer/PyodideIndicator/SimulationViewerPyodideIndicator.tsx index a0a5eeb..eec46ad 100644 --- a/apps/sim-core/packages/core/src/components/SimulationViewer/PyodideIndicator/SimulationViewerPyodideIndicator.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationViewer/PyodideIndicator/SimulationViewerPyodideIndicator.tsx @@ -25,6 +25,7 @@ export const SimulationViewerPyodideIndicator: FC<{ experiment {" "} diff --git a/apps/sim-core/packages/core/src/components/SimulationViewer/SimulationViewer.tsx b/apps/sim-core/packages/core/src/components/SimulationViewer/SimulationViewer.tsx index 0994764..8137732 100644 --- a/apps/sim-core/packages/core/src/components/SimulationViewer/SimulationViewer.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationViewer/SimulationViewer.tsx @@ -44,11 +44,11 @@ import { import { useHandlePromiseRejection } from "../ErrorBoundary"; import { useSimulatorSelector } from "../../features/simulator/context"; -type TabEl = { +interface TabEl { el: (selected: boolean) => ReactElement | null; forceRender?: boolean; onSelected?: () => void; -}; +} const makeSelectStep = (currentStep: number) => (state: SimulatorRootState) => selectCurrentRunnerSteps(state)[currentStep]; @@ -66,11 +66,11 @@ const useRawOutputTextModel = () => { }; }, []); - return textModelRef.current!; + return textModelRef.current; }; const getLazyTab = (tab: TabKind | string) => - (lazyTabs as Partial>)[tab]; + (lazyTabs as Partial>)[tab]; const loadTab = async (tab: TabKind | string) => { const tabFactory = getLazyTab(tab); @@ -92,7 +92,7 @@ const view = getUiQueryParams().view; const initialTab = loadTab(getLazyTab(view) ? view : TabKind.ThreeD); const serializeRawOutput = ( - viewingStep: SerializableAgentState[] | undefined | null + viewingStep: SerializableAgentState[] | undefined | null, ) => JSON.stringify(viewingStep ?? [], null, 2); export const SimulationViewer: FC = memo(function SimulationViewer() { @@ -129,7 +129,7 @@ export const SimulationViewer: FC = memo(function SimulationViewer() { if (!abortController.signal.aborted) { await Promise.all(visibleTabs.map((tab) => loadTab(tab.kind))); } - }) + }), ); return () => { @@ -232,7 +232,7 @@ export const SimulationViewer: FC = memo(function SimulationViewer() { rawOutputTextModel.setValue(serializeRawOutput(viewingStep)); (rawOutputTextModel as any).forceTokenization( - rawOutputTextModel.getLineCount() + rawOutputTextModel.getLineCount(), ); } }, [viewingStep, selectedTab, editorInstance, rawOutputTextModel]); @@ -268,7 +268,7 @@ export const SimulationViewer: FC = memo(function SimulationViewer() { "react-tabs__tab-panel": true, RawOutput: tab.kind === TabKind.RawOutput, })} - forceRender={tabs[tab.kind].forceRender || false} + forceRender={tabs[tab.kind].forceRender ?? false} > {tabs[tab.kind].el(selectedTab === tab.kind)} diff --git a/apps/sim-core/packages/core/src/components/SimulationViewer/StepExplorerLazy.tsx b/apps/sim-core/packages/core/src/components/SimulationViewer/StepExplorerLazy.tsx index 8f2ded1..9b57bc2 100644 --- a/apps/sim-core/packages/core/src/components/SimulationViewer/StepExplorerLazy.tsx +++ b/apps/sim-core/packages/core/src/components/SimulationViewer/StepExplorerLazy.tsx @@ -7,7 +7,7 @@ import { steps } from "./lazy"; const StepExplorerLazy = lazy(() => steps().then((module) => ({ default: module.StepExplorer, - })) + })), ); export const StepExplorer: FC = (props) => ( diff --git a/apps/sim-core/packages/core/src/components/StepExplorer/StepExplorer.tsx b/apps/sim-core/packages/core/src/components/StepExplorer/StepExplorer.tsx index 812a22a..f381f8b 100644 --- a/apps/sim-core/packages/core/src/components/StepExplorer/StepExplorer.tsx +++ b/apps/sim-core/packages/core/src/components/StepExplorer/StepExplorer.tsx @@ -1,13 +1,10 @@ -// @todo remove ts-ignore +// @todo remove ts-expect-error import React from "react"; import ReactDOM from "react-dom"; import { FluentUIComponents } from "@msrvida/fluentui-react-cdn-typings"; import * as fluentui from "@fluentui/react"; -// @ts-ignore import * as deck from "@deck.gl/core"; -// @ts-ignore import * as layers from "@deck.gl/layers"; -// @ts-ignore import * as luma from "@luma.gl/core"; import * as vega from "vega"; import { AgentState } from "@hashintel/engine-web"; @@ -36,18 +33,18 @@ fluentui.loadTheme({ * @see: https://github.com/microsoft/SandDance/blob/master/packages/common-extensions/src/app.tsx */ use( - (fluentui as unknown) as FluentUIComponents, + fluentui as unknown as FluentUIComponents, React, ReactDOM, vega, deck, layers, - luma + luma, ); function getViewerOptions() { const color = SandDance.VegaDeckGl.util.colorToString( - SandDance.VegaDeckGl.util.colorFromString("white") + SandDance.VegaDeckGl.util.colorFromString("white"), ); const fontFamily = "Inter"; @@ -64,29 +61,29 @@ function getViewerOptions() { return viewerOptions; } -export type StepExplorerProps = { +export interface StepExplorerProps { data: AgentState[]; step: number | undefined; visible: boolean; simId: string; -}; +} /** * The Microsoft-way of interacting with the explorer is by pulling it out of the mounted closure * * https://github.com/leozhoujf/Microsoft-OpenSource-SandDance-Visualization-Data-Tool/blob/b4e6bf8016b2c6ea0ef16a0876665d69d7f504d4/packages/sanddance-app/src/index.tsx#L35 */ -var sanddanceExplorerElement: Explorer_Class | undefined; +let sanddanceExplorerElement: Explorer_Class | undefined; /** * getPartialInsight (defined below) needs access to the display dataset to determine the columns * This is typically not necessary, but is for us because we have to infer all the columns * Therefore, we drop displayData into the global scope */ -type InternalState = { +interface InternalState { loaded: boolean; sandDanceData: AgentState[]; -}; +} export class StepExplorer extends React.Component< StepExplorerProps, @@ -99,6 +96,7 @@ export class StepExplorer extends React.Component< loaded: false, // This array is passed by reference and needs to be modified in place + // (But really should be a hook and a ref instead of a mutable state object) sandDanceData: [], }; } @@ -112,15 +110,16 @@ export class StepExplorer extends React.Component< // Update the content of the data object is using to display if (nextStep) { + // eslint-disable-next-line react/no-direct-mutation-state this.state.sandDanceData.length = 0; // Find all fields of all agents - const allFields: Set = new Set(); + const allFields = new Set(); nextStep.forEach((agent) => { const new_agent = Object.assign({}, agent, { - pos_x: (agent.position || [undefined])[0], - pos_y: (agent.position || [undefined])[1], - pos_z: (agent.position || [undefined])[2], + pos_y: (agent.position ?? [undefined])[1], + pos_x: (agent.position ?? [undefined])[0], + pos_z: (agent.position ?? [undefined])[2], }); // Save the keys to insert into the first agent later @@ -128,13 +127,20 @@ export class StepExplorer extends React.Component< allFields.add(key); }); + // eslint-disable-next-line react/no-direct-mutation-state this.state.sandDanceData.push(new_agent); }); // Set the unused fields on the first agent to undefined // This lets the sanddance recommender recognize that all fields exist allFields.forEach((field) => { - if (!this.state.sandDanceData[0].hasOwnProperty(field)) { + if ( + !Object.prototype.hasOwnProperty.call( + this.state.sandDanceData[0], + field, + ) + ) { + // eslint-disable-next-line react/no-direct-mutation-state this.state.sandDanceData[0][field] = undefined; } }); @@ -149,7 +155,7 @@ export class StepExplorer extends React.Component< // Force the viewer to render with its current insight but new data sanddanceExplorerElement?.viewer.render( sanddanceExplorerElement?.viewer.insight, - this.state.sandDanceData + this.state.sandDanceData, ); } } diff --git a/apps/sim-core/packages/core/src/components/TabActionBar/TabActionBar.scss b/apps/sim-core/packages/core/src/components/TabActionBar/TabActionBar.scss index 9711cf7..c0a5694 100644 --- a/apps/sim-core/packages/core/src/components/TabActionBar/TabActionBar.scss +++ b/apps/sim-core/packages/core/src/components/TabActionBar/TabActionBar.scss @@ -53,7 +53,8 @@ box-sizing: border-box; &:hover { - box-shadow: inset 1px 0 0 var(--theme-border), + box-shadow: + inset 1px 0 0 var(--theme-border), inset -1px 0 0 var(--theme-border); } } diff --git a/apps/sim-core/packages/core/src/components/TabActionBar/TabActionBar.tsx b/apps/sim-core/packages/core/src/components/TabActionBar/TabActionBar.tsx index ea55fd5..e8f8235 100644 --- a/apps/sim-core/packages/core/src/components/TabActionBar/TabActionBar.tsx +++ b/apps/sim-core/packages/core/src/components/TabActionBar/TabActionBar.tsx @@ -21,7 +21,7 @@ export const TabActionBar: FC<{ onSelectedIndexChange?: ( tabIndex: number, last: number, - event: Event + event: Event, ) => void; hidden?: boolean; className?: string; @@ -40,9 +40,10 @@ export const TabActionBar: FC<{ return; } - const node: HTMLElement | null = tabsRef.current.querySelectorAll( - ".react-tabs__tab" - )[selectedIndex]; + const node: HTMLElement | null = + tabsRef.current.querySelectorAll(".react-tabs__tab")[ + selectedIndex + ]; node?.scrollIntoView({ behavior: "smooth", @@ -57,7 +58,7 @@ export const TabActionBar: FC<{ const tabContainerResizeObserver = useResizeObserver( () => makeCurrentTabVisible(), - { onObserve: null } + { onObserve: null }, ); const [setScrollRef, fadeOutVisible] = useScrollState("horizontal"); @@ -67,7 +68,7 @@ export const TabActionBar: FC<{ selectedIndex={selectedIndex} onSelect={onSelectedIndexChange} domRef={(node) => { - tabsRef.current = node || null; + tabsRef.current = node ?? null; setScrollRef(node?.querySelector(".TabActionBar__TabContainer__Tabs")); }} @@ -100,7 +101,7 @@ export const TabActionBar: FC<{
    2. {action}
    3. - ) : null + ) : null, )}
      diff --git a/apps/sim-core/packages/core/src/components/TabbedEditor/DiffPanel/TabbedEditorDiffPanel.spec.tsx b/apps/sim-core/packages/core/src/components/TabbedEditor/DiffPanel/TabbedEditorDiffPanel.spec.tsx index 4d51256..9c99cac 100644 --- a/apps/sim-core/packages/core/src/components/TabbedEditor/DiffPanel/TabbedEditorDiffPanel.spec.tsx +++ b/apps/sim-core/packages/core/src/components/TabbedEditor/DiffPanel/TabbedEditorDiffPanel.spec.tsx @@ -9,7 +9,7 @@ it("renders without crashing", () => { ReactDOM.render( //
      , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/TabbedEditor/DiffPanel/TabbedEditorDiffPanel.tsx b/apps/sim-core/packages/core/src/components/TabbedEditor/DiffPanel/TabbedEditorDiffPanel.tsx index 523a9a2..b8864e1 100644 --- a/apps/sim-core/packages/core/src/components/TabbedEditor/DiffPanel/TabbedEditorDiffPanel.tsx +++ b/apps/sim-core/packages/core/src/components/TabbedEditor/DiffPanel/TabbedEditorDiffPanel.tsx @@ -9,16 +9,16 @@ import { getTextModelRequired, languageByExt } from "../../../features/monaco"; import { parse } from "../../../util/files"; import { selectCurrentProjectUrl } from "../../../features/project/selectors"; -type TabbedEditorDiffPanelProps = { +interface TabbedEditorDiffPanelProps { editorInstance: DiffEditorInstance | undefined; file: HcFile; nextContents: string; -}; +} export const getDiffModel = ( manifestId: string | null, file: HcFile, - nextContents: string + nextContents: string, ): DiffEditorModel => ({ original: getTextModelRequired(file, manifestId), modified: editor.createModel( @@ -28,8 +28,8 @@ export const getDiffModel = ( parse({ ...file.path, name: `${uuid()}`, - }).formatted - ) + }).formatted, + ), ), }); @@ -43,7 +43,7 @@ export const TabbedEditorDiffPanel: FC = ({ const diffModel = useMemo( () => getDiffModel(projectUrl, file, nextContents), - [file, projectUrl, nextContents] + [file, projectUrl, nextContents], ); useEffect(() => { diff --git a/apps/sim-core/packages/core/src/components/TabbedEditor/Panel/TabbedEditorPanel.spec.tsx b/apps/sim-core/packages/core/src/components/TabbedEditor/Panel/TabbedEditorPanel.spec.tsx index 2a7eac3..832897e 100644 --- a/apps/sim-core/packages/core/src/components/TabbedEditor/Panel/TabbedEditorPanel.spec.tsx +++ b/apps/sim-core/packages/core/src/components/TabbedEditor/Panel/TabbedEditorPanel.spec.tsx @@ -9,7 +9,7 @@ it("renders without crashing", () => { ReactDOM.render( // ,
      , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/TabbedEditor/Panel/TabbedEditorPanel.tsx b/apps/sim-core/packages/core/src/components/TabbedEditor/Panel/TabbedEditorPanel.tsx index 9adddd1..782f5e3 100644 --- a/apps/sim-core/packages/core/src/components/TabbedEditor/Panel/TabbedEditorPanel.tsx +++ b/apps/sim-core/packages/core/src/components/TabbedEditor/Panel/TabbedEditorPanel.tsx @@ -8,12 +8,12 @@ import { parse } from "../../../util/files"; import { restoreEditorState } from "../utils"; export type ViewStates = Record; -type TabbedEditorPanelProps = { +interface TabbedEditorPanelProps { editorInstance: EditorInstance | undefined; textModel: TextModel | undefined; readOnly?: boolean; viewStatesRef?: MutableRefObject; -}; +} // monaco-editor prepends a `/` to all it's paths const pathForModel = (textModel: editor.ITextModel) => @@ -57,9 +57,8 @@ export const TabbedEditorPanel: FC = ({ const currentModel = editorInstance.getModel(); if (currentModel !== textModel) { if (currentModel && viewStatesRef) { - viewStatesRef.current[ - pathForModel(currentModel).formatted - ] = editorInstance.saveViewState(); + viewStatesRef.current[pathForModel(currentModel).formatted] = + editorInstance.saveViewState(); } const path = pathForModel(textModel); @@ -73,7 +72,7 @@ export const TabbedEditorPanel: FC = ({ tabSize: 2, wordWrap: ext === Ext.Md ? "on" : "off", readOnly: readOnlyRef.current, - } + }, ); } }, [editorInstance, textModel, viewStatesRef]); diff --git a/apps/sim-core/packages/core/src/components/TabbedEditor/hooks/useMonacoContainer.tsx b/apps/sim-core/packages/core/src/components/TabbedEditor/hooks/useMonacoContainer.tsx index f8582a1..29a4294 100644 --- a/apps/sim-core/packages/core/src/components/TabbedEditor/hooks/useMonacoContainer.tsx +++ b/apps/sim-core/packages/core/src/components/TabbedEditor/hooks/useMonacoContainer.tsx @@ -62,7 +62,7 @@ function createEditorInstance(container: HTMLElement): EditorInstance { (instance as any)._standaloneKeybindingService.addDynamicKeybinding( binding, null, - () => {} + () => {}, ); } @@ -83,7 +83,7 @@ const attr = (el: any, name: string) => (isEl(el) ? el.getAttribute(name) : ""); type MonacoContainerHook = [ EditorType | undefined, - RefCallback + RefCallback, ]; export type DiffMonacoContainerHook = MonacoContainerHook; export type MainMonacoContainerHook = MonacoContainerHook; @@ -91,7 +91,7 @@ export type MainMonacoContainerHook = MonacoContainerHook; export function useMonacoContainer(diff: true): DiffMonacoContainerHook; export function useMonacoContainer(diff?: false): MainMonacoContainerHook; export function useMonacoContainer( - diff = false + diff = false, ): MonacoContainerHook { const [editorInstance, setEditorInstance] = useState< EditorInstance | DiffEditorInstance @@ -128,7 +128,7 @@ export function useMonacoContainer( monacoContainerRef.current ?.closest(layoutPanePrimary) ?.classList.remove(overflowVisible); - } + }, ); const contextMenuEl = query(monacoContainerRef.current, contextView); @@ -173,13 +173,13 @@ export function useMonacoContainer( setEditorInstance(undefined); } }, - [diff] + [diff], ); - return useMemo(() => [editorInstance, setContainerRef], [ - editorInstance, - setContainerRef, - ]); + return useMemo( + () => [editorInstance, setContainerRef], + [editorInstance, setContainerRef], + ); } const MonacoContext = createContext<{ @@ -198,19 +198,19 @@ export const MonacoContainerProvider: FC = ({ children }) => { }; export function useMonacoContainerFromContext( - diff: true + diff: true, ): DiffMonacoContainerHook; export function useMonacoContainerFromContext( - diff?: false + diff?: false, ): MainMonacoContainerHook; export function useMonacoContainerFromContext( - diff = false + diff = false, ): MainMonacoContainerHook | DiffMonacoContainerHook { const context = useContext(MonacoContext); if (!context) { throw new Error( - "Cannot call useMonacoContainerFromContext from outside of MonacoContainerProvider" + "Cannot call useMonacoContainerFromContext from outside of MonacoContainerProvider", ); } diff --git a/apps/sim-core/packages/core/src/components/TabbedEditor/types.ts b/apps/sim-core/packages/core/src/components/TabbedEditor/types.ts index 1711ea2..a29c6a3 100644 --- a/apps/sim-core/packages/core/src/components/TabbedEditor/types.ts +++ b/apps/sim-core/packages/core/src/components/TabbedEditor/types.ts @@ -1,32 +1,33 @@ import { editor } from "monaco-editor"; export type EditorInstance = editor.IStandaloneCodeEditor; -export type EditorConstructionsOptions = editor.IStandaloneEditorConstructionOptions; +export type EditorConstructionsOptions = + editor.IStandaloneEditorConstructionOptions; export type DiffEditorInstance = editor.IStandaloneDiffEditor; export type ViewState = editor.ICodeEditorViewState; export type TextModel = editor.ITextModel; export type DiffEditorModel = editor.IDiffEditorModel; -export type EditorOptions = { +export interface EditorOptions { tabSize?: number; readOnly?: boolean; wordWrap?: "off" | "on" | "wordWrapColumn" | "bounded"; wordWrapColumn?: number; -}; +} -export type ModelProperties = { +export interface ModelProperties { value: string; path: string; language?: string; options?: EditorOptions; onChange?: (textModel: TextModel) => void; -}; +} -export type EditorTab = { +export interface EditorTab { key: string; title: string; onChangeTitle?: (value: string) => void; onRemoveTab?: () => void; description: string; model: ModelProperties; -}; +} diff --git a/apps/sim-core/packages/core/src/components/TabbedEditor/utils/restoreEditorState.ts b/apps/sim-core/packages/core/src/components/TabbedEditor/utils/restoreEditorState.ts index 4629fad..38df055 100644 --- a/apps/sim-core/packages/core/src/components/TabbedEditor/utils/restoreEditorState.ts +++ b/apps/sim-core/packages/core/src/components/TabbedEditor/utils/restoreEditorState.ts @@ -10,7 +10,7 @@ export function restoreEditorState( editorInstance: EditorInstance, textModel: TextModel, viewState: ViewState | null | undefined, - options: EditorOptions + options: EditorOptions, ) { if (!textModel.isDisposed()) { setMonacoModel(editorInstance, textModel); diff --git a/apps/sim-core/packages/core/src/components/Toast/LegacySimulationAccess/ToastLegacySimulationAccess.tsx b/apps/sim-core/packages/core/src/components/Toast/LegacySimulationAccess/ToastLegacySimulationAccess.tsx index 4112865..7db3bac 100644 --- a/apps/sim-core/packages/core/src/components/Toast/LegacySimulationAccess/ToastLegacySimulationAccess.tsx +++ b/apps/sim-core/packages/core/src/components/Toast/LegacySimulationAccess/ToastLegacySimulationAccess.tsx @@ -28,7 +28,7 @@ export const ToastLegacySimulationAccess: FC<{ nextToast: ToastKind }> = ({ trackEvent({ action: "Legacy Simulation URL Accessed", label: projectUrl, - }) + }), ); }, [dispatch, projectUrl]); diff --git a/apps/sim-core/packages/core/src/components/Toast/ProjectEditable/ProjectEditable.tsx b/apps/sim-core/packages/core/src/components/Toast/ProjectEditable/ProjectEditable.tsx index f0f3ff0..b76b97e 100644 --- a/apps/sim-core/packages/core/src/components/Toast/ProjectEditable/ProjectEditable.tsx +++ b/apps/sim-core/packages/core/src/components/Toast/ProjectEditable/ProjectEditable.tsx @@ -12,7 +12,7 @@ export const ToastProjectEditable: FC<{ }> = ({ project }) => { if (!project.latestRelease || !isProjectLatest(project)) { throw new Error( - "Cannot load ToastProjectEditable for simulation without latest release" + "Cannot load ToastProjectEditable for simulation without latest release", ); } diff --git a/apps/sim-core/packages/core/src/components/Toast/ReadOnlyRelease/ToastReadOnlyRelease.tsx b/apps/sim-core/packages/core/src/components/Toast/ReadOnlyRelease/ToastReadOnlyRelease.tsx index b8a869d..652b132 100644 --- a/apps/sim-core/packages/core/src/components/Toast/ReadOnlyRelease/ToastReadOnlyRelease.tsx +++ b/apps/sim-core/packages/core/src/components/Toast/ReadOnlyRelease/ToastReadOnlyRelease.tsx @@ -14,7 +14,7 @@ export const ToastReadOnlyRelease: FC<{ }> = ({ project }) => { if (isProjectLatest(project)) { throw new Error( - "Cannot load ToastReadOnlyRelease for latest copy of a project" + "Cannot load ToastReadOnlyRelease for latest copy of a project", ); } diff --git a/apps/sim-core/packages/core/src/components/Toast/ReleaseBehaviorSuccess/ToastReleaseBehaviorSuccess.spec.tsx b/apps/sim-core/packages/core/src/components/Toast/ReleaseBehaviorSuccess/ToastReleaseBehaviorSuccess.spec.tsx index bb07ff9..53f7218 100644 --- a/apps/sim-core/packages/core/src/components/Toast/ReleaseBehaviorSuccess/ToastReleaseBehaviorSuccess.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Toast/ReleaseBehaviorSuccess/ToastReleaseBehaviorSuccess.spec.tsx @@ -15,7 +15,7 @@ it("renders without crashing", () => { files={[{ path: parse("@foo/bar/baz.js") } as HcSharedBehaviorFile]} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Toast/ReleaseSuccess/ToastReleaseSuccess.spec.tsx b/apps/sim-core/packages/core/src/components/Toast/ReleaseSuccess/ToastReleaseSuccess.spec.tsx index 607f01d..0ad29ef 100644 --- a/apps/sim-core/packages/core/src/components/Toast/ReleaseSuccess/ToastReleaseSuccess.spec.tsx +++ b/apps/sim-core/packages/core/src/components/Toast/ReleaseSuccess/ToastReleaseSuccess.spec.tsx @@ -17,7 +17,7 @@ it("renders without crashing", () => { }} /> , - div + div, ); ReactDOM.unmountComponentAtNode(div); }); diff --git a/apps/sim-core/packages/core/src/components/Toast/ReleaseSuccess/ToastReleaseSuccess.tsx b/apps/sim-core/packages/core/src/components/Toast/ReleaseSuccess/ToastReleaseSuccess.tsx index 7d770f4..1d23d5d 100644 --- a/apps/sim-core/packages/core/src/components/Toast/ReleaseSuccess/ToastReleaseSuccess.tsx +++ b/apps/sim-core/packages/core/src/components/Toast/ReleaseSuccess/ToastReleaseSuccess.tsx @@ -6,21 +6,21 @@ import { ToastAnchor } from "../Anchor"; import { urlFromProject } from "../../../routes"; import { useSafeQueryParams } from "../../../hooks/useSafeQueryParams"; -type ToastPublishSuccessProps = { +interface ToastPublishSuccessProps { project: Pick & { latestRelease?: Pick< NonNullable, "tag" > | null; }; -}; +} export const ToastReleaseSuccess: FC = ({ project, }) => { if (!project.latestRelease) { throw new Error( - "Cannot show release success toast for project that has no release" + "Cannot show release success toast for project that has no release", ); } diff --git a/apps/sim-core/packages/core/src/components/Toast/types.ts b/apps/sim-core/packages/core/src/components/Toast/types.ts index aa8dbcc..22bc36e 100644 --- a/apps/sim-core/packages/core/src/components/Toast/types.ts +++ b/apps/sim-core/packages/core/src/components/Toast/types.ts @@ -6,8 +6,8 @@ export type ToastTheme = | "error" // "red" | "info"; // "white" -export type ToastProps = { +export interface ToastProps { theme?: ToastTheme; isDismissable?: boolean; dismiss: MouseEventHandler; -}; +} diff --git a/apps/sim-core/packages/core/src/components/WrappedSplitterLayout/WrappedSplitterLayout.tsx b/apps/sim-core/packages/core/src/components/WrappedSplitterLayout/WrappedSplitterLayout.tsx index e642e07..abcc5fb 100644 --- a/apps/sim-core/packages/core/src/components/WrappedSplitterLayout/WrappedSplitterLayout.tsx +++ b/apps/sim-core/packages/core/src/components/WrappedSplitterLayout/WrappedSplitterLayout.tsx @@ -24,7 +24,7 @@ interface SplitterLayoutPrivateAPI { * This messes with resizing panes when the mouse moves over the iframe. * @see https://github.com/zesik/react-splitter-layout/issues/7 */ -const setIframeInteractivity = (interactive: boolean = true) => { +const setIframeInteractivity = (interactive = true) => { const iframes = document.getElementsByTagName("iframe"); for (const iframe of iframes) { iframe.style.pointerEvents = interactive ? "all" : "none"; @@ -90,9 +90,9 @@ export const WrappedSplitterLayout: FC< onDragStart={() => setIframeInteractivity(false)} onSecondaryPaneSizeChange={(secondary) => { if (ref.current) { - const container = ref.current.container as HTMLElement; + const container = ref.current.container; const secondaryPane = Array.from(container.children).find((node) => - node.matches(".layout-pane:not(.layout-pane-primary)") + node.matches(".layout-pane:not(.layout-pane-primary)"), )!; const totalBox = container.getBoundingClientRect(); diff --git a/apps/sim-core/packages/core/src/embed.html b/apps/sim-core/packages/core/src/embed.html new file mode 100644 index 0000000..fed4d95 --- /dev/null +++ b/apps/sim-core/packages/core/src/embed.html @@ -0,0 +1,41 @@ + + + + HASH Core + + + + + + + + + + + + + + + + +
      + + + + diff --git a/apps/sim-core/packages/core/src/embed.tsx b/apps/sim-core/packages/core/src/embed.tsx index faf542a..752b951 100644 --- a/apps/sim-core/packages/core/src/embed.tsx +++ b/apps/sim-core/packages/core/src/embed.tsx @@ -16,7 +16,7 @@ const params = getEmbedParams(); const projectPromise = unpreparedProjectByPath( params.project, params.ref, - params.access?.code + params.access?.code, ); // @todo remove this const basicUserPromise = basicUser(); diff --git a/apps/sim-core/packages/core/src/features/actions.ts b/apps/sim-core/packages/core/src/features/actions.ts index f70ad1d..073901d 100644 --- a/apps/sim-core/packages/core/src/features/actions.ts +++ b/apps/sim-core/packages/core/src/features/actions.ts @@ -14,7 +14,7 @@ import { CommitWithoutStats } from "../util/api/queries/commitActions"; import { FileAction } from "./files/types"; import { Scope, batchedScopes } from "./scopes"; -type SetProjectParams = { +interface SetProjectParams { project: SimulationProjectWithHcFiles | LocalStorageProject; meta: { fromLegacy?: boolean; @@ -22,7 +22,7 @@ type SetProjectParams = { file?: string; }; scopes: Record; -}; +} /** * @todo this should handle navigate * @todo this will need to be handled in the examples / user projects in case @@ -33,17 +33,19 @@ type SetProjectParams = { */ export const setProject = createAction("shared/setProject"); -export const setProjectWithMeta = ( - project: SetProjectParams["project"], - meta: SetProjectParams["meta"] = {} -): AppThunk => (dispatch, getState) => - dispatch( - setProject({ - project, - meta, - scopes: batchedScopes.selectScopes(getState())(project), - }) - ); +export const setProjectWithMeta = + ( + project: SetProjectParams["project"], + meta: SetProjectParams["meta"] = {}, + ): AppThunk => + (dispatch, getState) => + dispatch( + setProject({ + project, + meta, + scopes: batchedScopes.selectScopes(getState())(project), + }), + ); export const projectUpdated = createAction<{ updatedAt: string; @@ -53,7 +55,7 @@ export const projectUpdated = createAction<{ }>("shared/projectUpdated"); export const canUserEditProjectUpdate = createAction( - "shared/canUserEditProjectUpdate" + "shared/canUserEditProjectUpdate", ); export const beginActionSave = createAction("shared/beginActionSave"); diff --git a/apps/sim-core/packages/core/src/features/analysis/analysisJsonTypes.ts b/apps/sim-core/packages/core/src/features/analysis/analysisJsonTypes.ts index 50fa521..fef1dba 100644 --- a/apps/sim-core/packages/core/src/features/analysis/analysisJsonTypes.ts +++ b/apps/sim-core/packages/core/src/features/analysis/analysisJsonTypes.ts @@ -26,9 +26,9 @@ export enum CountOperator { "count" = "count", } -export type SingleStepAggregationOperation = { +export interface SingleStepAggregationOperation { op: CountOperator | AggregatorOperator; -}; +} // 2. Gets the max/min/mean/sum of a value across ALL steps in a simulation // QUESTION: up to the current step shown, or just across all steps? @@ -42,11 +42,11 @@ export enum CumulativeAggregateOperator { "aggregate" = "aggregate", } -export type CumulativeAggregationOperation = { +export interface CumulativeAggregationOperation { op: CumulativeAggregateOperator.aggregate; by: AggregatorOperator; range?: number; // <-- if supplied, aggregates across the previous n steps only -}; +} // both of these will distill an array of numbers to a single number export type AggregationOperation = @@ -64,79 +64,79 @@ export enum FilterComparator { export enum FilterOperator { "filter" = "filter", } -export type FilterOperation = { +export interface FilterOperation { op: FilterOperator.filter; field: string | number; // TODO: why is this a number? comparison: FilterComparator; value: string | number | boolean | null; -}; +} export enum GetOperator { "get" = "get", } -export type GetOperation = { +export interface GetOperation { op: "get"; field: string | number; // might be an array index -}; +} export type OutputOperation = | AggregationOperation | FilterOperation | GetOperation; -export type Output = { [title: string]: OutputOperation[] }; +export type Output = Record; // --------------------- PLOTS ------------------------- // -export type XDataPoint = { +export interface XDataPoint { x: string; name?: string; -}; +} -export type XDataPoints = { +export interface XDataPoints { x: string[]; name?: string[]; -}; +} -export type YDataPoint = { +export interface YDataPoint { y: string; name?: string; -}; +} -export type YDataPoints = { +export interface YDataPoints { y: string[]; name?: string[]; -}; +} export type YAndXDataPoints = YDataPoints & XDataPoints; export type YPointAndOptionalXPoint = (XDataPoint | YDataPoint) | YDataPoints; -export type ZDataPoints = { +export interface ZDataPoints { z: string; -}; +} // TODO: Force this to be an array, because a single bar bar chart is not very interesting. -export type BarChart = { +export interface BarChart { type: "bar"; data: YDataPoint | YDataPoint[]; -}; +} -export type BoxPlot = { +export interface BoxPlot { type: "box"; data: YDataPoint | YDataPoint[]; -}; +} -export type Histogram = { +export interface Histogram { type: "histogram"; data: XDataPoint | XDataPoint[] | YDataPoint | YDataPoint[]; -}; +} -export type Timeseries = { +export interface Timeseries { type: "timeseries"; data: YDataPoint[]; -}; +} // Selection of charts which can be used to map an output z of interest // against parameters x and y varied in an experiment. @@ -145,24 +145,24 @@ export type Timeseries = { // or an SingleStepAggregationOperation // - in which case the chart updates per step with the different value of z. // The former is probably more useful. -export type TwoParameterExperimentChart = { +export interface TwoParameterExperimentChart { type: "contour" | "heatmap" | "line3d" | "scatter3d"; data: ZDataPoints[]; // z: string; // must refer to an output that ends in an AggregationOperation // DataSource not needed as it cannot be timeseries (?) -}; +} export type LineOrScatterDataType = YPointAndOptionalXPoint[]; -export type Line = { +export interface Line { type: "line"; data: LineOrScatterDataType[]; -}; +} -export type Scatter = { +export interface Scatter { type: "scatter"; data: LineOrScatterDataType[]; -}; +} export type Chart = | BarChart @@ -173,9 +173,9 @@ export type Chart = | Scatter; // | TwoParameterExperimentChart; -export type TimeseriesShortcut = { +export interface TimeseriesShortcut { timeseries?: string[]; -}; +} // this could be a generic: Plot. export type Plot = { @@ -196,9 +196,12 @@ export type Plot = { * @todo this should just be ParsedAnalysis (which is just Json) – we're assuming * too much about it */ -export type UncheckedAnalysisJson = { +export interface UncheckedAnalysisJson { outputs: Partial; plots: Partial; -}; +} -export type AnalysisJson = { outputs: Output; plots: Plot[] }; +export interface AnalysisJson { + outputs: Output; + plots: Plot[]; +} diff --git a/apps/sim-core/packages/core/src/features/analysis/analysisJsonValidation.test.ts b/apps/sim-core/packages/core/src/features/analysis/analysisJsonValidation.test.ts index e103f91..dd4cfc2 100644 --- a/apps/sim-core/packages/core/src/features/analysis/analysisJsonValidation.test.ts +++ b/apps/sim-core/packages/core/src/features/analysis/analysisJsonValidation.test.ts @@ -1,4 +1,5 @@ -// @ts-nocheck +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-nocheck types are loose in the testing world import { AggregatorOperator, AnalysisJson, @@ -66,7 +67,7 @@ const expectErrorToBeAndContain = ( error: any, parentErrorType: any, errorType: any, - messageShouldContain: string + messageShouldContain: string, ) => { expectErrorToBe(error, parentErrorType, errorType); expect(error.message).toContain(messageShouldContain); @@ -76,7 +77,7 @@ const expectErrorToMatchExactly = ( error: any, parentErrorType: any, errorType: any, - messageShouldBe: string + messageShouldBe: string, ) => { expectErrorToBe(error, parentErrorType, errorType); expect(error.message).toBe(messageShouldBe); @@ -89,7 +90,7 @@ describe("validateOutputOperation", () => { expectErrorToBe( error, OutputOperationError, - OutputOperationIsMissingOperationError + OutputOperationIsMissingOperationError, ); }); @@ -118,9 +119,9 @@ describe("validateOutputOperation", () => { expectErrorToBe( error, OutputOperationError, - OutputOperationHasExtraFieldsError + OutputOperationHasExtraFieldsError, ); - } + }, ); test.each(singleOps)( @@ -129,8 +130,8 @@ describe("validateOutputOperation", () => { expect( validateOutputOperation({ op: operationName, - }) - ).toBe(true) + }), + ).toBe(true), ); // Operation is missing required fields (by) @@ -142,7 +143,7 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationIsMissingRequiredFieldsError, - '"by"' + '"by"', ); // "by" is the field that is missing }); @@ -156,7 +157,7 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationHasInvalidValuesError, - '"by"' + '"by"', ); // "by" is the field that is missing }); @@ -171,7 +172,7 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationMustBeANumberError, - "range" + "range", ); // "range" is the field that has incorrect values }); @@ -180,7 +181,7 @@ describe("validateOutputOperation", () => { validateOutputOperation({ op: CumulativeAggregateOperator.aggregate, by: AggregatorOperator.sum, - }) + }), ).toBe(true)); // the fields "field", "comparison" and "value" must be present @@ -196,7 +197,7 @@ describe("validateOutputOperation", () => { expect(error).toBeInstanceOf(OutputOperationError); expect(error).toBeInstanceOf(OutputOperationIsMissingRequiredFieldsError); expect(error.message).not.toContain(`"${fieldName}"`); - } + }, ); // we must not have extra fields @@ -212,7 +213,7 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationHasExtraFieldsError, - "iAmAnExtraField" + "iAmAnExtraField", ); }); @@ -228,7 +229,7 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationMustBeANumberOrStringError, - '"field"' + '"field"', ); }); @@ -244,44 +245,44 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationHasInvalidValuesError, - "comparison" + "comparison", ); // should also show all the valid values expectErrorToBeAndContain( error, OutputOperationError, OutputOperationHasInvalidValuesError, - FilterComparator.eq + FilterComparator.eq, ); expectErrorToBeAndContain( error, OutputOperationError, OutputOperationHasInvalidValuesError, - FilterComparator.neq + FilterComparator.neq, ); expectErrorToBeAndContain( error, OutputOperationError, OutputOperationHasInvalidValuesError, - FilterComparator.gt + FilterComparator.gt, ); expectErrorToBeAndContain( error, OutputOperationError, OutputOperationHasInvalidValuesError, - FilterComparator.gte + FilterComparator.gte, ); expectErrorToBeAndContain( error, OutputOperationError, OutputOperationHasInvalidValuesError, - FilterComparator.lt + FilterComparator.lt, ); expectErrorToBeAndContain( error, OutputOperationError, OutputOperationHasInvalidValuesError, - FilterComparator.lte + FilterComparator.lte, ); }); @@ -297,32 +298,32 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationHasComplexValuesError, - "value" + "value", ); // should show valid values expectErrorToBeAndContain( error, OutputOperationError, OutputOperationHasComplexValuesError, - "string" + "string", ); expectErrorToBeAndContain( error, OutputOperationError, OutputOperationHasComplexValuesError, - "string[]" + "string[]", ); expectErrorToBeAndContain( error, OutputOperationError, OutputOperationHasComplexValuesError, - "number" + "number", ); expectErrorToBeAndContain( error, OutputOperationError, OutputOperationHasComplexValuesError, - "number[]" + "number[]", ); }); @@ -338,13 +339,13 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationGetBooleanFilterIsUsingWrongComparisonError, - message + message, ); }); // - "filter" on a non-any typed field must have a value of the same type test.todo( - "Filter: Throws OutputOperationFilterMustBeTheSameTypeAsTheValue. Missing implementation until we pass the Behavior Keys to this method" + "Filter: Throws OutputOperationFilterMustBeTheSameTypeAsTheValue. Missing implementation until we pass the Behavior Keys to this method", ); test("Filter: success case", () => expect( @@ -353,7 +354,7 @@ describe("validateOutputOperation", () => { field: "age", comparison: FilterComparator.gte, value: 5, - }) + }), ).toBe(true)); test("Get: Throws OutputOperationIsMissingRequiredFieldsError (missing 'field' parameter)", () => { @@ -364,7 +365,7 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationIsMissingRequiredFieldsError, - '"field"' + '"field"', ); // "field" is the field that is missing }); @@ -378,7 +379,7 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationHasExtraFieldsError, - "iAmAnExtraField" + "iAmAnExtraField", ); // "IAmAnExtraField" is the field that shouldn't be there }); @@ -391,7 +392,7 @@ describe("validateOutputOperation", () => { error, OutputOperationError, OutputOperationMustBeANumberOrStringError, - "field" + "field", ); // "field" is the field that has wrong values }); @@ -400,7 +401,7 @@ describe("validateOutputOperation", () => { validateOutputOperation({ op: GetOperator.get, field: "age", - }) + }), ).toBe(true); }); }); @@ -413,7 +414,7 @@ describe("validateOutput", () => { error, OperationChainError, OperationChainMustBeAnArrayError, - 'The operation chain must be an array. You provided "object".' + 'The operation chain must be an array. You provided "object".', ); }); @@ -424,7 +425,7 @@ describe("validateOutput", () => { error, OperationChainError, OperationChainMustContainAtLeastOneOperationError, - "The operation chain must contain at least one operation." + "The operation chain must contain at least one operation.", ); }); @@ -439,7 +440,7 @@ describe("validateOutput", () => { error, OperationChainError, OperationChainCantHaveAnyOperationAfterAnAggregationOperationError, - "The operation chain can't have any operation after an aggregation operation." + "The operation chain can't have any operation after an aggregation operation.", ); }); @@ -454,7 +455,7 @@ describe("validateOutput", () => { error, OperationChainError, OperationChainCantHaveAnyOperationAfterAnAggregationOperationError, - `The operation chain for the "outputKeyNameGoesHere" metric can't have any operation after an aggregation operation.` + `The operation chain for the "outputKeyNameGoesHere" metric can't have any operation after an aggregation operation.`, ); }); @@ -465,7 +466,7 @@ describe("validateOutput", () => { error, OperationChainError, OperationChainFirstGetFieldMustBeAStringError, - 'Your first "get" operation must access the "field" using a string.' + 'Your first "get" operation must access the "field" using a string.', ); }); @@ -476,7 +477,7 @@ describe("validateOutput", () => { error, OperationChainError, OperationChainFirstGetFieldMustBeAStringError, - 'Your first "get" operation must access the "field" using a string.' + 'Your first "get" operation must access the "field" using a string.', ); }); @@ -487,7 +488,7 @@ describe("validateOutput", () => { error, OperationChainError, OperationChainFirstGetFieldMustBeAStringError, - 'Your first "get" operation must access the "field" using a string.' + 'Your first "get" operation must access the "field" using a string.', ); }); @@ -504,7 +505,7 @@ describe("validateOutput", () => { error, OperationChainError, OperationChainFirstOperationCanNotBeAnAggregationError, - message + message, ); }); @@ -539,7 +540,7 @@ describe("validateAnalysisJson", () => { errors[0], AnalysisJsonError, AnalysisJsonHasNoOutputsError, - message + message, ); }); @@ -567,14 +568,14 @@ describe("validateAnalysisJson", () => { const errors = validateAnalysisJson(parsedJson).warnings; const unusedOutputs = ["feature_2"]; const message = `The following outputs are unused: "${unusedOutputs.join( - "," + ",", )}". Please remove them or use them in a plot.`; expect(errors.length).toBeGreaterThan(0); expectErrorToMatchExactly( errors[0], AnalysisJsonError, AnalysisJsonHasUnusedOutputsWarning, - message + message, ); }); @@ -602,7 +603,7 @@ describe("validateAnalysisJson", () => { errors[0], OperationChainError, OperationChainMustBeAnArrayError, - message + message, ); }); @@ -637,7 +638,7 @@ describe("validateAnalysisJson", () => { errors[0], PlotError, PlotHasNoTitleError, - message + message, ); }); @@ -688,7 +689,7 @@ describe("validatePlot", () => { error, PlotError, PlotHasNoTitleError, - `The plot is either missing the required "title" property or it is an empty string.` + `The plot is either missing the required "title" property or it is an empty string.`, ); }); @@ -699,33 +700,33 @@ describe("validatePlot", () => { error, PlotError, PlotIsMissingLayoutComponentError, - message + message, ); }); test("returns PlotIsMissingLayoutComponentError (missing height)", () => { const error = validatePlot( { title, layout: { width: "100%" } }, - defaultOutputs + defaultOutputs, ); expectErrorToMatchExactly( error, PlotError, PlotIsMissingLayoutComponentError, - `The plot titled "${title}" is missing the "height" property.` + `The plot titled "${title}" is missing the "height" property.`, ); }); test("returns PlotIsMissingLayoutComponentError (missing width)", () => { const error = validatePlot( { title, layout: { height: "100%" } }, - defaultOutputs + defaultOutputs, ); expectErrorToMatchExactly( error, PlotError, PlotIsMissingLayoutComponentError, - `The plot titled "${title}" is missing the "width" property.` + `The plot titled "${title}" is missing the "width" property.`, ); }); @@ -736,42 +737,42 @@ describe("validatePlot", () => { error, PlotError, PlotIsMissingPositionComponentError, - message + message, ); }); test("returns PlotIsMissingPositionComponentError (missing x)", () => { const error = validatePlot( { title, position: { y: "50%" } }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is missing the "x" property. Valid values are percentages. Example: "50%".`; expectErrorToMatchExactly( error, PlotError, PlotIsMissingPositionComponentError, - message + message, ); }); test("returns PlotIsMissingPositionComponentError (missing y)", () => { const error = validatePlot( { title, position: { x: "50%" } }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is missing the "y" property. Valid values are percentages. Example: "50%".`; expectErrorToMatchExactly( error, PlotError, PlotIsMissingPositionComponentError, - message + message, ); }); test("returns PlotHasNoTypeError", () => { const error = validatePlot({ title }, defaultOutputs); const message = `The plot titled "${title}" does not have a "type" property. Valid values are "${getValidPlotTypes().join( - "," + ",", )}".`; expectErrorToMatchExactly(error, PlotError, PlotHasNoTypeError, message); }); @@ -779,16 +780,16 @@ describe("validatePlot", () => { test("returns UnhandledPlotTypeError", () => { const error = validatePlot( { title, type: "super invalid type right here" }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has an invalid value (super invalid type right here) for the "type" property. Valid values are "${getValidPlotTypes().join( - "," + ",", )}"`; expectErrorToMatchExactly( error, PlotError, UnhandledPlotTypeError, - message + message, ); }); @@ -805,14 +806,14 @@ describe("validatePlot", () => { type: "bar", data: {}, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has an empty object in the "data" property.`; expectErrorToMatchExactly( error, PlotError, PlotHasEmptyDataObjectError, - message + message, ); }); @@ -829,14 +830,14 @@ describe("validatePlot", () => { }, ], }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has extra fields under the "data" property. The shape of this object must match "YDataPoints".`; expectErrorToMatchExactly( error, PlotError, PlotHasExtraDataFieldsError, - message + message, ); }); @@ -857,14 +858,14 @@ describe("validatePlot", () => { { op: GetOperator.get, field: "a" }, { op: AggregatorOperator.mean }, ], - } + }, ); const message = `The plot titled "${title}" is using an incorrect shape for the "data" property. It is expecting "YDataPoints" but you provided "XDataPoints"`; expectErrorToMatchExactly( error, PlotError, PlotHasTheWrongKindOfDataError, - message + message, ); }); @@ -880,14 +881,14 @@ describe("validatePlot", () => { }, ], }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is using an incorrect shape for the "data" property. It is expecting "YDataPoints" but you provided "ZDataPoints"`; expectErrorToMatchExactly( error, PlotError, PlotHasTheWrongKindOfDataError, - message + message, ); }); @@ -902,14 +903,14 @@ describe("validatePlot", () => { }, ], }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is missing the "data.y" property, which must be of type "string".`; expectErrorToMatchExactly( error, PlotError, PlotIsMissingYDataPointsComponentError, - message + message, ); }); @@ -923,14 +924,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "a" inside of the "data.y" property.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); }); @@ -958,7 +959,7 @@ describe("validatePlot", () => { }, { op: GetOperator.get, field: "age " }, ], - } + }, ); const message = `The plot titled "${title}" is using an incorrect type for the "data.y" property. It must be a string, but you provided "array".`; @@ -966,7 +967,7 @@ describe("validatePlot", () => { error, PlotError, PlotHasTheWrongTypeForYDataPointComponentError, - message + message, ); }); @@ -996,14 +997,14 @@ describe("validatePlot", () => { }, { op: GetOperator.get, field: "age " }, ], - } + }, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "hellu" inside of the "data.y" property. Did you mean "hello"?.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); }); @@ -1033,14 +1034,14 @@ describe("validatePlot", () => { }, { op: GetOperator.get, field: "age " }, ], - } + }, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "arkansas" inside of the "data.y" property.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); }); @@ -1067,7 +1068,7 @@ describe("validatePlot", () => { }, { op: GetOperator.get, field: "age " }, ], - } + }, ); const message = `The plot titled "${title}" is referencing the output "hello" which does not end in an Aggregation Operation. Valid values are "max, min, mean, sum, count".`; @@ -1075,7 +1076,7 @@ describe("validatePlot", () => { error, PlotError, PlotUsedOutputMustEndInAggregationOperationError, - message + message, ); }); @@ -1086,14 +1087,14 @@ describe("validatePlot", () => { type: "box", data: {}, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has an empty object in the "data" property.`; expectErrorToMatchExactly( error, PlotError, PlotHasEmptyDataObjectError, - message + message, ); }); @@ -1108,14 +1109,14 @@ describe("validatePlot", () => { extraProperty: "that shouldnt exist", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has extra fields under the "data" property. The shape of this object must match "YDataPoints".`; expectErrorToMatchExactly( error, PlotError, PlotHasExtraDataFieldsError, - message + message, ); }); @@ -1129,14 +1130,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is using an incorrect shape for the "data" property. It is expecting "YDataPoints" but you provided "XDataPoints"`; expectErrorToMatchExactly( error, PlotError, PlotHasTheWrongKindOfDataError, - message + message, ); }); @@ -1150,14 +1151,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is using an incorrect shape for the "data" property. It is expecting "YDataPoints" but you provided "ZDataPoints"`; expectErrorToMatchExactly( error, PlotError, PlotHasTheWrongKindOfDataError, - message + message, ); }); @@ -1170,14 +1171,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is missing the "data.y" property, which must be of type "string".`; expectErrorToMatchExactly( error, PlotError, PlotIsMissingYDataPointsComponentError, - message + message, ); }); @@ -1191,14 +1192,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "a" inside of the "data.y" property.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); }); @@ -1226,14 +1227,14 @@ describe("validatePlot", () => { }, { op: GetOperator.get, field: "age " }, ], - } + }, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "hellu" inside of the "data.y" property. Did you mean "hello"?.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); }); @@ -1253,16 +1254,16 @@ describe("validatePlot", () => { type, data: {}, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has an empty "data" property. It must contain an array of objects matching the shape of "ZDataPoints".`; expectErrorToMatchExactly( error, PlotError, PlotDataIsNotAnArrayError, - message + message, ); - } + }, ); test.skip.each(TwoParameterExperimentTypes)( "Plot type: %s -> Throws PlotHasExtraDataFields", @@ -1276,16 +1277,16 @@ describe("validatePlot", () => { extraProp: true, }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has extra fields under the "data" property. The shape of this object must match "ZDataPoints".`; expectErrorToMatchExactly( error, PlotError, PlotHasExtraDataFieldsError, - message + message, ); - } + }, ); test.skip.each(TwoParameterExperimentTypes)( @@ -1299,16 +1300,16 @@ describe("validatePlot", () => { x: "test", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is using an incorrect shape for the "data" property. It is expecting "ZDataPoints" but you provided "XDataPoints"`; expectErrorToMatchExactly( error, PlotError, PlotHasTheWrongKindOfDataError, - message + message, ); - } + }, ); test.skip.each(TwoParameterExperimentTypes)( @@ -1322,16 +1323,16 @@ describe("validatePlot", () => { y: "test", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is using an incorrect shape for the "data" property. It is expecting "ZDataPoints" but you provided "YDataPoints"`; expectErrorToMatchExactly( error, PlotError, PlotHasTheWrongKindOfDataError, - message + message, ); - } + }, ); test.skip.each(TwoParameterExperimentTypes)( @@ -1345,16 +1346,16 @@ describe("validatePlot", () => { z: "abracadabra", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "abracadabra" inside of the "data.z" property.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); - } + }, ); test.skip.each(TwoParameterExperimentTypes)( @@ -1382,16 +1383,16 @@ describe("validatePlot", () => { }, { op: GetOperator.get, field: "age " }, ], - } + }, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "countour" inside of the "data.z" property. Did you mean "contour"?.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); - } + }, ); test.skip.each(TwoParameterExperimentTypes)( @@ -1419,16 +1420,16 @@ describe("validatePlot", () => { }, { op: GetOperator.get, field: "age " }, ], - } + }, ); const message = `The plot titled "${title}" is referencing the output "contour" which does not end in an Aggregation Operation. Valid values are "max, min, mean, sum, count".`; expectErrorToMatchExactly( error, PlotError, PlotUsedOutputMustEndInAggregationOperationError, - message + message, ); - } + }, ); test.todo("TwoParameterExperiment: PlotIsMissingZDataPointsComponent"); @@ -1458,10 +1459,10 @@ describe("validatePlot", () => { }, { op: GetOperator.get, field: "age " }, ], - } + }, ); expect(success).toBe(true); - } + }, ); test("Plot type: timeseries -> PlotDataIsNotAnArrayError", () => { @@ -1471,14 +1472,14 @@ describe("validatePlot", () => { type: "timeseries", data: {}, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has an empty object in the "data" property.`; expectErrorToMatchExactly( error, PlotError, PlotHasEmptyDataObjectError, - message + message, ); }); @@ -1493,14 +1494,14 @@ describe("validatePlot", () => { extraProperty: "that shouldnt exist", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has extra fields under the "data" property. The shape of this object must match "YDataPoints".`; expectErrorToMatchExactly( error, PlotError, PlotHasExtraDataFieldsError, - message + message, ); }); @@ -1514,14 +1515,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is using an incorrect shape for the "data" property. It is expecting "YDataPoints" but you provided "XDataPoints"`; expectErrorToMatchExactly( error, PlotError, PlotHasTheWrongKindOfDataError, - message + message, ); }); @@ -1535,14 +1536,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is using an incorrect shape for the "data" property. It is expecting "YDataPoints" but you provided "ZDataPoints"`; expectErrorToMatchExactly( error, PlotError, PlotHasTheWrongKindOfDataError, - message + message, ); }); @@ -1556,14 +1557,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "a" inside of the "data.y" property.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); }); @@ -1591,14 +1592,14 @@ describe("validatePlot", () => { }, { op: GetOperator.get, field: "age " }, ], - } + }, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "hellu" inside of the "data.y" property. Did you mean "hello"?.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); }); @@ -1611,14 +1612,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is missing the "data.y" property, which must be of type "string" or "string[]".`; expectErrorToMatchExactly( error, PlotError, PlotIsMissingYDataPointsComponentError, - message + message, ); }); @@ -1629,14 +1630,14 @@ describe("validatePlot", () => { type: "histogram", data: {}, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has an empty object in the "data" property.`; expectErrorToMatchExactly( error, PlotError, PlotHasEmptyDataObjectError, - message + message, ); }); @@ -1651,14 +1652,14 @@ describe("validatePlot", () => { extraProperty: "that shouldnt exist", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has extra fields under the "data" property. The shape of this object must match "XDataPoints or YDataPoints".`; expectErrorToMatchExactly( error, PlotError, PlotHasExtraDataFieldsError, - message + message, ); }); @@ -1672,14 +1673,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is using an incorrect shape for the "data" property. It is expecting "XDataPoints or YDataPoints" but you provided "ZDataPoints"`; expectErrorToMatchExactly( error, PlotError, PlotHasTheWrongKindOfDataError, - message + message, ); }); @@ -1693,14 +1694,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "a" inside of the "data.x" property.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); }); @@ -1728,14 +1729,14 @@ describe("validatePlot", () => { }, { op: GetOperator.get, field: "age " }, ], - } + }, ); const message = `The plot titled "${title}" is referencing an non-existing output metric titled "hellu" inside of the "data.x" property. Did you mean "hello"?.`; expectErrorToMatchExactly( error, PlotError, PlotIsReferencingNonExistingOutputError, - message + message, ); }); @@ -1748,14 +1749,14 @@ describe("validatePlot", () => { name: "a", }, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is missing both "data.x" and "data.y" properties, though only one can be used at a time. The value must be of type "string".`; expectErrorToMatchExactly( error, PlotError, PlotIsMissingYAndXDataPointsComponentError, - message + message, ); }); @@ -1767,11 +1768,11 @@ describe("validatePlot", () => { title, type, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" is missing the required "data" property. Depending on the Plot Type, it must contain an array of either XDataPoints, YDataPoints or ZDataPoints.`; expectErrorToMatchExactly(error, PlotError, PlotHasNoDataError, message); - } + }, ); test.each(["line", "scatter"])( @@ -1783,15 +1784,15 @@ describe("validatePlot", () => { type, data: {}, }, - defaultOutputs + defaultOutputs, ); const message = `The plot titled "${title}" has an empty object in the "data" property.`; expectErrorToMatchExactly( error, PlotError, PlotHasEmptyDataObjectError, - message + message, ); - } + }, ); }); diff --git a/apps/sim-core/packages/core/src/features/analysis/analysisJsonValidation.ts b/apps/sim-core/packages/core/src/features/analysis/analysisJsonValidation.ts index 67a0d9f..2a51659 100644 --- a/apps/sim-core/packages/core/src/features/analysis/analysisJsonValidation.ts +++ b/apps/sim-core/packages/core/src/features/analysis/analysisJsonValidation.ts @@ -83,9 +83,9 @@ type ValidateOutputOperationReturnType = // - an aggregate must have a valid 'by' // and so on, following the TypeScript typings in analysisJsonTypes. export const validateOutputOperation = ( - operation?: Partial + operation?: Partial, ): ValidateOutputOperationReturnType => { - if (!operation || !operation.op) { + if (!operation?.op) { return new OutputOperationIsMissingOperationError(); } const operationKeys = Object.keys(operation); @@ -101,7 +101,7 @@ export const validateOutputOperation = ( const extraFields = operationKeys.filter((key) => key !== "op"); return new OutputOperationHasExtraFieldsError( operation.op, - extraFields + extraFields, ); } break; @@ -109,7 +109,7 @@ export const validateOutputOperation = ( case CumulativeAggregateOperator.aggregate: { const aggregateOperation: CumulativeAggregationOperation = JSON.parse( - JSON.stringify(operation) + JSON.stringify(operation), ); const aggregationOperations = Object.values(AggregatorOperator); if (!aggregateOperation.by) { @@ -122,7 +122,7 @@ export const validateOutputOperation = ( return new OutputOperationHasInvalidValuesError( operation.op, "by", - aggregationOperations + aggregationOperations, ); } if ( @@ -137,27 +137,27 @@ export const validateOutputOperation = ( case FilterOperator.filter: { const filterOperation: FilterOperation = JSON.parse( - JSON.stringify(operation) + JSON.stringify(operation), ); const requiredFields = ["op", "field", "comparison", "value"]; if (operationHasMissingFields(operationKeys, requiredFields)) { return new OutputOperationIsMissingRequiredFieldsError( operation.op, - getMissingFields(operationKeys, requiredFields) + getMissingFields(operationKeys, requiredFields), ); } if (operationHasExtraFields(operationKeys, requiredFields)) { return new OutputOperationHasExtraFieldsError( operation.op, - getExtraFields(operationKeys, requiredFields) + getExtraFields(operationKeys, requiredFields), ); } if (!isStringOrNumber(filterOperation.field)) { return new OutputOperationMustBeANumberOrStringError( operation.op, - "field" + "field", ); } @@ -173,7 +173,7 @@ export const validateOutputOperation = ( return new OutputOperationHasInvalidValuesError( operation.op, "comparison", - validFilterComparators + validFilterComparators, ); } @@ -189,7 +189,7 @@ export const validateOutputOperation = ( filterOperation.comparison !== FilterComparator.neq ) { return new OutputOperationGetBooleanFilterIsUsingWrongComparisonError( - filterOperation.comparison + filterOperation.comparison, ); } // - "filter" on a non-any typed field must have a value of the same type @@ -203,19 +203,19 @@ export const validateOutputOperation = ( if (operationHasMissingFields(operationKeys, requiredFields)) { return new OutputOperationIsMissingRequiredFieldsError( operation.op, - getMissingFields(operationKeys, requiredFields) + getMissingFields(operationKeys, requiredFields), ); } if (operationHasExtraFields(operationKeys, requiredFields)) { return new OutputOperationHasExtraFieldsError( operation.op, - getExtraFields(operationKeys, requiredFields) + getExtraFields(operationKeys, requiredFields), ); } if (!isStringOrNumber(getOperation.field)) { return new OutputOperationMustBeANumberOrStringError( operation.op, - "field" + "field", ); } break; @@ -234,7 +234,7 @@ export const validateOutputOperation = ( */ export const validateOutput = ( outputs?: Partial, - outputKey?: string + outputKey?: string, ) => { if (!Array.isArray(outputs)) { return new OperationChainMustBeAnArrayError(outputs, outputKey); @@ -250,7 +250,7 @@ export const validateOutput = ( } if (isAnAggregationOperation(outputs[0])) { return new OperationChainFirstOperationCanNotBeAnAggregationError( - outputKey + outputKey, ); } for (let index = 0; index < outputs.length; index++) { @@ -259,14 +259,14 @@ export const validateOutput = ( index < outputs.length - 1 ) { return new OperationChainCantHaveAnyOperationAfterAnAggregationOperationError( - outputKey + outputKey, ); } } // 2. Run validateOutputOperation on each link in the chain. const results = outputs.map(validateOutputOperation); const errors = results.filter( - (result: any) => result instanceof OutputOperationError + (result: any) => result instanceof OutputOperationError, ); return errors.length > 0 ? errors : true; // - "filter" on a non-any typed field must have a value of the same type ❓ <-- delayed until we have Behavior Keys data fed into this method. @@ -274,7 +274,7 @@ export const validateOutput = ( export const validatePlot = ( plot?: Partial>, - outputs?: Partial + outputs?: Partial, ) => { if (!plot || !outputs) { // TODO: return error, but we shouldn't get to this situation @@ -293,28 +293,25 @@ export const validatePlot = ( return new PlotIsMissingLayoutComponentError( cleanPlot.title, cleanPlot.layout.height, - cleanPlot.layout.width + cleanPlot.layout.width, ); } if (cleanPlot.position && (!cleanPlot.position.x || !cleanPlot.position.y)) { return new PlotIsMissingPositionComponentError( cleanPlot.title, cleanPlot.position.x, - cleanPlot.position.y + cleanPlot.position.y, ); } if (!cleanPlot.type) { return new PlotHasNoTypeError(cleanPlot.title); } - // @ts-ignore it has been checked above if (!getValidPlotTypes().includes(cleanPlot.type)) { - // @ts-ignore return new UnhandledPlotTypeError(cleanPlot.title, cleanPlot.type); } if (!cleanPlot.data) { return new PlotHasNoDataError(cleanPlot.title); } - // @ts-ignore FIXME: since this went through standardizePlot, it's already an array for (const currentDataItem of cleanPlot.data) { if (Object.keys(currentDataItem).length === 0) { return new PlotHasEmptyDataObjectError(cleanPlot.title); @@ -338,7 +335,7 @@ export const validatePlot = ( // return TwoParameterExperimentChartValidator(cleanPlot, outputs); case "timeseries": { - // @ts-ignore FIXME: this is a cryptic error + // @ts-expect-error FIXME: this is a cryptic error return TimeseriesValidator(cleanPlot, outputs); } @@ -359,7 +356,7 @@ export const validatePlot = ( const generateValidateAnalysisJsonResult = ( success: boolean, warnings: any[], - errors: any[] + errors: any[], ) => ({ success, warnings, @@ -373,7 +370,7 @@ export const validateAnalysisJson = (parsedJson: UncheckedAnalysisJson) => { return generateValidateAnalysisJsonResult( false, [], - [new AnalysisJsonHasNoOutputsError()] + [new AnalysisJsonHasNoOutputsError()], ); } @@ -381,21 +378,21 @@ export const validateAnalysisJson = (parsedJson: UncheckedAnalysisJson) => { return generateValidateAnalysisJsonResult( false, [], - [new AnalysisJsonHasNoPlotsError()] + [new AnalysisJsonHasNoPlotsError()], ); } const errors: any = []; const warnings = []; - // @ts-ignore: at this point we know plots is an array + // @ts-expect-error: at this point we know plots is an array if (!allOutputsAreUsedInPlots(outputs, plots)) { warnings.push( - new AnalysisJsonHasUnusedOutputsWarning(getUnusedOutputs(outputs, plots)) + new AnalysisJsonHasUnusedOutputsWarning(getUnusedOutputs(outputs, plots)), ); } // data is not an array const dataIsNotAnArrayWarnings = getNonArrayPlotDataWarnings( - (plots as unknown) as Partial + plots as unknown as Partial, ); if (dataIsNotAnArrayWarnings.length > 0) { dataIsNotAnArrayWarnings.forEach((warning) => warnings.push(warning)); diff --git a/apps/sim-core/packages/core/src/features/analysis/errors.ts b/apps/sim-core/packages/core/src/features/analysis/errors.ts index 844391c..14968ce 100644 --- a/apps/sim-core/packages/core/src/features/analysis/errors.ts +++ b/apps/sim-core/packages/core/src/features/analysis/errors.ts @@ -26,7 +26,7 @@ const AllOutputOperations = [ export class NotImplementedError extends Error { constructor(operation: string) { super( - `The parser for the requested output operation "${operation}" hasn't been implemented yet, sorry` + `The parser for the requested output operation "${operation}" hasn't been implemented yet, sorry`, ); this.name = "OutputOperationNotImplementedError"; } @@ -42,7 +42,7 @@ export class OutputOperationIsMissingOperationError extends OutputOperationError constructor() { const possibleValues = AllOutputOperations.join(","); super( - `The operation does not contain an op field. The possible values for this field are ${possibleValues}` + `The operation does not contain an op field. The possible values for this field are ${possibleValues}`, ); this.name = "OutputOperationIsMissingOperationError"; } @@ -53,7 +53,7 @@ export class OutputOperationHasInvalidValuesError extends OutputOperationError { let message = `The operation "${operation}" has an invalid value for the field "${field}".`; if (possibleValues) { message = `${message} The possible values for this field are ${possibleValues.join( - "," + ",", )}`; } super(message); @@ -65,7 +65,7 @@ export class OutputOperationIsMissingRequiredFieldsError extends OutputOperation const singularOrPluralField = missingFields.length === 1 ? "field" : "fields"; const message = `The operation "${operation}" is missing the following required ${singularOrPluralField}: "${missingFields.join( - "," + ",", )}"`; super(message); this.name = "OutputOperationIsMissingRequiredFieldsError"; @@ -74,7 +74,7 @@ export class OutputOperationIsMissingRequiredFieldsError extends OutputOperation export class OutputOperationHasExtraFieldsError extends OutputOperationError { constructor(operation: string, extraFields: string[]) { const message = `The operation "${operation}" contains the following extra parameters: ${extraFields.join( - "," + ",", )}"`; super(message); this.name = "OutputOperationHasExtraFieldsError"; @@ -195,7 +195,7 @@ export class AnalysisJsonError extends Error { export class AnalysisJsonHasNoOutputsError extends AnalysisJsonError { constructor() { super( - `Your analysis.json file has no outputs metrics. Please create a new metric before continuing.` + `Your analysis.json file has no outputs metrics. Please create a new metric before continuing.`, ); this.name = "AnalysisJsonHasNoOutputsError"; } @@ -205,8 +205,8 @@ export class AnalysisJsonHasUnusedOutputsWarning extends AnalysisJsonError { constructor(unusedOutputs: string[]) { super( `The following outputs are unused: "${unusedOutputs.join( - "," - )}". Please remove them or use them in a plot.` + ",", + )}". Please remove them or use them in a plot.`, ); this.name = "AnalysisJsonHasUnusedOutputsWarning"; } @@ -215,7 +215,7 @@ export class AnalysisJsonHasUnusedOutputsWarning extends AnalysisJsonError { export class AnalysisJsonHasNoPlotsError extends AnalysisJsonError { constructor() { super( - `Your analysis.json file has no plots. Please create a new plot before continuing.` + `Your analysis.json file has no plots. Please create a new plot before continuing.`, ); this.name = "AnalysisJsonHasNoOutputsError"; } @@ -231,7 +231,7 @@ export class PlotError extends Error { export class PlotHasNoTitleError extends PlotError { constructor() { super( - `The plot is either missing the required "title" property or it is an empty string.` + `The plot is either missing the required "title" property or it is an empty string.`, ); this.name = "PlotHasNoTitleError"; } @@ -241,13 +241,13 @@ export class PlotIsMissingLayoutComponentError extends PlotError { const missingBoth = !height && !width; if (missingBoth) { super( - `The plot titled "${plotTitle}" is missing the "height" and "width" properties. Valid values are percentage or pixels. Examples: "50%" or "200px".` + `The plot titled "${plotTitle}" is missing the "height" and "width" properties. Valid values are percentage or pixels. Examples: "50%" or "200px".`, ); } else { super( `The plot titled "${plotTitle}" is missing the "${ height ? "width" : "height" - }" property.` + }" property.`, ); } this.name = "PlotIsMissingLayoutComponentError"; @@ -258,13 +258,13 @@ export class PlotIsMissingPositionComponentError extends PlotError { const missingBoth = !x && !y; if (missingBoth) { super( - `The plot titled "${plotTitle}" is missing the "x" and "y" properties. Valid values are percentages. Example: "50%".` + `The plot titled "${plotTitle}" is missing the "x" and "y" properties. Valid values are percentages. Example: "50%".`, ); } else { super( `The plot titled "${plotTitle}" is missing the "${ x ? "y" : "x" - }" property. Valid values are percentages. Example: "50%".` + }" property. Valid values are percentages. Example: "50%".`, ); } this.name = "PlotIsMissingPositionComponentError"; @@ -274,8 +274,8 @@ export class PlotHasNoTypeError extends PlotError { constructor(plotTitle: string) { super( `The plot titled "${plotTitle}" does not have a "type" property. Valid values are "${getValidPlotTypes().join( - "," - )}".` + ",", + )}".`, ); this.name = "PlotHasNoDataError"; } @@ -284,8 +284,8 @@ export class UnhandledPlotTypeError extends PlotError { constructor(plotTitle?: string, type?: string) { super( `The plot titled "${plotTitle}" has an invalid value (${type}) for the "type" property. Valid values are "${getValidPlotTypes().join( - "," - )}"` + ",", + )}"`, ); this.name = "UnhandledPlotTypeError"; } @@ -294,16 +294,16 @@ export class UnhandledPlotTypeError extends PlotError { export class PlotHasNoDataError extends PlotError { constructor( plotTitle: string, - suggestedType?: "XDataPoints" | "YDataPoints" | "ZDataPoints" + suggestedType?: "XDataPoints" | "YDataPoints" | "ZDataPoints", ) { if (suggestedType) { super( - `The plot titled "${plotTitle}" is missing the required "data" property. It must follow the shape of "${suggestedType}"` + `The plot titled "${plotTitle}" is missing the required "data" property. It must follow the shape of "${suggestedType}"`, ); } else { // TODO: fix this message, not all of them need an array super( - `The plot titled "${plotTitle}" is missing the required "data" property. Depending on the Plot Type, it must contain an array of either XDataPoints, YDataPoints or ZDataPoints.` + `The plot titled "${plotTitle}" is missing the required "data" property. Depending on the Plot Type, it must contain an array of either XDataPoints, YDataPoints or ZDataPoints.`, ); } this.name = "PlotHasNoDataError"; @@ -317,13 +317,13 @@ export class PlotDataIsNotAnArrayError extends PlotError { | "YDataPoints" | "ZDataPoints" | "XDataPoints or YDataPoints" - | "XDataPoints and YDataPoints" + | "XDataPoints and YDataPoints", ) { const message = plotTitle ? `The plot titled "${plotTitle}"` : "One of your plots"; super( - `${message} has an empty "data" property. It must contain an array of objects matching the shape of "${missingDataPointType}".` + `${message} has an empty "data" property. It must contain an array of objects matching the shape of "${missingDataPointType}".`, ); this.name = "PlotDataIsNotAnArrayError"; } @@ -335,7 +335,7 @@ export class PlotDataIsNotAnArrayWarning extends PlotError { ? `The plot titled "${plotTitle}"` : "One of your plots"; super( - `${message} is using an incorrect type for the "data" property. It must contain an array of objects, but you provided "${typeof providedValue}".` + `${message} is using an incorrect type for the "data" property. It must contain an array of objects, but you provided "${typeof providedValue}".`, ); this.name = "PlotDataIsNotAnArrayWarning"; } @@ -348,7 +348,7 @@ export class PlotHasTheWrongTypeForYDataPointComponentError extends PlotError { type = "array"; } super( - `The plot titled "${plotTitle}" is using an incorrect type for the "data.y" property. It must be a string, but you provided "${type}".` + `The plot titled "${plotTitle}" is using an incorrect type for the "data.y" property. It must be a string, but you provided "${type}".`, ); this.name = "PlotHasTheWrongTypeForYDataPointsComponentError"; } @@ -362,14 +362,14 @@ export class PlotHasAnInvalidItemInTheDataArrayError extends PlotError { | "YDataPoints" | "ZDataPoints" | "XDataPoints or YDataPoints" - | "XDataPoints and YDataPoints" + | "XDataPoints and YDataPoints", ) { super( `The plot titled "${plotTitle}" has an invalid type inside of the "data" array. Items must be an object${ missingDataPointType ? `, following the shape of "${missingDataPointType}"` : "" - }.` + }.`, ); this.name = "PlotHasAnInvalidItemInTheDataArrayError"; } @@ -383,14 +383,14 @@ export class PlotHasEmptyDataError extends PlotError { | "YDataPoints" | "ZDataPoints" | "XDataPoints or YDataPoints" - | "XDataPoints and YDataPoints" + | "XDataPoints and YDataPoints", ) { super( `The plot titled "${plotTitle}" has an empty array for the "data" property. It must have at least one item${ missingDataPointType ? `. Following the shape of "${missingDataPointType}"` : "" - }.` + }.`, ); this.name = "PlotHasEmptyDataError"; } @@ -404,14 +404,14 @@ export class PlotHasEmptyDataObjectError extends PlotError { | "YDataPoints" | "ZDataPoints" | "XDataPoints or YDataPoints" - | "XDataPoints and YDataPoints" + | "XDataPoints and YDataPoints", ) { super( `The plot titled "${plotTitle}" has an empty object in the "data" property${ missingDataPointType ? `. It must follow the shape of "${missingDataPointType}"` : "" - }.` + }.`, ); this.name = "PlotHasEmptyDataObjectError"; } @@ -422,13 +422,13 @@ export class PlotIsReferencingNonExistingOutputError extends PlotError { plotTitle?: string, xyz?: "x" | "y" | "z", invalidOutput?: string, - closestMatch?: string + closestMatch?: string, ) { const closestMatchStr = closestMatch ? ` Did you mean "${closestMatch}"?.` : ""; super( - `The plot titled "${plotTitle}" is referencing an non-existing output metric titled "${invalidOutput}" inside of the "data.${xyz}" property.${closestMatchStr}` + `The plot titled "${plotTitle}" is referencing an non-existing output metric titled "${invalidOutput}" inside of the "data.${xyz}" property.${closestMatchStr}`, ); this.name = "PlotIsReferencingNonExistingOutput"; } @@ -436,7 +436,7 @@ export class PlotIsReferencingNonExistingOutputError extends PlotError { export class PlotIsMissingXDataPointComponentError extends PlotError { constructor(plotTitle: string) { super( - `The plot titled "${plotTitle}" is missing the "data.x" property, which must be of type "string".` + `The plot titled "${plotTitle}" is missing the "data.x" property, which must be of type "string".`, ); this.name = "PlotIsMissingXDataPointComponent"; } @@ -444,7 +444,7 @@ export class PlotIsMissingXDataPointComponentError extends PlotError { export class PlotIsMissingXDataPointsComponentError extends PlotError { constructor(plotTitle: string) { super( - `The plot titled "${plotTitle}" is missing the "data.x" property, which must be of type "string" or "string[]".` + `The plot titled "${plotTitle}" is missing the "data.x" property, which must be of type "string" or "string[]".`, ); this.name = "PlotIsMissingXDataPointsComponent"; } @@ -453,7 +453,7 @@ export class PlotIsMissingYDataPointsComponentError extends PlotError { constructor(plotTitle?: string, allowArrayOfStrings = false) { const type = allowArrayOfStrings ? '"string" or "string[]"' : '"string"'; super( - `The plot titled "${plotTitle}" is missing the "data.y" property, which must be of type ${type}.` + `The plot titled "${plotTitle}" is missing the "data.y" property, which must be of type ${type}.`, ); this.name = "PlotIsMissingYDataPointsComponentError"; } @@ -463,7 +463,7 @@ export class PlotIsMissingYAndXDataPointsComponentError extends PlotError { constructor(plotTitle?: string, allowArrayOfStrings = false) { const type = allowArrayOfStrings ? '"string" or "string[]"' : '"string"'; super( - `The plot titled "${plotTitle}" is missing both "data.x" and "data.y" properties, though only one can be used at a time. The value must be of type ${type}.` + `The plot titled "${plotTitle}" is missing both "data.x" and "data.y" properties, though only one can be used at a time. The value must be of type ${type}.`, ); this.name = "PlotIsMissingYAndXDataPointsComponentError"; } @@ -472,7 +472,7 @@ export class PlotIsMissingYAndXDataPointsComponentError extends PlotError { export class PlotIsMissingYAndOptionallyXDataPointsComponentError extends PlotError { constructor(plotTitle?: string) { super( - `The plot titled "${plotTitle}" is missing both "data.y" and, optionally "data.x" properties. The value must be of type "string[]".` + `The plot titled "${plotTitle}" is missing both "data.y" and, optionally "data.x" properties. The value must be of type "string[]".`, ); this.name = "PlotIsMissingYAndOptionallyXDataPointsComponentError "; } @@ -482,7 +482,7 @@ export class PlotLineOrScatterDoesNotSupportNameError extends PlotError { constructor(plotTitle?: string) { // TODO: add support for xName and yName as suggested on https://hashintel.slack.com/archives/CFWAZPACR/p1614248621051400?thread_ts=1614201445.048400&cid=CFWAZPACR super( - `The plot titled "${plotTitle}" contains the property "name" which is not supported for Line or Scatter plots. Please remove it to fix this error.` + `The plot titled "${plotTitle}" contains the property "name" which is not supported for Line or Scatter plots. Please remove it to fix this error.`, ); this.name = "PlotIsMissingYAndOptionallyXDataPointsComponentError "; } @@ -492,7 +492,7 @@ export class PlotLineOrScatterBothAxesMustBeInSyncError extends PlotError { constructor(plotTitle?: string) { // TODO: confirm if this is what Ciaran meant super( - `The plot titled "${plotTitle}" is using an output metric that ends in a "get" operation, but the "data.x" and "data.y" properties are not in sync. Please make sure both match to fix this error.` + `The plot titled "${plotTitle}" is using an output metric that ends in a "get" operation, but the "data.x" and "data.y" properties are not in sync. Please make sure both match to fix this error.`, ); this.name = "PlotLineOrScatterBothAxesMustBeInSyncError"; } @@ -507,7 +507,7 @@ export class PlotHasExtraDataFieldsError extends PlotError { | "XDataPoints" | "YDataPoints" | "ZDataPoints" - | "XDataPoints or YDataPoints" + | "XDataPoints or YDataPoints", ) { let message = `${ plotTitle ? `The plot titled "${plotTitle}"` : "One of your plots" @@ -535,7 +535,7 @@ export class PlotHasTheWrongKindOfDataError extends PlotError { | ZDataPoints | XDataPoint[] | YDataPoint[] - | ZDataPoints[] + | ZDataPoints[], ) { let providedShape = "XDataPoints"; if ((currentPlotData as YDataPoint).y) { @@ -548,7 +548,7 @@ export class PlotHasTheWrongKindOfDataError extends PlotError { ? `The plot titled "${plotTitle}"` : "One of your plots"; super( - `${message} is using an incorrect shape for the "data" property. It is expecting "${expectedShape}" but you provided "${providedShape}"` + `${message} is using an incorrect shape for the "data" property. It is expecting "${expectedShape}" but you provided "${providedShape}"`, ); this.name = "PlotHasTheWrongKindOfDataError"; } @@ -557,7 +557,7 @@ export class PlotHasTheWrongKindOfDataError extends PlotError { export class PlotUsedOutputMustEndInAggregationOperationError extends PlotError { constructor(plotTitle?: string, outputName?: string) { super( - `The plot titled "${plotTitle}" is referencing the output "${outputName}" which does not end in an Aggregation Operation. Valid values are "max, min, mean, sum, count".` + `The plot titled "${plotTitle}" is referencing the output "${outputName}" which does not end in an Aggregation Operation. Valid values are "max, min, mean, sum, count".`, ); this.name = "PlotUsedOutputMustEndInAggregationOperationError"; } diff --git a/apps/sim-core/packages/core/src/features/analysis/plotValidations.ts b/apps/sim-core/packages/core/src/features/analysis/plotValidations.ts index 3653e93..4710d73 100644 --- a/apps/sim-core/packages/core/src/features/analysis/plotValidations.ts +++ b/apps/sim-core/packages/core/src/features/analysis/plotValidations.ts @@ -36,7 +36,7 @@ const baseValidations = ( | "YDataPoints" | "ZDataPoints" | "XDataPoints or YDataPoints" - | "XDataPoints and YDataPoints" + | "XDataPoints and YDataPoints", ) => { if (!plot.data) { return new PlotHasNoDataError(plot?.title ?? defaultTitle); @@ -47,20 +47,20 @@ const baseValidations = ( if (plot.data.length === 0) { return new PlotHasEmptyDataError( plot?.title ?? defaultTitle, - expectedShape + expectedShape, ); } - for (let index = 0; index < plot.data.length; index++) { - if (typeof plot.data[index] !== "object") { + for (const datum of plot.data) { + if (typeof datum !== "object") { return new PlotHasAnInvalidItemInTheDataArrayError( plot?.title ?? defaultTitle, - expectedShape + expectedShape, ); } - if (Object.keys(plot.data[index]).length === 0) { + if (Object.keys(datum).length === 0) { return new PlotHasEmptyDataObjectError( plot?.title ?? defaultTitle, - expectedShape + expectedShape, ); } } @@ -69,13 +69,13 @@ const baseValidations = ( export const BarChartValidator = ( cleanPlot?: Partial>, - outputs?: Partial + outputs?: Partial, ) => { const currentPlot = JSON.parse(JSON.stringify(cleanPlot)); const baseValidationErrors = baseValidations( currentPlot, "bar", - "YDataPoints" + "YDataPoints", ); if (baseValidationErrors instanceof Error) { return baseValidationErrors; @@ -89,7 +89,7 @@ export const BarChartValidator = ( return new PlotHasTheWrongKindOfDataError( cleanPlot?.title, "YDataPoints", - currentPlotDataItem + currentPlotDataItem, ); } if (!currentPlotDataItem.y) { @@ -98,7 +98,7 @@ export const BarChartValidator = ( if (typeof currentPlotDataItem.y !== "string") { return new PlotHasTheWrongTypeForYDataPointComponentError( cleanPlot?.title, - currentPlotDataItem.y + currentPlotDataItem.y, ); } if (!doesOutputExist(currentPlotDataItem.y, outputs)) { @@ -109,7 +109,7 @@ export const BarChartValidator = ( cleanPlot?.title, "y", currentPlotDataItem.y, - closestMatch + closestMatch, ); } const output: any = outputs?.[String(currentPlotDataItem.y)]; @@ -118,7 +118,7 @@ export const BarChartValidator = ( if (lastOperation && !isASingleStepAggregationOperation(lastOperation)) { return new PlotUsedOutputMustEndInAggregationOperationError( cleanPlot?.title, - currentPlotDataItem.y + currentPlotDataItem.y, ); } } @@ -128,13 +128,13 @@ export const BarChartValidator = ( export const BoxValidator = ( cleanPlot?: Partial>, - outputs?: Partial + outputs?: Partial, ) => { const currentPlot = JSON.parse(JSON.stringify(cleanPlot)); const baseValidationErrors = baseValidations( currentPlot, "box plot", - "YDataPoints" + "YDataPoints", ); if (baseValidationErrors instanceof Error) { return baseValidationErrors; @@ -143,12 +143,11 @@ export const BoxValidator = ( if (Object.keys(currentPlotDataItem).length > 2) { return new PlotHasExtraDataFieldsError(cleanPlot?.title, "YDataPoints"); } - // @ts-ignore we know that it expects y items. This is just for better errors if (currentPlotDataItem.x || currentPlotDataItem.z) { return new PlotHasTheWrongKindOfDataError( cleanPlot?.title, "YDataPoints", - currentPlotDataItem + currentPlotDataItem, ); } if (!currentPlotDataItem.y) { @@ -157,7 +156,7 @@ export const BoxValidator = ( if (Array.isArray(currentPlotDataItem.y)) { return new PlotHasTheWrongTypeForYDataPointComponentError( cleanPlot?.title, - currentPlotDataItem.y + currentPlotDataItem.y, ); } if (!doesOutputExist(currentPlotDataItem.y, outputs)) { @@ -168,7 +167,7 @@ export const BoxValidator = ( cleanPlot?.title, "y", currentPlotDataItem.y, - closestMatch + closestMatch, ); } } @@ -178,17 +177,16 @@ export const BoxValidator = ( const TimeseriesDataFieldValidator = ( data: any, cleanPlot?: Partial>, - outputs?: Output + outputs?: Output, ) => { if (Object.keys(data).length > 2) { return new PlotHasExtraDataFieldsError(cleanPlot?.title, "YDataPoints"); } - // @ts-ignore at this point we expect .y if (data?.x || data?.z) { return new PlotHasTheWrongKindOfDataError( cleanPlot?.title, "YDataPoints", - data + data, ); } if (!data.y) { @@ -201,7 +199,7 @@ const TimeseriesDataFieldValidator = ( cleanPlot?.title, "y", data.y, - closestMatch + closestMatch, ); } return true; @@ -209,13 +207,13 @@ const TimeseriesDataFieldValidator = ( export const TimeseriesValidator = ( cleanPlot?: Partial>, - outputs?: Output + outputs?: Output, ) => { const currentPlot: Timeseries = JSON.parse(JSON.stringify(cleanPlot)); const baseValidationErrors = baseValidations( currentPlot, "timeseries", - "YDataPoints" + "YDataPoints", ); if (baseValidationErrors instanceof Error) { return baseValidationErrors; @@ -225,13 +223,13 @@ export const TimeseriesValidator = ( if (Object.keys(currentPlotDataItem).length === 0) { return new PlotHasEmptyDataObjectError( cleanPlot?.title ?? "timeseries", - "YDataPoints" + "YDataPoints", ); } const err = TimeseriesDataFieldValidator( currentPlotDataItem, cleanPlot, - outputs + outputs, ); if (err instanceof Error) { errors.push(err); @@ -242,13 +240,13 @@ export const TimeseriesValidator = ( export const HistogramValidator = ( cleanPlot?: Partial>, - outputs?: Partial + outputs?: Partial, ) => { const currentPlot = JSON.parse(JSON.stringify(cleanPlot)); const baseValidationErrors = baseValidations( currentPlot, "histogram plot", - "XDataPoints or YDataPoints" + "XDataPoints or YDataPoints", ); if (baseValidationErrors instanceof Error) { return baseValidationErrors; @@ -257,21 +255,21 @@ export const HistogramValidator = ( if (Object.keys(data).length === 0) { return new PlotHasEmptyDataObjectError( cleanPlot?.title ?? "histogram plot", - "XDataPoints or YDataPoints" + "XDataPoints or YDataPoints", ); } let foundAtLeastOneValidDataPoint = false; if (Object.keys(data).length > 2) { return new PlotHasExtraDataFieldsError( cleanPlot?.title, - "XDataPoints or YDataPoints" + "XDataPoints or YDataPoints", ); } if (data.z) { return new PlotHasTheWrongKindOfDataError( cleanPlot?.title, "XDataPoints or YDataPoints", - data + data, ); } let currentDataPointIs: "x" | "y" | "z" | "" = ""; @@ -294,7 +292,7 @@ export const HistogramValidator = ( cleanPlot?.title, currentDataPointIs, data[currentDataPointIs], - closestMatch + closestMatch, ); } } @@ -306,7 +304,7 @@ const LineOrScatterCheckOutputExistence = ( key: string, plotTitle: string, axis: "x" | "y", - outputs?: Partial + outputs?: Partial, ) => { const outputExists = doesOutputExist(key, outputs); if (outputExists) { @@ -317,19 +315,19 @@ const LineOrScatterCheckOutputExistence = ( plotTitle, axis, key, - closestMatch + closestMatch, ); }; const LineOrScatterValidatorBothAxes = ( currentPlot?: Plot & Chart, - outputs?: Partial + outputs?: Partial, ) => { if (!currentPlot) { return false; } // ensure both x and y are using the same data source - // @ts-ignore fixme + // @ts-expect-error fixme const errors = currentPlot.data.map((currentPlotDataItem) => { const xKey = currentPlotDataItem.x; const yKey = currentPlotDataItem.y; @@ -337,13 +335,13 @@ const LineOrScatterValidatorBothAxes = ( xKey, currentPlot.title, "x", - outputs + outputs, ); const yOutputExists = LineOrScatterCheckOutputExistence( yKey, currentPlot.title, "y", - outputs + outputs, ); if (xOutputExists instanceof Error) { return xOutputExists; @@ -352,15 +350,15 @@ const LineOrScatterValidatorBothAxes = ( return yOutputExists; } if (xOutputExists === true && yOutputExists === true) { - // @ts-ignore we already checked this above + // @ts-expect-error we already checked this above const outputMetric = outputs[xKey][outputs[xKey].length - 1] ?? {}; const outputMetricEndsInGet = outputMetric.op === GetOperator.get; - // @ts-ignore we already checked this above + // @ts-expect-error we already checked this above const outputMetricY = outputs[yKey][outputs[yKey].length - 1] ?? {}; const outputMetricYEndsInGet = outputMetricY.op === GetOperator.get; if (outputMetricEndsInGet !== outputMetricYEndsInGet) { return new PlotLineOrScatterBothAxesMustBeInSyncError( - currentPlot.title + currentPlot.title, ); } } @@ -369,7 +367,7 @@ const LineOrScatterValidatorBothAxes = ( }; const LineOrScatterValidatorYAxis = ( _currentPlot: Partial, - _outputs?: Partial + _outputs?: Partial, ) => { // currently we have no special validation for this case, but we will soon return true; @@ -377,13 +375,13 @@ const LineOrScatterValidatorYAxis = ( export const LineOrScatterValidator = ( cleanPlot?: Partial>, - outputs?: Partial + outputs?: Partial, ) => { const currentPlot = JSON.parse(JSON.stringify(cleanPlot)); const baseValidationErrors = baseValidations( currentPlot, "line or scatter", - "XDataPoints or YDataPoints" + "XDataPoints or YDataPoints", ); if (baseValidationErrors instanceof Error) { return baseValidationErrors; @@ -393,13 +391,13 @@ export const LineOrScatterValidator = ( for (const currentPlotDataItem of currentPlot.data) { if (currentPlotDataItem.name) { errors.push( - new PlotLineOrScatterDoesNotSupportNameError(cleanPlot?.title) + new PlotLineOrScatterDoesNotSupportNameError(cleanPlot?.title), ); return; } if (!currentPlotDataItem.y) { errors.push( - new PlotIsMissingYDataPointsComponentError(cleanPlot?.title, true) + new PlotIsMissingYDataPointsComponentError(cleanPlot?.title, true), ); } else if (currentPlotDataItem.y && currentPlotDataItem.x) { const result = LineOrScatterValidatorBothAxes(currentPlot, outputs); @@ -415,8 +413,8 @@ export const LineOrScatterValidator = ( // TODO: test that we can even get to this case errors.push( new PlotIsMissingYAndOptionallyXDataPointsComponentError( - cleanPlot?.title - ) + cleanPlot?.title, + ), ); } } diff --git a/apps/sim-core/packages/core/src/features/analysis/utils.ts b/apps/sim-core/packages/core/src/features/analysis/utils.ts index 5dac505..7852413 100644 --- a/apps/sim-core/packages/core/src/features/analysis/utils.ts +++ b/apps/sim-core/packages/core/src/features/analysis/utils.ts @@ -17,7 +17,7 @@ import { PlotDataIsNotAnArrayWarning } from "./errors"; // TODO: fix types export const getUnusedOutputs = ( outputs: Partial, - plots?: any + plots?: any, ): string[] => { const outputKeys = Object.keys(outputs); const usedKeys: string[] = []; @@ -61,17 +61,17 @@ export const getUnusedOutputs = ( export const allOutputsAreUsedInPlots = ( outputs: Partial, - plots?: Partial[] + plots?: Partial[], ): boolean => getUnusedOutputs(outputs, plots).length === 0; export const doesOutputExist = ( outputName?: string, - outputs?: Partial + outputs?: Partial, ): boolean => Object.keys(outputs ?? {}).includes(outputName ?? ""); export const getClosestMatchingOutputName = ( outputName: string, - outputs?: Partial + outputs?: Partial, ) => { if (!outputs) { return false; @@ -98,7 +98,7 @@ export const getClosestMatchingOutputName = ( export const getFirstGetOperation = (operations: any) => { const result: GetOperation[] = operations.filter( - (operation: GetOperation) => operation.op === GetOperator.get + (operation: GetOperation) => operation.op === GetOperator.get, ); return result.length === 0 ? false : result[0]; }; @@ -115,7 +115,7 @@ export const isAnAggregationOperation = (op?: Partial) => { }; export const isASingleStepAggregationOperation = ( - op: Partial + op: Partial, ) => isAnAggregationOperation(op) || op.op === CountOperator.count; export const getExtraFields = (allProps: string[], validFields: string[]) => @@ -123,17 +123,17 @@ export const getExtraFields = (allProps: string[], validFields: string[]) => export const operationHasExtraFields = ( operationKeys: string[], - requiredFields: string[] + requiredFields: string[], ) => getExtraFields(operationKeys, requiredFields).length > 0; export const getMissingFields = ( allProps: string[], - requiredFields: string[] + requiredFields: string[], ) => difference(requiredFields, allProps); export const operationHasMissingFields = ( allProps: string[], - requiredFields: string[] + requiredFields: string[], ) => getMissingFields(allProps, requiredFields).length > 0; export const isComplexValue = (input: any) => { @@ -160,7 +160,7 @@ export const standardizePlot = (input: Plot) => { cleanPlot.type = "timeseries"; const keys = Object.values(cleanPlot.timeseries); cleanPlot.data = keys.map((key) => ({ y: key, name: key })); - delete cleanPlot[`timeseries`]; + delete cleanPlot.timeseries; } // if users provide an object for the data attribute, standardize it as an array if (cleanPlot.data && !Array.isArray(cleanPlot.data)) { @@ -170,16 +170,13 @@ export const standardizePlot = (input: Plot) => { }; export const getNonArrayPlotDataWarnings = ( - plots?: Partial + plots?: Partial, ) => Array.isArray(plots) ? plots .map((plot) => { if (plot?.data && !Array.isArray(plot?.data)) { - return ( - // @ts-ignore - new PlotDataIsNotAnArrayWarning(plot.title, plot.data) - ); + return new PlotDataIsNotAnArrayWarning(plots.title, plot.data); } }) .filter((item) => item) diff --git a/apps/sim-core/packages/core/src/features/analysis/validation.ts b/apps/sim-core/packages/core/src/features/analysis/validation.ts index 6f3b007..90d860f 100644 --- a/apps/sim-core/packages/core/src/features/analysis/validation.ts +++ b/apps/sim-core/packages/core/src/features/analysis/validation.ts @@ -1,5 +1,5 @@ const validateTitleRule = (title: string): boolean => - title.length > 0 && !!title.match(/^[A-Za-z0-9_\-]+$/); + title.length > 0 && !!title.match(/^[A-Za-z0-9_-]+$/); const validateTitleRuleAllowedCharactersMessage = "Your metric title may only contain alphanumeric characters, '_', and '-', and must not be empty."; diff --git a/apps/sim-core/packages/core/src/features/analytics.ts b/apps/sim-core/packages/core/src/features/analytics.ts index d0e62fe..d123d0c 100644 --- a/apps/sim-core/packages/core/src/features/analytics.ts +++ b/apps/sim-core/packages/core/src/features/analytics.ts @@ -2,11 +2,11 @@ import { AppThunk } from "./types"; import { selectCurrentUser } from "./user/selectors"; import { selectEmbedded } from "./viewer/selectors"; -type AnalyticsEventMeta = { +interface AnalyticsEventMeta { action: string; label?: string; context?: any; -}; +} export const trackEvent = (event: AnalyticsEventMeta) => trackEvents([event]); @@ -15,33 +15,32 @@ export const trackEvent = (event: AnalyticsEventMeta) => trackEvents([event]); * We require a specific category, and an action for Google Analytics reporting. * Accepts an optional label (for display in GA) and arbitrary context object */ -export const trackEvents = (events: AnalyticsEventMeta[]): AppThunk => ( - dispatch, - getState -) => { - const state = getState(); +export const trackEvents = + (events: AnalyticsEventMeta[]): AppThunk => + (dispatch, getState) => { + const state = getState(); - const embedded = selectEmbedded(state); - const user = selectCurrentUser(state); + const embedded = selectEmbedded(state); + const user = selectCurrentUser(state); - // // Don't track events for staff members - if (user?.staffMember) { - return; - } + // // Don't track events for staff members + if (user?.staffMember) { + return; + } - const mappedEvents = embedded - ? events.map((event) => ({ - ...event, - context: { - ...(event.context ?? {}), - embedded, - }, - })) - : events; + const mappedEvents = embedded + ? events.map((event) => ({ + ...event, + context: { + ...(event.context ?? {}), + embedded, + }, + })) + : events; - // report to the API if any are of interest to it - reportEvents(mappedEvents); -}; + // report to the API if any are of interest to it + reportEvents(mappedEvents); + }; const reportEvents = (events: AnalyticsEventMeta[]) => { // We want accurate reporting on these events. @@ -63,7 +62,7 @@ const reportEvents = (events: AnalyticsEventMeta[]) => { } return eventsOfInterest; }, - [] + [], ); if (eventsToReport.length > 0) { // migration shim diff --git a/apps/sim-core/packages/core/src/features/createAppAsyncThunk.ts b/apps/sim-core/packages/core/src/features/createAppAsyncThunk.ts index 1f99242..869a0df 100644 --- a/apps/sim-core/packages/core/src/features/createAppAsyncThunk.ts +++ b/apps/sim-core/packages/core/src/features/createAppAsyncThunk.ts @@ -5,19 +5,19 @@ import { AppAsyncThunkArgs } from "./types"; export const createAppAsyncThunk = < Returned = void, ThunkArg = void, - ExtraArgs extends { extra?: unknown; rejectValue?: unknown } = {} + ExtraArgs extends { extra?: unknown; rejectValue?: unknown } = {}, >( typePrefix: string, payloadCreator: AsyncThunkPayloadCreator< Returned, ThunkArg, ExtraArgs & AppAsyncThunkArgs - > + >, ) => createAsyncThunk( typePrefix, payloadCreator, { serializeError: (x: any): any => x, - } + }, ); diff --git a/apps/sim-core/packages/core/src/features/examples/adapter.ts b/apps/sim-core/packages/core/src/features/examples/adapter.ts index e3f7b84..aa2de67 100644 --- a/apps/sim-core/packages/core/src/features/examples/adapter.ts +++ b/apps/sim-core/packages/core/src/features/examples/adapter.ts @@ -4,12 +4,8 @@ import { PartialSimulationProject } from "../project/types"; import { projectUpdatedSort } from "../utils"; import { urlFromProject } from "../../routes"; -export const { - getInitialState, - getSelectors, - upsertMany, - removeAll, -} = createEntityAdapter({ - selectId: (project) => urlFromProject(project), - sortComparer: projectUpdatedSort, -}); +export const { getInitialState, getSelectors, upsertMany, removeAll } = + createEntityAdapter({ + selectId: (project) => urlFromProject(project), + sortComparer: projectUpdatedSort, + }); diff --git a/apps/sim-core/packages/core/src/features/examples/selectors.ts b/apps/sim-core/packages/core/src/features/examples/selectors.ts index f98c2f9..2bd9c1c 100644 --- a/apps/sim-core/packages/core/src/features/examples/selectors.ts +++ b/apps/sim-core/packages/core/src/features/examples/selectors.ts @@ -7,10 +7,10 @@ import { getSelectors } from "./adapter"; const selectExamplesSlice: Selector = (state) => state.examples; -export const selectExamples = getSelectors(selectExamplesSlice) - .selectAll; +export const selectExamples = + getSelectors(selectExamplesSlice).selectAll; export const selectExamplesLoaded = createSelector( selectExamplesSlice, - (examples) => examples.examplesLoaded + (examples) => examples.examplesLoaded, ); diff --git a/apps/sim-core/packages/core/src/features/files/behaviorKeys.ts b/apps/sim-core/packages/core/src/features/files/behaviorKeys.ts index ee22c88..70f0da2 100644 --- a/apps/sim-core/packages/core/src/features/files/behaviorKeys.ts +++ b/apps/sim-core/packages/core/src/features/files/behaviorKeys.ts @@ -4,7 +4,9 @@ import { v4 as uuid } from "uuid"; import { HcFileKind } from "./enums"; import { defaultBehaviorKeys } from "./utils"; -type BehaviorKeysFieldShared = { nullable: boolean }; +interface BehaviorKeysFieldShared { + nullable: boolean; +} export type BehaviorKeysFieldListShared = BehaviorKeysFieldShared & { child: BehaviorKeysField; @@ -39,10 +41,12 @@ export type BehaviorKeyFields = Record; type OmitChildren = Omit; export type BehaviorKeysDraftRow< - KeyType extends BehaviorKeysDraftField = BehaviorKeysDraftField + KeyType extends BehaviorKeysDraftField = BehaviorKeysDraftField, > = [string, KeyType]; -type DraftFieldShareProps = { uuid: string }; +interface DraftFieldShareProps { + uuid: string; +} export type BehaviorKeysDraftFieldScalar = DraftFieldShareProps & { meta: OmitChildren; @@ -82,14 +86,14 @@ export type BehaviorKeysDraftFieldWithRows = | BehaviorKeysDraftFieldFixedList | BehaviorKeysDraftFieldStruct; -export type CommittedBehaviorKeysRoot = { +export interface CommittedBehaviorKeysRoot { keys: BehaviorKeyFields; built_in_key_use: null | { selected: string[]; }; dynamic_access: boolean; _draft_keys?: DraftBehaviorKeys | null; -}; +} export type DraftBehaviorKeysRoot = Omit< CommittedBehaviorKeysRoot, @@ -117,16 +121,16 @@ export const DRAFT_STATE_VERSION = "2"; export const toDraftFormatPerField = ([key, value]: [ string, - BehaviorKeysField + BehaviorKeysField, ]): BehaviorKeysDraftRow => [key, toDraftFormat(value)]; // export function toDraftFormat(data: BehaviorKeysFieldList): BehaviorKeysDraftFieldList; // export function toDraftFormat(data: BehaviorKeysFieldFixedList): BehaviorKeysDraftFieldFixedList; export function toDraftFormat( - data: BehaviorKeysFieldScalar + data: BehaviorKeysFieldScalar, ): BehaviorKeysDraftFieldScalar; export function toDraftFormat( - data: BehaviorKeysFieldStruct + data: BehaviorKeysFieldStruct, ): BehaviorKeysDraftFieldStruct; export function toDraftFormat(data: BehaviorKeysField): BehaviorKeysDraftField; export function toDraftFormat(data: BehaviorKeysField): BehaviorKeysDraftField { @@ -170,22 +174,23 @@ export function toDraftFormat(data: BehaviorKeysField): BehaviorKeysDraftField { } export const fieldHasRows = ( - field: BehaviorKeysDraftField -): field is BehaviorKeysDraftFieldWithRows => field.hasOwnProperty("rows"); + field: BehaviorKeysDraftField, +): field is BehaviorKeysDraftFieldWithRows => + Object.prototype.hasOwnProperty.call(field, "rows"); // export function toBehaviorKeysFormat(data: BehaviorKeysDraftFieldList): BehaviorKeysFieldList; // export function toBehaviorKeysFormat(data: BehaviorKeysDraftFieldFixedList): BehaviorKeysFieldFixedList; export function toBehaviorKeysFormat( - data: BehaviorKeysDraftFieldStruct + data: BehaviorKeysDraftFieldStruct, ): BehaviorKeysFieldStruct; export function toBehaviorKeysFormat( - data: BehaviorKeysDraftFieldWithRows + data: BehaviorKeysDraftFieldWithRows, ): BehaviorKeysField; export function toBehaviorKeysFormat( - data: BehaviorKeysDraftFieldWithRows + data: BehaviorKeysDraftFieldWithRows, ): BehaviorKeysField { const { rows, meta } = data; const fields = rows @@ -196,9 +201,9 @@ export function toBehaviorKeysFormat( [ field.trim(), fieldHasRows(row) ? toBehaviorKeysFormat(row) : row.meta, - ] as const + ] as const, ) - .filter((row) => row[0].length > 0) + .filter((row) => row[0].length > 0), ) : {}; @@ -214,7 +219,7 @@ export function toBehaviorKeysFormat( } export const toRootDraftFormat = ( - fields: BehaviorKeyFields + fields: BehaviorKeyFields, ): DraftBehaviorKeys => ({ ...toDraftFormat({ fields, @@ -226,7 +231,7 @@ export const toRootDraftFormat = ( export const parseKeys = ( keys: string | undefined, - type: HcFileKind.Behavior | HcFileKind.SharedBehavior + type: HcFileKind.Behavior | HcFileKind.SharedBehavior, ): DraftBehaviorKeysRoot => { if (typeof keys === "string") { // @todo add invalid JSON handling @@ -252,23 +257,23 @@ export const parseKeys = ( }; export const calculateRowClashes = ( - rows: BehaviorKeysDraftRow[] + rows: BehaviorKeysDraftRow[], ): boolean[] => { const nameAndIndex = rows.map(([fieldName], idx) => [fieldName, idx]); const entries = Object.fromEntries(nameAndIndex); const clashes = Object.fromEntries( - nameAndIndex.filter(([name, idx]) => entries[name] !== idx) + nameAndIndex.filter(([name, idx]) => entries[name] !== idx), ); return rows.map(([name]) => clashes[name] !== undefined); }; export const recursiveShouldSaveBehaviorKeysDraft = ( - data: BehaviorKeysDraftFieldWithRows + data: BehaviorKeysDraftFieldWithRows, ): boolean => calculateRowClashes(data.rows).includes(true) || data.rows.some( (row) => !row[0].trim().length || - (row[1].key !== "scalar" && recursiveShouldSaveBehaviorKeysDraft(row[1])) + (row[1].key !== "scalar" && recursiveShouldSaveBehaviorKeysDraft(row[1])), ); diff --git a/apps/sim-core/packages/core/src/features/files/hooks.ts b/apps/sim-core/packages/core/src/features/files/hooks.ts index 0a0a7fa..7e1326c 100644 --- a/apps/sim-core/packages/core/src/features/files/hooks.ts +++ b/apps/sim-core/packages/core/src/features/files/hooks.ts @@ -41,8 +41,8 @@ export const useSelectFileById = (fileId: string): HcFile => { return entity; }, - [fileId] - ) + [fileId], + ), ); } catch (err) { /** @@ -58,9 +58,10 @@ export const useSelectFileById = (fileId: string): HcFile => { export const useFileIsCurrent = (fileId: string) => useSelector( - useCallback((state: RootState) => selectCurrentFileId(state) === fileId, [ - fileId, - ]) + useCallback( + (state: RootState) => selectCurrentFileId(state) === fileId, + [fileId], + ), ); export const useExportFiles = () => { @@ -106,7 +107,7 @@ export const useExportFiles = () => { const fileZip = await zip.generateAsync({ type: "blob" }); saveAs( fileZip, - `${currentProject?.pathWithNamespace.split("/").pop()}.zip` + `${currentProject?.pathWithNamespace.split("/").pop()}.zip`, ); }; @@ -185,7 +186,7 @@ export const useImportFiles = () => { for (const zipFile of zipFiles) { const contents = await zipFile.contentPromise; projectFiles.push({ - name: zipFile.name.replace(/^.*[\\\/]/, ""), + name: zipFile.name.replace(/^.*[\\/]/, ""), path: zipFile.name, contents: contents, ref: "1.0", @@ -229,13 +230,15 @@ export const useImportFiles = () => { }; dispatch( + // @ts-expect-error redux problems trackEvent({ action: "Import Project: Core", label: project.pathWithNamespace, - }) + }), ); dispatch(addUserProject(preparePartialSimulationProject(project))); + // @ts-expect-error redux problems dispatch(setProjectWithMeta(project)); navigate(urlFromProject(project), false, {}, true); await dispatch(save()); diff --git a/apps/sim-core/packages/core/src/features/files/selectors.spec.ts b/apps/sim-core/packages/core/src/features/files/selectors.spec.ts index 92e474f..e273ad4 100644 --- a/apps/sim-core/packages/core/src/features/files/selectors.spec.ts +++ b/apps/sim-core/packages/core/src/features/files/selectors.spec.ts @@ -67,7 +67,7 @@ const createMockFiles = ( count: number, kind: HcFileKind, startAt: number, - getExt: (i: number) => Ext + getExt: (i: number) => Ext, ): HcFile[] => new Array(count).fill(true).map((_, idx) => { const char = String.fromCharCode(initialCharCode + startAt + idx); @@ -118,25 +118,25 @@ const createMockFiles = ( const mockRequiredFiles = toHcFiles(mockRemoteProject); const mockPropertiesFile = mockRequiredFiles.find( - (file) => file.id === globalsFileId + (file) => file.id === globalsFileId, )!; const mockBehaviorFiles = createMockFiles(4, HcFileKind.Behavior, 0, (idx) => - idx % 2 === 0 ? Ext.Js : Ext.Py + idx % 2 === 0 ? Ext.Js : Ext.Py, ); const mockDatasetFiles = createMockFiles( 4, HcFileKind.Dataset, mockBehaviorFiles.length, - (idx) => (idx % 2 === 0 ? Ext.Json : Ext.Csv) + (idx) => (idx % 2 === 0 ? Ext.Json : Ext.Csv), ); const mockSharedBehaviorFiles = createMockFiles( 4, HcFileKind.SharedBehavior, mockBehaviorFiles.length + mockDatasetFiles.length, - (idx) => (idx % 2 === 0 ? Ext.Js : Ext.Py) + (idx) => (idx % 2 === 0 ? Ext.Js : Ext.Py), ); const mockFiles = [ @@ -167,12 +167,12 @@ const mockFilesStateWithFiles = { actions: [], }; -const mockState = ({ +const mockState = { files: mockFilesStateWithFiles, viewer: { editor: true, }, -} as unknown) as RootState; +} as unknown as RootState; const mockStateWithOpenCurrentFile0 = { ...mockState, @@ -198,13 +198,15 @@ const mockStateWithOpenFiles012 = { const mockDependenciesContents = JSON.stringify( Object.fromEntries( - ([...mockDatasetFiles, ...mockSharedBehaviorFiles] as ( - | HcSharedDatasetFile - | HcSharedBehaviorFile - )[]).map((file) => [file.path.formatted, "private"]) + ( + [...mockDatasetFiles, ...mockSharedBehaviorFiles] as ( + | HcSharedDatasetFile + | HcSharedBehaviorFile + )[] + ).map((file) => [file.path.formatted, "private"]), ), null, - 2 + 2, ); const mockStateWithDependencies = { @@ -247,7 +249,7 @@ describe("files selectors", () => { describe("selectLocalBehaviorIds", () => { it("should select behavior ids", () => { expect(selectLocalBehaviorIds(mockState)).toEqual( - mockBehaviorFiles.map(toIds) + mockBehaviorFiles.map(toIds), ); }); }); @@ -255,7 +257,7 @@ describe("files selectors", () => { describe("selectCurrentFile", () => { it("should select current file if editor is visible", () => { expect(selectCurrentFile(mockStateWithOpenCurrentFile0)).toEqual( - mockFiles[0] + mockFiles[0], ); }); @@ -264,7 +266,7 @@ describe("files selectors", () => { selectCurrentFile({ ...mockStateWithOpenCurrentFile0, viewer: { editor: false } as ViewerSlice, - }) + }), ).toEqual(mockPropertiesFile); }); }); @@ -272,7 +274,7 @@ describe("files selectors", () => { describe("selectCurrentFileId", () => { it("should select current file id if editor is visible", () => { expect(selectCurrentFileId(mockStateWithOpenCurrentFile0)).toEqual( - mockFiles[0].id + mockFiles[0].id, ); }); @@ -281,7 +283,7 @@ describe("files selectors", () => { selectCurrentFileId({ ...mockStateWithOpenCurrentFile0, viewer: { editor: false } as ViewerSlice, - }) + }), ).toEqual(mockPropertiesFile.id); }); }); @@ -295,7 +297,7 @@ describe("files selectors", () => { describe("selectDatasetFilesLocal", () => { it("should select dataset files local", () => { expect(selectDatasetFilesLocal(mockState.files)).toEqual( - mockDatasetFiles + mockDatasetFiles, ); }); }); @@ -313,7 +315,7 @@ describe("files selectors", () => { it("should select dependencies when there are some", () => { expect( - JSON.parse(selectDependencies(mockStateWithDependencies) ?? "{}") + JSON.parse(selectDependencies(mockStateWithDependencies) ?? "{}"), ).toEqual({ "e.json": "private", "f.csv": "private", @@ -536,13 +538,13 @@ Click reset to reset the simulation to the initial state. it("should select file entities", () => { expect(Object.keys(selectFileEntities(mockState))).toEqual( - expect.arrayContaining(fileIds) + expect.arrayContaining(fileIds), ); }); it("should select file entities local", () => { expect(Object.keys(selectFileEntitiesLocal(mockState.files))).toEqual( - expect.arrayContaining(fileIds) + expect.arrayContaining(fileIds), ); }); @@ -564,7 +566,7 @@ Click reset to reset the simulation to the initial state. describe("selectGlobals", () => { it("should select globals", () => { expect(selectGlobals(mockState)).toEqual( - '{"onion":{"hasMany":{"layers":true}},"apple":"macbook","twoLevelsDeep":{"theLastLevel":true}}' + '{"onion":{"hasMany":{"layers":true}},"apple":"macbook","twoLevelsDeep":{"theLastLevel":true}}', ); }); }); @@ -587,7 +589,7 @@ Click reset to reset the simulation to the initial state. selectOpenFileIds({ ...mockStateWithOpenFiles012, viewer: { editor: false } as ViewerSlice, - }) + }), ).toEqual(["properties"]); }); }); @@ -610,7 +612,7 @@ Click reset to reset the simulation to the initial state. selectOpenFiles({ ...mockStateWithOpenFiles012, viewer: { editor: false } as ViewerSlice, - }) + }), ).toEqual([mockPropertiesFile]); }); }); @@ -648,7 +650,7 @@ Click reset to reset the simulation to the initial state. describe("selectSharedBehaviorFiles", () => { it("should select shared behavior files", () => { expect(selectSharedBehaviorFiles(mockState)).toEqual( - mockSharedBehaviorFiles + mockSharedBehaviorFiles, ); }); }); @@ -656,7 +658,7 @@ Click reset to reset the simulation to the initial state. describe("selectSharedBehaviorFilesLocal", () => { it("should select shared behavior files local", () => { expect(selectSharedBehaviorFilesLocal(mockState.files)).toEqual( - mockSharedBehaviorFiles + mockSharedBehaviorFiles, ); }); }); @@ -664,7 +666,7 @@ Click reset to reset the simulation to the initial state. describe("selectSharedBehaviorIds", () => { it("should select shared behavior ids", () => { expect(selectSharedBehaviorIds(mockState)).toEqual( - mockSharedBehaviorFiles.map(toIds) + mockSharedBehaviorFiles.map(toIds), ); }); }); @@ -751,7 +753,7 @@ Click reset to reset the simulation to the initial state. ...mockState.files, replaceProposal, }, - }).proposal + }).proposal, ).toEqual(replaceProposal); }); @@ -768,7 +770,7 @@ Click reset to reset the simulation to the initial state. replaceProposal, }, viewer: { editor: false } as ViewerSlice, - }).proposal + }).proposal, ).toEqual(null); }); @@ -783,7 +785,7 @@ Click reset to reset the simulation to the initial state. nextContents: "123", }, }, - }).file + }).file, ).toEqual(mockState.files.entities[mockState.files.ids[0]]); }); @@ -799,7 +801,7 @@ Click reset to reset the simulation to the initial state. }, }, viewer: { editor: false } as ViewerSlice, - }).file + }).file, ).toEqual(null); }); }); @@ -818,14 +820,14 @@ Click reset to reset the simulation to the initial state. ...mockState.files, pendingDependencies, }, - }) + }), ).toEqual(pendingDependencies); }); }); describe("selectFileActions", () => { it("should return the file actions", () => { - const actions = ([1, 2, 3] as any) as FileAction[]; + const actions = [1, 2, 3] as any as FileAction[]; expect( selectFileActions({ ...mockState, @@ -833,7 +835,7 @@ Click reset to reset the simulation to the initial state. ...mockState.files, actions, }, - }) + }), ).toEqual(actions); }); }); @@ -847,7 +849,7 @@ Click reset to reset the simulation to the initial state. ...mockState.files, actions: [], }, - }) + }), ).toEqual(true); }); @@ -857,9 +859,9 @@ Click reset to reset the simulation to the initial state. ...mockState, files: { ...mockState.files, - actions: ([1] as any) as FileAction[], + actions: [1] as any as FileAction[], }, - }) + }), ).toEqual(false); }); }); diff --git a/apps/sim-core/packages/core/src/features/files/selectors.ts b/apps/sim-core/packages/core/src/features/files/selectors.ts index 12c0f62..f77aedf 100644 --- a/apps/sim-core/packages/core/src/features/files/selectors.ts +++ b/apps/sim-core/packages/core/src/features/files/selectors.ts @@ -65,52 +65,52 @@ export const { * @todo Remove this when the above issue is fixed */ -const createCompareEqualForKeySelector = ( - keySelector: (_: unknown, __: unknown, key: any) => boolean | undefined -) => (currentEntities: any, previousEntities: any) => { - if (currentEntities.length !== previousEntities.length) { - return false; - } - - for (let idx = 0; idx < currentEntities.length; idx++) { - const currentEntity = currentEntities[idx]; - const previousEntity = previousEntities[idx]; - - if (!isEqualWith(currentEntity, previousEntity, keySelector)) { +const createCompareEqualForKeySelector = + (keySelector: (_: unknown, __: unknown, key: any) => boolean | undefined) => + (currentEntities: any, previousEntities: any) => { + if (currentEntities.length !== previousEntities.length) { return false; } - } - return true; -}; + for (let idx = 0; idx < currentEntities.length; idx++) { + const currentEntity = currentEntities[idx]; + const previousEntity = previousEntities[idx]; + + if (!isEqualWith(currentEntity, previousEntity, keySelector)) { + return false; + } + } + + return true; + }; export const createFieldSelector = ( selector: (state: any) => T[], - field: F + field: F, ) => createSelectorCreator( defaultMemoize, createCompareEqualForKeySelector((curr, prev, key) => - !key || field === key ? undefined : true - ) + !key || field === key ? undefined : true, + ), )([selector], (entities: T[]) => entities.map((entity) => entity[field])); export const createFieldsSelector = ( selector: (state: any) => T[], - fields: F[] + fields: F[], ) => createSelectorCreator( defaultMemoize, createCompareEqualForKeySelector((curr, prev, key) => - !key || fields.includes(key) ? undefined : true - ) + !key || fields.includes(key) ? undefined : true, + ), )([selector], (entities: T[]) => - entities.map((entity) => pick(entity, fields) as Pick) + entities.map((entity) => pick(entity, fields) as Pick), ); export const selectIdKindAndPathFromFiles = createFieldsSelector( selectAllFiles, - ["id", "kind", "path"] + ["id", "kind", "path"], ); export const selectCurrentFileId = createSelector( @@ -119,8 +119,8 @@ export const selectCurrentFileId = createSelector( editorVisible ? files.currentFileId : files.entities.properties - ? globalsFileId - : null + ? globalsFileId + : null, ); export const selectReplaceProposal = createSelector( @@ -132,13 +132,13 @@ export const selectReplaceProposal = createSelector( proposal: proposal, file: proposal?.fileId ? files.entities[proposal.fileId] : null, }; - } + }, ); export const selectCurrentFile = createSelector( [selectFileEntities, selectCurrentFileId], (entities, currentFileId) => - currentFileId ? entities[currentFileId] : undefined + currentFileId ? entities[currentFileId] : undefined, ); export const selectCurrentBehavior = createSelector( @@ -147,7 +147,7 @@ export const selectCurrentBehavior = createSelector( file?.kind === HcFileKind.Behavior || file?.kind === HcFileKind.SharedBehavior ? file - : undefined + : undefined, ); export const selectOpenFileIds = createSelector( @@ -156,8 +156,8 @@ export const selectOpenFileIds = createSelector( editorVisible ? files.openFileIds : files.entities.properties - ? [globalsFileId] - : [] + ? [globalsFileId] + : [], ); export const selectOpenFiles = createSelector< @@ -166,35 +166,35 @@ export const selectOpenFiles = createSelector< string[], HcFile[] >(selectFileEntities, selectOpenFileIds, (entities, openFileIds) => - openFileIds.map((openFileId) => (entities as any)[openFileId]) + openFileIds.map((openFileId) => (entities as any)[openFileId]), ); export const selectRequiredFiles = createSelector( selectAllFiles, (files) => files.filter( - (file) => file.kind === HcFileKind.Required - ) as HcRequiredFile[] + (file) => file.kind === HcFileKind.Required, + ) as HcRequiredFile[], ); export const selectRequiredIds = createFieldSelector(selectRequiredFiles, "id"); export const selectDescriptionFile: Selector = ( - state + state, ) => selectFileById(state, "description"); export const selectDescription = createSelector( selectDescriptionFile, - (file) => file?.contents + (file) => file?.contents, ); export const selectDependenciesFile: Selector = ( - state + state, ) => selectFileById(state, "dependencies"); export const selectDependencies = createSelector( selectDependenciesFile, - (file) => file?.contents + (file) => file?.contents, ); export const selectParsedDependencies = createSelector( @@ -207,26 +207,26 @@ export const selectParsedDependencies = createSelector( return {}; } return result; - } + }, ); export const selectLocalBehaviorFiles = createSelector( selectAllFiles, (files) => files.filter( - (file) => file.kind === HcFileKind.Behavior - ) as HcBehaviorFile[] + (file) => file.kind === HcFileKind.Behavior, + ) as HcBehaviorFile[], ); export const selectInitFiles = createSelector( selectAllFiles, (files) => - files.filter((file) => file.kind === HcFileKind.Init) as HcInitFile[] + files.filter((file) => file.kind === HcFileKind.Init) as HcInitFile[], ); export const selectLocalBehaviorIds = createFieldSelector( selectLocalBehaviorFiles, - "id" + "id", ); export const selectEditableFiles = createSelector(selectAllFiles, (files) => @@ -234,24 +234,24 @@ export const selectEditableFiles = createSelector(selectAllFiles, (files) => (file) => file.kind === HcFileKind.Required || file.kind === HcFileKind.Behavior || - file.kind === HcFileKind.Init - ) + file.kind === HcFileKind.Init, + ), ); export const selectDatasetFiles = createSelector( selectAllFiles, (files) => files.filter( - (file) => file.kind === HcFileKind.Dataset - ) as HcAnyDatasetFile[] + (file) => file.kind === HcFileKind.Dataset, + ) as HcAnyDatasetFile[], ); export const selectDatasetFilesLocal = createSelector( selectAllFilesLocal, (files) => files.filter( - (file) => file.kind === HcFileKind.Dataset - ) as HcAnyDatasetFile[] + (file) => file.kind === HcFileKind.Dataset, + ) as HcAnyDatasetFile[], ); export const selectDatasetIds = createFieldSelector(selectDatasetFiles, "id"); @@ -266,43 +266,43 @@ export const selectSharedBehaviorFiles = createSelector( (file.kind === HcFileKind.Behavior && file.repoPath.startsWith("dependencies/")) ); - }) as HcSharedBehaviorFile[] + }) as HcSharedBehaviorFile[], ); export const selectSharedBehaviorFilesLocal = createSelector( selectAllFilesLocal, (files) => files.filter( - (file) => file.kind === HcFileKind.SharedBehavior - ) as HcSharedBehaviorFile[] + (file) => file.kind === HcFileKind.SharedBehavior, + ) as HcSharedBehaviorFile[], ); export const selectSharedBehaviorIds = createFieldSelector( selectSharedBehaviorFiles, - "id" + "id", ); export const selectGlobalsFile: Selector = ( - state + state, ) => selectFileById(state, globalsFileId); export const selectGlobals = createSelector( selectGlobalsFile, - (file) => file?.contents + (file) => file?.contents, ); export const selectAnalysisFile: Selector = ( - state + state, ) => selectFileById(state, analysisFileId); export const selectAnalysis = createSelector( selectAnalysisFile, - (file) => file?.contents + (file) => file?.contents, ); export const selectParsedAnalysis = createSelector( selectAnalysis, - (analysisString) => parseAnalysis(analysisString).analysis + (analysisString) => parseAnalysis(analysisString).analysis, ); export const selectParsedAnalysisMetricNames = createSelector( @@ -319,21 +319,21 @@ export const selectParsedAnalysisMetricNames = createSelector( } return []; - } + }, ); export const selectExperimentsFile: Selector = ( - state + state, ) => selectFileById(state, "experiments"); export const selectExperimentsSrc = createSelector( selectExperimentsFile, - (file) => file?.contents + (file) => file?.contents, ); export const selectProcessModelSourceFiles = createSelector( selectAllFiles, - (files) => files.filter((file) => file.kind === HcFileKind.ProcessModel) + (files) => files.filter((file) => file.kind === HcFileKind.ProcessModel), ); export const selectSimulationSrc = createSelector( @@ -349,7 +349,7 @@ export const selectSimulationSrc = createSelector( * this would be cheaper to do as a single `reduce` pass, but I can't get * the types to check out … I think this is only working now because of some * type confusion, the return value is `any` but the `createSelector` - * generics specify that it should be `SimulationSrc` … ¯\_(ツ)_/¯ + * generics specify that it should be `SimulationSrc` ¯\_(ツ)_/¯ */ const pairs = ids .map((id) => [ @@ -374,7 +374,7 @@ export const selectSimulationSrc = createSelector( behaviorSrc: file.contents, })), }; - } + }, ); export const selectSimulationRequiresPyodide = createSelector( @@ -382,22 +382,22 @@ export const selectSimulationRequiresPyodide = createSelector( (simulationSrc, sharedBehaviors) => sharedBehaviors.some((behavior) => behavior.path.ext === Ext.Py) || simulationSrc.behaviors.some((behavior) => behavior.name.includes(".py")) || - simulationSrc.initializers.some((init) => init.name.includes(".py")) + simulationSrc.initializers.some((init) => init.name.includes(".py")), ); export const selectPendingDependencies = createSelector( selectFilesSlice, - (slice) => slice.pendingDependencies + (slice) => slice.pendingDependencies, ); export const selectFileActions = createSelector( selectFilesSlice, - (slice) => slice.actions + (slice) => slice.actions, ); export const selectDidSave = createSelector( selectFileActions, - (actions) => actions.length === 0 + (actions) => actions.length === 0, ); export const selectPrivateDependencies = createSelector( @@ -405,44 +405,44 @@ export const selectPrivateDependencies = createSelector( (datasets, sharedBehaviors) => [...datasets, ...sharedBehaviors].filter( (file): file is HcAnyDependencyFile => - isSharedDependency(file) && file.visibility === "private" - ) + isSharedDependency(file) && file.visibility === "private", + ), ); export const selectProjectHasPrivateDependencies = createSelector( selectPrivateDependencies, - (deps) => deps.length > 0 + (deps) => deps.length > 0, ); const behaviorToBehaviorKeyNamesCombinator = ( - files: (HcBehaviorFile | HcSharedBehaviorFile)[] + files: (HcBehaviorFile | HcSharedBehaviorFile)[], ) => [ ...new Set(files.flatMap((file) => file.keys.keys.rows.map((row) => row[0]))), ]; export const selectLocalBehaviorKeyFieldNames = createSelector( [selectLocalBehaviorFiles], - behaviorToBehaviorKeyNamesCombinator + behaviorToBehaviorKeyNamesCombinator, ); export const selectSharedBehaviorKeyFieldNames = createSelector( [selectSharedBehaviorFiles], - behaviorToBehaviorKeyNamesCombinator + behaviorToBehaviorKeyNamesCombinator, ); export const selectShouldShowBehaviorKeys = createSelector( [selectFilesSlice, selectCurrentBehavior], - (slice, behavior) => slice.behaviorKeys && !!behavior + (slice, behavior) => slice.behaviorKeys && !!behavior, ); export const selectBehaviorKeysDynamicAccess = createSelector( selectCurrentBehavior, - (file) => file?.keys.dynamic_access ?? false + (file) => file?.keys.dynamic_access ?? false, ); export const selectCurrentFileRepoPath = createSelector( selectCurrentFile, - (file) => file?.repoPath ?? null + (file) => file?.repoPath ?? null, ); const selectFilesIdRepoPathName = createFieldsSelector(selectAllFiles, [ @@ -456,7 +456,7 @@ export const selectFolderTree = createSelector( selectFilesIdRepoPathName, (files) => { const filteredFiles = files.filter( - (file) => file.kind !== HcFileKind.ProcessModel + (file) => file.kind !== HcFileKind.ProcessModel, ); return sortBy( parseRelativePathsAsTree(filteredFiles), @@ -464,7 +464,7 @@ export const selectFolderTree = createSelector( (item) => item.children.length === 0, (item) => item.repoPath.toLowerCase(), ], - ["asc", "asc"] + ["asc", "asc"], ); - } + }, ); diff --git a/apps/sim-core/packages/core/src/features/files/slice.spec.ts b/apps/sim-core/packages/core/src/features/files/slice.spec.ts index 97423aa..ae067df 100644 --- a/apps/sim-core/packages/core/src/features/files/slice.spec.ts +++ b/apps/sim-core/packages/core/src/features/files/slice.spec.ts @@ -121,7 +121,7 @@ describe("files slice", () => { it("should append an open file id, if the file id exists", () => { const state = filesReducer( mockStateWithFile0, - setCurrentFileId(mockFiles[0].id) + setCurrentFileId(mockFiles[0].id), ); expect(state.openFileIds.length).toEqual(1); @@ -134,7 +134,7 @@ describe("files slice", () => { ...mockStateWithFile0, openFileIds: [mockFiles[0].id], }, - setCurrentFileId(mockFiles[0].id) + setCurrentFileId(mockFiles[0].id), ); expect(state.openFileIds.length).toEqual(1); @@ -145,7 +145,7 @@ describe("files slice", () => { expect(() => { filesReducer( mockStateWithFile0, - setCurrentFileId(String(mockFiles.length)) + setCurrentFileId(String(mockFiles.length)), ); }).toThrowError("Cannot append file that does not exist"); }); @@ -153,7 +153,7 @@ describe("files slice", () => { it("should make the opened file current", () => { const state = filesReducer( mockStateWithFile0, - setCurrentFileId(mockFiles[0].id) + setCurrentFileId(mockFiles[0].id), ); expect(state.currentFileId).toEqual(mockFiles[0].id); @@ -168,7 +168,7 @@ describe("files slice", () => { fileId: mockFiles[0].id, }, }, - setCurrentFileId(mockFiles[0].id) + setCurrentFileId(mockFiles[0].id), ); expect(state.replaceProposal).toEqual(null); @@ -189,7 +189,7 @@ describe("files slice", () => { it("should remove an open file id if the file id is 'open'", () => { const state = filesReducer( mockStateWithOpenFile0, - closeFile(mockFiles[0].id) + closeFile(mockFiles[0].id), ); expect(state.openFileIds.length).toEqual(0); @@ -199,7 +199,7 @@ describe("files slice", () => { it("should do nothing if the file id is not 'open'", () => { const state = filesReducer( mockStateWithOpenFile0, - closeFile(mockFiles[1].id) + closeFile(mockFiles[1].id), ); expect(state.openFileIds.length).toEqual(1); @@ -209,7 +209,7 @@ describe("files slice", () => { it("should deselect the current file id if the removed file was 'current'", () => { const state = filesReducer( mockStateWithOpenCurrentFile0, - closeFile(mockFiles[0].id) + closeFile(mockFiles[0].id), ); expect(state.openFileIds.length).toEqual(0); @@ -229,7 +229,7 @@ describe("files slice", () => { currentFileId: mockFiles[0].id, openFileIds: [mockFiles[0].id, mockFiles[1].id], }, - closeFile(mockFiles[0].id) + closeFile(mockFiles[0].id), ); expect(state.openFileIds.length).toEqual(1); @@ -247,7 +247,7 @@ describe("files slice", () => { it("should leave only one two files opened", () => { const state = filesReducer( mockStateWithOpenFile0, - closeFilesToTheRight(mockFiles[1].id) + closeFilesToTheRight(mockFiles[1].id), ); expect(state.openFileIds.length).toEqual(2); expect(state.openFileIds).toEqual([mockFiles[0].id, mockFiles[1].id]); @@ -263,7 +263,7 @@ describe("files slice", () => { it("should leave only one file opened", () => { const state = filesReducer( mockStateWithOpenFile0, - closeOtherFiles(mockFiles[0].id) + closeOtherFiles(mockFiles[0].id), ); expect(state.openFileIds.length).toEqual(1); @@ -280,7 +280,7 @@ describe("files slice", () => { it("should leave no files opened", () => { const state = filesReducer( mockStateWithOpenFile0, - closeAllFiles(mockFiles[0].id) + closeAllFiles(mockFiles[0].id), ); expect(state.openFileIds.length).toEqual(0); @@ -298,7 +298,7 @@ describe("files slice", () => { it("should delete a file", () => { const state = filesReducer( mockStateWithFilesAndOpenFiles012, - deleteFile(mockFiles[0].id) + deleteFile(mockFiles[0].id), ); expect(state.ids.length).toEqual(mockFiles.length - 1); @@ -309,7 +309,7 @@ describe("files slice", () => { it("should track a delete action if the file is not a dependency", () => { const state = filesReducer( mockStateWithFilesAndOpenFiles012, - deleteFile(mockFiles[0].id) + deleteFile(mockFiles[0].id), ); expect(state.actions).toEqual([ @@ -344,7 +344,7 @@ describe("files slice", () => { "@foo/other-dep/other_dep.js": "1.0.0", }); }), - deleteFile("dep") + deleteFile("dep"), ); expect(state.actions).toEqual([ { @@ -372,7 +372,7 @@ describe("files slice", () => { setReplaceProposal({ fileId: mockFiles[0].id, nextContents: "NEXT CONTENTS", - }) + }), ); expect(state.currentFileId).toEqual(null); }); @@ -384,7 +384,7 @@ describe("files slice", () => { }; const state = filesReducer( mockStateWithFiles, - setReplaceProposal(replaceProposal) + setReplaceProposal(replaceProposal), ); expect(state.replaceProposal).toEqual(replaceProposal); }); @@ -421,7 +421,7 @@ describe("files slice", () => { it("removes the replace proposal", () => { const state = filesReducer( mockStateWithFiles, - setReplaceProposal(null) + setReplaceProposal(null), ); expect(state.replaceProposal).toEqual(null); }); @@ -436,7 +436,7 @@ describe("files slice", () => { updateFile({ id: mockFiles[0].id, contents: newContents, - }) + }), ); expect(state.entities[mockFiles[0].id]!.contents).toEqual(newContents); @@ -469,7 +469,7 @@ describe("files slice", () => { updateFile({ id: mockFiles[0].id, contents: newContents, - }) + }), ); expect(state.actions).toEqual([ @@ -518,7 +518,7 @@ describe("files slice", () => { updateFile({ id: mockFiles[0].id, contents: newContents, - }) + }), ); expect(state.actions).toEqual([ @@ -563,7 +563,7 @@ describe("files slice", () => { updateFile({ id: mockFiles[0].id, contents: newContents, - }) + }), ); expect(state.actions).toEqual([ @@ -608,7 +608,7 @@ describe("files slice", () => { updateFile({ id: mockFiles[0].id, contents: newContents, - }) + }), ); expect(state.actions).toEqual([ @@ -635,7 +635,7 @@ describe("files slice", () => { const mockDependenciesState = ( pendingDependencies: string[] = [], deps: DependenciesDescriptor = {}, - fileEntities: Record = {} + fileEntities: Record = {}, ) => ({ ...mockInitialState, ids: ["dependencies", ...Object.keys(fileEntities)], @@ -655,7 +655,7 @@ describe("files slice", () => { id: name, path: { formatted: name }, ref: version, - } as HcFile); + }) as HcFile; describe("pending", () => { it("adds pending dependencies without duplicates", () => { @@ -669,7 +669,7 @@ describe("files slice", () => { e: "789", }, }, - }).pendingDependencies + }).pendingDependencies, ).toEqual(["a", "b", "c", "d", "e"]); }); }); @@ -686,7 +686,7 @@ describe("files slice", () => { e: "789", }, }, - }).pendingDependencies + }).pendingDependencies, ).toEqual(["c", "d"]); }); }); @@ -701,7 +701,7 @@ describe("files slice", () => { mockDependency("b"), mockDependency("c"), ], - }).pendingDependencies + }).pendingDependencies, ).toEqual(["d", "e"]); }); @@ -715,7 +715,7 @@ describe("files slice", () => { { abc: "123" }, { abc: mockDependency("abc", "123"), - } + }, ), openFileIds: ["abc", "ghi"], }, @@ -727,8 +727,8 @@ describe("files slice", () => { id: "def", }, ], - } - ).openFileIds + }, + ).openFileIds, ).toEqual(["def", "ghi"]); }); @@ -741,7 +741,7 @@ describe("files slice", () => { { abc: "123" }, { abc: mockDependency("abc", "123"), - } + }, ), currentFileId: "abc", }, @@ -753,8 +753,8 @@ describe("files slice", () => { id: "def", }, ], - } - ).currentFileId + }, + ).currentFileId, ).toEqual("def"); }); @@ -766,7 +766,7 @@ describe("files slice", () => { { abc: "123" }, { abc: mockDependency("abc", "123"), - } + }, ), currentFileId: "abc", }, @@ -778,7 +778,7 @@ describe("files slice", () => { id: "def", }, ], - } + }, ); expect(state.ids).not.toContain("abc"); @@ -798,7 +798,7 @@ describe("files slice", () => { { abc: "123" }, { abc: mockDependency("abc", "123"), - } + }, ), currentFileId: "abc", }, @@ -809,8 +809,8 @@ describe("files slice", () => { ...mockDependency("def", "123"), }, ], - } - ).entities.dependencies + }, + ).entities.dependencies, ).toMatchInlineSnapshot(` Object { "contents": "{ @@ -836,11 +836,11 @@ describe("files slice", () => { project: { ref: "1.0.0", } as SimulationProject, - }) + }), ); expect(state.ids).toEqual(["foo_js_1_0_0"]); - expect(state.entities["foo_js_1_0_0"]).toEqual({ + expect(state.entities.foo_js_1_0_0).toEqual({ id: "foo_js_1_0_0", path: parse("foo.js"), repoPath: "src/behaviors/foo.js", @@ -867,7 +867,7 @@ describe("files slice", () => { project: { ref: "1.0.0", } as SimulationProject, - }) + }), ); expect(state.openFileIds).toEqual(["foo_js_1_0_0"]); @@ -882,7 +882,7 @@ describe("files slice", () => { project: { ref: "1.0.0", } as SimulationProject, - }) + }), ); expect(state.actions).toEqual([ @@ -906,7 +906,7 @@ describe("files slice", () => { describe("renameBehavior", () => { beforeEach(() => { mockMapFileId.mockImplementation((path, ...args) => - path === "foo.js" ? "NEW_ID" : originalMapFileId(path, ...args) + path === "foo.js" ? "NEW_ID" : originalMapFileId(path, ...args), ); }); @@ -916,7 +916,7 @@ describe("files slice", () => { renameBehavior({ id: mockFiles[0].id, newName: "foo.js", - }) + }), ); expect(state.ids).not.toContain(mockFiles[0].id); @@ -929,7 +929,7 @@ describe("files slice", () => { renameBehavior({ id: mockFiles[0].id, newName: "foo.js", - }) + }), ); expect(state.entities.NEW_ID!.path).toEqual(parse("foo.js")); @@ -941,7 +941,7 @@ describe("files slice", () => { renameBehavior({ id: mockFiles[0].id, newName: "foo.js", - }) + }), ); expect(state.entities.NEW_ID!.repoPath).toEqual("src/behaviors/foo.js"); @@ -956,7 +956,7 @@ describe("files slice", () => { renameBehavior({ id: mockFiles[0].id, newName: "foo.js", - }) + }), ); expect(state.openFileIds).toEqual(["abc", "def", "NEW_ID", "egh"]); @@ -972,7 +972,7 @@ describe("files slice", () => { renameBehavior({ id: mockFiles[0].id, newName: "foo.js", - }) + }), ); expect(state.currentFileId).toEqual("NEW_ID"); @@ -988,7 +988,7 @@ describe("files slice", () => { renameBehavior({ id: mockFiles[0].id, newName: "foo.js", - }) + }), ); expect(state.currentFileId).toEqual("abc"); @@ -1000,7 +1000,7 @@ describe("files slice", () => { renameBehavior({ id: mockFiles[0].id, newName: "foo.js", - }) + }), ); expect(state.actions).toEqual([ @@ -1042,7 +1042,7 @@ describe("files slice", () => { draft.entities.dependencies.contents = JSON.stringify({ "@dep/foo/foo.js": "1.0.0", }); - } + }, ); it("adds a file", () => { @@ -1054,11 +1054,11 @@ describe("files slice", () => { project: { ref: "1.0.0", } as SimulationProject, - }) + }), ); expect(state.ids).toContain("foo_js_1_0_0"); - expect(state.entities["foo_js_1_0_0"]).toEqual({ + expect(state.entities.foo_js_1_0_0).toEqual({ id: "foo_js_1_0_0", path: parse("foo.js"), repoPath: "src/behaviors/foo.js", @@ -1077,7 +1077,7 @@ describe("files slice", () => { project: { ref: "1.0.0", } as SimulationProject, - }) + }), ); expect(state.openFileIds).toContain("foo_js_1_0_0"); @@ -1093,7 +1093,7 @@ describe("files slice", () => { project: { ref: "1.0.0", } as SimulationProject, - }) + }), ); expect(state.actions).toContainEqual({ @@ -1114,7 +1114,7 @@ describe("files slice", () => { project: { ref: "1.0.0", } as SimulationProject, - }) + }), ); expect(state.ids).not.toContain(dep.id); @@ -1130,7 +1130,7 @@ describe("files slice", () => { project: { ref: "1.0.0", } as SimulationProject, - }) + }), ); expect(state.entities.dependencies!.contents).toEqual("{}"); diff --git a/apps/sim-core/packages/core/src/features/files/slice.ts b/apps/sim-core/packages/core/src/features/files/slice.ts index 3215955..616ff9c 100644 --- a/apps/sim-core/packages/core/src/features/files/slice.ts +++ b/apps/sim-core/packages/core/src/features/files/slice.ts @@ -35,7 +35,6 @@ import { HcFileKind } from "./enums"; import type { ParsedPath } from "../../util/files/types"; import type { RootState } from "../types"; import { SimulationProject } from "../project/types"; -import { addDatasetToProject } from "../../util/api/queries/addDatasetToProject"; import { addMany, getInitialState, @@ -55,7 +54,6 @@ import { releaseToHcFiles, repoPathForBehavior, stringifyBehaviorKeys, - toHcFiles, } from "./utils"; import { beginActionSave, @@ -83,7 +81,6 @@ import { } from "./selectors"; import { selectCurrentProjectRequired } from "../project/selectors"; import { toggleEditor } from "../viewer/slice"; -import { trackEvent } from "../analytics"; export const addDependencies = createAppAsyncThunk< HcDependencyFile[], @@ -115,7 +112,7 @@ export const parseAndShowBehaviorKeys = createAppAsyncThunk< } return await parseBehaviorKeysQuery(file, signal); - } + }, ); type BehaviorKeysRecord = Record; @@ -135,8 +132,8 @@ export const parseAllBehaviorKeys = createAppAsyncThunk( }, 4), reduce( (record, piece): BehaviorKeysRecord => ({ ...record, ...piece }), - {} - ) + {}, + ), ) .toPromise() .catch((err) => { @@ -146,72 +143,75 @@ export const parseAllBehaviorKeys = createAppAsyncThunk( return {}; }); - } + }, ); -export const createDataset = ( - file: File, - reportProgress?: (progress: number) => void -): AsyncAppThunk => async (dispatch, getState) => { - /** - * We're saving before we mutate the project because we may be creating a - * dataset replacing one we've deleted, which we need to ensure has - * already been deleted on the API - * - * We're not awaiting it yet because we don't need it to be finished until - * later on when we add the dataset to the project - */ - const savePromise = dispatch(save()); - - const state = getState(); - const project = selectCurrentProjectRequired(state); - const datasets = selectDatasetFiles(state); - const filename = allocateDatasetFileName(file.name, datasets); - - const { dataset, postForm } = await createDatasetQuery( - project.pathWithNamespace, - filename, - file.name - ); - - await postFormData( - postForm.url, - prepareFormDataWithFile(file, postForm.fields), - reportProgress - ); - - // Ensure this has finished - await savePromise; - - const thisDataset = await addDatasetToProject( - project.pathWithNamespace, - dataset.id, - postForm.fields?.key, - file.name.endsWith(".csv") - ); - - await dispatch( - trackEvent({ - action: "New dataset: Core", - label: `${dataset?.name} - ${dataset?.id}`, - }) - ); - - if (!thisDataset) { - throw new Error("Cannot find dataset in results"); - } - - const datasetFile = toHcFiles({ - files: [ - { - ...thisDataset.file, - ref: project.ref, - }, - ], - })[0]; +export const createDataset = + (file: File, reportProgress?: (progress: number) => void): AsyncAppThunk => + async (dispatch, getState) => { + /** + * We're saving before we mutate the project because we may be creating a + * dataset replacing one we've deleted, which we need to ensure has + * already been deleted on the API + * + * We're not awaiting it yet because we don't need it to be finished until + * later on when we add the dataset to the project + */ + const savePromise = dispatch(save()); + + const state = getState(); + const project = selectCurrentProjectRequired(state); + const datasets = selectDatasetFiles(state); + const filename = allocateDatasetFileName(file.name, datasets); + + const { postForm } = await createDatasetQuery( + project.pathWithNamespace, + filename, + file.name, + ); - dispatch(addPreparedFile(datasetFile)); -}; + await postFormData( + postForm.url, + prepareFormDataWithFile(file, postForm.fields), + reportProgress, + ); + + // Ensure this has finished + await savePromise; + + // Migration shim + throw new Error("Datasets disabled for migration"); + + // const thisDataset = await addDatasetToProject( + // project.pathWithNamespace, + // dataset.id, + // postForm.fields?.key, + // file.name.endsWith(".csv"), + // ); + + // dispatch( + // //@ts-expect-error trackEvent + // trackEvent({ + // action: "New dataset: Core", + // label: `${dataset?.name} - ${dataset?.id}`, + // }), + // ); + + // if (!thisDataset) { + // throw new Error("Cannot find dataset in results"); + // } + + // const datasetFile = toHcFiles({ + // files: [ + // { + // ...thisDataset.file, + // ref: project.ref, + // }, + // ], + // })[0]; + + // dispatch(addPreparedFile(datasetFile)); + }; const setters = { removeOpenFileId(state: Draft, id: string) { @@ -227,7 +227,7 @@ const setters = { if (!state.currentFileId && state.openFileIds.length) { setters.setCurrentFileId( state, - state.openFileIds[state.openFileIds.length - 1] + state.openFileIds[state.openFileIds.length - 1], ); } }, @@ -248,12 +248,6 @@ const setters = { state.openFileIds.push(id); } } else { - /** - * Diagnostics to fix sentry issue - * "Cannot append file that does not exist: initialState" - * @see https://sentry.io/organizations/hashintel/issues/2371565370/events/fd45f2d27fad4b3ca12a2e60a910ecee/?project=1509252 - * @todo remove this when above issue resolved - */ const currentState = current(state); console.log("===== CURRENT STATE ====="); for (const [key, value] of Object.entries(currentState)) { @@ -300,7 +294,7 @@ const setters = { trackAction( state: Draft, - action: DistributiveOmit + action: DistributiveOmit, ) { state.actions.push({ ...action, @@ -312,11 +306,11 @@ const setters = { trackFileUpdate( state: Draft, repoPath: string, - contents: string + contents: string, ) { const lastActionIndex = findLastIndex( state.actions, - (action) => action.repoPath === repoPath + (action) => action.repoPath === repoPath, ); const existingAction = state.actions[lastActionIndex]; @@ -348,42 +342,42 @@ const setters = { setDependencies( state: Draft, - nextDependencies: DependenciesDescriptor + nextDependencies: DependenciesDescriptor, ) { const sortedNextDependencies = Object.fromEntries( Object.entries(nextDependencies).sort(([a], [b]) => - a < b ? -1 : a > b ? 1 : 0 - ) + a < b ? -1 : a > b ? 1 : 0, + ), ); setters.updateFileTracked( state, "dependencies", - JSON.stringify(sortedNextDependencies, null, 2) + JSON.stringify(sortedNextDependencies, null, 2), ); state.pendingDependencies = state.pendingDependencies.filter( - (dep) => !nextDependencies[dep] + (dep) => !nextDependencies[dep], ); }, addPendingDependencies( state: Draft, - newDependencies: DependenciesDescriptor + newDependencies: DependenciesDescriptor, ) { state.pendingDependencies = [ ...new Set( - state.pendingDependencies.concat(Object.keys(newDependencies)) + state.pendingDependencies.concat(Object.keys(newDependencies)), ), ]; }, removePendingDependencies( state: Draft, - dependencies: DependenciesDescriptor + dependencies: DependenciesDescriptor, ) { state.pendingDependencies = state.pendingDependencies.filter( - (dep) => !dependencies[dep] + (dep) => !dependencies[dep], ); }, @@ -393,7 +387,7 @@ const setters = { } const dependencies = Object.fromEntries( - files.map((dep) => [dep.path.formatted, dep.ref]) + files.map((dep) => [dep.path.formatted, dep.ref]), ); const existingDependencies = selectParsedDependencies({ @@ -406,7 +400,7 @@ const setters = { for (const file of existingFiles) { if (dependencies[file.path.formatted]) { fileMap[file.id] = files.find( - (newFile) => newFile.path.formatted === file.path.formatted + (newFile) => newFile.path.formatted === file.path.formatted, )!.id; } } @@ -439,8 +433,8 @@ const setters = { const newDependencies = Object.fromEntries( Object.entries(existingDependencies).filter( - ([path]) => !paths.includes(path) - ) + ([path]) => !paths.includes(path), + ), ); setters.setDependencies(state, newDependencies); @@ -477,7 +471,7 @@ const setters = { createBehaviorKeysFile( state: Draft, - behavior: Draft + behavior: Draft, ) { setters.trackAction(state, { type: "create", @@ -490,7 +484,7 @@ const setters = { state: Draft, project: SimulationProject, path: ParsedPath, - contents: string + contents: string, ) { const id = mapFileId(path.base, project.ref); const repoPath = `src/behaviors/${path.base}`; @@ -517,7 +511,7 @@ const setters = { }, setReplaceProposal( state: Draft, - payload: FilesSlice["replaceProposal"] + payload: FilesSlice["replaceProposal"], ) { if (payload) { setters.setCurrentFileId(state, null); @@ -531,7 +525,7 @@ const setters = { trackBehaviorKeysFileUpdate( state: Draft, fileId: string, - keys: DraftBehaviorKeysRoot + keys: DraftBehaviorKeysRoot, ) { const file = state.entities[fileId]; @@ -556,7 +550,7 @@ const setters = { setters.trackFileUpdate( state, behaviorKeysRepoPath(file), - stringifyBehaviorKeys(file) + stringifyBehaviorKeys(file), ); } }, @@ -564,7 +558,7 @@ const setters = { updateBehaviorKeys( state: Draft, fileId: string, - keys: DraftBehaviorKeys + keys: DraftBehaviorKeys, ) { const file = state.entities[fileId]; @@ -587,7 +581,7 @@ const setters = { syncBehaviorKeys( state: Draft, file?: HcBehaviorFile | HcSharedBehaviorFile, - previousKeys?: DraftBehaviorKeys + previousKeys?: DraftBehaviorKeys, ) { const files = Object.values(current(state.entities)); const filesToUpdate: Record = {}; @@ -596,18 +590,18 @@ const setters = { const previousRows = Object.fromEntries( (previousKeys ?? fileTarget)?.rows.map( - (row) => [row[1].uuid, row] as const - ) ?? [] + (row) => [row[1].uuid, row] as const, + ) ?? [], ); const localBehaviors = files.filter( (sourceFile): sourceFile is HcBehaviorFile => - sourceFile?.kind === HcFileKind.Behavior + sourceFile?.kind === HcFileKind.Behavior, ); const sharedBehaviors = files.filter( (sourceFile): sourceFile is HcSharedBehaviorFile => - sourceFile?.kind === HcFileKind.SharedBehavior + sourceFile?.kind === HcFileKind.SharedBehavior, ); const behaviorToRows = (behavior: HcBehaviorFile | HcSharedBehaviorFile) => @@ -675,11 +669,11 @@ const setters = { mergeBehaviorKeysWithoutSyncing( state: Draft, file: HcBehaviorFile, - keys: BehaviorKeyFields + keys: BehaviorKeyFields, ) { const existingKeys = file.keys.keys.rows.map((row) => row[0]); const newFields = toRootDraftFormat(keys).rows.filter( - (row) => !existingKeys.includes(row[0]) + (row) => !existingKeys.includes(row[0]), ); file.keys.keys.rows.push(...newFields); @@ -733,7 +727,7 @@ export const { contents?: string; path: ParsedPath; project: SimulationProject; - }> + }>, ) { const { path, project } = action.payload; @@ -751,7 +745,7 @@ export const { action: PayloadAction<{ fileId: string; defaultKeys?: null | BehaviorKeyFields; - }> + }>, ) { if (state.behaviorKeys) { state.behaviorKeys = false; @@ -764,7 +758,7 @@ export const { draftFile.kind !== HcFileKind.SharedBehavior) ) { throw new Error( - "Cannot show behavior keys editor for non-existent behavior" + "Cannot show behavior keys editor for non-existent behavior", ); } @@ -778,12 +772,12 @@ export const { action: PayloadAction<{ fileId: string; keys: DraftBehaviorKeys; - }> + }>, ) { setters.updateBehaviorKeys( state, action.payload.fileId, - action.payload.keys + action.payload.keys, ); }, @@ -792,7 +786,7 @@ export const { action: PayloadAction<{ fileId: string; dynamicAccess: boolean; - }> + }>, ) { const file = state.entities[action.payload.fileId]; @@ -805,24 +799,24 @@ export const { setters.trackBehaviorKeysFileUpdate( state, action.payload.fileId, - file.keys + file.keys, ); }, updateFile( state, - action: PayloadAction<{ id: EntityId; contents: string }> + action: PayloadAction<{ id: EntityId; contents: string }>, ) { setters.updateFileTracked( state, action.payload.id.toString(), - action.payload.contents + action.payload.contents, ); }, renameBehavior( state, - action: PayloadAction<{ id: EntityId; newName: string }> + action: PayloadAction<{ id: EntityId; newName: string }>, ) { const { newName, id } = action.payload; @@ -874,7 +868,7 @@ export const { removeOne(state, id); state.openFileIds = state.openFileIds.map((openId) => - openId === id ? newId : openId + openId === id ? newId : openId, ); state.currentFileId = state.currentFileId === id ? newId : state.currentFileId; @@ -884,7 +878,7 @@ export const { // arbitrary init file names & folder structure. renameInitFile( state, - action: PayloadAction<{ id: EntityId; newName: string }> + action: PayloadAction<{ id: EntityId; newName: string }>, ) { const { newName, id } = action.payload; @@ -928,7 +922,7 @@ export const { removeOne(state, id); state.openFileIds = state.openFileIds.map((openId) => - openId === id ? newId : openId + openId === id ? newId : openId, ); state.currentFileId = state.currentFileId === id ? newId : state.currentFileId; @@ -940,7 +934,7 @@ export const { contents: string; repoPath: string; project: SimulationProject; - }> + }>, ) { const { contents, project, repoPath } = action.payload; const parsedPath = parse(repoPath); @@ -977,7 +971,7 @@ export const { if (state.currentFileId === id && state.openFileIds.length > 0) { setters.setCurrentFileId( state, - state.openFileIds[state.openFileIds.length - 1] + state.openFileIds[state.openFileIds.length - 1], ); } } @@ -1036,13 +1030,13 @@ export const { destination: ParsedPath; source: HcSharedBehaviorFile; project: SimulationProject; - }> + }>, ) { setters.createAndOpenBehaviorTracked( state, project, destination, - source.contents + source.contents, ); setters.deleteFile(state, source.id); @@ -1052,7 +1046,7 @@ export const { if (behavior.kind !== HcFileKind.Behavior) { throw new Error( - "Cannot create behavior keys file for non-existent behavior" + "Cannot create behavior keys file for non-existent behavior", ); } @@ -1062,7 +1056,7 @@ export const { setReplaceProposal( state, - { payload }: PayloadAction + { payload }: PayloadAction, ) { setters.setReplaceProposal(state, payload); }, @@ -1077,7 +1071,7 @@ export const { addPreparedFile( state: Draft, - { payload }: PayloadAction + { payload }: PayloadAction, ) { setters.addFile(state, payload); }, @@ -1104,10 +1098,8 @@ export const { const prevState = current(draft); return createNextState(filesInitialState, (state) => { - const { - meta: { replaceTabs = true, file } = {}, - project, - } = action.payload; + const { meta: { replaceTabs = true, file } = {}, project } = + action.payload; setters.addFiles(state, project.files); @@ -1127,7 +1119,7 @@ export const { } else { setters.setCurrentFileId( state, - replaceTabs ? DEFAULT_CURRENT_FILE : prevState.currentFileId + replaceTabs ? DEFAULT_CURRENT_FILE : prevState.currentFileId, ); } }); @@ -1139,7 +1131,7 @@ export const { const uuids = actions.map((action) => action.uuid); state.actions = state.actions.filter( - (action) => !uuids.includes(action.uuid) + (action) => !uuids.includes(action.uuid), ); } }) @@ -1150,7 +1142,7 @@ export const { return map; }, - {} + {}, ); for (const id of state.ids) { @@ -1176,7 +1168,7 @@ export const { arg.behaviors.map((behavior) => { const prevBehaviorId = mapFileId(behavior.filename, "main"); const nextBehavior = forkedBehaviors.find( - (file) => file.repoPath === behavior.path + (file) => file.repoPath === behavior.path, ); if (!prevState.entities[prevBehaviorId]) { @@ -1185,12 +1177,12 @@ export const { if (!nextBehavior) { throw new Error( - "Could not find new behavior in forked project" + "Could not find new behavior in forked project", ); } return [prevBehaviorId, nextBehavior.id]; - }) + }), ); setters.addFiles(state, files); diff --git a/apps/sim-core/packages/core/src/features/files/types.ts b/apps/sim-core/packages/core/src/features/files/types.ts index 1cf1b5b..afa0e84 100644 --- a/apps/sim-core/packages/core/src/features/files/types.ts +++ b/apps/sim-core/packages/core/src/features/files/types.ts @@ -13,13 +13,13 @@ export interface HcBaseFile { kind: K; path: ParsedPath; repoPath: string; - children?: Array; + children?: (HcFile | HcFolder)[]; name?: string; } type HcDependencyFileKind = HcFileKind.Dataset | HcFileKind.SharedBehavior; export type HcDependencyFile< - K extends HcDependencyFileKind = HcDependencyFileKind + K extends HcDependencyFileKind = HcDependencyFileKind, > = HcBaseFile & LinkableProject & { name: string; @@ -29,24 +29,24 @@ export type HcDependencyFile< visibility: ProjectVisibility; }; -export type DatasetFields = { +export interface DatasetFields { data: { name?: string; rawCsv?: boolean; s3Key: string; inPlaceData: string | null; }; -}; +} -type BehaviorFields = { +interface BehaviorFields { keys: DraftBehaviorKeysRoot; -}; +} export interface HcTemporaryFile extends HcBaseFile { name?: string; } -export interface HcRequiredFile extends HcBaseFile {} +export type HcRequiredFile = HcBaseFile; export interface HcBehaviorFile extends HcBaseFile, @@ -70,10 +70,10 @@ export type HcSharedBehaviorFile = HcDependencyFile & export interface HcFolder extends HcBaseFile { name: string; - children: Array; + children: (HcFolder | HcFile)[]; } -export interface HcInitFile extends HcBaseFile {} +export type HcInitFile = HcBaseFile; export type HcProcessModelFile = HcBaseFile; @@ -119,4 +119,4 @@ export interface FilesSlice extends EntityState { visualAnalysis: boolean; } -export type DependenciesDescriptor = { [name: string]: string }; +export type DependenciesDescriptor = Record; diff --git a/apps/sim-core/packages/core/src/features/files/utils.ts b/apps/sim-core/packages/core/src/features/files/utils.ts index fa398f5..259bc23 100644 --- a/apps/sim-core/packages/core/src/features/files/utils.ts +++ b/apps/sim-core/packages/core/src/features/files/utils.ts @@ -68,7 +68,7 @@ export const requiredFileOrder = Object.values(pathToId); const sortByRequiredFileOrder = ( a: HcRequiredFile, - b: HcRequiredFile + b: HcRequiredFile, ): number => requiredFileOrder.indexOf(a.id) - requiredFileOrder.indexOf(b.id); const sortByFormatted = (a: HcFile, b: HcFile): number => @@ -92,16 +92,18 @@ export const fileSorter = (a: HcFile, b: HcFile): number => a.kind === HcFileKind.Required && b.kind === HcFileKind.Required ? sortByRequiredFileOrder(a, b) : a.kind === b.kind - ? sortByFormatted(a, b) - : sortByFileKindOrder(a, b); + ? sortByFormatted(a, b) + : sortByFileKindOrder(a, b); /** * When an array contains a typed union, there's no way to make push require a * more specific version of that type, which can be useful for code completion * and type safety. This allows you to create a function to do that. */ -const createTypedAdder = (arr: A[]) => (...items: T[]) => - arr.push(...items); +const createTypedAdder = + (arr: A[]) => + (...items: T[]) => + arr.push(...items); const datasetFields = (file: ProjectFile | ReleaseFile) => { /** @@ -141,7 +143,7 @@ const groupFiles = ( files: FileKind[], behaviorKind: | HcFileKind.Behavior - | HcFileKind.SharedBehavior = HcFileKind.Behavior + | HcFileKind.SharedBehavior = HcFileKind.Behavior, ) => { const grouped = files.reduce>>( (grouped, file) => { @@ -168,19 +170,19 @@ const groupFiles = ( group.kind = isBehavior ? behaviorKind : file.path.startsWith("data") || - (file.path.startsWith("dependencies") && - file.path.includes("/data/")) - ? HcFileKind.Dataset - : isInit - ? HcFileKind.Init - : file.path.endsWith(".bpmn") - ? HcFileKind.ProcessModel - : HcFileKind.Required; + (file.path.startsWith("dependencies") && + file.path.includes("/data/")) + ? HcFileKind.Dataset + : isInit + ? HcFileKind.Init + : file.path.endsWith(".bpmn") + ? HcFileKind.ProcessModel + : HcFileKind.Required; } return grouped; }, - {} + {}, ); /** @@ -329,8 +331,9 @@ export const fastPrettyStringify = (json: any) => JSON.stringify(json, null, "\t"); export const isSharedDependency = ( - file: HcFile | HcDependencyFile -): file is HcAnyDependencyFile => file.hasOwnProperty("pathWithNamespace"); + file: HcFile | HcDependencyFile, +): file is HcAnyDependencyFile => + Object.prototype.hasOwnProperty.call(file, "pathWithNamespace"); export const behaviorKeyExtensions = [ Ext.JsJson, @@ -342,7 +345,7 @@ export const isBehaviorKeyFile = (path: string) => behaviorKeyExtensions.some((ext) => path.endsWith(ext)); export const behaviorKeysFileName = ( - behavior: HcBehaviorFile | HcSharedBehaviorFile + behavior: HcBehaviorFile | HcSharedBehaviorFile, ) => `${behavior.path.base}.json`; export const repoPathForBehavior = (newFileName: string) => @@ -380,9 +383,9 @@ export const defaultBehaviorKeys: DraftBehaviorKeysRoot = { * @todo clean up */ export const parseRelativePathsAsTree = ( - files: Pick[] + files: Pick[], ) => { - const result: Array = []; + const result: any[] = []; const level = { result }; files.forEach((file) => { @@ -393,7 +396,7 @@ export const parseRelativePathsAsTree = ( const reduceFn = ( accumulator: any, currentValue: string, - currentIndex: number + currentIndex: number, ) => { if (!accumulator[currentValue]) { accumulator[currentValue] = { result: [] }; @@ -414,24 +417,23 @@ export const parseRelativePathsAsTree = ( }; export const canAutosuggestKeysForFile = ( - file: HcBehaviorFile | HcSharedBehaviorFile + file: HcBehaviorFile | HcSharedBehaviorFile, ) => file.path.ext === Ext.Js || file.path.ext === Ext.Py; export const allocateDatasetFileName = ( originalFileName: string, - datasets: HcAnyDatasetFile[] + datasets: HcAnyDatasetFile[], ) => { const existingNames = datasets .filter((dataset) => !isSharedDependency(dataset)) .map((dataset) => dataset.path.name); - const [originalFileNameBase, ...fileNameExtensions] = originalFileName.split( - "." - ); + const [originalFileNameBase, ...fileNameExtensions] = + originalFileName.split("."); const allocatedFileNameBase = nextNonClashingName( stripInvalidFileNameCharacters(originalFileNameBase), - existingNames + existingNames, ); const fileExtension = fileNameExtensions.length @@ -452,7 +454,7 @@ export const behaviorKeysRepoPath = (behavior: Draft) => repoPathForBehavior(behaviorKeysFileName(behavior)); export const stringifyBehaviorKeys = ( - behavior: HcBehaviorFile | HcSharedBehaviorFile + behavior: HcBehaviorFile | HcSharedBehaviorFile, ) => { const committed: CommittedBehaviorKeysRoot = { ...omit(behavior.keys, "_trackCreation"), diff --git a/apps/sim-core/packages/core/src/features/makeSelectAnalysisSelectorForSimIds.ts b/apps/sim-core/packages/core/src/features/makeSelectAnalysisSelectorForSimIds.ts index f67c2ec..4672987 100644 --- a/apps/sim-core/packages/core/src/features/makeSelectAnalysisSelectorForSimIds.ts +++ b/apps/sim-core/packages/core/src/features/makeSelectAnalysisSelectorForSimIds.ts @@ -15,8 +15,8 @@ export const makeSelectAnalysisSelectorForSimIds = (simIds: string[]) => simIds .map((id) => data[id]?.analysis?.manifest) .filter( - (manifest: T | null | undefined): manifest is T => !!manifest - ) + (manifest: T | null | undefined): manifest is T => !!manifest, + ), ); switch (analysisSrcSet.size) { @@ -34,5 +34,5 @@ export const makeSelectAnalysisSelectorForSimIds = (simIds: string[]) => default: throw new Error("Cannot collate analysis with different manifests"); } - }) + }), ); diff --git a/apps/sim-core/packages/core/src/features/middleware/localStorage.ts b/apps/sim-core/packages/core/src/features/middleware/localStorage.ts index 155d840..a32986a 100644 --- a/apps/sim-core/packages/core/src/features/middleware/localStorage.ts +++ b/apps/sim-core/packages/core/src/features/middleware/localStorage.ts @@ -27,41 +27,42 @@ export const setLocalStorageProject = (project: LocalStorageProject) => { setItem(localStorageProjectKey(project), project); }; -export const localStorageMiddleware: Middleware<{}, RootState> = ({ - getState, -}) => (next) => (action) => { - const prevState = getState(); - const prevProject = selectCurrentProject(prevState); - const result = next(action); - const nextState = getState(); +export const localStorageMiddleware: Middleware<{}, RootState> = + ({ getState }) => + (next) => + (action) => { + const prevState = getState(); + const prevProject = selectCurrentProject(prevState); + const result = next(action); + const nextState = getState(); - const canSave = selectScope[Scope.save](nextState); - const project = selectCurrentProject(nextState); - const actions = selectFileActions(nextState); - const projectChange = prevProject !== project; + const canSave = selectScope[Scope.save](nextState); + const project = selectCurrentProject(nextState); + const actions = selectFileActions(nextState); + const projectChange = prevProject !== project; - if ( - project && - canSave && - (selectFileActions(prevState) !== actions || - selectProjectUpdated(prevState) !== selectProjectUpdated(nextState)) - ) { - const files = selectAllFiles(nextState); + if ( + project && + canSave && + (selectFileActions(prevState) !== actions || + selectProjectUpdated(prevState) !== selectProjectUpdated(nextState)) + ) { + const files = selectAllFiles(nextState); - if ((files.length && actions.length) || projectChange) { - setLocalStorageProject({ - ...project, - actions, - files, - }); - } else { - console.log( - "Removing project from localstorage", - project.pathWithNamespace - ); - removeItem(localStorageProjectKey(project)); + if ((files.length && actions.length) || projectChange) { + setLocalStorageProject({ + ...project, + actions, + files, + }); + } else { + console.log( + "Removing project from localstorage", + project.pathWithNamespace, + ); + removeItem(localStorageProjectKey(project)); + } } - } - return result; -}; + return result; + }; diff --git a/apps/sim-core/packages/core/src/features/middleware/queue.ts b/apps/sim-core/packages/core/src/features/middleware/queue.ts index ff5d793..a0a5646 100644 --- a/apps/sim-core/packages/core/src/features/middleware/queue.ts +++ b/apps/sim-core/packages/core/src/features/middleware/queue.ts @@ -12,7 +12,7 @@ const QUEUE_ACTION_TAG = "__QUEUED_ACTION_TYPE"; type QueuedCallback = ( next: VoidFunction, getState: () => RootState, - dispatch: AppDispatch + dispatch: AppDispatch, ) => void; export interface QueueableAction { @@ -20,9 +20,7 @@ export interface QueueableAction { handler: QueuedCallback; } -export interface QueueDispatch { - (queueableAction: QueueableAction): Promise; -} +export type QueueDispatch = (queueableAction: QueueableAction) => Promise; const queueAction = (queue: string, handler: QueuedCallback) => ({ [QUEUE_ACTION_TAG]: queue, @@ -52,14 +50,15 @@ const isQueueable = (action: any): action is QueueableAction => * Redux behaviour changed by middleware, so overloads here */ declare module "redux" { + //@ts-expect-error fix this as part of dispatch type problems // eslint-disable-next-line @typescript-eslint/no-unused-vars - export interface Dispatch { - (action: QueueableAction): Promise; - } + export type Dispatch = ( + action: QueueableAction, + ) => Promise; } export const queueMiddleware: Middleware = ( - store + store, ) => { const queues: Record = {}; @@ -76,7 +75,8 @@ export const queueMiddleware: Middleware = ( dequeue(key); }, store.getState, - store.dispatch + //@ts-expect-error redux type problems + store.dispatch, ); } } @@ -90,10 +90,13 @@ export const queueMiddleware: Middleware = ( queues[key] = queue; queue.push((next, ...args) => { - action.handler(() => { - resolve(); - next(); - }, ...args); + action.handler( + () => { + resolve(); + next(); + }, + ...args, + ); }); if (queue.length === 1) { diff --git a/apps/sim-core/packages/core/src/features/middleware/tracking.ts b/apps/sim-core/packages/core/src/features/middleware/tracking.ts index 1e82254..d87d687 100644 --- a/apps/sim-core/packages/core/src/features/middleware/tracking.ts +++ b/apps/sim-core/packages/core/src/features/middleware/tracking.ts @@ -39,6 +39,7 @@ export const trackingMiddleware: Middleware<{}, RootState> = (store) => { const payload = payloadByAction(store.getState(), action); if (payload) { + //@ts-expect-error redux type problems dispatch(trackEvent({ action: payload.action, label: payload.label })); } diff --git a/apps/sim-core/packages/core/src/features/monaco/decorators/addGitConflictMarkersDecorator.tsx b/apps/sim-core/packages/core/src/features/monaco/decorators/addGitConflictMarkersDecorator.tsx index 4c21fb7..e613690 100644 --- a/apps/sim-core/packages/core/src/features/monaco/decorators/addGitConflictMarkersDecorator.tsx +++ b/apps/sim-core/packages/core/src/features/monaco/decorators/addGitConflictMarkersDecorator.tsx @@ -10,15 +10,15 @@ enum ConflictMarkerTokenTypes { "EndHeading" = "EndHeading", } -export type Conflict = { +export interface Conflict { range: Range; options: editor.IModelDecorationOptions; -}; +} -type LineColumnInfo = { +interface LineColumnInfo { line: number; col: number; -}; +} const getResolvedCodeLensesKey = (range: Range) => `${range.startLineNumber}:${range.startColumn}`; @@ -43,19 +43,19 @@ const acceptCurrentChangeHandler = ( startConflict: Range, divider: Range, _endConflict: Range, - endHeadingConflict: Range + endHeadingConflict: Range, ) => { const headingRange = new Range( headingConflict.startLineNumber, headingConflict.startColumn, startConflict.startLineNumber, - startConflict.startColumn + startConflict.startColumn, ); const range = new Range( divider.startLineNumber, divider.startColumn, endHeadingConflict.endLineNumber + 1, - 1 + 1, ); executeEditsWithUndoStops(editorInstance, "", [ { forceMoveMarkers: true, range: headingRange, text: null }, @@ -72,19 +72,19 @@ const acceptIncomingChangeHandler = ( _startConflict: Range, _divider: Range, endConflict: Range, - endHeadingConflict: Range + endHeadingConflict: Range, ) => { const headingRange = new Range( headingConflict.startLineNumber, headingConflict.startColumn, endConflict.startLineNumber, - endConflict.startColumn + endConflict.startColumn, ); const range = new Range( endHeadingConflict.startLineNumber, endHeadingConflict.startColumn, endHeadingConflict.endLineNumber + 1, - 1 + 1, ); executeEditsWithUndoStops(editorInstance, "", [ { forceMoveMarkers: true, range: headingRange, text: null }, @@ -101,25 +101,25 @@ const acceptBothChangesHandler = ( startConflict: Range, divider: Range, _endConflict: Range, - endHeadingConflict: Range + endHeadingConflict: Range, ) => { const headingRange = new Range( headingConflict.startLineNumber, headingConflict.startColumn, startConflict.startLineNumber, - startConflict.startColumn + startConflict.startColumn, ); const dividerRange = new Range( divider.startLineNumber, divider.startColumn, divider.endLineNumber + 1, - 1 + 1, ); const endHeadingRange = new Range( endHeadingConflict.startLineNumber, endHeadingConflict.startColumn, endHeadingConflict.endLineNumber + 1, - 1 + 1, ); executeEditsWithUndoStops(editorInstance, "", [ { forceMoveMarkers: true, range: headingRange, text: null }, @@ -136,32 +136,32 @@ let acceptBothChanges: IDisposable | null = null; const registerCommands = () => { acceptCurrentChange = editor.registerCommand( "acceptCurrentChange", - acceptCurrentChangeHandler + acceptCurrentChangeHandler, ); acceptIncomingChange = editor.registerCommand( "acceptIncomingChange", - acceptIncomingChangeHandler + acceptIncomingChangeHandler, ); acceptBothChanges = editor.registerCommand( "acceptBothChanges", - acceptBothChangesHandler + acceptBothChangesHandler, ); }; const filterByClassName = ( conflicts: Conflict[], - expected: ConflictMarkerTokenTypes + expected: ConflictMarkerTokenTypes, ) => conflicts.filter( (conflict) => conflict.options.className === - `HashCoreEditor__ConflictMarkers__${expected}` + `HashCoreEditor__ConflictMarkers__${expected}`, ); const getLenses = ( conflicts: Conflict[], resolvedCodeLenses: string[], - editorInstance: editor.ICodeEditor + editorInstance: editor.ICodeEditor, ) => { const result: { range: IRange; @@ -175,23 +175,23 @@ const getLenses = ( const headingConflicts = filterByClassName( conflicts, - ConflictMarkerTokenTypes.StartHeading + ConflictMarkerTokenTypes.StartHeading, ); const startBlockConflicts = filterByClassName( conflicts, - ConflictMarkerTokenTypes.Start + ConflictMarkerTokenTypes.Start, ); const divider = filterByClassName( conflicts, - ConflictMarkerTokenTypes.Divider + ConflictMarkerTokenTypes.Divider, ); const endBlockConflicts = filterByClassName( conflicts, - ConflictMarkerTokenTypes.End + ConflictMarkerTokenTypes.End, ); const endHeadingConflicts = filterByClassName( conflicts, - ConflictMarkerTokenTypes.EndHeading + ConflictMarkerTokenTypes.EndHeading, ); headingConflicts.forEach((conflict: Conflict, index: number) => { @@ -254,7 +254,7 @@ const cleanupResolvedCodeLenses = () => { const registerGitConflictCodeLensProviders = ( editorInstance: editor.ICodeEditor, conflicts: Conflict[], - currentLanguage: string + currentLanguage: string, ) => { cleanupPreviousCodeLensProvider(); if (conflicts.length === 0) { @@ -281,11 +281,12 @@ const registerGitConflictCodeLensProviders = ( // Old text // >>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:README.md // Try it on https://regex101.com/r/aw03un/1 -const GIT_CONFLICT_MARKERS_REGEX = /(^<<<<<<< \w+:\w+.+\s)((?:.|\s)*?)\s(=======\s)(^(?:.|\s)*?)(^>>>>>>> \w+:\w+.+\s)/gm; +const GIT_CONFLICT_MARKERS_REGEX = + /(^<<<<<<< \w+:\w+.+\s)((?:.|\s)*?)\s(=======\s)(^(?:.|\s)*?)(^>>>>>>> \w+:\w+.+\s)/gm; const getOptions = ( token: string, - hoverMessage: string + hoverMessage: string, ): editor.IModelDecorationOptions => ({ isWholeLine: true, className: `HashCoreEditor__ConflictMarkers__${token}`, @@ -299,13 +300,13 @@ const getOptions = ( const startHeadingMatcher = ( conflicts: Conflict[], lineData: LineColumnInfo, - match: string + match: string, ) => { conflicts.push({ range: new Range(lineData.line, 1, lineData.line, match.length), options: getOptions( - ConflictMarkerTokenTypes["StartHeading"], - "Code in target" + ConflictMarkerTokenTypes.StartHeading, + "Code in target", ), }); }; @@ -313,7 +314,7 @@ const startHeadingMatcher = ( const startMatcher = ( conflicts: Conflict[], lineData: LineColumnInfo, - match: string + match: string, ) => { const lineMatches = match.split("\n"); conflicts.push({ @@ -321,7 +322,7 @@ const startMatcher = ( lineData.line + 1, lineData.col, lineData.line + lineMatches.length, - lineMatches[lineMatches.length - 1].length + lineMatches[lineMatches.length - 1].length, ), options: getOptions(ConflictMarkerTokenTypes.Start, "Code in target"), }); @@ -346,7 +347,7 @@ const endMatcher = (conflicts: Conflict[], match: string) => { startingLineNumber, 1, startingLineNumber + lineMatches.length - 2, - lineMatches[lineMatches.length - 2].length + 1 + lineMatches[lineMatches.length - 2].length + 1, ), options: getOptions(ConflictMarkerTokenTypes.End, "Suggested change"), }); @@ -360,29 +361,29 @@ const endHeadingMatcher = (conflicts: Conflict[], match: string) => { conflictMarkerEndLine + 1, 1, conflictMarkerEndLine + 1, - match.length + match.length, ), options: getOptions( ConflictMarkerTokenTypes.EndHeading, - "Suggested change" + "Suggested change", ), }); }; export const addGitConflictMarkersDecorator = ( editorContent?: string, - editorInstance?: editor.ICodeEditor + editorInstance?: editor.ICodeEditor, ) => { if (typeof editorContent !== "string" || !editorInstance) { console.error( - "addGitConflictMarkersDecorator: !editorContent || !editorInstance, exiting" + "addGitConflictMarkersDecorator: !editorContent || !editorInstance, exiting", ); return; } const currentLanguage = editorInstance?.getModel()?.getModeId(); if (!currentLanguage) { console.error( - "addGitConflictMarkersDecorator: could not detect current language" + "addGitConflictMarkersDecorator: could not detect current language", ); return; } @@ -401,7 +402,7 @@ export const addGitConflictMarkersDecorator = ( return; } const lineData = editorContentAsLineColumn.fromIndex( - currentRegexResult.index + currentRegexResult.index, ); if (lineData === null) { console.error("useConflictMarkersDecorator: Could not parse line data"); @@ -420,7 +421,7 @@ export const addGitConflictMarkersDecorator = ( registerGitConflictCodeLensProviders( editorInstance, conflicts, - currentLanguage + currentLanguage, ); return editorInstance.deltaDecorations([], conflicts); }; diff --git a/apps/sim-core/packages/core/src/features/monaco/monaco.ts b/apps/sim-core/packages/core/src/features/monaco/monaco.ts index 8b01f3c..c113bab 100644 --- a/apps/sim-core/packages/core/src/features/monaco/monaco.ts +++ b/apps/sim-core/packages/core/src/features/monaco/monaco.ts @@ -46,7 +46,7 @@ const zoneMap = new WeakMap< const clickThroughZone = ( zone: Omit & { domNode?: editor.IViewZone["domNode"]; - } + }, ): editor.IViewZone => ({ ...zone, domNode: zone.domNode ?? document.createElement("div"), @@ -59,7 +59,7 @@ let gitConflictMarkersDisposable: IDisposable; let gitDecorations: string[] | undefined; export const setMonacoModel = ( editorInstance: editor.ICodeEditor, - textModel: editor.ITextModel + textModel: editor.ITextModel, ) => { if (textModel !== editorInstance.getModel()) { editorInstance.setModel(textModel); @@ -76,7 +76,7 @@ export const setMonacoModel = ( clickThroughZone({ afterLineNumber: 0, heightInPx: 10, - }) + }), ); }); @@ -95,7 +95,7 @@ export const setMonacoModel = ( clickThroughZone({ afterLineNumber: textModel.getLineCount(), heightInLines: 3, - }) + }), ); zoneMap.set(textModel, { @@ -121,17 +121,17 @@ export const setMonacoModel = ( editorInstance.deltaDecorations(gitDecorations ?? [], []); gitDecorations = addGitConflictMarkersDecorator( textModel.getValue(), - editorInstance + editorInstance, ); }, 500, - { maxWait: 2000 } - ) + { maxWait: 2000 }, + ), ); gitDecorations = addGitConflictMarkersDecorator( textModel.getValue(), - editorInstance + editorInstance, ); // TODO textModel.onUndo delete the last entry in resolvedCodeLenses (only if it was added) @@ -148,7 +148,7 @@ const createMonacoSubscriber = () => { const model = editor.createModel( file.contents, languageByExt[file.path.ext], - Uri.parse(`${file.path.formatted}#${uuid()}`) + Uri.parse(`${file.path.formatted}#${uuid()}`), ); if (!isReadOnly(file, true) || !isReadOnly(file, false)) { @@ -189,6 +189,7 @@ const createMonacoSubscriber = () => { getTextModelRequired, subscribe(store: Store) { + // @ts-expect-error redux problems dispatch = store.dispatch; getState = store.getState; @@ -228,7 +229,7 @@ const createMonacoSubscriber = () => { return modelsToDispose; }, - [] + [], ); models = newModels; @@ -237,8 +238,5 @@ const createMonacoSubscriber = () => { }; }; -export const { - getTextModel, - getTextModelRequired, - subscribe, -} = createMonacoSubscriber(); +export const { getTextModel, getTextModelRequired, subscribe } = + createMonacoSubscriber(); diff --git a/apps/sim-core/packages/core/src/features/project/observables.ts b/apps/sim-core/packages/core/src/features/project/observables.ts index c56c557..d6d0642 100644 --- a/apps/sim-core/packages/core/src/features/project/observables.ts +++ b/apps/sim-core/packages/core/src/features/project/observables.ts @@ -8,8 +8,8 @@ import { selectLinkableProject, selectProjectLoaded } from "./selectors"; export const projectChangeObservable = (store: Store) => fromStore(store).pipe( map((state) => - selectProjectLoaded(state) ? selectLinkableProject(state) : null + selectProjectLoaded(state) ? selectLinkableProject(state) : null, ), distinctUntilChanged(), - filter((url: T | null): url is T => url !== null) + filter((url: T | null): url is T => url !== null), ); diff --git a/apps/sim-core/packages/core/src/features/project/selectors.ts b/apps/sim-core/packages/core/src/features/project/selectors.ts index ec28533..e5c431e 100644 --- a/apps/sim-core/packages/core/src/features/project/selectors.ts +++ b/apps/sim-core/packages/core/src/features/project/selectors.ts @@ -17,7 +17,7 @@ export const selectProjectSlice: Selector = (state) => */ export const selectCurrentProject = createSelector( selectProjectSlice, - (slice) => slice.currentProject + (slice) => slice.currentProject, ); export const selectCurrentProjectRequired = createSelector( @@ -28,73 +28,73 @@ export const selectCurrentProjectRequired = createSelector( } return project; - } + }, ); export const selectCurrentProjectUrl = createSelector( selectCurrentProject, - (project) => (project ? urlFromProject(project) : null) + (project) => (project ? urlFromProject(project) : null), ); export const selectProjectLoaded = createSelector( selectProjectSlice, - (slice) => slice.projectLoaded + (slice) => slice.projectLoaded, ); export const selectAccessGate = createSelector( selectProjectSlice, - (slice) => slice.accessGate + (slice) => slice.accessGate, ); export const selectProjectLatest = createSelector( selectCurrentProject, - (project) => (project ? isProjectLatest(project) : null) + (project) => (project ? isProjectLatest(project) : null), ); export const selectProjectConfig = createSelector( selectCurrentProject, - (project) => project?.config + (project) => project?.config, ); const emptyArray: string[] = []; export const selectProjectPublishedFiles = createSelector( selectProjectConfig, - (config) => config?.files ?? emptyArray + (config) => config?.files ?? emptyArray, ); export const selectProjectUpdated = createSelector( selectCurrentProject, - (project) => project?.updatedAt ?? null + (project) => project?.updatedAt ?? null, ); export const selectHasProject = createSelector( selectCurrentProject, - (project) => !!project + (project) => !!project, ); export const selectLatestReleaseTag = createSelector( selectCurrentProject, - (project) => project?.latestRelease?.tag + (project) => project?.latestRelease?.tag, ); export const selectProjectAccess = createSelector( selectCurrentProject, - (project) => project?.access + (project) => project?.access, ); export const selectForkCurrentProjectUrl = createSelector( [selectCurrentProject], - (project) => (project ? forkUrlFromProject(project) : null) + (project) => (project ? forkUrlFromProject(project) : null), ); const selectPendingProject = createSelector( [selectProjectSlice], - (slice) => slice.pendingProject + (slice) => slice.pendingProject, ); export const selectProjectPathWithNamespace = createSelector( selectCurrentProject, - (project) => project?.pathWithNamespace + (project) => project?.pathWithNamespace, ); export const selectProjectPathWithNamespaceRequired = createSelector( @@ -104,13 +104,13 @@ export const selectProjectPathWithNamespaceRequired = createSelector( throw new Error("Project does not exist when it is required"); } - return pathWithNamespace!; - } + return pathWithNamespace; + }, ); export const selectProjectRef = createSelector( selectCurrentProject, - (project) => (project ? project.ref ?? "main" : null) + (project) => (project ? project.ref ?? "main" : null), ); /** @@ -119,7 +119,7 @@ export const selectProjectRef = createSelector( */ export const selectRefIsNotCommit = createSelector( selectProjectRef, - refIsNotCommit + refIsNotCommit, ); export const selectLinkableProject = createStructuredSelector< @@ -135,5 +135,5 @@ export const selectVersionSwitchingTo = createSelector( (pathWithNamespace, pendingProject) => pendingProject && pathWithNamespace === pendingProject.pathWithNamespace ? pendingProject.ref ?? "main" - : null + : null, ); diff --git a/apps/sim-core/packages/core/src/features/project/slice.ts b/apps/sim-core/packages/core/src/features/project/slice.ts index b9acef4..0474d8d 100644 --- a/apps/sim-core/packages/core/src/features/project/slice.ts +++ b/apps/sim-core/packages/core/src/features/project/slice.ts @@ -100,7 +100,7 @@ export const fetchProject = createAppAsyncThunk< access, // eslint-disable-line @typescript-eslint/no-unused-vars prefetchedRemoteProject, // eslint-disable-line @typescript-eslint/no-unused-vars }, - { dispatch, signal, getState } // eslint-disable-line @typescript-eslint/no-unused-vars + { dispatch, signal, getState }, // eslint-disable-line @typescript-eslint/no-unused-vars ) => { if (selectScope[Scope.save](getState())) { await dispatch(save()); @@ -110,81 +110,82 @@ export const fetchProject = createAppAsyncThunk< const refWithDefault = ref ?? "main"; - try { - // Migration shim - // To be restored with Github intregration. - // const remoteProject = prefetchedRemoteProject - // ? prepareRemoteProject(await prefetchedRemoteProject, access) - // : await projectByPath( - // pathWithNamespace, - // refWithDefault, - // access, - // signal - // ); - // const localProject = getLocalStorageProject( - // pathWithNamespace, - // remoteProject.ref - // ); - // const project = chooseLatestProject(remoteProject, localProject); - - // if (access?.level === "Write" && !project.canUserEdit) { - // throw new Error("Invalid access token"); - // } - const project = getLocalStorageProject(pathWithNamespace, refWithDefault); - - if (!project) { - const err = - "Attempted to fetch project from localstorage, but could not."; - console.warn(err, pathWithNamespace, ref); - - dispatch( - setAccessGate({ - accessGate: { - kind: HashCoreAccessGateKind.NotFound, - props: { requestedProject: null }, - }, - url: pathWithNamespace, - }) - ); + // try { + // Migration shim + // To be restored with Github intregration. + // const remoteProject = prefetchedRemoteProject + // ? prepareRemoteProject(await prefetchedRemoteProject, access) + // : await projectByPath( + // pathWithNamespace, + // refWithDefault, + // access, + // signal + // ); + // const localProject = getLocalStorageProject( + // pathWithNamespace, + // remoteProject.ref + // ); + // const project = chooseLatestProject(remoteProject, localProject); + + // if (access?.level === "Write" && !project.canUserEdit) { + // throw new Error("Invalid access token"); + // } + const project = getLocalStorageProject(pathWithNamespace, refWithDefault); + + if (!project) { + const err = + "Attempted to fetch project from localstorage, but could not."; + console.warn(err, pathWithNamespace, ref); + + dispatch( + setAccessGate({ + accessGate: { + kind: HashCoreAccessGateKind.NotFound, + props: { requestedProject: null }, + }, + url: pathWithNamespace, + }), + ); - return false; - } - - const scopes = batchedScopes.selectScopes(getState())(project); - - const selectedFile = - file ?? (scopes[Scope.edit] ? undefined : globalsFileId); - - dispatch(setProjectWithMeta(project, { fromLegacy, file: selectedFile })); - if (project && redirect) { - navigate(urlFromProject(project), true, {}, false); - } - - return true; - } catch (err) { - // const requestedProject = { pathWithNamespace, ref: refWithDefault }; - // const gate = - // err instanceof QueryError - // ? queryErrorToAccessGate(err, { - // requestedProject: requestedProject, - // }) - // : null; - - // if (gate) { - // dispatch( - // setAccessGate({ - // accessGate: gate, - // // @todo include access code in this - // url: urlFromProject(requestedProject), - // }) - // ); - // return false; - // } else { - // throw err; - // } - throw err; + return false; } - } + + const scopes = batchedScopes.selectScopes(getState())(project); + + const selectedFile = + file ?? (scopes[Scope.edit] ? undefined : globalsFileId); + + //@ts-expect-error redux problems + dispatch(setProjectWithMeta(project, { fromLegacy, file: selectedFile })); + if (project && redirect) { + navigate(urlFromProject(project), true, {}, false); + } + + return true; + // } catch (err) { + // const requestedProject = { pathWithNamespace, ref: refWithDefault }; + // const gate = + // err instanceof QueryError + // ? queryErrorToAccessGate(err, { + // requestedProject: requestedProject, + // }) + // : null; + + // if (gate) { + // dispatch( + // setAccessGate({ + // accessGate: gate, + // // @todo include access code in this + // url: urlFromProject(requestedProject), + // }) + // ); + // return false; + // } else { + // throw err; + // } + // throw err; + // } + }, ); export const release = createAppAsyncThunk< @@ -199,7 +200,7 @@ export const release = createAppAsyncThunk< "project/release", async ( { tag, updateDescription, update = {}, toPublish = [] }, - { dispatch, getState } + { dispatch, getState }, ) => { await dispatch(save()); @@ -214,8 +215,8 @@ export const release = createAppAsyncThunk< const withKeys = Object.fromEntries( selectLocalBehaviorFiles(state).flatMap((file) => - !file.keys._trackCreation ? [[file.path.base, file]] : [] - ) + !file.keys._trackCreation ? [[file.path.base, file]] : [], + ), ); const newFiles = [...new Set([...currentFiles, ...toPublish])].flatMap( @@ -229,12 +230,12 @@ export const release = createAppAsyncThunk< { filename: behaviorKeysFileName(withKeys[filename]), path: repoPathForBehavior( - behaviorKeysFileName(withKeys[filename]) + behaviorKeysFileName(withKeys[filename]), ), }, ] : [file]; - } + }, ); const { updatedAt, ...changes } = await createReleaseWithUpdate( @@ -244,7 +245,7 @@ export const release = createAppAsyncThunk< { ...update, files: newFiles, - } + }, ); // @todo do this with .fulfilled @@ -258,24 +259,25 @@ export const release = createAppAsyncThunk< files: newFiles.map((file) => file.filename), }, }, - }) + }), ); dispatch( + //@ts-expect-error redux type problems trackEvent({ action: "New Release: Core", label: `${type} - ${pathWithNamespace} – ${tag}`, context: { type, }, - }) + }), ); dispatch(displayToast({ kind: ToastKind.ReleaseSuccess })); setTimeout(() => dispatch(displayToast({ kind: ToastKind.None })), 6_000); return { tag, createdAt: updatedAt }; - } + }, ); export const { @@ -290,7 +292,7 @@ export const { action: PayloadAction<{ accessGate: HashCoreAccessGateKindWithProps; url: string | null; - }> + }>, ) { state.accessGate = { ...action.payload.accessGate, @@ -313,7 +315,7 @@ export const { action.payload.project, "files", "dependencies", - "actions" + "actions", ); state.projectLoaded = true; diff --git a/apps/sim-core/packages/core/src/features/project/thunks.ts b/apps/sim-core/packages/core/src/features/project/thunks.ts index 901d3b3..f4786e3 100644 --- a/apps/sim-core/packages/core/src/features/project/thunks.ts +++ b/apps/sim-core/packages/core/src/features/project/thunks.ts @@ -14,43 +14,49 @@ import { setProjectWithMeta } from "../actions"; import { trackEvent } from "../analytics"; import { urlFromProject } from "../../routes"; -export const forkProject = ( - project: PartialSimulationProject, - values: NewProjectModalValues -): AsyncAppThunk => async (dispatch, getState) => { - if (selectScope[Scope.save](getState())) { - await dispatch(save()); - } +export const forkProject = + ( + project: PartialSimulationProject, + values: NewProjectModalValues, + ): AsyncAppThunk => + async (dispatch, getState) => { + if (selectScope[Scope.save](getState())) { + await dispatch(save()); + } - const state = getState(); - const actions = selectFileActions(state); + const state = getState(); + const actions = selectFileActions(state); - const nextProject = await forkProjectQuery( - project.pathWithNamespace, - project.ref, - values.name, - values.namespace, - values.path, - values.visibility, - actions - ); + const nextProject = await forkProjectQuery( + project.pathWithNamespace, + project.ref, + values.name, + values.namespace, + values.path, + values.visibility, + actions, + ); - dispatch( - trackEvent({ - action: "Fork Project: Core", - label: [project.type, project.pathWithNamespace, project.ref].join(" - "), - context: { - type: project.type, - forkPath: nextProject.pathWithNamespace, - }, - }) - ); + dispatch( + //@ts-expect-error redux type problems + trackEvent({ + action: "Fork Project: Core", + label: [project.type, project.pathWithNamespace, project.ref].join( + " - ", + ), + context: { + type: project.type, + forkPath: nextProject.pathWithNamespace, + }, + }), + ); - if (!values.namespace && nextProject.type === "Simulation") { - dispatch(addUserProject(preparePartialSimulationProject(nextProject))); - } + if (!values.namespace && nextProject.type === "Simulation") { + dispatch(addUserProject(preparePartialSimulationProject(nextProject))); + } - dispatch(setProjectWithMeta(nextProject)); - navigate(urlFromProject(nextProject)); - dispatch(displayToast({ kind: ToastKind.ProjectForked, data: project })); -}; + // @ts-expect-error redux problems + dispatch(setProjectWithMeta(nextProject)); + navigate(urlFromProject(nextProject)); + dispatch(displayToast({ kind: ToastKind.ProjectForked, data: project })); + }; diff --git a/apps/sim-core/packages/core/src/features/project/types.ts b/apps/sim-core/packages/core/src/features/project/types.ts index c45371a..3166308 100644 --- a/apps/sim-core/packages/core/src/features/project/types.ts +++ b/apps/sim-core/packages/core/src/features/project/types.ts @@ -4,51 +4,51 @@ import { License } from "../../util/api/types"; import { PartialSimulationProjectFieldsTuple } from "./utils"; import { ProjectAccessCodeAccessType } from "../../shared/scopes"; -export type ProjectFile = { +export interface ProjectFile { name: string; path: string; contents: string; ref: string; -}; +} export type ReleaseFile = ProjectFile & { dependencyPath: string; }; -export type Release = { +export interface Release { pathWithNamespace: string; tag: string; latestReleaseTag: string; files: ReleaseFile[]; canUserEdit: boolean; visibility: ProjectVisibility; -}; +} type SimulationProjectType = "Simulation" | "Dataset" | "Behavior"; -export type ReleaseDescription = { +export interface ReleaseDescription { tag: string; createdAt: string; -}; +} -export type SimulationProjectConfig = { +export interface SimulationProjectConfig { files: string[]; type: SimulationProjectType; keywords: string[]; avatar?: string; -}; +} export type ProjectVisibility = "public" | "private"; -export type CanUserEditProject = { +export interface CanUserEditProject { canUserEdit: boolean; dependencies: Pick[]; -}; +} -export type ProjectAccessParsed = { +export interface ProjectAccessParsed { code: string; level: ProjectAccessCodeAccessType; -}; +} export type ProjectAccess = ProjectAccessParsed | null | undefined; /** @@ -111,14 +111,15 @@ export type ResourceProject = Omit< subject: { name: string }[]; }; -export type ProjectSlice = { +export interface ProjectSlice { projectLoaded: boolean; accessGate: (HashCoreAccessGateKindWithProps & { url: string | null }) | null; currentProject: SimulationProject | null; pendingProject: LinkableProject | null; -}; +} -export type PartialSimulationProjectFields = PartialSimulationProjectFieldsTuple[number]; +export type PartialSimulationProjectFields = + PartialSimulationProjectFieldsTuple[number]; export type PartialSimulationProject = Pick< SimulationProject, diff --git a/apps/sim-core/packages/core/src/features/project/utils.ts b/apps/sim-core/packages/core/src/features/project/utils.ts index 744869b..6ab9bcf 100644 --- a/apps/sim-core/packages/core/src/features/project/utils.ts +++ b/apps/sim-core/packages/core/src/features/project/utils.ts @@ -23,7 +23,8 @@ export const partialSimulationProjectFields = [ "visibility", ] as const; -export type PartialSimulationProjectFieldsTuple = typeof partialSimulationProjectFields; +export type PartialSimulationProjectFieldsTuple = + typeof partialSimulationProjectFields; export const preparePartialSimulationProject = ({ latestRelease, @@ -34,7 +35,7 @@ export const preparePartialSimulationProject = ({ ...partial, ref: latestRelease?.tag ?? "main", }, - partialSimulationProjectFields + partialSimulationProjectFields, ); /** @@ -48,7 +49,7 @@ export const isProjectLatest = (project: SimulationProject) => * @todo this should return the full path for files */ export const toHcConfig = ( - project: Pick + project: Pick, ): SimulationProjectConfig => { const { files, keywords, type } = project; let config = { @@ -58,7 +59,7 @@ export const toHcConfig = ( }; try { config = JSON.parse( - project.files.find((file) => file.path === "hash.json")!.contents + project.files.find((file) => file.path === "hash.json")!.contents, ); } catch (exception) { // TODO: track event @@ -95,7 +96,7 @@ export const mapLegacyDependencyFormat = (dependency: string) => { export const getLocalStorageProject = ( pathWithNamespace: string, - ref?: string | null + ref?: string | null, ): LocalStorageProject | null => { const key = localStorageProjectKey({ pathWithNamespace, ref }); const localProject = getItem(key); @@ -138,11 +139,11 @@ export const getLocalStorageProject = ( }; export const isStoringProjectActions = ( - project: SimulationProjectWithHcFiles | LocalStorageProject + project: SimulationProjectWithHcFiles | LocalStorageProject, ): project is LocalStorageProject => "actions" in project; export const projectIsPrivate = ( - project: Pick + project: Pick, ) => project.visibility === "private"; export const refIsNotCommit = (ref: string | null) => diff --git a/apps/sim-core/packages/core/src/features/project/validation.ts b/apps/sim-core/packages/core/src/features/project/validation.ts index 244e064..d95712e 100644 --- a/apps/sim-core/packages/core/src/features/project/validation.ts +++ b/apps/sim-core/packages/core/src/features/project/validation.ts @@ -17,14 +17,14 @@ export const validateDescription = (description: string) => const matchError = >( values: T, - err: any + err: any, ): { field: keyof T; message: string; } | null => { if (err instanceof QueryError) { const code = err.onlyError?.extensions?.code; - if (values.hasOwnProperty("name")) { + if (Object.prototype.hasOwnProperty.call(values, "name")) { switch (code) { case "INVALID_NAME": return { @@ -39,7 +39,7 @@ const matchError = >( } } - if (values.hasOwnProperty("path")) { + if (Object.prototype.hasOwnProperty.call(values, "path")) { switch (code) { case "PATH_TAKEN": return { @@ -67,7 +67,7 @@ const matchError = >( export const handleQueryCodeErrors = async >( values: T, setError: (field: keyof T, error: ErrorOption) => void, - handler: () => Promise + handler: () => Promise, ) => { try { await handler(); diff --git a/apps/sim-core/packages/core/src/features/scopes.ts b/apps/sim-core/packages/core/src/features/scopes.ts index 2ec247a..33745c7 100644 --- a/apps/sim-core/packages/core/src/features/scopes.ts +++ b/apps/sim-core/packages/core/src/features/scopes.ts @@ -25,8 +25,8 @@ const projectAccessScopes = (project: SimulationProject) => project.access ? projectAccessLevelScopes[project.access.level] : project.canUserEdit - ? projectAccessLevelScopes.Write - : projectAccessLevelScopes.Read; + ? projectAccessLevelScopes.Write + : projectAccessLevelScopes.Read; const projectEditable = (project?: SimulationProject | null) => project @@ -35,7 +35,7 @@ const projectEditable = (project?: SimulationProject | null) => const loggedInOrEditable = ( loggedIn: boolean, - project: SimulationProject | null | undefined + project: SimulationProject | null | undefined, ) => { const editable = projectEditable(project); @@ -45,11 +45,11 @@ const loggedInOrEditable = ( const helpers = (() => { const selectLoggedIn = createSelector( selectUserSlice, - (user) => user.isLoggedIn + (user) => user.isLoggedIn, ); const selectAccessScopes = createSelector(selectCurrentProject, (project) => - project ? projectAccessScopes(project) : null + project ? projectAccessScopes(project) : null, ); return { @@ -61,25 +61,25 @@ const helpers = (() => { [selectCurrentFile, selectLoggedIn, selectCurrentProject], (currentFile, loggedIn, project) => !!currentFile && - !isReadOnly(currentFile, loggedInOrEditable(loggedIn, project)) + !isReadOnly(currentFile, loggedInOrEditable(loggedIn, project)), ), projectEditable: createSelector([selectCurrentProject], projectEditable), projectLatest: createSelector( [selectCurrentProject], - (project) => !!project && isProjectLatest(project) + (project) => !!project && isProjectLatest(project), ), projectWithoutAccess: createSelector( [selectHasProject, selectProjectAccess], - (hasProject, access) => hasProject && !access + (hasProject, access) => hasProject && !access, ), projectWithoutEmbedOnlyAccess: createSelector( [selectHasProject, selectAccessScopes], (hasProject, scopes) => - hasProject && (scopes?.includes(ProjectAccessScope.Read) ?? false) + hasProject && (scopes?.includes(ProjectAccessScope.Read) ?? false), ), }; })(); @@ -196,28 +196,26 @@ type ScopeSelectorOrAlias = ScopeSelector | Scope; type ScopeSelectorList = ScopeSelectorOrAlias[]; -const createSelectorForSelectorChain = ( +const createSelectorForSelectorChain = ( selectorChain: ScopeSelectorList, - existingSelectors: T + existingSelectors: T, ): ScopeSelector => createSelector( - selectorChain.map( - (selector): ScopeSelector => { - if (typeof selector === "function") { - return selector; - } else if ( - typeof selector === "string" && - selector in existingSelectors - ) { - return (existingSelectors as any)[selector]; - } - - throw new Error( - "Attempting to use scope as an alias for a selector before it has been defined defined" - ); + selectorChain.map((selector): ScopeSelector => { + if (typeof selector === "function") { + return selector; + } else if ( + typeof selector === "string" && + selector in existingSelectors + ) { + return (existingSelectors as any)[selector]; } - ), - (...results) => results.every((result) => result) + + throw new Error( + "Attempting to use scope as an alias for a selector before it has been defined defined", + ); + }), + (...results) => results.every((result) => result), ); /** @@ -230,22 +228,22 @@ export const batchedScopes = (() => { /** * @todo look into executing these separately */ - const scopesForProject = (loggedIn: boolean, editorVisible: boolean) => ( - project: SimulationProject | null | undefined - ) => ({ - [Scope.edit]: loggedInOrEditable(loggedIn, project) && editorVisible, - [Scope.mutate]: projectEditable(project), - }); + const scopesForProject = + (loggedIn: boolean, editorVisible: boolean) => + (project: SimulationProject | null | undefined) => ({ + [Scope.edit]: loggedInOrEditable(loggedIn, project) && editorVisible, + [Scope.mutate]: projectEditable(project), + }); const selectScopes = createSelector( [helpers.loggedIn, selectEditorVisible], - scopesForProject + scopesForProject, ); const selectScopesForCurrentProject = createSelector( [selectScopes, selectCurrentProject], (selectScopesForProject, currentProject) => - selectScopesForProject(currentProject) + selectScopesForProject(currentProject), ); const makeSelectScope = (scope: Scope.edit | Scope.mutate) => @@ -334,16 +332,14 @@ const scopeEntries = Object.entries(scopes) as [Scope, ScopeSelectorList][]; export const selectScope: Record = scopeEntries.reduce( ( existingSelectors: T, - [scope, selectorChain]: [S, ScopeSelectorList] + [scope, selectorChain]: [S, ScopeSelectorList], ): T & { [key in S]: ScopeSelector } => ({ ...existingSelectors, - [scope as S]: createSelectorForSelectorChain( - selectorChain, - existingSelectors - ), - } as any), - {} as any + //@ts-expect-error Genuine type error here, please fix. + [scope]: createSelectorForSelectorChain(selectorChain, existingSelectors), + }) as any, + {} as any, ); /** @@ -352,7 +348,7 @@ export const selectScope: Record = scopeEntries.reduce( */ const selectVisualGlobalsVisibleOverwrite = createSelector( [selectScope[Scope.edit]], - (canEdit) => !canEdit + (canEdit) => !canEdit, ); /** @@ -361,7 +357,7 @@ const selectVisualGlobalsVisibleOverwrite = createSelector( */ export const selectVisualGlobalsVisible = createSelector( [selectVisualGlobalsVisibleOverwrite, selectFilesSlice], - (visible, filesSlice) => visible || filesSlice.visualGlobals + (visible, filesSlice) => visible || filesSlice.visualGlobals, ); /** @@ -370,7 +366,7 @@ export const selectVisualGlobalsVisible = createSelector( */ export const selectCanToggleVisualGlobals = createSelector( [selectVisualGlobalsVisibleOverwrite, selectCurrentFileId], - (visible, currentFileId) => !visible && currentFileId === globalsFileId + (visible, currentFileId) => !visible && currentFileId === globalsFileId, ); /** @@ -380,12 +376,12 @@ export const selectCanToggleVisualGlobals = createSelector( export const selectShouldShowExperimentsButton = createSelector( [selectEmbedded, selectScope[Scope.edit], selectExperiments], (embedded, canEdit, experiments) => - !embedded && (canEdit || Object.keys(experiments ?? {}).length > 0) + !embedded && (canEdit || Object.keys(experiments ?? {}).length > 0), ); export const useScope = (scope: Scope) => useSelector(selectScope[scope]); -type FilterArrayKeys = Key extends keyof Array ? never : Key; +type FilterArrayKeys = Key extends keyof any[] ? never : Key; type ScopesReturn = { [K in FilterArrayKeys as `can${Capitalize}`]: boolean; }; @@ -398,8 +394,8 @@ const makeSpecificSelectScopes = (list: T) => list.map((key, idx) => [ `can${key.slice(0, 1).toUpperCase()}${key.slice(1)}`, results[idx], - ]) - ) as ScopesReturn + ]), + ) as ScopesReturn, ); /** diff --git a/apps/sim-core/packages/core/src/features/search/selectors.ts b/apps/sim-core/packages/core/src/features/search/selectors.ts index 7027d22..d4da051 100644 --- a/apps/sim-core/packages/core/src/features/search/selectors.ts +++ b/apps/sim-core/packages/core/src/features/search/selectors.ts @@ -8,5 +8,5 @@ export const selectSearch: Selector = (state) => export const selectSearchOpen = createSelector( selectSearch, - (search) => search.open + (search) => search.open, ); diff --git a/apps/sim-core/packages/core/src/features/selectors.ts b/apps/sim-core/packages/core/src/features/selectors.ts index 0c9e164..827cc31 100644 --- a/apps/sim-core/packages/core/src/features/selectors.ts +++ b/apps/sim-core/packages/core/src/features/selectors.ts @@ -20,7 +20,7 @@ export const selectDefaultLinkableProject = createSelector( ref: userProjects.length ? "main" : project.ref, } : null; - } + }, ); export const selectDisplayEditorSection = createSelector( @@ -44,5 +44,5 @@ export const selectDisplayEditorSection = createSelector( } catch (err) { return true; } - } + }, ); diff --git a/apps/sim-core/packages/core/src/features/simulator/context.tsx b/apps/sim-core/packages/core/src/features/simulator/context.tsx index 74f4628..36239f7 100644 --- a/apps/sim-core/packages/core/src/features/simulator/context.tsx +++ b/apps/sim-core/packages/core/src/features/simulator/context.tsx @@ -31,16 +31,16 @@ const SimulatorReduxContext: Context< > = createContext(null) as any; export const useSimulatorStore: () => typeof simulatorStore = createStoreHook( - SimulatorReduxContext + SimulatorReduxContext, ); export const useSimulatorSelector: ( selector: (state: SimulatorRootState) => TSelected, - equalityFn?: (left: TSelected, right: TSelected) => boolean + equalityFn?: (left: TSelected, right: TSelected) => boolean, ) => TSelected = createSelectorHook(SimulatorReduxContext); export const useSimulatorDispatch: () => SimulatorDispatch = createDispatchHook( - SimulatorReduxContext + SimulatorReduxContext, ); export const SimulatorProvider: FC = ({ children }) => ( diff --git a/apps/sim-core/packages/core/src/features/simulator/historicCloudExperimentProvider.ts b/apps/sim-core/packages/core/src/features/simulator/historicCloudExperimentProvider.ts index b13f8a8..b8ddd39 100644 --- a/apps/sim-core/packages/core/src/features/simulator/historicCloudExperimentProvider.ts +++ b/apps/sim-core/packages/core/src/features/simulator/historicCloudExperimentProvider.ts @@ -13,23 +13,23 @@ let experimentDataStoreIdb: Promise | null = new Promise( .catch((err) => { console.warn( "indexdb store creation failed. Local caching will be unavailable", - err + err, ); experimentDataStoreIdb = null; }); - } + }, ); const experimentKey = (experimentId: string) => `experiment.${experimentId}`; const experimentSimulationStepsKey = ( experimentId: string, - simulationId: string + simulationId: string, ) => `${experimentKey(experimentId)}.run.${simulationId}`; const experimentSimulationAnalysisKey = ( experimentId: string, - simulationId: string + simulationId: string, ) => `${experimentKey(experimentId)}.run.${simulationId}.analysis`; const idbGet = (key: string) => @@ -42,7 +42,7 @@ const idbGet = (key: string) => }) : Promise.resolve(null); -const idbSet = (key: string, value: T) => { +const idbSet = (key: string, value: T) => { if (experimentDataStoreIdb) { if (value === undefined || value === null) { return experimentDataStoreIdb @@ -64,10 +64,10 @@ const idbSet = (key: string, value: T) => { const getIdbSteps = async ( experimentId: string, - simulationId: string + simulationId: string, ): Promise => { const json = await idbGet( - experimentSimulationStepsKey(experimentId, simulationId) + experimentSimulationStepsKey(experimentId, simulationId), ); return typeof json === "string" ? JSON.parse(json) : null; @@ -75,10 +75,10 @@ const getIdbSteps = async ( const getIdbAnalysis = async ( experimentId: string, - simulationId: string + simulationId: string, ): Promise => { const json = await idbGet( - experimentSimulationAnalysisKey(experimentId, simulationId) + experimentSimulationAnalysisKey(experimentId, simulationId), ); return typeof json === "string" ? JSON.parse(json) : null; @@ -93,17 +93,17 @@ type SimulationWithAnalysisLink = Omit & { }; const hasStepsLink = ( - simulation: SimulationData + simulation: SimulationData, ): simulation is SimulationWithStepsLink => !!simulation.stepsLink; const hasAnalysisLink = ( - simulation: SimulationData + simulation: SimulationData, ): simulation is SimulationWithAnalysisLink => !!simulation.analysisLink; const getNetworkSteps = async ( experiment: ExperimentRun, run: SimulationWithStepsLink, - signal: AbortSignal + signal: AbortSignal, ) => fetch(run.stepsLink, { signal: signal, @@ -114,7 +114,7 @@ const getNetworkSteps = async ( await historicCloudExperimentProvider.setStepsRaw( experiment.experimentId, run.simulationRunId, - text + text, ); return JSON.parse(text); @@ -124,7 +124,7 @@ const getNetworkSteps = async ( const getNetworkAnalysis = async ( experiment: ExperimentRun, run: SimulationWithAnalysisLink, - signal: AbortSignal + signal: AbortSignal, ) => fetch(run.analysisLink, { signal: signal, @@ -135,7 +135,7 @@ const getNetworkAnalysis = async ( await historicCloudExperimentProvider.setAnalysisRaw( experiment.experimentId, run.simulationRunId, - text + text, ); return JSON.parse(text); @@ -147,12 +147,12 @@ const stepRequests: Record> = {}; export const historicCloudExperimentProvider = { async getSteps( experiment: ExperimentRun, - run: SimulationData + run: SimulationData, ): Promise { if (hasStepsLink(run)) { - if (stepRequests[run.simulationRunId]) { + if (run.simulationRunId in stepRequests) { return stepRequests[run.simulationRunId].catch(() => - historicCloudExperimentProvider.getSteps(experiment, run) + historicCloudExperimentProvider.getSteps(experiment, run), ); } @@ -161,7 +161,7 @@ export const historicCloudExperimentProvider = { const dbStepsPromise = getIdbSteps( experiment.experimentId, - run.simulationRunId + run.simulationRunId, ).then((steps) => { if (steps) { abortController.abort(); @@ -173,7 +173,7 @@ export const historicCloudExperimentProvider = { const networkStepsPromise = getNetworkSteps( experiment, run, - abortController.signal + abortController.signal, ); const steps = await Promise.race([dbStepsPromise, networkStepsPromise]) @@ -205,28 +205,28 @@ export const historicCloudExperimentProvider = { setSteps: ( experimentId: string, simulationId: string, - steps: SimulationStates | null + steps: SimulationStates | null, ) => idbSet( experimentSimulationStepsKey(experimentId, simulationId), - JSON.stringify(steps) + JSON.stringify(steps), ), setStepsRaw: ( experimentId: string, simulationId: string, - stepsText: string + stepsText: string, ) => idbSet(experimentSimulationStepsKey(experimentId, simulationId), stepsText), async getAnalysis( experiment: ExperimentRun, - run: SimulationData + run: SimulationData, ): Promise { if (hasAnalysisLink(run)) { const abortController = new AbortController(); const dbAnalysisPromise = getIdbAnalysis( experiment.experimentId, - run.simulationRunId + run.simulationRunId, ).then((analysis) => { if (analysis) { abortController.abort(); @@ -238,7 +238,7 @@ export const historicCloudExperimentProvider = { const networkAnalysisPromise = getNetworkAnalysis( experiment, run, - abortController.signal + abortController.signal, ); const analysis = await Promise.race([ @@ -265,19 +265,19 @@ export const historicCloudExperimentProvider = { setAnalysis: ( experimentId: string, simulationId: string, - analysis: SimulationAnalysis | null + analysis: SimulationAnalysis | null, ) => idbSet( experimentSimulationAnalysisKey(experimentId, simulationId), - JSON.stringify(analysis) + JSON.stringify(analysis), ), setAnalysisRaw: ( experimentId: string, simulationId: string, - analysisText: string + analysisText: string, ) => idbSet( experimentSimulationAnalysisKey(experimentId, simulationId), - analysisText + analysisText, ), }; diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/analysisMiddleware.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/analysisMiddleware.ts index b0c34ce..5983e83 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/analysisMiddleware.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/analysisMiddleware.ts @@ -41,7 +41,7 @@ const createPlotsObservers = ( simulatorStore: SimulatorStore, appStore: AppStore, simIds: string[], - getExistingPlots?: () => Record + getExistingPlots?: () => Record, ): Observable => { const simObs = fromStore(simulatorStore); const appObs = fromStore(appStore); @@ -51,9 +51,9 @@ const createPlotsObservers = ( const analysisSrcObs = combineLatest([simObs, appObs]).pipe( map( ([simState, appState]) => - selectAnalysisSelector(appState)(simState).analysis + selectAnalysisSelector(appState)(simState).analysis, ), - distinctUntilChanged() + distinctUntilChanged(), ); const emptyPlotsObs = analysisSrcObs.pipe( @@ -62,10 +62,10 @@ const createPlotsObservers = ( from(refreshAnalysisSource(analysisSrc)).pipe( materialize(), filter((val) => !val.error), - dematerialize() - ) + dematerialize(), + ), ), - share() + share(), ); /** @@ -75,7 +75,7 @@ const createPlotsObservers = ( switchMap((emptyPlots) => defer(() => { const lastPlots: Record = JSON.parse( - JSON.stringify(getExistingPlots?.() ?? {}) + JSON.stringify(getExistingPlots?.() ?? {}), ); return simObs.pipe( @@ -85,43 +85,41 @@ const createPlotsObservers = ( !simIds.some( (id) => prev[id]?.steps !== next[id]?.steps || - prev[id]?.analysis !== next[id]?.analysis - ) + prev[id]?.analysis !== next[id]?.analysis, + ), ), exhaustMapWithTrailing((simulationData) => of(...simIds).pipe( - concatMap( - (id): Promise => { - const plots: OutputPlots = - lastPlots[id] ?? JSON.parse(JSON.stringify(emptyPlots)); - - const simData = simulationData[id]; - - if (simData) { - if (simData.analysis?.outputs) { - plots.outputs = simData.analysis.outputs; - - mutatingPlotData( - simData.analysis.outputs, - plots.plots, - Object.values(simData.analysis.outputs)[0]?.length ?? 0 - ); - - return Promise.resolve([id, plots]); - } else { - // @todo should take existing plots outputs - return mutatingUpdatePlotsForSingleRun( - simData.steps, - plots, - simData.stepsCount - ).then((plots) => [id, plots] as const); - } + concatMap((id): Promise => { + const plots: OutputPlots = + lastPlots[id] ?? JSON.parse(JSON.stringify(emptyPlots)); + + const simData = simulationData[id]; + + if (simData) { + if (simData.analysis?.outputs) { + plots.outputs = simData.analysis.outputs; + + mutatingPlotData( + simData.analysis.outputs, + plots.plots, + Object.values(simData.analysis.outputs)[0]?.length ?? 0, + ); + + return Promise.resolve([id, plots]); } else { - return Promise.resolve([id, null] as const); + // @todo should take existing plots outputs + return mutatingUpdatePlotsForSingleRun( + simData.steps, + plots, + simData.stepsCount, + ).then((plots) => [id, plots] as const); } + } else { + return Promise.resolve([id, null] as const); } - ) - ) + }), + ), ), tap(([id, plots]) => { lastPlots[id] = plots; @@ -131,27 +129,29 @@ const createPlotsObservers = ( * can be mutated by us and that needs to be invisible to the * consumer */ - map(([id, plots]) => [id, JSON.parse(JSON.stringify(plots))] as const) + map( + ([id, plots]) => [id, JSON.parse(JSON.stringify(plots))] as const, + ), ); - }) - ) + }), + ), ); }; export const createSubscriptionToDispatchPlotData = ( simIds: string[], - getState: () => SimulatorRootState + getState: () => SimulatorRootState, ) => createPlotsObservers(simulatorStore, store, simIds, () => { const simulationData = selectAllSimulationData(getState()); return Object.fromEntries( - simIds?.map((id) => [id, simulationData[id].plots]) ?? [] + simIds?.map((id) => [id, simulationData[id].plots]) ?? [], ); }).pipe( tap(([simId, plots]) => { simulatorStore.dispatch(updatePlotData({ simId, plots })); - }) + }), ); /** @@ -174,12 +174,10 @@ export const simulatorAnalysisMiddleware: Middleware< const res = next(action); const nextState = getState(); - const prevAnalysisVisible = selectAnalysisTabVisibleInSimulator( - prevState - ); - const nextAnalysisVisible = selectAnalysisTabVisibleInSimulator( - nextState - ); + const prevAnalysisVisible = + selectAnalysisTabVisibleInSimulator(prevState); + const nextAnalysisVisible = + selectAnalysisTabVisibleInSimulator(nextState); const prevAnalysisMode = selectAnalysisMode(prevState); const nextAnalysisMode = selectAnalysisMode(nextState); @@ -207,7 +205,7 @@ export const simulatorAnalysisMiddleware: Middleware< if (simIds?.length) { subscription = createSubscriptionToDispatchPlotData( simIds, - getState + getState, ).subscribe(); } } diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/buildprovider.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/buildprovider.ts index 84c1e16..c647785 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/buildprovider.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/buildprovider.ts @@ -1,10 +1,7 @@ -import urljoin from "url-join"; - import { IS_DEV } from "../../../util/api"; import { SimulationProvider } from "./provider"; import { getLocalStorageSimulatorTarget } from "./target"; - -const workerUrl = urljoin(WEBPACK_PUBLIC_PATH, "simulationworker.js"); +import workerUrl from "../../../workers/simulation-worker/index?worker&url"; /** * This "magic number" might need to be more sophisticated as time goes on @@ -21,7 +18,7 @@ const numThreads = (window.navigator.hardwareConcurrency ?? 4) + 1; * Spin up a new simulation provider and then dispatch an update to the Ui */ export const simulationProvider = new SimulationProvider( - getLocalStorageSimulatorTarget() + getLocalStorageSimulatorTarget(), ); /** diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/historySubscriber.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/historySubscriber.ts index 93ed8d3..58b259f 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/historySubscriber.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/historySubscriber.ts @@ -17,13 +17,13 @@ import { selectHistoryVisible, } from "./selectors"; -type RunningState = { +interface RunningState { running: boolean; abortController: AbortController; wasRequestingMore: boolean; requestingMore: boolean; historyProject: LinkableProject; -}; +} export const historySubscriber = (store: Store) => { const dispatch = store.dispatch as SimulatorDispatch; @@ -33,8 +33,8 @@ export const historySubscriber = (store: Store) => { fetchProjectHistoryNextPage( selectCurrentProjectRequired(appStore.getState()), selectProjectAccess(appStore.getState()), - signal - ) + signal, + ), ); if ( @@ -85,7 +85,7 @@ export const historySubscriber = (store: Store) => { abortController, wasRequestingMore: requestingMore, requestingMore: requestingMore, - historyProject: historyProject!, + historyProject: historyProject, }; run(runningState, abortController.signal).catch((err) => { diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/middleware.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/middleware.ts index 66bcea5..ad4914d 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/middleware.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/middleware.ts @@ -14,14 +14,14 @@ const MAX_TIMEOUT = 100; const maxTimeoutWhitelist = [initializeExperiment.type]; export const simulatorMiddleware: Middleware<{}, SimulatorRootState> = ( - store + store, ) => { const dispatch = store.dispatch as SimulatorDispatch; simulationProvider.subscribe((message) => { if (message.simulationRunId && message.earlyStop) { dispatch( - earlyStopSimulation(message.simulationRunId, message.stopMessage) + earlyStopSimulation(message.simulationRunId, message.stopMessage), ); } @@ -42,7 +42,7 @@ export const simulatorMiddleware: Middleware<{}, SimulatorRootState> = ( context: "", timestamp: Date.now(), simulationId: message.simulationRunId, - }) + }), ); } }); @@ -62,7 +62,7 @@ export const simulatorMiddleware: Middleware<{}, SimulatorRootState> = ( time, "Action:", action.type, - action + action, ); } } diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/playbackSubscriber.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/playbackSubscriber.ts index cf3f8e7..676a366 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/playbackSubscriber.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/playbackSubscriber.ts @@ -28,7 +28,7 @@ export const playbackSubscriber = (store: Store) => { while (!signal.aborted) { const timestamp = await new Promise((resolve) => - requestAnimationFrame(resolve) + requestAnimationFrame(resolve), ); if (signal.aborted) { diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/provider.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/provider.ts index 86b9b63..3465e57 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/provider.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/provider.ts @@ -38,7 +38,7 @@ export class SimulationProvider implements ExperimentRunner { const dedicatedRunner = new WebWorkerRunner( "worker-web-dedicated", workerFileName, - devMode + devMode, ); this.targets = { @@ -67,7 +67,7 @@ export class SimulationProvider implements ExperimentRunner { */ async handleRequest( request: RunnerRequest, - _: string | null + _: string | null, ): Promise { const { dedicatedRunner } = this.targets![this.target]; @@ -78,7 +78,7 @@ export class SimulationProvider implements ExperimentRunner { } queueExperiment( - src: ExperimentSrc + src: ExperimentSrc, ): | Observable | Promise { @@ -95,8 +95,8 @@ export class SimulationProvider implements ExperimentRunner { case "web": { // Selecting the first element isn't _great_ but it maintains consistency - const experimenter: ExperimentRunner = this.targets!.web.experimentRunners.values().next() - .value; + const experimenter: ExperimentRunner = + this.targets!.web.experimentRunners.values().next().value; // When the experiment is complete, alert the provider's subscribers return experimenter.queueExperiment(src); diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/queueExperiment.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/queueExperiment.ts index 3ef9793..39f9949 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/queueExperiment.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/queueExperiment.ts @@ -71,49 +71,48 @@ import { trackEvents } from "../../analytics"; * necessary due to a bug in rxjs' typing. */ const toConnectable = ( - observable: Observable + observable: Observable, ): ConnectableObservable => observable.pipe(multicast(new Subject())) as any; type ExperimentError = Error & { context?: string }; -type ExperimentWideSimulationErrorEvent = { +interface ExperimentWideSimulationErrorEvent { type: "experimentError"; error: ExperimentError; simulationId: string; -}; +} type MappedExperimentStream = | ExperimentStreamResponse | ExperimentWideSimulationErrorEvent; -export const experimentError = ( - err: ExperimentError, - experimentId: string -): SimulatorThunk => (dispatch) => { - dispatch(experimentFailed(experimentId)); - - // Check if no credits are remaining and throw the out-of-credits error modal - if (err.message && err.message === "OutOfCredits") { - appStore.dispatch( - addUserAlert({ - context: "experiments.json", - message: "Out of cloud compute credits", - timestamp: Date.now(), - type: "error", - simulationId: null, - }) - ); - } else { - appStore.dispatch( - addUserAlert({ - context: err.context ?? "experiment.json", - message: err.message ?? "running experiment failed", - timestamp: Date.now(), - type: "error", - simulationId: null, - }) - ); - } -}; +export const experimentError = + (err: ExperimentError, experimentId: string): SimulatorThunk => + (dispatch) => { + dispatch(experimentFailed(experimentId)); + + // Check if no credits are remaining and throw the out-of-credits error modal + if (err.message && err.message === "OutOfCredits") { + appStore.dispatch( + addUserAlert({ + context: "experiments.json", + message: "Out of cloud compute credits", + timestamp: Date.now(), + type: "error", + simulationId: null, + }), + ); + } else { + appStore.dispatch( + addUserAlert({ + context: err.context ?? "experiment.json", + message: err.message ?? "running experiment failed", + timestamp: Date.now(), + type: "error", + simulationId: null, + }), + ); + } + }; /** * Unfortunately, groupBy's typings have a bug that fails to deal with @@ -122,536 +121,546 @@ export const experimentError = ( * to fix this with some typescript magic, and also hide it from the use site * as its kind of irrelevant to the actual operation of queuing experiments */ -const groupExperimentStreamByType = () => ( - observable: Observable -) => - observable.pipe( - groupBy((evt) => evt.type), - map((group) => { - type GroupName = typeof group extends GroupedObservable - ? Name - : never; - type GroupType = typeof group extends GroupedObservable - ? Type - : never; - - type Union = { - [Name in GroupName]: GroupedObservable< - Name, - Extract - >; - }[GroupName]; - - return (group as any) as Union; - }) - ); - -export const queueExperiment = ( - experimentName: string -): SimulatorThunk> => async (dispatch, getState) => { - const appState = appStore.getState(); - const project = selectCurrentProject(appState); - const projectUrl = selectCurrentProjectUrl(appState); - const experiments = Object.fromEntries(selectExperiments(appState) ?? []); - const projectPath = project?.pathWithNamespace; - const projectRef = project?.ref; - - if (!projectPath || !projectRef) { - throw new Error("This project does not have a proper project path + ref"); - } - - const pendingExperimentId = uuid(); - - /** - * This isn't handled by addPendingExperiment because ExperimentGroup - * won't render a pending experiment until 100ms after the experiment was - * created and we don't want to deselect the currently selected experiment - * until this experiment is ready to show - */ - const selectExperiment = (() => { - let selected = false; - - return () => { - if (!selected) { - selected = true; - dispatch(setSelectedExperiment(pendingExperimentId)); - } - }; - })(); - - const selectExperimentTimeout = new Promise((resolve) => { - setTimeout(resolve, EXPERIMENT_PENDING_THRESHOLD - 1); - }); - - // @todo most of these properties can be moved into the action - const pendingStartedTime = Date.now(); - dispatch( - addPendingExperiment({ - experimentId: pendingExperimentId, - // should this be pending - status: "queued", - target: simulationProvider.target, - startedTime: pendingStartedTime, - experimentName, - definition: experiments[experimentName], - }) - ); - - // Track this this event and the associated runs - const label = `${project?.name} - ${experimentName} - ${projectUrl}`; - const context = { cloud: simulationProvider.target === "cloud" }; - - const trackExperimentRunEvent = { action: "Experiment Run", label, context }; - - const simulationTrackingEvents = (simIds: string[]) => - simIds.map(() => ({ - action: "Experiment Simulation Run", - label, - context, - })); - - const handleFailedPendingExperiment = (err: ExperimentError) => - dispatch(experimentError(err, pendingExperimentId)); +const groupExperimentStreamByType = + () => (observable: Observable) => + observable.pipe( + groupBy((evt) => evt.type), + map((group) => { + type GroupName = typeof group extends GroupedObservable + ? Name + : never; + type GroupType = typeof group extends GroupedObservable + ? Type + : never; + + type Union = { + [Name in GroupName]: GroupedObservable< + Name, + Extract + >; + }[GroupName]; + + return group as any as Union; + }), + ); - const experimentToQueue: ExperimentSrc = { - experimentName, - project: { path: projectPath, ref: projectRef }, - manifestSrc: JSON.stringify(createCompleteManifest(appState)), - pyodideEnabled: pyodideEnabled(), - }; +export const queueExperiment = + (experimentName: string): SimulatorThunk => + (dispatch, getState) => { + const appState = appStore.getState(); + const project = selectCurrentProject(appState); + const projectUrl = selectCurrentProjectUrl(appState); + const experiments = Object.fromEntries(selectExperiments(appState) ?? []); + const projectPath = project?.pathWithNamespace; + const projectRef = project?.ref; + + if (!projectPath || !projectRef) { + throw new Error("This project does not have a proper project path + ref"); + } - /** - * Cloud experiments and local experiments currently use two different APIs – - * we should rewrite the local experimenter to emit events as a stream like - * the cloud experimenter, but until we do, we have to duplicate the handling - * code unfortunately. - * - * @todo rewrite the local experimenter to avoid duplication - */ - if (simulationProvider.target === "cloud") { - let beforeQueuePromise = Promise.resolve(); + const pendingExperimentId = uuid(); /** - * Cloud also needs to be in-sync with current version, otherwise the - * experiment defs will mismatch + * This isn't handled by addPendingExperiment because ExperimentGroup + * won't render a pending experiment until 100ms after the experiment was + * created and we don't want to deselect the currently selected experiment + * until this experiment is ready to show */ - if (selectScope[Scope.save](appState)) { - beforeQueuePromise = beforeQueuePromise - .then(() => appStore.dispatch(parseAllBehaviorKeys())) - .then(() => appStore.dispatch(save())) - .then(() => { - /** - * This ensures the pending experiment appears above the - * "recent changes" history item - */ - dispatch( - updatePendingExperimentTime({ - pendingId: pendingExperimentId, - time: Date.now(), - }) - ); - }); - } + const selectExperiment = (() => { + let selected = false; - /** - * We're using a "connectable" observable because we want to be 100% sure we - * only create a single subscription to the cloud websocket - */ - const experimentObservable = toConnectable( - from(beforeQueuePromise).pipe( - mergeMap( - () => - simulationProvider.queueExperiment( - experimentToQueue - ) as Observable - ) - ) + return () => { + if (!selected) { + selected = true; + dispatch(setSelectedExperiment(pendingExperimentId)); + } + }; + })(); + + const selectExperimentTimeout = new Promise((resolve) => { + setTimeout(resolve, EXPERIMENT_PENDING_THRESHOLD - 1); + }); + + // @todo most of these properties can be moved into the action + const pendingStartedTime = Date.now(); + dispatch( + addPendingExperiment({ + experimentId: pendingExperimentId, + // should this be pending + status: "queued", + target: simulationProvider.target, + startedTime: pendingStartedTime, + experimentName, + definition: experiments[experimentName], + }), ); - /** - * This creates a stream which will emit the queued event only – which we - * will later map back to the full stream so that we can have the payload of - * the queued event when handling future events - */ - const queueEvent = experimentObservable.pipe( - filter( - (event): event is Extract => - event.type === "queued" - ), - take(1) - ); + // Track this this event and the associated runs + const label = `${project?.name} - ${experimentName} - ${projectUrl}`; + const context = { cloud: simulationProvider.target === "cloud" }; + + const trackExperimentRunEvent = { + action: "Experiment Run", + label, + context, + }; + + const simulationTrackingEvents = (simIds: string[]) => + simIds.map(() => ({ + action: "Experiment Simulation Run", + label, + context, + })); + + const handleFailedPendingExperiment = (err: ExperimentError) => + dispatch(experimentError(err, pendingExperimentId)); - const selectEvent = { type: "select" } as const; + const experimentToQueue: ExperimentSrc = { + experimentName, + project: { path: projectPath, ref: projectRef }, + manifestSrc: JSON.stringify(createCompleteManifest(appState)), + pyodideEnabled: pyodideEnabled(), + }; /** - * We have a rule where if the experiment has not been queued within a - * specified pending threshold, we will select (i.e, open) the experiment - * whilst it is still pending (bearing in mind pending experiments don't - * render before they've been selected, to prevent a multiple renders in - * rapid succession. This race maps the single queue event into a pair of - * select and queue events with the timing depending on how long it takes - * to receive the queue event. This really demonstrates the power of RXJS. + * Cloud experiments and local experiments currently use two different APIs – + * we should rewrite the local experimenter to emit events as a stream like + * the cloud experimenter, but until we do, we have to duplicate the handling + * code unfortunately. + * + * @todo rewrite the local experimenter to avoid duplication */ - const experimentEvent = race( - from(selectExperimentTimeout).pipe( - mergeMap(() => concat(of(selectEvent), queueEvent)) - ), - queueEvent.pipe(mergeMap((event) => from([selectEvent, event]))) - ).pipe( + if (simulationProvider.target === "cloud") { + let beforeQueuePromise = Promise.resolve(); + /** - * Both select and queued events only occur once, and don't need any info - * outside of their own event to be handled. For convenience, I'm going to - * handle these events here so that further down, I can just close over - * the queued event rather than dealing with the side effects for that + * Cloud also needs to be in-sync with current version, otherwise the + * experiment defs will mismatch */ - tap((event) => { - switch (event.type) { - case "select": - selectExperiment(); - break; - - case "queued": + if (selectScope[Scope.save](appState)) { + beforeQueuePromise = beforeQueuePromise + // @ts-expect-error redux + .then(() => appStore.dispatch(parseAllBehaviorKeys())) + .then(() => appStore.dispatch(save())) + .then(() => { + /** + * This ensures the pending experiment appears above the + * "recent changes" history item + */ dispatch( - initializeExperiment({ - experiment: event.experiment, - pendingExperimentId, - }) + updatePendingExperimentTime({ + pendingId: pendingExperimentId, + time: Date.now(), + }), ); + }); + } - appStore.dispatch(trackEvents([trackExperimentRunEvent])); - break; - } - }), /** - * We only want to close over the experiment later on, so lets filter for - * the event containing it, and then map to the experiment within the - * event + * We're using a "connectable" observable because we want to be 100% sure we + * only create a single subscription to the cloud websocket */ - filter( - (evt): evt is Extract => - evt.type === "queued" - ), - map((event) => event.experiment) - ); + const experimentObservable = toConnectable( + from(beforeQueuePromise).pipe( + mergeMap( + () => + simulationProvider.queueExperiment( + experimentToQueue, + ) as Observable, + ), + ), + ); + + /** + * This creates a stream which will emit the queued event only – which we + * will later map back to the full stream so that we can have the payload of + * the queued event when handling future events + */ + const queueEvent = experimentObservable.pipe( + filter( + (event): event is Extract => + event.type === "queued", + ), + take(1), + ); + + const selectEvent = { type: "select" } as const; - experimentEvent - .pipe( + /** + * We have a rule where if the experiment has not been queued within a + * specified pending threshold, we will select (i.e, open) the experiment + * whilst it is still pending (bearing in mind pending experiments don't + * render before they've been selected, to prevent a multiple renders in + * rapid succession. This race maps the single queue event into a pair of + * select and queue events with the timing depending on how long it takes + * to receive the queue event. This really demonstrates the power of RXJS. + */ + const experimentEvent = race( + from(selectExperimentTimeout).pipe( + mergeMap(() => concat(of(selectEvent), queueEvent)), + ), + queueEvent.pipe(mergeMap((event) => from([selectEvent, event]))), + ).pipe( /** - * This catches any errors occurring whilst trying to select/queue an - * experiment and dispatches the relevant events. + * Both select and queued events only occur once, and don't need any info + * outside of their own event to be handled. For convenience, I'm going to + * handle these events here so that further down, I can just close over + * the queued event rather than dealing with the side effects for that */ - catchError((err) => { - handleFailedPendingExperiment(err); - + tap((event) => { + switch (event.type) { + case "select": + selectExperiment(); + break; + + case "queued": + dispatch( + initializeExperiment({ + experiment: event.experiment, + pendingExperimentId, + }), + ); + // @ts-expect-error trackEvents + appStore.dispatch(trackEvents([trackExperimentRunEvent])); + break; + } + }), + /** + * We only want to close over the experiment later on, so lets filter for + * the event containing it, and then map to the experiment within the + * event + */ + filter( + (evt): evt is Extract => + evt.type === "queued", + ), + map((event) => event.experiment), + ); + + experimentEvent + .pipe( /** - * This ends the stream here, as a failure to queue an experiment is - * a fatal error for experiments + * This catches any errors occurring whilst trying to select/queue an + * experiment and dispatches the relevant events. */ - return EMPTY; - }), - mergeMap((experiment) => - experimentObservable.pipe( - /** - * This catches any experiment-wide errors that occur *after* the - * experiment has been queued. When this happens, we need to fail - * any already created simulations, which we do by mapping it to a - * stream of simulation-specific errors, which we follow up by - * rethrowing the error itself to be caught later on, which will - * fail the whole experiment for us. This avoids having to duplicate - * the code handling simulation failures. - */ - catchError( - (err): Observable => { - const state = getState(); - const runs = selectExperimentRuns(state); - const simData = selectAllSimulationData(state); - const storeExperiment = runs[experiment.experimentId]; - - if (!storeExperiment) { - console.warn( - "Experiment is not yet in store, despite it being available. This should not happen" - ); - return throwError(err); - } - - const notYetCompleteErrors = storeExperiment.simulationIds - .filter( - (id) => !simData[id] || !simulationComplete(simData[id]) - ) - .map((id) => ({ - type: "experimentError" as const, - error: err, - simulationId: id, - })); - - return concat(from(notYetCompleteErrors), throwError(err)); - } - ), + catchError((err) => { + handleFailedPendingExperiment(err); /** - * From this point on, we want to partition the event stream by - * event type, so that we can create different pipelines depending - * on the event type (as some require further async logic). This - * operator wraps rxjs' groupBy to hide some typescript magic. + * This ends the stream here, as a failure to queue an experiment is + * a fatal error for experiments */ - groupExperimentStreamByType(), - mergeMap((group) => { - switch (group.key) { - case "simulationsCreated": - return group.pipe( - tap((event) => { - appStore.dispatch( - trackEvents( - simulationTrackingEvents(Object.keys(event.plan)) - ) - ); - dispatch( - experimentSimulationsCreated({ - experimentId: experiment.experimentId, - plan: event.plan, - }) - ); - }) - ); - - case "started": - return group.pipe( - tap((event) => { - dispatch(simulationRunStarted(event.simulationId)); - }) - ); - - case "steps": - return group.pipe( - tap(({ status }) => { - dispatch(simulationRunUpdated(status)); - }) - ); - - case "analysis": - return group.pipe( - tap((evt) => { - dispatch(simulationRunUpdated(evt.status)); - }), - mergeMap(async (evt) => { - const simData = selectAllSimulationData(getState())?.[ - evt.simulationId! - ]; - - if (!simData) { - throw new Error("Cannot find simulation"); - } - - try { - const data = await historicCloudExperimentProvider.getAnalysis( - experiment, - { - ...simData, - analysisLink: evt.link, - } + return EMPTY; + }), + mergeMap((experiment) => + experimentObservable.pipe( + /** + * This catches any experiment-wide errors that occur *after* the + * experiment has been queued. When this happens, we need to fail + * any already created simulations, which we do by mapping it to a + * stream of simulation-specific errors, which we follow up by + * rethrowing the error itself to be caught later on, which will + * fail the whole experiment for us. This avoids having to duplicate + * the code handling simulation failures. + */ + catchError( + (err): Observable => { + const state = getState(); + const runs = selectExperimentRuns(state); + const simData = selectAllSimulationData(state); + const storeExperiment = runs[experiment.experimentId]; + + if (!storeExperiment) { + console.warn( + "Experiment is not yet in store, despite it being available. This should not happen", + ); + return throwError(err); + } + + const notYetCompleteErrors = storeExperiment.simulationIds + .filter( + (id) => !simData[id] || !simulationComplete(simData[id]), + ) + .map((id) => ({ + type: "experimentError" as const, + error: err, + simulationId: id, + })); + + return concat(from(notYetCompleteErrors), throwError(err)); + }, + ), + + /** + * From this point on, we want to partition the event stream by + * event type, so that we can create different pipelines depending + * on the event type (as some require further async logic). This + * operator wraps rxjs' groupBy to hide some typescript magic. + */ + groupExperimentStreamByType(), + mergeMap((group) => { + switch (group.key) { + case "simulationsCreated": + return group.pipe( + tap((event) => { + appStore.dispatch( + // @ts-expect-error trackEvents + trackEvents( + simulationTrackingEvents(Object.keys(event.plan)), + ), ); - - return { - analysis: data, - simId: evt.simulationId!, - }; - } catch (err) { - console.error(err); - return { - analysis: null, - simId: evt.simulationId!, - }; - } - }), - tap((data) => { - if (data.analysis) { - dispatch(setSimulationAnalysis(data)); - } else { dispatch( - setSimulationStatus({ - simId: data.simId, - status: "errored", - }) + experimentSimulationsCreated({ + experimentId: experiment.experimentId, + plan: event.plan, + }), ); - } - }) - ); - - case "experimentError": - case "error": - /** - * Unfortunately, once we've created a discriminated union for - * the groups, we can't then easily operate on events of - * multiple types together – so we need to cast it back to - * a regular observable. - */ - const combinedGroup = group as Observable< - typeof group extends GroupedObservable - ? Type - : never - >; - - return combinedGroup.pipe( - tap(({ type, error, simulationId }) => { - // @todo reduce duplication with middleware - const message = error?.message ?? "error"; - if (type === "error") { - appStore.dispatch( - addUserAlert({ - type: "error", - message: message, - context: "", - timestamp: Date.now(), + }), + ); + + case "started": + return group.pipe( + tap((event) => { + dispatch(simulationRunStarted(event.simulationId)); + }), + ); + + case "steps": + return group.pipe( + tap(({ status }) => { + dispatch(simulationRunUpdated(status)); + }), + ); + + case "analysis": + return group.pipe( + tap((evt) => { + dispatch(simulationRunUpdated(evt.status)); + }), + mergeMap(async (evt) => { + const simData = + selectAllSimulationData(getState())?.[ + evt.simulationId + ]; + + if (!simData) { + throw new Error("Cannot find simulation"); + } + + try { + const data = + await historicCloudExperimentProvider.getAnalysis( + experiment, + { + ...simData, + analysisLink: evt.link, + }, + ); + + return { + analysis: data, + simId: evt.simulationId, + }; + } catch (err) { + console.error(err); + return { + analysis: null, + simId: evt.simulationId, + }; + } + }), + tap((data) => { + if (data.analysis) { + dispatch(setSimulationAnalysis(data)); + } else { + dispatch( + setSimulationStatus({ + simId: data.simId, + status: "errored", + }), + ); + } + }), + ); + + case "experimentError": + case "error": + /** + * Unfortunately, once we've created a discriminated union for + * the groups, we can't then easily operate on events of + * multiple types together – so we need to cast it back to + * a regular observable. + */ + /* eslint-disable no-case-declarations */ + const combinedGroup = group as Observable< + typeof group extends GroupedObservable + ? Type + : never + >; + /* eslint-enable no-case-declarations */ + + return combinedGroup.pipe( + tap(({ type, error, simulationId }) => { + // @todo reduce duplication with middleware + const message = error?.message ?? "error"; + if (type === "error") { + appStore.dispatch( + addUserAlert({ + type: "error", + message: message, + context: "", + timestamp: Date.now(), + simulationId: simulationId, + }), + ); + } + + // Make sure to update the runner status so the spinning bar goes away + dispatch( + simulationRunFailed({ simulationId: simulationId, - }) + errorMessage: message, + }), ); - } - - // Make sure to update the runner status so the spinning bar goes away - dispatch( - simulationRunFailed({ - simulationId: simulationId, - errorMessage: message, - }) - ); - }) - ); - - case "stopping": - return group.pipe( - tap(() => { - dispatch(experimentStopping(experiment.experimentId)); - }) - ); - - case "earlyStop": - return group.pipe( - tap((evt) => { - dispatch( - earlyStopSimulation( - evt.simulationId, - evt.status.stopMessage - ) - ); - dispatch(simulationRunUpdated(evt.status)); - }) - ); - } + }), + ); + + case "stopping": + return group.pipe( + tap(() => { + dispatch(experimentStopping(experiment.experimentId)); + }), + ); + + case "earlyStop": + return group.pipe( + tap((evt) => { + dispatch( + earlyStopSimulation( + evt.simulationId, + evt.status.stopMessage, + ), + ); + dispatch(simulationRunUpdated(evt.status)); + }), + ); + } - return group; - }), - tap({ - complete() { - dispatch(experimentFinished(experiment.experimentId)); - }, - }), - catchError((err) => { - dispatch(experimentError(err, experiment.experimentId)); - - return EMPTY; - }) - ) + return group; + }), + tap({ + complete() { + dispatch(experimentFinished(experiment.experimentId)); + }, + }), + catchError((err) => { + dispatch(experimentError(err, experiment.experimentId)); + + return EMPTY; + }), + ), + ), ) - ) - .subscribe(); - - // Actually trigger the connection to the websocket - experimentObservable.connect(); - } else { - const initialisePromise = simulationProvider.queueExperiment( - experimentToQueue - ) as Promise; - - Promise.race([initialisePromise.catch(() => {}), selectExperimentTimeout]) - .then(selectExperiment) - .then(() => initialisePromise) - .then( - /** - * @todo rewrite this handler to be entirely stream based - */ - async ({ - experimentPromise, - runPromises, - startedPromises, - ...experiment - }) => { - dispatch(initializeExperiment({ experiment, pendingExperimentId })); - dispatch( - experimentSimulationsCreated({ - experimentId: experiment.experimentId, - plan: experiment.plan, - }) - ); - - const ids = experiment.simulationIds; - appStore.dispatch( - trackEvents([ - trackExperimentRunEvent, - ...simulationTrackingEvents(ids), - ]) - ); - - for (const [runId, promise] of Object.entries(startedPromises)) { - promise.then(() => { - dispatch(simulationRunStarted(runId)); - }); - } + .subscribe(); + + // Actually trigger the connection to the websocket + experimentObservable.connect(); + } else { + const initialisePromise = simulationProvider.queueExperiment( + experimentToQueue, + ) as Promise; + + Promise.race([initialisePromise.catch(() => {}), selectExperimentTimeout]) + .then(selectExperiment) + .then(() => initialisePromise) + .then( + /** + * @todo rewrite this handler to be entirely stream based + */ + async ({ + experimentPromise, + runPromises, + startedPromises, + ...experiment + }) => { + dispatch(initializeExperiment({ experiment, pendingExperimentId })); + dispatch( + experimentSimulationsCreated({ + experimentId: experiment.experimentId, + plan: experiment.plan, + }), + ); - // Tap in - for (const [runId, run] of Object.entries(runPromises)) { - run - .then((status) => { - // @todo reduce duplication with middleware - if (status.runnerError) { + const ids = experiment.simulationIds; + appStore.dispatch( + // @ts-expect-error trackEvents + trackEvents([ + trackExperimentRunEvent, + ...simulationTrackingEvents(ids), + ]), + ); + + for (const [runId, promise] of Object.entries(startedPromises)) { + promise.then(() => { + return dispatch(simulationRunStarted(runId)); + }); + } + + // Tap in + for (const [runId, run] of Object.entries(runPromises)) { + run + .then((status) => { + // @todo reduce duplication with middleware + if (status.runnerError) { + appStore.dispatch( + addUserAlert({ + type: "error", + message: status.runnerError.message ?? "error", + context: "", + timestamp: Date.now(), + simulationId: runId, + }), + ); + } + + if (status.simulationRunId && status.earlyStop) { + dispatch( + earlyStopSimulation( + status.simulationRunId, + status.stopMessage, + ), + ); + } + + dispatch(simulationRunUpdated(status)); + }) + .catch((errorMessage: Error) => { + const message = errorMessage?.message ?? "error"; appStore.dispatch( addUserAlert({ type: "error", - message: status.runnerError.message ?? "error", - context: "", + message: message, + context: "experiments.json", timestamp: Date.now(), simulationId: runId, - }) + }), ); - } - - if (status.simulationRunId && status.earlyStop) { + // Make sure to update the runner status so the spinning bar goes away dispatch( - earlyStopSimulation( - status.simulationRunId, - status.stopMessage - ) + simulationRunFailed({ + simulationId: runId, + errorMessage: message, + }), ); - } - - dispatch(simulationRunUpdated(status)); - }) - .catch((errorMessage: Error) => { - const message = errorMessage?.message ?? "error"; - appStore.dispatch( - addUserAlert({ - type: "error", - message: message, - context: "experiments.json", - timestamp: Date.now(), - simulationId: runId, - }) - ); - // Make sure to update the runner status so the spinning bar goes away - dispatch( - simulationRunFailed({ - simulationId: runId, - errorMessage: message, - }) - ); + }); + } + return experimentPromise + .catch(() => {}) + .then(() => { + dispatch(experimentFinished(experiment.experimentId)); }); - } - return experimentPromise - .catch(() => {}) - .then(() => { - dispatch(experimentFinished(experiment.experimentId)); - }); - } - ) - .catch(handleFailedPendingExperiment); - } -}; + }, + ) + .catch(handleFailedPendingExperiment); + } + }; diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/runningSubscriber.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/runningSubscriber.ts index 81dca6f..055c8bb 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/runningSubscriber.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/runningSubscriber.ts @@ -11,10 +11,10 @@ import { import { selectCurrentProject } from "../../project/selectors"; import { trackEvent } from "../../analytics"; -type RunningState = { +interface RunningState { controller: AbortController | null; status: SimulationData["status"]; -}; +} const getDefaultRunningState = (sim: SimulationData): RunningState => ({ status: sim.status, @@ -25,12 +25,12 @@ export const runningSubscriber = (store: Store) => { const run = async (simulationId: string, signal: AbortSignal) => { const selectSimRunning = createSelector( selectAllSimulationData, - (data) => data[simulationId]?.status === "running" + (data) => data[simulationId]?.status === "running", ); const selectSimCurrent = createSelector( selectCurrentSimulationId, - (id) => id === simulationId + (id) => id === simulationId, ); const running = () => selectSimRunning(store.getState()); @@ -38,10 +38,11 @@ export const runningSubscriber = (store: Store) => { if (running() && !signal.aborted) { const project = selectCurrentProject(appStore.getState()); appStore.dispatch( + // @ts-expect-error redux problems trackEvent({ action: "Run Simulation", label: `${project!.name} - ${project!.id}`, - }) + }), ); await runnerMessage({ type: "play" }, simulationId); @@ -55,7 +56,7 @@ export const runningSubscriber = (store: Store) => { type: "getReadySteps", omitData: !needSteps, }, - simulationId + simulationId, ); } @@ -69,7 +70,7 @@ export const runningSubscriber = (store: Store) => { Object.values(simData).map((sim) => [ sim.simulationRunId, getDefaultRunningState(sim), - ]) + ]), ); return () => { diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/selectors.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/selectors.ts index 5bc83a1..1234e59 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/selectors.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/selectors.ts @@ -11,89 +11,89 @@ import { import { historyAdapter } from "./historyAdapter"; const selectSimulatorSlice: Selector = ( - state + state, ) => state.simulator; export const selectAllSimulationData = createSelector( selectSimulatorSlice, - (simulator) => simulator.simulationData + (simulator) => simulator.simulationData, ); export const selectExperimentRuns = createSelector( selectSimulatorSlice, - (simulator) => simulator.experimentRuns + (simulator) => simulator.experimentRuns, ); export const selectPendingExperimentRuns = createSelector( selectSimulatorSlice, - (simulator) => simulator.pendingExperimentRuns + (simulator) => simulator.pendingExperimentRuns, ); export const selectAllExperimentSimulationRunIds = createSelector( selectExperimentRuns, - (runs) => Object.values(runs).flatMap((run) => run.simulationIds) + (runs) => Object.values(runs).flatMap((run) => run.simulationIds), ); export const selectAllSingleRuns = createSelector( selectAllSimulationData, - (simdata) => Object.values(simdata).filter((run) => !run.experimentId) + (simdata) => Object.values(simdata).filter((run) => !run.experimentId), ); const selectNullableCurrentSimulationId = createSelector( selectSimulatorSlice, - (simulator) => simulator.currentSimulation + (simulator) => simulator.currentSimulation, ); export const selectHasCurrentSimulation = createSelector( [selectNullableCurrentSimulationId, selectAllSimulationData], - (id, data) => id && !!data[id] + (id, data) => id && !!data[id], ); export const selectCurrentSimulationData = createSelector( [selectNullableCurrentSimulationId, selectAllSimulationData], (currentSimulation, simulationData): SimulationData => (currentSimulation ? simulationData[currentSimulation] : null) ?? - defaultSimulationData + defaultSimulationData, ); export const selectCurrentSimulationId = createSelector( selectCurrentSimulationData, - (sim) => sim.simulationRunId + (sim) => sim.simulationRunId, ); export const selectCurrentExperimentId = createSelector( selectSimulatorSlice, - (slice) => slice.selectedExperimentId + (slice) => slice.selectedExperimentId, ); export const selectCurrentExperimentData = createSelector( [selectCurrentExperimentId, selectExperimentRuns], - (experimentId, runs) => (experimentId ? runs[experimentId] ?? null : null) + (experimentId, runs) => (experimentId ? runs[experimentId] ?? null : null), ); export const selectCurrentExperimentName = createSelector( selectCurrentExperimentData, - (data) => data?.experimentName ?? null + (data) => data?.experimentName ?? null, ); export const selectPyodideStatus = createSelector( selectSimulatorSlice, - (status) => status.pyodideStatus + (status) => status.pyodideStatus, ); export const selectRunning = createSelector( selectCurrentSimulationData, - (runner) => runner.status === "running" + (runner) => runner.status === "running", ); export const selectResetting = createSelector( selectSimulatorSlice, - (slice) => slice.resetting + (slice) => slice.resetting, ); export const selectCurrentRunnerSteps = createSelector( selectCurrentSimulationData, - (sim) => sim.steps + (sim) => sim.steps, ); /** @@ -101,12 +101,12 @@ export const selectCurrentRunnerSteps = createSelector( */ const selectCurrentRunnerStepsCount = createSelector( selectCurrentSimulationData, - (sim) => sim.stepsCount + (sim) => sim.stepsCount, ); export const selectCurrentRunnerHasSteps = createSelector( selectCurrentRunnerStepsCount, - (numSteps) => numSteps > 1 + (numSteps) => numSteps > 1, ); /** @@ -116,7 +116,7 @@ export const selectCurrentRunnerHasSteps = createSelector( */ export const selectCurrentRunnerNumSteps = createSelector( selectCurrentRunnerStepsCount, - (count) => Math.max(0, count - 1) + (count) => Math.max(0, count - 1), ); /** @@ -125,17 +125,17 @@ export const selectCurrentRunnerNumSteps = createSelector( */ export const selectCurrentRunnerMinStep = createSelector( selectCurrentSimulationData, - (sim) => minimumAvailableStep(sim) + (sim) => minimumAvailableStep(sim), ); export const selectScrubbedStep = createSelector( selectCurrentSimulationData, - (sim) => sim.scrubbedStep + (sim) => sim.scrubbedStep, ); export const selectTrackingFinalStep = createSelector( selectScrubbedStep, - (step) => step === null + (step) => step === null, ); export const selectCurrentStep = createSelector( @@ -143,42 +143,42 @@ export const selectCurrentStep = createSelector( (trackingFinalStep, numSteps, scrubbedStep) => trackingFinalStep || numSteps === 0 || scrubbedStep! >= numSteps ? numSteps - : scrubbedStep! + : scrubbedStep!, ); export const selectPresentingSpeed = createSelector( selectCurrentSimulationData, - (sim) => sim.presentingSpeed + (sim) => sim.presentingSpeed, ); export const selectPresenting = createSelector( selectCurrentSimulationData, - (sim) => sim.presenting + (sim) => sim.presenting, ); export const selectCurrentSimMode = createSelector( selectCurrentSimulationData, - (sim) => sim.mode + (sim) => sim.mode, ); export const selectCurrentSimStepRetention = createSelector( selectCurrentSimulationData, - (sim) => sim.stepRetention + (sim) => sim.stepRetention, ); export const selectCanCurrentSimCompute = createSelector( selectCurrentSimMode, - (mode) => mode === "computeAndPlayback" + (mode) => mode === "computeAndPlayback", ); export const selectCurrentSimComplete = createSelector( selectCurrentSimulationData, - simulationComplete + simulationComplete, ); export const selectCurrentSimErrored = createSelector( selectCurrentSimulationData, - (sim) => sim.status === "errored" + (sim) => sim.status === "errored", ); export const selectCanPlayPause = createSelector( @@ -194,7 +194,7 @@ export const selectCanPlayPause = createSelector( !resetting && !complete && mode !== "historic" && - pyodide !== "errored" + pyodide !== "errored", ); export const selectCanPresent = createSelector( @@ -205,23 +205,23 @@ export const selectCanPresent = createSelector( selectCurrentRunnerNumSteps, ], (hasSteps, resetting, step, count) => - hasSteps && !resetting && step !== null && step < count + hasSteps && !resetting && step !== null && step < count, ); export const selectProviderTarget = createSelector( [selectSimulatorSlice], - (slice) => (slice.cloudDisabled ? "web" : slice.selectedTarget) + (slice) => (slice.cloudDisabled ? "web" : slice.selectedTarget), ); export const selectCanRunExperiment = createSelector( [selectResetting, selectPyodideStatus, selectProviderTarget], (resetting, pyodide, target) => - !resetting && (target === "cloud" || pyodide !== "errored") + !resetting && (target === "cloud" || pyodide !== "errored"), ); export const selectAnalysisMode = createSelector( selectSimulatorSlice, - (slice) => slice.analysisMode + (slice) => slice.analysisMode, ); /** @@ -231,7 +231,7 @@ export const selectAnalysisMode = createSelector( */ export const selectAnalysisTabVisibleInSimulator = createSelector( selectSimulatorSlice, - (slice) => slice.analysisVisible + (slice) => slice.analysisVisible, ); export const selectSimulationIdsForAnalysisMode = createSelector( @@ -245,47 +245,47 @@ export const selectSimulationIdsForAnalysisMode = createSelector( } return []; - } + }, ); export const selectHistory = createSelector( selectSimulatorSlice, - (slice) => slice.history + (slice) => slice.history, ); export const selectHistoryNextPage = createSelector( selectHistory, - (history) => history.nextPage + (history) => history.nextPage, ); export const selectHistoryComplete = createSelector( selectHistory, - (history) => history.complete + (history) => history.complete, ); export const selectHistoryReceivedCurrent = createSelector( selectHistory, - (history) => history.receivedCurrent + (history) => history.receivedCurrent, ); export const selectHistoryHasFilledScreen = createSelector( selectHistory, - (history) => history.haveFilledScreen + (history) => history.haveFilledScreen, ); export const selectHistoryProject = createSelector( selectHistory, - (history) => history.project + (history) => history.project, ); export const selectHistoryReady = createSelector( selectHistoryProject, - (project) => project !== null + (project) => project !== null, ); export const selectHistoryRequestingMore = createSelector( selectHistory, - (history) => history.requestingMore + (history) => history.requestingMore, ); /** @@ -295,12 +295,12 @@ export const selectHistoryRequestingMore = createSelector( */ export const selectHistoryVisible = createSelector( [selectHistory], - (history) => history.visible + (history) => history.visible, ); export const selectHistoryCurrentCommitGroup = createSelector( [selectHistory], - (history) => history.selectedCommitGroup + (history) => history.selectedCommitGroup, ); export const historySelectors = historyAdapter.getSelectors(selectHistory); diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/slice.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/slice.ts index f0ad068..b2f76f5 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/slice.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/slice.ts @@ -2,7 +2,6 @@ import { AnyAction, createAction, createSlice, - current, Draft, EntityId, freeze, @@ -16,10 +15,9 @@ import { RunnerStatus, SimulationStates, } from "@hashintel/engine-web"; -import { addBreadcrumb } from "@sentry/browser"; import { AnalysisMode } from "./enum"; -import { Commit, ProjectHistoryItemType } from "../../../util/api/auto-types"; +import { Commit, ProjectHistoryItemType } from "../../../util/api/types"; import { CommitWithoutStats } from "../../../util/api/queries/commitActions"; import { DEFAULT_STEPS_PER_SECOND, @@ -88,7 +86,7 @@ const immutableSetters = { */ cleanupAfterRemovingSimulation( state: SimulatorSlice, - id: string + id: string, ): SimulatorSlice { const currentSimulation = id === state.currentSimulation ? null : state.currentSimulation; @@ -103,7 +101,7 @@ const immutableSetters = { const getCurrentSimFromState = ( state: Draft, - errorMessage: string + errorMessage: string, ) => { if ( !state.currentSimulation || @@ -117,7 +115,7 @@ const getCurrentSimFromState = ( const sortSimulationIds = ( state: SimulatorSlice | Draft, - experiment: ExperimentRun + experiment: ExperimentRun, ) => [...experiment.simulationIds].sort((a, b) => { const firstRun = state.simulationData[a]; @@ -148,7 +146,7 @@ const setters = { setPresentingSim( state: Draft, sim: Draft, - presenting: boolean + presenting: boolean, ) { sim.presenting = presenting; }, @@ -171,8 +169,8 @@ const setters = { state, getCurrentSimFromState( state, - "Cannot start presenting a non existent sim" - ) + "Cannot start presenting a non existent sim", + ), ); }, @@ -191,7 +189,10 @@ const setters = { stopPresentingCurrentSim(state: Draft) { setters.stopPresentingSim( state, - getCurrentSimFromState(state, "Cannot stop presenting a non existent sim") + getCurrentSimFromState( + state, + "Cannot stop presenting a non existent sim", + ), ); }, @@ -200,7 +201,7 @@ const setters = { state: Draft, sim: Draft, step: number | null, - pause = true + pause = true, ) { const maxStepIndex = sim.stepsCount - 1; @@ -230,27 +231,27 @@ const setters = { setScrubbedStepCurrentSim( state: Draft, step: number | null, - pause = true + pause = true, ) { setters.setScrubbedStepSim( state, getCurrentSimFromState( state, - "Cannot set scrubbed step on non existent sim" + "Cannot set scrubbed step on non existent sim", ), step, - pause + pause, ); }, setScrubbedStepWithTrackingCurrentSim( state: Draft, step: number | null, - pause = true + pause = true, ) { const sim = getCurrentSimFromState( state, - "Cannot stop presenting a non existent sim" + "Cannot stop presenting a non existent sim", ); setters.setScrubbedStepSim( @@ -260,7 +261,7 @@ const setters = { (step >= sim.stepsCount - 1 && sim.mode === "computeAndPlayback") ? null : step, - pause + pause, ); }, @@ -278,7 +279,7 @@ const setters = { setSimulationMode( state: Draft, sim: Draft, - mode: SimulationData["mode"] + mode: SimulationData["mode"], ) { if (sim.mode === "historic") { throw new Error("Cannot set mode on a historic sim"); @@ -317,7 +318,7 @@ const setters = { state: Draft, simId: string | undefined | null, running: boolean, - speed?: number | "live" + speed?: number | "live", ) { if (!simId || !state.simulationData[simId]) { if (running) { @@ -416,7 +417,7 @@ const { reducer, actions } = createSlice({ incrementStep(state, action: PayloadAction) { const sim = getCurrentSimFromState( state, - "Cannot increment a non existent sim" + "Cannot increment a non existent sim", ); // @todo this will increment back to the start if we're currently live + handle that @@ -432,7 +433,7 @@ const { reducer, actions } = createSlice({ setPresentingSpeed(state, action: PayloadAction) { const sim = getCurrentSimFromState( state, - "Cannot set presenting speed a non existent sim" + "Cannot set presenting speed a non existent sim", ); sim.presentingSpeed = action.payload; @@ -457,7 +458,7 @@ const { reducer, actions } = createSlice({ if (action.payload?.speed !== undefined) { const sim = getCurrentSimFromState( state, - "Cannot set presenting speed on non-existent sim" + "Cannot set presenting speed on non-existent sim", ); sim.presentingSpeed = action.payload.speed; } @@ -465,13 +466,13 @@ const { reducer, actions } = createSlice({ simulationRunFailed( state, - action: PayloadAction<{ simulationId: string; errorMessage: string }> + action: PayloadAction<{ simulationId: string; errorMessage: string }>, ) { const run = state.simulationData[action.payload.simulationId]; if (run) { run.status = simulationErrorOrCompleteStatus( action.payload.errorMessage, - run as SimulationData + run as SimulationData, ); } }, @@ -482,7 +483,7 @@ const { reducer, actions } = createSlice({ simId: string; selected?: boolean; latest?: boolean; - }> + }>, ) { if (action.payload.selected ?? true) { // @todo there should be a separate action for toggling a selected sim @@ -492,23 +493,6 @@ const { reducer, actions } = createSlice({ ? null : action.payload.simId; - const currentState = current(state); - - /** - * @todo remove when sentry issue is solved - * @see https://sentry.io/organizations/hashintel/issues/2237610017 - */ - addBreadcrumb({ - message: "Setting simulation as selected", - data: { - currentSimulation: currentState.currentSimulation, - analysisMode: currentState.analysisMode, - payloadSimId: action.payload.simId, - payloadLatest: action.payload.latest ?? false, - simId, - }, - }); - state.currentSimulation = simId; state.analysisMode = simId ? AnalysisMode.SingleRun : null; state.history.selectedCommitGroup = null; @@ -542,7 +526,7 @@ const { reducer, actions } = createSlice({ delete state.simulationData[id]; historyAdapter.removeOne( state.history, - getHistoryItemId.singleRun(sim) + getHistoryItemId.singleRun(sim), ); } else { setters.stopPresentingSim(state, sim); @@ -562,13 +546,13 @@ const { reducer, actions } = createSlice({ running: boolean; simId?: string; speed?: number | "live"; - }> + }>, ) { setters.setSimulationRunning( state, action.payload.simId ?? state.currentSimulation, action.payload.running, - action.payload.speed + action.payload.speed, ); }, @@ -577,13 +561,13 @@ const { reducer, actions } = createSlice({ action: PayloadAction<{ simId?: string; speed?: number | "live"; - }> + }>, ) { setters.setSimulationRunning( state, action.payload.simId ?? state.currentSimulation, true, - action.payload.speed + action.payload.speed, ); }, @@ -594,12 +578,12 @@ const { reducer, actions } = createSlice({ simId?: string; } | undefined - > + >, ) { setters.setSimulationRunning( state, action.payload?.simId ?? state.currentSimulation, - false + false, ); }, @@ -620,7 +604,7 @@ const { reducer, actions } = createSlice({ toggleCurrentSimulationMode(state) { const sim = getCurrentSimFromState( state, - "Cannot toggle mode on non existent sim" + "Cannot toggle mode on non existent sim", ); if (sim.mode === "historic") { @@ -630,17 +614,17 @@ const { reducer, actions } = createSlice({ setters.setSimulationMode( state, sim, - sim.mode === "playback" ? "computeAndPlayback" : "playback" + sim.mode === "playback" ? "computeAndPlayback" : "playback", ); }, setSimulationStepRetention( state, - action: PayloadAction + action: PayloadAction, ) { const sim = getCurrentSimFromState( state, - "Cannot set step retention on non existent sim" + "Cannot set step retention on non existent sim", ); const { retentionPolicy } = action.payload; @@ -661,12 +645,12 @@ const { reducer, actions } = createSlice({ removeSimulationData(state, action: PayloadAction) { const id = action.payload; - if (state.simulationData.hasOwnProperty(id)) { + if (Object.prototype.hasOwnProperty.call(state.simulationData, id)) { const simulation = state.simulationData[id]; delete state.simulationData[id]; historyAdapter.removeOne( state.history, - getHistoryItemId.singleRun(simulation) + getHistoryItemId.singleRun(simulation), ); const simActive = state.currentSimulation === id; @@ -678,11 +662,14 @@ const { reducer, actions } = createSlice({ if ( simulation.experimentId && - state.experimentRuns.hasOwnProperty(simulation.experimentId) + Object.prototype.hasOwnProperty.call( + state.experimentRuns, + simulation.experimentId, + ) ) { const experiment = state.experimentRuns[simulation.experimentId]; const nextSimIds = experiment.simulationIds.filter( - (simId) => simId !== id + (simId) => simId !== id, ); const index = experiment.simulationIds.indexOf(id); @@ -706,7 +693,7 @@ const { reducer, actions } = createSlice({ delete state.experimentRuns[experiment.experimentId]; historyAdapter.removeOne( state.history, - getHistoryItemId.experiment(experiment) + getHistoryItemId.experiment(experiment), ); if (state.selectedExperimentId === experiment.experimentId) { @@ -722,18 +709,18 @@ const { reducer, actions } = createSlice({ action: PayloadAction<{ history: ProjectHistoryReturnWithCustomItem; project: LinkableProject; - }> + }>, ) { const { history, project } = action.payload; const experiments = history.items.filter( (item): item is ProjectHistoryItemExperimentRun => - item.itemType === ProjectHistoryItemType.ExperimentRun + item.itemType === ProjectHistoryItemType.ExperimentRun, ); const releases = history.items.filter( (item): item is ProjectHistoryItemRelease => - item.itemType === ProjectHistoryItemType.Release + item.itemType === ProjectHistoryItemType.Release, ); historyAdapter.addMany( @@ -744,13 +731,13 @@ const { reducer, actions } = createSlice({ createdAt: new Date(release.createdAt).getTime(), item: { tag: release.item.tag }, historyId: getHistoryItemId.release(release.item), - }) - ) + }), + ), ); const commitGroups = history.items.filter( (item): item is ProjectHistoryItemCommitGroup => - item.itemType === ProjectHistoryItemType.CommitGroup + item.itemType === ProjectHistoryItemType.CommitGroup, ); const historyItemsForCommits = commitGroups.map( @@ -759,14 +746,14 @@ const { reducer, actions } = createSlice({ createdAt: new Date(commitGroup.createdAt).getTime(), item: { commits: commitGroup.item.commits }, historyId: getHistoryItemId.commitGroup(commitGroup.item), - }) + }), ); historyAdapter.addMany(state.history, historyItemsForCommits); const groupForProjectRef = historyItemsForCommits.find((group) => group.item.commits.some( - (commit) => commit.id === action.payload.project.ref - ) + (commit) => commit.id === action.payload.project.ref, + ), ); if (groupForProjectRef) { @@ -777,7 +764,7 @@ const { reducer, actions } = createSlice({ } const filteredExperiments = experiments.filter( - (item) => item.item.simulationRuns.length > 0 + (item) => item.item.simulationRuns.length > 0, ); if (project) { @@ -792,8 +779,8 @@ const { reducer, actions } = createSlice({ id: item.item.id, }, createdAt: new Date(item.item.createdAt).getTime(), - }) - ) + }), + ), ); const filteredRuns = filteredExperiments.map((item) => item.item); @@ -831,7 +818,9 @@ const { reducer, actions } = createSlice({ } const statuses = new Set( - run.simulationRuns.map((run) => state.simulationData[run.id].status) + run.simulationRuns.map( + (run) => state.simulationData[run.id].status, + ), ); const experimentRun: ExperimentRun = { @@ -846,8 +835,8 @@ const { reducer, actions } = createSlice({ status: statuses.has("errored") ? "errored" : statuses.has("running") - ? "running" - : "completed", + ? "running" + : "completed", definition: run.experimentSrc[run.name], simulationIds: run.simulationRuns.map((run) => run.id), plan: Object.fromEntries( @@ -856,7 +845,7 @@ const { reducer, actions } = createSlice({ { fields: sim.propertyValues, }, - ]) + ]), ), startedTime, }; @@ -928,7 +917,7 @@ const { reducer, actions } = createSlice({ commitCreated( state, - action: PayloadAction<{ commit: CommitWithoutStats; createdAt: number }> + action: PayloadAction<{ commit: CommitWithoutStats; createdAt: number }>, ) { const commit = action.payload.commit as Commit; const commitGroup: SimulatorHistoryItemCommitGroup["item"] = { @@ -941,7 +930,7 @@ const { reducer, actions } = createSlice({ if (existingGroup) { if (existingGroup.itemType !== SimulatorHistoryItemType.CommitGroup) { throw new Error( - "Cannot add commit to existing recents group as it is not a commit group" + "Cannot add commit to existing recents group as it is not a commit group", ); } @@ -977,7 +966,7 @@ const { reducer, actions } = createSlice({ experimentSimulationsCreated( state, - action: PayloadAction<{ plan: ExperimentPlan; experimentId: string }> + action: PayloadAction<{ plan: ExperimentPlan; experimentId: string }>, ) { const { experimentId, plan } = action.payload; @@ -1020,7 +1009,7 @@ const { reducer, actions } = createSlice({ updatePendingExperimentTime( state, - action: PayloadAction<{ pendingId: string; time: number }> + action: PayloadAction<{ pendingId: string; time: number }>, ) { const pendingExperiment = state.pendingExperimentRuns[action.payload.pendingId]; @@ -1074,23 +1063,23 @@ export const { } = actions; export const experimentFinished = createAction( - "simulator/experimentFinished" + "simulator/experimentFinished", ); export const simulationRunStarted = createAction( - "simulator/simulationRunStarted" + "simulator/simulationRunStarted", ); export const simulationRunUpdated = createAction( - "simulator/simulationRunUpdated" + "simulator/simulationRunUpdated", ); export const removeExperiment = createAction( - "simulator/removeExperiment" + "simulator/removeExperiment", ); export const setSelectedExperiment = createAction( - "simulator/setSelectedExperiment" + "simulator/setSelectedExperiment", ); export const setSimulationStatus = createAction<{ @@ -1099,11 +1088,11 @@ export const setSimulationStatus = createAction<{ }>("simulator/setSimulationStatus"); export const addPendingExperiment = createAction( - "simulator/addPendingExperiment" + "simulator/addPendingExperiment", ); export const experimentFailed = createAction( - "simulator/experimentFailed" + "simulator/experimentFailed", ); export const initializeExperiment = createAction<{ @@ -1112,7 +1101,7 @@ export const initializeExperiment = createAction<{ }>("simulator/initializeExperiment"); export const showCollatedAnalysisForExperiment = createAction( - "simulator/showCollatedAnalysisForExperiment" + "simulator/showCollatedAnalysisForExperiment", ); export const prepareForNewProject = createAction<{ @@ -1142,12 +1131,12 @@ export const setSimulationAnalysis = createAction<{ }>("simulator/setSimulationAnalysis"); export const setAnalysisVisible = createAction( - "simulator/setAnalysisVisible" + "simulator/setAnalysisVisible", ); const simulationErrorOrCompleteStatus = ( errorMessage: string, - run: SimulationData | null | undefined + run: SimulationData | null | undefined, ) => // TODO: Don't know why errorMessage ends up being undefined in some cases. typeof errorMessage === "string" && @@ -1158,7 +1147,7 @@ const simulationErrorOrCompleteStatus = ( const simulationStatus = ( simData: SimulationData | null | undefined, - runner: RunnerStatus + runner: RunnerStatus, ): SimulationData["status"] => { const existingStatus = simData?.status; @@ -1178,7 +1167,7 @@ const simulationStatus = ( if ( simData?.experimentId && - (simData?.stepsCount > 0 || simData.analysis || simData.stepsLink) + (simData?.stepsCount > 0 || (simData.analysis ?? simData.stepsLink)) ) { return "completed"; } @@ -1205,7 +1194,7 @@ const simulationStatus = ( */ export const simulationReducer: typeof reducer = ( state: SimulatorSlice = initialSimulatorState, - action: AnyAction + action: AnyAction, ): SimulatorSlice => { if (experimentFinished.match(action)) { const experiment = state.experimentRuns[action.payload]; @@ -1326,7 +1315,7 @@ export const simulationReducer: typeof reducer = ( if (focusedTab === TabKind.Analysis && simHasPlots) { retainFromStep = Math.min( Object.keys(updatedSimData.plots?.rawOutputs ?? {}).length, - retainFromStep + retainFromStep, ); } @@ -1346,7 +1335,7 @@ export const simulationReducer: typeof reducer = ( ...updatedSimData.steps, ...accumulatedSteps, } - : accumulatedSteps! + : accumulatedSteps, ); } } @@ -1367,17 +1356,17 @@ export const simulationReducer: typeof reducer = ( // last tick given the playback speed, but weren't available const stepAfterDebtPaid = Math.min( updatedSimData.stepsCount, - updatedSimData.scrubbedStep + updatedSimData.owedSteps + updatedSimData.scrubbedStep + updatedSimData.owedSteps, ); updatedSimData.scrubbedStep = Math.max( stepAfterDebtPaid, - stepDataAvailableFrom + stepDataAvailableFrom, ); updatedSimData.owedSteps = 0; } else if (stepRetention.retentionPolicy === "some") { updatedSimData.scrubbedStep = Math.max( updatedSimData.scrubbedStep, - stepDataAvailableFrom + stepDataAvailableFrom, ); } } else { @@ -1425,7 +1414,7 @@ export const simulationReducer: typeof reducer = ( if (!updatedSimData.experimentId || !experiment) { throw new Error( - "Cannot find experiment to apply optimization result to" + "Cannot find experiment to apply optimization result to", ); } @@ -1491,7 +1480,7 @@ export const simulationReducer: typeof reducer = ( */ history: historyAdapter.removeOne( state.history, - getHistoryItemId.experiment(experiment) + getHistoryItemId.experiment(experiment), ), }; } @@ -1565,7 +1554,7 @@ export const simulationReducer: typeof reducer = ( let newHistory = historyAdapter.removeOne( state.history, - getHistoryItemId.experiment(pendingExperiment) + getHistoryItemId.experiment(pendingExperiment), ); newHistory = historyAdapter.addOne(newHistory, { @@ -1632,7 +1621,7 @@ export const simulationReducer: typeof reducer = ( } else if (showCollatedAnalysisForExperiment.match(action)) { if (!state.experimentRuns[action.payload]) { throw new Error( - "Cannot show collated plots for experiment which does not exist" + "Cannot show collated plots for experiment which does not exist", ); } @@ -1662,7 +1651,7 @@ export const simulationReducer: typeof reducer = ( const experiment = state.experimentRuns[action.payload.experimentId]; if (!experiment || !simData) { throw new Error( - "Cannot receive steps for experiment that does not exist" + "Cannot receive steps for experiment that does not exist", ); } @@ -1685,7 +1674,7 @@ export const simulationReducer: typeof reducer = ( if ( !experiment.simulationIds.some( - (id) => !newState.simulationData[id].stepsCount + (id) => !newState.simulationData[id].stepsCount, ) ) { newState = { @@ -1773,7 +1762,7 @@ export const simulationReducer: typeof reducer = ( case SimulatorHistoryItemType.CommitGroup: return item.item.commits.some( - (commit) => commit.id === nextProject.ref + (commit) => commit.id === nextProject.ref, ); } diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/sync.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/sync.ts index 200bc2e..72faf3d 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/sync.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/sync.ts @@ -50,7 +50,7 @@ type SimulatorStore = typeof simulatorStore; export const syncStores = ( appStore: AppStore, - simulatorStore: SimulatorStore + simulatorStore: SimulatorStore, ) => { const appStoreObservable = fromStore(appStore); const simulationStoreObservable = fromStore(simulatorStore); @@ -59,8 +59,8 @@ export const syncStores = ( simulatorStore.dispatch( resetSimulationDataAndHistory( projectUrl, - selectAnalysis(appStore.getState()) - ) + selectAnalysis(appStore.getState()), + ), ); }); @@ -75,7 +75,7 @@ export const syncStores = ( } return Promise.resolve(); - }) + }), ) .subscribe(); @@ -95,7 +95,7 @@ export const syncStores = ( .pipe( filter((state) => selectBootstrapped(state)), map(selectScope[Scope.useCloud]), - distinctUntilChanged() + distinctUntilChanged(), ) .subscribe((canUseCloud) => { simulatorStore.dispatch(setCloudDisabled(!canUseCloud)); @@ -106,7 +106,7 @@ export const syncStores = ( filter((state) => selectBootstrapped(state)), map(selectScope[Scope.useAccount]), distinctUntilChanged(), - skip(1) + skip(1), ) .subscribe(() => { simulatorStore.dispatch(refetchHistory()); @@ -117,7 +117,7 @@ export const syncStores = ( skip(1), map(selectResetting), distinctUntilChanged(), - filter((resetting) => resetting) + filter((resetting) => resetting), ) .subscribe(() => { appStore.dispatch(clearUserAlerts()); @@ -125,13 +125,13 @@ export const syncStores = ( merge( simulatorStoreActionObservable.pipe( - filter((action) => showCollatedAnalysisForExperiment.match(action)) + filter((action) => showCollatedAnalysisForExperiment.match(action)), ), simulationStoreObservable.pipe( map(selectAnalysisMode), distinctUntilChanged(), - filter((mode) => !!mode && mode !== AnalysisMode.SingleRun) - ) + filter((mode) => !!mode && mode !== AnalysisMode.SingleRun), + ), ) .pipe(debounceTime(0)) .subscribe(() => { @@ -152,7 +152,7 @@ export const syncStores = ( commitCreated({ createdAt: new Date(action.payload.updatedAt).getTime(), commit: action.payload.commit, - }) + }), ); } }); diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/target.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/target.ts index a4ac074..f122b93 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/target.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/target.ts @@ -7,7 +7,9 @@ export const DEFAULT_SIMULATOR_TARGET: ProviderTargetEnv = "cloud"; const getUnsafeLocalStorageSimulatorTarget = () => { try { return localStorage.getItem(SIMULATOR_TARGET_KEY) as ProviderTargetEnv; - } catch {} + } catch { + // Some browsers will disable localstorage. + } return null; }; @@ -21,5 +23,7 @@ export const getLocalStorageSimulatorTarget = (): ProviderTargetEnv => export const setLocalStorageSimulatorTarget = (target: ProviderTargetEnv) => { try { localStorage.setItem(SIMULATOR_TARGET_KEY, target); - } catch {} + } catch { + // Some browsers will disable localstorage. + } }; diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/thunks.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/thunks.ts index 90cb575..14c9475 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/thunks.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/thunks.ts @@ -51,303 +51,313 @@ import { import { setLocalStorageSimulatorTarget } from "./target"; import { simulationProvider } from "./buildprovider"; -export const initializeNewRun = ( - firstRun = false -): SimulatorThunk> => async (dispatch) => { - const appState = appStore.getState(); - const outSimulationSrc = createCompleteManifest(appState); - - // @todo reimplement this - const projectUrl = selectCurrentProjectUrl(appState); - if (projectUrl) { - dispatch(resetViewer()); - const resp = await runnerMessage( - { - type: "initialize", - presetRunId: null, - manifestSrc: JSON.stringify(outSimulationSrc), - numSteps: 0, - includeSteps: true, - pyodideEnabled: pyodideEnabled(), - }, - "" - ); +export const initializeNewRun = + (firstRun = false): SimulatorThunk> => + async (dispatch) => { + const appState = appStore.getState(); + const outSimulationSrc = createCompleteManifest(appState); + + // @todo reimplement this + const projectUrl = selectCurrentProjectUrl(appState); + if (projectUrl) { + dispatch(resetViewer()); + const resp = await runnerMessage( + { + type: "initialize", + presetRunId: null, + manifestSrc: JSON.stringify(outSimulationSrc), + numSteps: 0, + includeSteps: true, + pyodideEnabled: pyodideEnabled(), + }, + "", + ); - if (resp.simulationRunId) { - const shouldSelect = - !firstRun || selectRefIsNotCommit(appStore.getState()); + if (resp.simulationRunId) { + const shouldSelect = + !firstRun || selectRefIsNotCommit(appStore.getState()); - dispatch( - setSelectedSimulation({ - simId: resp.simulationRunId, - latest: true, - selected: shouldSelect, - }) - ); + dispatch( + setSelectedSimulation({ + simId: resp.simulationRunId, + latest: true, + selected: shouldSelect, + }), + ); + } + } + }; + +export const pauseAndNew = + (firstRun?: boolean): SimulatorThunk> => + async (dispatch) => { + dispatch(pauseSimulator()); + await dispatch(initializeNewRun(firstRun)); + }; + +export const fetchProjectHistory = + ( + project: LinkableProject, + access: ProjectAccess, + pageToCurrent: boolean, + createdBefore?: string | null, + signal?: AbortSignal, + ): SimulatorThunk> => + async (dispatch) => { + const history = await projectHistory( + project, + pageToCurrent, + createdBefore, + access?.code, + signal, + ); + + if (!signal?.aborted) { + dispatch(updateHistory({ history, project })); } - } -}; - -export const pauseAndNew = ( - firstRun?: boolean -): SimulatorThunk> => async (dispatch) => { - dispatch(pauseSimulator()); - await dispatch(initializeNewRun(firstRun)); -}; - -export const fetchProjectHistory = ( - project: LinkableProject, - access: ProjectAccess, - pageToCurrent: boolean, - createdBefore?: string | null, - signal?: AbortSignal -): SimulatorThunk> => async (dispatch) => { - const history = await projectHistory( - project, - pageToCurrent, - createdBefore, - access?.code, - signal - ); - - if (!signal?.aborted) { - dispatch(updateHistory({ history, project })); - } -}; + }; /** * This shouldn't take a project, because it relies on reading from state for * other required info – should store the project history corresponds to and use * that instead */ -export const fetchProjectHistoryNextPage = ( - project: LinkableProject, - access: ProjectAccess, - signal?: AbortSignal -): SimulatorThunk> => async (dispatch, getState) => { - const state = getState(); - await dispatch( - fetchProjectHistory( - project, - access, - !selectHistoryReceivedCurrent(state), - selectHistoryNextPage(state), - signal - ) - ); -}; - -export const resetSimulationDataAndHistory = ( - project: LinkableProject, - previousAnalysis: string | null | undefined -): SimulatorThunk> => async (dispatch) => { - dispatch( - prepareForNewProject({ - project, - previousAnalysis, - }) - ); - await dispatch(pauseAndNew(true)); -}; - -export const updateRunnerGlobals = ( - newGlobals: string, - targetSimulationId?: string -): SimulatorThunk> => async (dispatch, getState) => { - const state = getState(); - const [selectedRun] = getSimAndTarget(state); - const simulationRunId = targetSimulationId ?? selectedRun; - - if (simulationRunId) { +export const fetchProjectHistoryNextPage = + ( + project: LinkableProject, + access: ProjectAccess, + signal?: AbortSignal, + ): SimulatorThunk> => + async (dispatch, getState) => { + const state = getState(); + await dispatch( + fetchProjectHistory( + project, + access, + !selectHistoryReceivedCurrent(state), + selectHistoryNextPage(state), + signal, + ), + ); + }; + +export const resetSimulationDataAndHistory = + ( + project: LinkableProject, + previousAnalysis: string | null | undefined, + ): SimulatorThunk> => + async (dispatch) => { + dispatch( + prepareForNewProject({ + project, + previousAnalysis, + }), + ); + await dispatch(pauseAndNew(true)); + }; + +export const updateRunnerGlobals = + ( + newGlobals: string, + targetSimulationId?: string, + ): SimulatorThunk> => + async (dispatch, getState) => { + const state = getState(); + const [selectedRun] = getSimAndTarget(state); + const simulationRunId = targetSimulationId ?? selectedRun; + + if (simulationRunId) { + await runnerMessage( + { + type: "updateComponents", + propertiesSrc: newGlobals, + }, + simulationRunId, + ); + } + }; + +export const stepSimulator = + (targetSimulationId?: string): SimulatorThunk> => + async (dispatch, getState) => { + const state = getState(); + const simulationRunId = + targetSimulationId ?? selectCurrentSimulationId(state); + await runnerMessage( { - type: "updateComponents", - propertiesSrc: newGlobals, + type: "step", + numSteps: 1, + includeSteps: true, }, - simulationRunId + simulationRunId, ); - } -}; - -export const stepSimulator = ( - targetSimulationId?: string -): SimulatorThunk> => async (dispatch, getState) => { - const state = getState(); - const simulationRunId = - targetSimulationId ?? selectCurrentSimulationId(state); - - await runnerMessage( - { - type: "step", - numSteps: 1, - includeSteps: true, - }, - simulationRunId - ); -}; - -export const toggleProviderTarget = ( - target?: ProviderTargetEnv -): SimulatorThunk => (dispatch) => { - dispatch(pauseSimulator()); - const cur = simulationProvider.target; - simulationProvider.target = target ?? (cur === "cloud" ? "web" : "cloud"); - dispatch(setProviderTarget(simulationProvider.target)); - - if (selectScope[Scope.useCloud](appStore.getState())) { - setLocalStorageSimulatorTarget(simulationProvider.target); - } -}; + }; + +export const toggleProviderTarget = + (target?: ProviderTargetEnv): SimulatorThunk => + (dispatch) => { + dispatch(pauseSimulator()); + const cur = simulationProvider.target; + simulationProvider.target = target ?? (cur === "cloud" ? "web" : "cloud"); + dispatch(setProviderTarget(simulationProvider.target)); + + if (selectScope[Scope.useCloud](appStore.getState())) { + setLocalStorageSimulatorTarget(simulationProvider.target); + } + }; /** * @todo this should be done by a middleware, not a thunk */ -export const removeSimulationRun = ( - simulationId: string -): SimulatorThunk> => async (dispatch, getState) => { - const state = getState(); - const runs = selectAllSingleRuns(state); - - if (runs.length === 1 && runs[0].simulationRunId === simulationId) { - await dispatch(pauseAndNew()); - } - dispatch(removeSimulationData(simulationId)); -}; - -export const openExperiment = ( - experimentId: string | null -): SimulatorThunk> => async (dispatch, getState) => { - dispatch(setSelectedExperiment(experimentId)); - - /** - * @todo this side effect should be done by middleware / subscriber - */ - if (experimentId) { +export const removeSimulationRun = + (simulationId: string): SimulatorThunk> => + async (dispatch, getState) => { const state = getState(); - const experiment: AnyExperimentRun = - selectExperimentRuns(state)[experimentId] ?? - selectPendingExperimentRuns(state)[experimentId]; - const simulationData = selectAllSimulationData(state); + const runs = selectAllSingleRuns(state); - if (!experiment) { - throw new Error("Cannot open non-existent experiment"); + if (runs.length === 1 && runs[0].simulationRunId === simulationId) { + await dispatch(pauseAndNew()); } + dispatch(removeSimulationData(simulationId)); + }; + +export const openExperiment = + (experimentId: string | null): SimulatorThunk> => + async (dispatch, getState) => { + dispatch(setSelectedExperiment(experimentId)); + + /** + * @todo this side effect should be done by middleware / subscriber + */ + if (experimentId) { + const state = getState(); + const experiment: AnyExperimentRun = + selectExperimentRuns(state)[experimentId] ?? + selectPendingExperimentRuns(state)[experimentId]; + const simulationData = selectAllSimulationData(state); + + if (!experiment) { + throw new Error("Cannot open non-existent experiment"); + } - if (experimentRunInitialized(experiment)) { - const runs = experiment.simulationIds.map((id) => { - const run = simulationData[id]; + if (experimentRunInitialized(experiment)) { + const runs = experiment.simulationIds.map((id) => { + const run = simulationData[id]; - if (!run) { - throw new Error("Missing experiment simulation"); - } - return run; - }); - - await Promise.all( - runs.map(async (run) => { - if (!run.plots && run.analysisLink) { - const analysis = await historicCloudExperimentProvider.getAnalysis( - experiment, - run - ); - - dispatch( - setSimulationAnalysis({ - simId: run.simulationRunId, - analysis, - }) - ); + if (!run) { + throw new Error("Missing experiment simulation"); } - }) - ); - } - } -}; - -export const downloadStepsForRun = ( - run: SimulationData -): SimulatorThunk> => async (dispatch, getState) => { - if (run.experimentId && !run.stepsCount && run.stepsLink) { - const experiment = selectExperimentRuns(getState())[run.experimentId]; - - if (experiment) { - const timeout = setTimeout(() => { - dispatch( - setSimulationStatus({ - simId: run.simulationRunId, - status: "downloading", - }) - ); - }, 100); - - try { - const steps = await historicCloudExperimentProvider.getSteps( - experiment, - run - ); - - clearTimeout(timeout); - - dispatch( - setExperimentSteps({ - experimentId: experiment.experimentId, - simulationId: run.simulationRunId, - steps, - }) + return run; + }); + + await Promise.all( + runs.map(async (run) => { + if (!run.plots && run.analysisLink) { + const analysis = + await historicCloudExperimentProvider.getAnalysis( + experiment, + run, + ); + + dispatch( + setSimulationAnalysis({ + simId: run.simulationRunId, + analysis, + }), + ); + } + }), ); - } catch (err) { - clearTimeout(timeout); - dispatch( - setSimulationStatus({ simId: run.simulationRunId, status: "errored" }) - ); - console.error(err); } } - } -}; + }; + +export const downloadStepsForRun = + (run: SimulationData): SimulatorThunk> => + async (dispatch, getState) => { + if (run.experimentId && !run.stepsCount && run.stepsLink) { + const experiment = selectExperimentRuns(getState())[run.experimentId]; + + if (experiment) { + const timeout = setTimeout(() => { + dispatch( + setSimulationStatus({ + simId: run.simulationRunId, + status: "downloading", + }), + ); + }, 100); + + try { + const steps = await historicCloudExperimentProvider.getSteps( + experiment, + run, + ); + + clearTimeout(timeout); + + dispatch( + setExperimentSteps({ + experimentId: experiment.experimentId, + simulationId: run.simulationRunId, + steps, + }), + ); + } catch (err) { + clearTimeout(timeout); + dispatch( + setSimulationStatus({ + simId: run.simulationRunId, + status: "errored", + }), + ); + console.error(err); + } + } + } + }; /** * @todo this should not be a thunk */ -export const setViewerSpeed = (speed: number | "live"): SimulatorThunk => ( - dispatch, - getState -) => { - const state = getState(); - const canCompute = selectCanCurrentSimCompute(state); - const canPresent = selectCanPresent(state); - - if (canCompute) { - dispatch(resumeSimulator({ speed })); - } else { - if (typeof speed === "number") { - if (canPresent) { - dispatch(present({ speed })); +export const setViewerSpeed = + (speed: number | "live"): SimulatorThunk => + (dispatch, getState) => { + const state = getState(); + const canCompute = selectCanCurrentSimCompute(state); + const canPresent = selectCanPresent(state); + + if (canCompute) { + dispatch(resumeSimulator({ speed })); + } else { + if (typeof speed === "number") { + if (canPresent) { + dispatch(present({ speed })); + } else { + dispatch(setPresentingSpeed(speed)); + } } else { - dispatch(setPresentingSpeed(speed)); + throw new Error("Cannot present at live speed"); } - } else { - throw new Error("Cannot present at live speed"); } - } -}; - -export const earlyStopSimulation = ( - simId: string, - message: unknown -): SimulatorThunk => (dispatch, getState) => { - const sim = selectAllSimulationData(getState())[simId]; - - if (sim && !simulationComplete(sim)) { - const parsedMessage = parseStopMessage(message); - appStore.dispatch( - addUserAlert({ - type: parsedMessage.status, - message: parsedMessage.reason, - context: "", - timestamp: Date.now(), - simulationId: simId, - }) - ); - } -}; + }; + +export const earlyStopSimulation = + (simId: string, message: unknown): SimulatorThunk => + (dispatch, getState) => { + const sim = selectAllSimulationData(getState())[simId]; + + if (sim && !simulationComplete(sim)) { + const parsedMessage = parseStopMessage(message); + appStore.dispatch( + addUserAlert({ + type: parsedMessage.status, + message: parsedMessage.reason, + context: "", + timestamp: Date.now(), + simulationId: simId, + }), + ); + } + }; diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/types.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/types.ts index daffdfa..300da28 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/types.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/types.ts @@ -20,10 +20,10 @@ export enum SimulatorHistoryItemType { SingleRun = "SingleRun", } -type SimulatorHistoryItemShared = { +interface SimulatorHistoryItemShared { createdAt: number; historyId: string; -}; +} export type SimulatorHistoryItemExperimentRun = SimulatorHistoryItemShared & { itemType: SimulatorHistoryItemType.ExperimentRun; @@ -70,7 +70,7 @@ export interface SimulatorHistory extends EntityState { selectedCommitGroup: EntityId | null; } -export type SimulatorSlice = { +export interface SimulatorSlice { // Which simulation are we focusing on to display? // This simulation will be the focus of the viewers currentSimulation: SimulationRunId | null; @@ -82,17 +82,11 @@ export type SimulatorSlice = { selectedTarget: ProviderTargetEnv; - simulationData: { - [id: string]: SimulationData; - }; + simulationData: Record; - experimentRuns: { - [id: string]: ExperimentRun; - }; + experimentRuns: Record; - pendingExperimentRuns: { - [id: string]: PendingExperimentRun; - }; + pendingExperimentRuns: Record; analysisMode: AnalysisMode | null; @@ -103,14 +97,14 @@ export type SimulatorSlice = { cloudDisabled: boolean; history: SimulatorHistory; -}; +} -export type SimulationAnalysis = { +export interface SimulationAnalysis { outputs?: OutputSeries; manifest: string; -}; +} -export type SimulationData = { +export interface SimulationData { simulationRunId: string; steps: SimulationStates; /** @@ -155,7 +149,7 @@ export type SimulationData = { | "downloading" | "errored" | "paused"; -}; +} export type PendingExperimentRun = Pick< ExperimentRun, diff --git a/apps/sim-core/packages/core/src/features/simulator/simulate/util.ts b/apps/sim-core/packages/core/src/features/simulator/simulate/util.ts index c9fba9a..f7e9486 100644 --- a/apps/sim-core/packages/core/src/features/simulator/simulate/util.ts +++ b/apps/sim-core/packages/core/src/features/simulator/simulate/util.ts @@ -85,14 +85,14 @@ export const defaultSimulationData: SimulationData = { */ export const runnerMessage = async ( req: RunnerRequest, - simulationId: string + simulationId: string, ): Promise => { return simulationProvider.handleRequest(req, simulationId); }; const toFetchedDatasets = ( files: HcAnyDatasetFile[], - dependencies: DependenciesDescriptor + dependencies: DependenciesDescriptor, ): FetchedDataset[] => files.map((file) => ({ id: file.id, @@ -102,7 +102,7 @@ const toFetchedDatasets = ( shortname: correctedShortnameFromDependencies( file.path.formatted, file.repoPath, - dependencies + dependencies, ), name: file.name, format: parseDatasetUrl(file.contents, file.data.rawCsv).format, @@ -116,7 +116,7 @@ export const createCompleteManifest = (appState: AppState): RawManifest => { const dependencies = selectParsedDependencies(appState); const datasets = toFetchedDatasets( selectDatasetFiles(appState), - dependencies + dependencies, ); // @todo investigate removing this @@ -129,9 +129,9 @@ export const createCompleteManifest = (appState: AppState): RawManifest => { shortname: correctedShortnameFromDependencies( path.formatted, repoPath, - dependencies + dependencies, ), - }) + }), ); console.log("added shared behaviors", behaviorsToAdd); @@ -152,7 +152,7 @@ export const createCompleteManifest = (appState: AppState): RawManifest => { }; export const getSimAndTarget = ( - state: SimulatorRootState + state: SimulatorRootState, ): [SimulationRunId | null, ProviderTargetEnv] => { const sim = state.simulator.currentSimulation; const target = state.simulator.selectedTarget; @@ -193,12 +193,12 @@ export const minimumAvailableStep = ({ * @todo lets take that into account and use this in more places */ export const simulationHasSteps = ( - run: Pick | null | undefined + run: Pick | null | undefined, ) => (run ? run.stepsCount > 1 : false); export const simulationViewable = ( run: SimulationData | null | undefined, - complete?: boolean + complete?: boolean, ) => (complete ?? simulationComplete(run)) && (simulationHasSteps(run) || @@ -206,14 +206,14 @@ export const simulationViewable = ( export const hasExperimentFailed = ( state: SimulatorSlice | Draft, - experiment: ExperimentRun + experiment: ExperimentRun, ) => { if (experiment.status === "errored") { return true; } return experiment.simulationIds.some( - (id) => state.simulationData[id]?.status === "errored" + (id) => state.simulationData[id]?.status === "errored", ); }; @@ -221,7 +221,7 @@ export const hasExperimentFailed = ( * @todo have a field on ExperimentRun or PendingExperimentRun that marks it as pending */ export const experimentRunInitialized = ( - run: ExperimentRun | PendingExperimentRun + run: ExperimentRun | PendingExperimentRun, ): run is ExperimentRun => "plan" in run; /** @@ -235,14 +235,14 @@ export const EXPERIMENT_PENDING_THRESHOLD = 100; export const DEFAULT_STEPS_PER_SECOND = 60; -type StopMessage = { +interface StopMessage { status: "warning" | "error" | "complete"; reason: string; -}; +} const hasProp = ( data: object, - prop: K + prop: K, ): data is Record => prop in data; export const parseStopMessage = (msg: unknown): StopMessage => { @@ -273,7 +273,7 @@ export const parseStopMessage = (msg: unknown): StopMessage => { const correctedShortnameFromDependencies = ( shortname: string, repoPath: string, - dependencies: DependenciesDescriptor + dependencies: DependenciesDescriptor, ): string => { // We need to find the proper shortnames for our dependencies. // Our dependencies.json file has the expected values. @@ -308,7 +308,7 @@ const correctedShortnameFromDependencies = ( console.warn( "Unable to find corrected shortname for dependency. Using simple default instead.", repoPath, - correctedShortname + correctedShortname, ); } return correctedShortname; diff --git a/apps/sim-core/packages/core/src/features/subscribers/autoSaveSubscribe.ts b/apps/sim-core/packages/core/src/features/subscribers/autoSaveSubscribe.ts index 3e762b2..0ec12e3 100644 --- a/apps/sim-core/packages/core/src/features/subscribers/autoSaveSubscribe.ts +++ b/apps/sim-core/packages/core/src/features/subscribers/autoSaveSubscribe.ts @@ -14,57 +14,59 @@ import { fromStore } from "../../util/fromStore"; import { save } from "../thunks"; import { selectFileActions } from "../files/selectors"; -const debounceTimeWithMaximum = ( - debounceMs: number, - maximumMs: number, - skipTimeout: (next: T) => boolean -) => (source: Observable) => - new Observable((observer) => { - let currentValue: T; - let debounceTimeout: number | null = null; - let raceTimeout: number | null = null; +const debounceTimeWithMaximum = + ( + debounceMs: number, + maximumMs: number, + skipTimeout: (next: T) => boolean, + ) => + (source: Observable) => + new Observable((observer) => { + let currentValue: T; + let debounceTimeout: number | null = null; + let raceTimeout: number | null = null; - const resolve = () => { - observer.next(currentValue); - if (debounceTimeout) { - window.clearTimeout(debounceTimeout); - } + const resolve = () => { + observer.next(currentValue); + if (debounceTimeout) { + window.clearTimeout(debounceTimeout); + } - if (raceTimeout) { - window.clearTimeout(raceTimeout); - } + if (raceTimeout) { + window.clearTimeout(raceTimeout); + } - debounceTimeout = null; - raceTimeout = null; - }; + debounceTimeout = null; + raceTimeout = null; + }; - return source.subscribe({ - next: (value) => { - currentValue = value; + return source.subscribe({ + next: (value) => { + currentValue = value; - if (debounceTimeout) { - window.clearTimeout(debounceTimeout); - } + if (debounceTimeout) { + window.clearTimeout(debounceTimeout); + } - debounceTimeout = window.setTimeout(resolve, debounceMs); + debounceTimeout = window.setTimeout(resolve, debounceMs); - if (!raceTimeout) { - raceTimeout = window.setTimeout(resolve, maximumMs); - } + if (!raceTimeout) { + raceTimeout = window.setTimeout(resolve, maximumMs); + } - if (skipTimeout(value)) { - resolve(); - } - }, - error: (err) => observer.error(err), - complete: () => observer.complete(), + if (skipTimeout(value)) { + resolve(); + } + }, + error: (err) => observer.error(err), + complete: () => observer.complete(), + }); }); - }); export const autoSaveSubscribe = (store: Store) => { const focus = merge( fromEvent(window, "focus").pipe(mapTo(true)), - fromEvent(window, "blur").pipe(mapTo(false)) + fromEvent(window, "blur").pipe(mapTo(false)), ).pipe(startWith(document.hasFocus())); const actions = fromStore(store).pipe( @@ -75,17 +77,18 @@ export const autoSaveSubscribe = (store: Store) => { debounceTimeWithMaximum(5_000, 10_000, (actions) => actions.some( (action) => - action.type !== "update" || action.repoPath === "dependencies.json" - ) - ) + action.type !== "update" || action.repoPath === "dependencies.json", + ), + ), ); const actionsWhenFocused = combineLatest([focus, actions]).pipe( filter(([focused]) => focused), - map(([_, actions]) => actions) + map(([_, actions]) => actions), ); actionsWhenFocused.subscribe(() => { + // @ts-expect-error redux problems store.dispatch(save()).catch((err) => { console.error("Failed to save", err); }); diff --git a/apps/sim-core/packages/core/src/features/thunks.ts b/apps/sim-core/packages/core/src/features/thunks.ts index 2c99ee9..dc8f01f 100644 --- a/apps/sim-core/packages/core/src/features/thunks.ts +++ b/apps/sim-core/packages/core/src/features/thunks.ts @@ -22,6 +22,15 @@ import { SimulationProject, } from "./project/types"; import { Scope, selectScope } from "./scopes"; +// import { Octokit } from "@octokit/rest"; + +// const authKey = "github-auth"; +// if(!localStorage[authKey]) { +// localStorage[authKey] = window.prompt("Please provide your GitHub personal access token.\n\n It will be preserved in localstorage and used to read and commit files to your GitHub account.\n\nhttps://github.com/settings/tokens/new"); +// } +// const octokit = new Octokit({ +// auth: localStorage[authKey], +// }); export const bootstrapApp = createAppAsyncThunk<{ user?: User; @@ -33,7 +42,7 @@ export const bootstrapApp = createAppAsyncThunk<{ }>("bootstrapApp", async (_, { getState, dispatch }) => { getReleaseMeta().catch(() => { console.warn( - "Failed to get release meta at bootstrap time – must retry later" + "Failed to get release meta at bootstrap time – must retry later", ); }); @@ -44,9 +53,9 @@ export const bootstrapApp = createAppAsyncThunk<{ canUserEditProjectUpdate( await canUserEditProject( currentProject.pathWithNamespace, - currentProject.ref - ) - ) + currentProject.ref, + ), + ), ); } @@ -70,7 +79,7 @@ const saveQueue = createActionQueue("save"); * @warning You cannot catch errors from save because it is queued. */ export const save = () => - saveQueue.queue(async (next, getState, dispatch) => { + saveQueue.queue((next, getState, dispatch) => { try { const state = getState(); const project = selectCurrentProject(state); @@ -89,6 +98,9 @@ export const save = () => try { dispatch(beginActionSave(actions.map((action) => action.uuid))); // migration shim -- disable these API requests until they can talk to github. + + // const { data } = await octokit.request("/user"); + // console.log("github data:", data); // // const { result: updatedAt, commit } = await commitActions( // project.pathWithNamespace, @@ -96,9 +108,10 @@ export const save = () => // false, // project.access?.code // ); + // dispatch(projectUpdated({ updatedAt, actions, commit })); } catch (err) { - if (err.name !== "AbortError") { + if (err instanceof Error && err.name !== "AbortError") { console.error(err); throw err; } @@ -137,7 +150,7 @@ export const forkAndReleaseBehaviors = createAppAsyncThunk< behaviorFiles.map((file): [string, HcBehaviorFile] => [ file.repoPath, file, - ]) + ]), ); const files = behaviors.flatMap((behavior) => { @@ -165,13 +178,13 @@ export const forkAndReleaseBehaviors = createAppAsyncThunk< const forkedBehaviors = behaviors.map((behavior) => { const forkedBehaviorId = mapFileId( `${result.behaviorPathWithNamespace}/${behavior.filename}`, - result.behaviorRef + result.behaviorRef, ); const forkedBehavior = result.files.find( (file): file is HcSharedBehaviorFile => file.id === forkedBehaviorId && - file.kind === HcFileKind.SharedBehavior + file.kind === HcFileKind.SharedBehavior, ); if (!forkedBehavior) { @@ -182,6 +195,7 @@ export const forkAndReleaseBehaviors = createAppAsyncThunk< }); dispatch( + // @ts-expect-error redux problems trackEvent({ action: "New Release: Core", label: `Behavior - ${forkedBehaviors @@ -191,7 +205,7 @@ export const forkAndReleaseBehaviors = createAppAsyncThunk< type: "Behavior", forkOf: args.projectPath, }, - }) + }), ); return { @@ -199,5 +213,5 @@ export const forkAndReleaseBehaviors = createAppAsyncThunk< updatedAt: result.updatedAt, forkedBehaviors, }; - } + }, ); diff --git a/apps/sim-core/packages/core/src/features/toast/index.spec.ts b/apps/sim-core/packages/core/src/features/toast/index.spec.ts index ea81292..a121a78 100644 --- a/apps/sim-core/packages/core/src/features/toast/index.spec.ts +++ b/apps/sim-core/packages/core/src/features/toast/index.spec.ts @@ -29,6 +29,6 @@ describe("toast feature", () => { expect(selectToastKind(state)).toEqual(payload.kind); expect(selectToastData(state)).toEqual(payload.data); - } + }, ); }); diff --git a/apps/sim-core/packages/core/src/features/toast/selectors.ts b/apps/sim-core/packages/core/src/features/toast/selectors.ts index 513af1c..424ff92 100644 --- a/apps/sim-core/packages/core/src/features/toast/selectors.ts +++ b/apps/sim-core/packages/core/src/features/toast/selectors.ts @@ -8,9 +8,9 @@ export const selectToast: Selector = (state) => export const selectToastKind = createSelector( selectToast, - (toast) => toast.kind + (toast) => toast.kind, ); export const selectToastData = createSelector( selectToast, - (toast) => toast.data + (toast) => toast.data, ); diff --git a/apps/sim-core/packages/core/src/features/toast/slice.ts b/apps/sim-core/packages/core/src/features/toast/slice.ts index 75d24a5..f94c49f 100644 --- a/apps/sim-core/packages/core/src/features/toast/slice.ts +++ b/apps/sim-core/packages/core/src/features/toast/slice.ts @@ -17,7 +17,7 @@ const setToast = ( project: SimulationProject | null, canEdit: boolean, canWriteProject: boolean, - fromLegacy: boolean = false + fromLegacy = false, ) => { delete state.data; @@ -64,7 +64,7 @@ export const { project, scopes[Scope.edit], scopes[Scope.mutate], - meta.fromLegacy ?? false + meta.fromLegacy ?? false, ); }) .addCase(bootstrapApp.fulfilled, (draft, action) => { @@ -72,7 +72,7 @@ export const { draft, action.payload.currentProject, action.payload.scopes[Scope.edit], - action.payload.scopes[Scope.mutate] + action.payload.scopes[Scope.mutate], ); }); }, diff --git a/apps/sim-core/packages/core/src/features/types.ts b/apps/sim-core/packages/core/src/features/types.ts index 4696d52..380fdbf 100644 --- a/apps/sim-core/packages/core/src/features/types.ts +++ b/apps/sim-core/packages/core/src/features/types.ts @@ -7,11 +7,14 @@ export type AppDispatch = StoreType["dispatch"]; export type AppThunk = ( dispatch: AppDispatch, getState: () => RootState, - extraArgument: unknown + extraArgument: unknown, ) => ReturnValueType; export type AsyncAppThunk = AppThunk< Promise >; -export type AppAsyncThunkArgs = { state: RootState; dispatch: AppDispatch }; +export interface AppAsyncThunkArgs { + state: RootState; + dispatch: AppDispatch; +} diff --git a/apps/sim-core/packages/core/src/features/user/selectors.ts b/apps/sim-core/packages/core/src/features/user/selectors.ts index f867b06..d86049f 100644 --- a/apps/sim-core/packages/core/src/features/user/selectors.ts +++ b/apps/sim-core/packages/core/src/features/user/selectors.ts @@ -11,37 +11,37 @@ export const selectUserSlice: Selector = (state) => export const selectBootstrapped = createSelector( selectUserSlice, - (user) => user.bootstrapped + (user) => user.bootstrapped, ); export const selectCurrentUser = createSelector( selectUserSlice, - (user) => user.currentUser + (user) => user.currentUser, ); export const selectUserProfileUrl = createSelector(selectCurrentUser, (user) => - user ? urljoin(SITE_URL, `@${user.shortname}`) : null + user ? urljoin(SITE_URL, `@${user.shortname}`) : null, ); export const selectUserImage = createSelector( selectCurrentUser, - (user) => user?.image + (user) => user?.image, ); export const selectTourProgress = createSelector( selectUserSlice, - (user) => user.tourProgress + (user) => user.tourProgress, ); export const selectRemainingCloudCredits = createSelector( selectCurrentUser, - (currentUser) => currentUser?.cloudCredits ?? 0 + (currentUser) => currentUser?.cloudCredits ?? 0, ); -export const selectUserProjects = getSelectors(selectUserSlice) - .selectAll; +export const selectUserProjects = + getSelectors(selectUserSlice).selectAll; export const selectUserProjectsLoaded = createSelector( selectUserSlice, - (slice) => slice.projectsLoaded + (slice) => slice.projectsLoaded, ); diff --git a/apps/sim-core/packages/core/src/features/user/slice.ts b/apps/sim-core/packages/core/src/features/user/slice.ts index 929aaa9..cda7617 100644 --- a/apps/sim-core/packages/core/src/features/user/slice.ts +++ b/apps/sim-core/packages/core/src/features/user/slice.ts @@ -40,7 +40,7 @@ export const { }, addUserProject( state, - { payload }: PayloadAction + { payload }: PayloadAction, ) { upsertOne(state, payload); }, diff --git a/apps/sim-core/packages/core/src/features/user/thunks.ts b/apps/sim-core/packages/core/src/features/user/thunks.ts index 7d24b18..c95482e 100644 --- a/apps/sim-core/packages/core/src/features/user/thunks.ts +++ b/apps/sim-core/packages/core/src/features/user/thunks.ts @@ -8,41 +8,42 @@ import { setLocalTourProgress } from "./local"; import { setTourProgress } from "./slice"; import { trackTourProgress } from "../../util/api"; -const setTourProgressWithLocalStorage = (progress: TourProgress): AppThunk => ( - dispatch -) => { - setLocalTourProgress(progress); - dispatch(setTourProgress(progress)); -}; +const setTourProgressWithLocalStorage = + (progress: TourProgress): AppThunk => + (dispatch) => { + setLocalTourProgress(progress); + dispatch(setTourProgress(progress)); + }; -export const tourProgress = (progress: TourProgress): AsyncAppThunk => async ( - dispatch, - getState -) => { - const state = getState(); - const prevProgress = selectTourProgress(state); - const useAccount = selectScope[Scope.useAccount](state); +export const tourProgress = + (progress: TourProgress): AsyncAppThunk => + async (dispatch, getState) => { + const state = getState(); + const prevProgress = selectTourProgress(state); + const useAccount = selectScope[Scope.useAccount](state); - /** - * Bail if nothing has changed - */ - if (isEqual(progress, prevProgress)) { - return; - } + /** + * Bail if nothing has changed + */ + if (isEqual(progress, prevProgress)) { + return; + } - // Update state optimistically - dispatch(setTourProgressWithLocalStorage(progress)); + // Update state optimistically + // @ts-expect-error redux problems + dispatch(setTourProgressWithLocalStorage(progress)); - if (useAccount) { - try { - await trackTourProgress(progress); - } catch (errors) { - console.debug({ errors }); + if (useAccount) { + try { + await trackTourProgress(progress); + } catch (errors) { + console.debug({ errors }); - if (prevProgress) { - // Revert back to the previous state prior to optimistically updating - dispatch(setTourProgressWithLocalStorage(prevProgress)); + if (prevProgress) { + // Revert back to the previous state prior to optimistically updating + // @ts-expect-error redux problems + dispatch(setTourProgressWithLocalStorage(prevProgress)); + } } } - } -}; + }; diff --git a/apps/sim-core/packages/core/src/features/user/utils.ts b/apps/sim-core/packages/core/src/features/user/utils.ts index 8dafec0..4af2978 100644 --- a/apps/sim-core/packages/core/src/features/user/utils.ts +++ b/apps/sim-core/packages/core/src/features/user/utils.ts @@ -2,6 +2,6 @@ import { navigate } from "hookrouter"; import { getCurrentRoute } from "../../routes"; -export const forceLogIn = (replace: boolean = false) => { +export const forceLogIn = (replace = false) => { navigate("/signin", replace, { route: getCurrentRoute() }, true); }; diff --git a/apps/sim-core/packages/core/src/features/utils.ts b/apps/sim-core/packages/core/src/features/utils.ts index 8bc1cc6..e1fee25 100644 --- a/apps/sim-core/packages/core/src/features/utils.ts +++ b/apps/sim-core/packages/core/src/features/utils.ts @@ -5,17 +5,24 @@ import { PartialSimulationProject } from "./project/types"; export const projectUpdatedSort = ( a: PartialSimulationProject, - b: PartialSimulationProject + b: PartialSimulationProject, ) => new Date(a.updatedAt).getTime() - new Date(b.updatedAt).getTime(); -export const observeMiddleware = ( - subject: Subject -): Middleware<{}, T> => () => (next) => (action) => { - const result = next(action); - subject.next(action); - return result; -}; +export const observeMiddleware = + (subject: Subject): Middleware<{}, T> => + () => + (next) => + (action) => { + const result = next(action); + subject.next(action); + return result; + }; // @todo remove this export const isCompleteErrorMessage = (message: string) => message.includes("_HASH_PRIVATE_TEMPORARY_COMPLETE_ERROR"); + +export const getErrorMessage = (error: unknown) => { + if (error instanceof Error) return error.message; + return String(error); +}; diff --git a/apps/sim-core/packages/core/src/features/viewer/selectors.ts b/apps/sim-core/packages/core/src/features/viewer/selectors.ts index 1b6453a..6dfb2a5 100644 --- a/apps/sim-core/packages/core/src/features/viewer/selectors.ts +++ b/apps/sim-core/packages/core/src/features/viewer/selectors.ts @@ -9,27 +9,27 @@ export const getViewer: Selector = (state) => export const selectCurrentTab = createSelector( getViewer, - (viewer) => viewer.currentTab + (viewer) => viewer.currentTab, ); export const selectVisibleTabs = createSelector( getViewer, - (viewer) => viewer.visibleTabs + (viewer) => viewer.visibleTabs, ); export const selectVisibleTabsInOrder = createSelector( [selectVisibleTabs], - (visibleTabs) => viewerTabs.filter((tab) => visibleTabs.includes(tab.kind)) + (visibleTabs) => viewerTabs.filter((tab) => visibleTabs.includes(tab.kind)), ); export const selectUserAlerts = createSelector( getViewer, - (viewer) => viewer.userAlerts + (viewer) => viewer.userAlerts, ); export const selectCurrentProcessChart = createSelector( getViewer, - (viewer) => viewer.currentProcessChart + (viewer) => viewer.currentProcessChart, ); /** @@ -38,12 +38,12 @@ export const selectCurrentProcessChart = createSelector( */ export const selectEditorVisible = createSelector( getViewer, - (viewer) => viewer.editor + (viewer) => viewer.editor, ); export const selectViewerVisible = createSelector( getViewer, - (viewer) => viewer.viewer + (viewer) => viewer.viewer, ); /** @@ -52,7 +52,7 @@ export const selectViewerVisible = createSelector( */ export const selectActivityVisible = createSelector( [getViewer, selectViewerVisible], - (viewer, viewerVisible) => viewer.activity && viewerVisible + (viewer, viewerVisible) => viewer.activity && viewerVisible, ); /** @@ -61,5 +61,5 @@ export const selectActivityVisible = createSelector( */ export const selectEmbedded = createSelector( getViewer, - (viewer) => viewer.embedded + (viewer) => viewer.embedded, ); diff --git a/apps/sim-core/packages/core/src/features/viewer/slice.ts b/apps/sim-core/packages/core/src/features/viewer/slice.ts index 7c22842..365e61b 100644 --- a/apps/sim-core/packages/core/src/features/viewer/slice.ts +++ b/apps/sim-core/packages/core/src/features/viewer/slice.ts @@ -38,7 +38,7 @@ const setters = { changeTabByIndex(state: Draft, index: number) { const clamped = Math.max(0, Math.min(state.visibleTabs.length - 1, index)); state.currentTab = state.tabOrder.filter((tab) => - state.visibleTabs.includes(tab.kind) + state.visibleTabs.includes(tab.kind), )[clamped]?.kind; }, @@ -46,7 +46,7 @@ const setters = { state: Draft, { tab, tabs }: { tab?: string | null; tabs?: string[] | null }, allTabs: TabKind[], - allowedTabs: TabKind[] = allTabs + allowedTabs: TabKind[] = allTabs, ) { const filteredTabs = tabs?.filter(valueIsTab).filter((tab) => allowedTabs.includes(tab)) ?? @@ -121,7 +121,7 @@ export const { .filter((tab) => state.visibleTabs.includes(tab)) .indexOf(action.payload); state.visibleTabs = state.visibleTabs.filter( - (tab) => tab !== action.payload + (tab) => tab !== action.payload, ); if (state.currentTab === action.payload) { setters.changeTabByIndex(state, index); @@ -175,13 +175,13 @@ export const { viewer?: boolean; tab?: string | null; tabs?: string[] | null; - }> + }>, ) { setters.initializeTabs( state, action.payload, state.visibleTabs, - viewerTabs.map((tab) => tab.kind) + viewerTabs.map((tab) => tab.kind), ); if (action.payload.editor !== undefined) { @@ -202,7 +202,7 @@ export const { action: PayloadAction<{ tabs?: string[] | null; tab?: string | null; - }> + }>, ) { state.embedded = true; state.activity = false; diff --git a/apps/sim-core/packages/core/src/features/viewer/types.ts b/apps/sim-core/packages/core/src/features/viewer/types.ts index 9c200e2..70db6d8 100644 --- a/apps/sim-core/packages/core/src/features/viewer/types.ts +++ b/apps/sim-core/packages/core/src/features/viewer/types.ts @@ -1,22 +1,22 @@ import type { TabKind } from "./enums"; -export type UserAlert = { +export interface UserAlert { type: "warning" | "error" | "complete"; timestamp: number; message: string; context: string | undefined; simulationId: string | null; hideLinksToDocs?: true; -}; +} export type UserAlertInState = UserAlert & { uuid: string; }; -export type ViewerTab = { +export interface ViewerTab { kind: TabKind; name: string; -}; +} export interface ViewerSlice { currentTab: TabKind; diff --git a/apps/sim-core/packages/core/src/hooks/useAbortingDispatch.ts b/apps/sim-core/packages/core/src/hooks/useAbortingDispatch.ts index d870131..493952d 100644 --- a/apps/sim-core/packages/core/src/hooks/useAbortingDispatch.ts +++ b/apps/sim-core/packages/core/src/hooks/useAbortingDispatch.ts @@ -6,7 +6,7 @@ import { AppDispatch } from "../features/types"; export const useAbortingDispatch = any>( actionCreator: T, deps: any[] = [], - disableWhilstRunning = true + disableWhilstRunning = true, ) => { const dispatch = useDispatch(); const abortPromiseRef = useRef<{ abort: VoidFunction } | null>(null); @@ -22,20 +22,19 @@ export const useAbortingDispatch = any>( // eslint-disable-next-line react-hooks/exhaustive-deps }, deps); - const abortingDispatch: ( - ...args: Parameters - ) => Promise = useCallback( - async (...args: any[]) => { - if (!(disableWhilstRunning && abortPromiseRef.current)) { - abortPromiseRef.current?.abort(); - abortPromiseRef.current = dispatch(actionCreator(...args)); - setRunning(true); - await abortPromiseRef.current; - setRunning(false); - abortPromiseRef.current = null; - } - }, - [disableWhilstRunning, dispatch, actionCreator] - ); + const abortingDispatch: (...args: Parameters) => Promise = + useCallback( + async (...args: any[]) => { + if (!(disableWhilstRunning && abortPromiseRef.current)) { + abortPromiseRef.current?.abort(); + abortPromiseRef.current = dispatch(actionCreator(...args)); + setRunning(true); + await abortPromiseRef.current; + setRunning(false); + abortPromiseRef.current = null; + } + }, + [disableWhilstRunning, dispatch, actionCreator], + ); return [abortingDispatch, running] as const; }; diff --git a/apps/sim-core/packages/core/src/hooks/useClipboardWriteText.ts b/apps/sim-core/packages/core/src/hooks/useClipboardWriteText.ts index fce205d..0c1803c 100644 --- a/apps/sim-core/packages/core/src/hooks/useClipboardWriteText.ts +++ b/apps/sim-core/packages/core/src/hooks/useClipboardWriteText.ts @@ -4,7 +4,7 @@ import { useCallback } from "react"; * typescript thinks writeText is always defined and thinks this ternary is * unnecessary, but it's not because writeText is a relatively new API */ -// @ts-ignore +// @ts-expect-error see above const clipboardPromise = navigator.clipboard?.writeText ? Promise.resolve(navigator.clipboard) : import( @@ -15,5 +15,5 @@ export const useClipboardWriteText = () => useCallback( (text: string) => clipboardPromise.then((clipboard) => clipboard.writeText(text)), - [] + [], ); diff --git a/apps/sim-core/packages/core/src/hooks/useKeyboardShortcuts.ts b/apps/sim-core/packages/core/src/hooks/useKeyboardShortcuts.ts index bc8fcc5..525b83f 100644 --- a/apps/sim-core/packages/core/src/hooks/useKeyboardShortcuts.ts +++ b/apps/sim-core/packages/core/src/hooks/useKeyboardShortcuts.ts @@ -12,16 +12,14 @@ export enum HotKey { export const getMetaCharacter = () => navigator.platform.toUpperCase().indexOf("MAC") >= 0 ? "⌘" : "Ctrl"; -type ShortcutMap = { - [key: string]: VoidFunction | undefined; -}; +type ShortcutMap = Record; -type HandlerDescription = { +interface HandlerDescription { meta?: ShortcutMap; metaShift?: ShortcutMap; single?: ShortcutMap; alt?: ShortcutMap; -}; +} const listeningState: { listener: null | ((evt: KeyboardEvent) => void); @@ -71,7 +69,7 @@ export const useKeyboardShortcuts = (handlers: HandlerDescription) => { return () => { listeningState.handlers.splice( listeningState.handlers.indexOf(handlersRef), - 1 + 1, ); if (!listeningState.handlers.length && listeningState.listener) { diff --git a/apps/sim-core/packages/core/src/hooks/useLocalStorage/useLocalStorage.ts b/apps/sim-core/packages/core/src/hooks/useLocalStorage/useLocalStorage.ts index e230de5..eded881 100644 --- a/apps/sim-core/packages/core/src/hooks/useLocalStorage/useLocalStorage.ts +++ b/apps/sim-core/packages/core/src/hooks/useLocalStorage/useLocalStorage.ts @@ -22,7 +22,7 @@ import { getItem, setItem } from "./utils"; */ export function useLocalStorage( key: string, - initialValue: any + initialValue: any, ): [T, Dispatch>] { const [value, setValue] = useState(() => (getItem(key) ?? initialValue) as T); @@ -39,5 +39,5 @@ export function useLocalStorage( setItem(key, value); }, [value]); - return [value as T, setValue]; + return [value, setValue]; } diff --git a/apps/sim-core/packages/core/src/hooks/useLocalStorage/utils.ts b/apps/sim-core/packages/core/src/hooks/useLocalStorage/utils.ts index f84940b..ebbb545 100644 --- a/apps/sim-core/packages/core/src/hooks/useLocalStorage/utils.ts +++ b/apps/sim-core/packages/core/src/hooks/useLocalStorage/utils.ts @@ -2,7 +2,9 @@ let defaultStorage: Storage | null = null; try { defaultStorage = localStorage; -} catch {} +} catch { + // Some browsers will disable localStorage. +} const safeGetItem = (key: string, storage = defaultStorage) => { try { @@ -14,7 +16,7 @@ const safeGetItem = (key: string, storage = defaultStorage) => { export function getItem( key: string, - storage = defaultStorage + storage = defaultStorage, ): T | null { const value = safeGetItem(key, storage); @@ -34,17 +36,23 @@ export function getItem( export function setItem(key: string, value: any, storage = defaultStorage) { try { storage?.setItem(key, JSON.stringify(value)); - } catch {} + } catch { + // This catch is tech debt -- unclear why it exists. + } } export function removeItem(key: string, storage = defaultStorage) { try { storage?.removeItem(key); - } catch {} + } catch { + // This catch is tech debt -- unclear why it exists. + } } export function clear(storage = defaultStorage) { try { storage?.clear(); - } catch {} + } catch { + // This catch is tech debt -- unclear why it exists. + } } diff --git a/apps/sim-core/packages/core/src/hooks/useOnClickOutside.ts b/apps/sim-core/packages/core/src/hooks/useOnClickOutside.ts index 3039e73..ad40f30 100644 --- a/apps/sim-core/packages/core/src/hooks/useOnClickOutside.ts +++ b/apps/sim-core/packages/core/src/hooks/useOnClickOutside.ts @@ -7,7 +7,7 @@ type ClickOutsideEvent = MouseEvent | TouchEvent; */ export const useOnClickOutside = ( ref: RefObject, - handler: (event: ClickOutsideEvent) => void + handler: (event: ClickOutsideEvent) => void, ) => { const handlerRef = useRef(handler); diff --git a/apps/sim-core/packages/core/src/hooks/useParameterisedUi.ts b/apps/sim-core/packages/core/src/hooks/useParameterisedUi.ts index 43ff0e3..d3b499c 100644 --- a/apps/sim-core/packages/core/src/hooks/useParameterisedUi.ts +++ b/apps/sim-core/packages/core/src/hooks/useParameterisedUi.ts @@ -15,7 +15,7 @@ export const getUiQueryParams = () => { } = getSafeQueryParams(); return { - view: view === "plots" ? TabKind.Analysis : (view as string), + view: view === "plots" ? TabKind.Analysis : view, editor: editor !== "false", activity: activity !== "false", viewer: viewer !== "false", @@ -27,7 +27,7 @@ export const useParameterisedUi = () => { // We don't want these to respond to changes const { view, editor, activity, tabs, viewer } = useMemo( getUiQueryParams, - [] + [], ); const dispatch = useDispatch(); @@ -39,7 +39,7 @@ export const useParameterisedUi = () => { activity, tabs, viewer, - }) + }), ); }, [activity, dispatch, editor, tabs, view, viewer]); }; diff --git a/apps/sim-core/packages/core/src/hooks/usePromise.ts b/apps/sim-core/packages/core/src/hooks/usePromise.ts index 066c435..211c1fd 100644 --- a/apps/sim-core/packages/core/src/hooks/usePromise.ts +++ b/apps/sim-core/packages/core/src/hooks/usePromise.ts @@ -2,7 +2,7 @@ import { useState, useEffect, useRef } from "react"; export function usePromise( getPromise: () => Promise, - shouldFetch: boolean = true + shouldFetch = true, ) { const [value, setValue] = useState(null); const [error, setError] = useState(null); diff --git a/apps/sim-core/packages/core/src/hooks/useRefState.ts b/apps/sim-core/packages/core/src/hooks/useRefState.ts index 293568c..dd05c1a 100644 --- a/apps/sim-core/packages/core/src/hooks/useRefState.ts +++ b/apps/sim-core/packages/core/src/hooks/useRefState.ts @@ -9,7 +9,7 @@ import { Dispatch, useLayoutEffect, useRef, useState } from "react"; * @todo address these restrictions */ export function useRefState( - initialState: S | (() => S) + initialState: S | (() => S), ): [S, Dispatch, { readonly current: S }] { const [state, setState] = useState(initialState); const ref = useRef(state); diff --git a/apps/sim-core/packages/core/src/hooks/useRemSize/useRemSize.tsx b/apps/sim-core/packages/core/src/hooks/useRemSize/useRemSize.tsx index 0be952c..e56e119 100644 --- a/apps/sim-core/packages/core/src/hooks/useRemSize/useRemSize.tsx +++ b/apps/sim-core/packages/core/src/hooks/useRemSize/useRemSize.tsx @@ -8,7 +8,7 @@ export const useRemSize = () => { const setObserver = useResizeObserver(() => { setRemSize( - parseFloat(window.getComputedStyle(document.documentElement).fontSize) + parseFloat(window.getComputedStyle(document.documentElement).fontSize), ); }); @@ -26,7 +26,7 @@ export const useRemSize = () => { > rem
      , - document.body + document.body, ); return [remSize, portal]; diff --git a/apps/sim-core/packages/core/src/hooks/useResizeObserver/types.ts b/apps/sim-core/packages/core/src/hooks/useResizeObserver/types.ts index 0f07d01..8efa3f1 100644 --- a/apps/sim-core/packages/core/src/hooks/useResizeObserver/types.ts +++ b/apps/sim-core/packages/core/src/hooks/useResizeObserver/types.ts @@ -30,7 +30,7 @@ declare class ResizeObserverEntry { } declare type ResizeObserverCallback = ( entries: ResizeObserverEntry[], - observer: ResizeObserver + observer: ResizeObserver, ) => void; declare class ResizeObserver { constructor(callback: ResizeObserverCallback); diff --git a/apps/sim-core/packages/core/src/hooks/useResizeObserver/useResizeObserver.ts b/apps/sim-core/packages/core/src/hooks/useResizeObserver/useResizeObserver.ts index ea26a32..ebccaa2 100644 --- a/apps/sim-core/packages/core/src/hooks/useResizeObserver/useResizeObserver.ts +++ b/apps/sim-core/packages/core/src/hooks/useResizeObserver/useResizeObserver.ts @@ -6,18 +6,18 @@ import type { ResizeObserver } from "./types"; type RefArgType = NodeType | null; // @todo Provide position -export type UseResizeObserverEntry = { +export interface UseResizeObserverEntry { width: number; height: number; target: NodeType; -}; +} export type UseResizeObserverCallback = ( - entry: UseResizeObserverEntry + entry: UseResizeObserverEntry, ) => void; const toEntry = ( - entry: ResizeObserverEntry + entry: ResizeObserverEntry, ): UseResizeObserverEntry => ({ width: entry.contentRect.width, height: entry.contentRect.height, @@ -25,7 +25,7 @@ const toEntry = ( }); const getEntry = ( - node: NodeType + node: NodeType, ): UseResizeObserverEntry => { const computedStyle = window.getComputedStyle(node); const paddingX = @@ -49,16 +49,16 @@ const getEntry = ( * abstraction does not allow observing multiple nodes. */ export const useOncePerFrameHandler = void>( - handler: T + handler: T, ): T => { - const timeoutRef = useRef | null>(null); + const timeoutRef = useRef(null); return ((...args: any[]) => { if (timeoutRef.current) { - clearImmediate(timeoutRef.current); + clearTimeout(timeoutRef.current); } - timeoutRef.current = setImmediate(() => { + timeoutRef.current = setTimeout(() => { timeoutRef.current = null; handler(...args); }); @@ -66,13 +66,13 @@ export const useOncePerFrameHandler = void>( }; const useObserverRef = ( - handlerRef: MutableRefObject> + handlerRef: MutableRefObject>, ): MutableRefObject => { const observerRef = useRef(); if (!observerRef.current) { - observerRef.current = new window.ResizeObserver(([entry]) => - handlerRef.current?.(toEntry(entry)) + observerRef.current = new window.ResizeObserver( + ([entry]) => handlerRef.current?.(toEntry(entry)), ) as any; } return observerRef as any; @@ -92,14 +92,14 @@ export function useResizeObserver( onObserve?: | (( newNode: NodeType, - handler: UseResizeObserverCallback + handler: UseResizeObserverCallback, ) => void) | null; onUnobserve?: ( removedNode: NodeType, - handler: UseResizeObserverCallback + handler: UseResizeObserverCallback, ) => void; - } + }, ) { const handlerRef = useRef(handler); handlerRef.current = handler; @@ -125,7 +125,7 @@ export function useResizeObserver( const previousNode = previousNodeRef.current; previousNodeRef.current = node; - const observer = observerRef.current!; + const observer = observerRef.current; if (previousNode) { observer.unobserve(previousNode); @@ -144,7 +144,7 @@ export function useResizeObserver( } } }, - [observerRef] + [observerRef], ); useEffect(() => { diff --git a/apps/sim-core/packages/core/src/hooks/useSafeOnClose.ts b/apps/sim-core/packages/core/src/hooks/useSafeOnClose.ts index ab12a69..3163b0f 100644 --- a/apps/sim-core/packages/core/src/hooks/useSafeOnClose.ts +++ b/apps/sim-core/packages/core/src/hooks/useSafeOnClose.ts @@ -1,7 +1,7 @@ export const useSafeOnClose = ( isSafe: boolean, canClose: boolean, - onClose: VoidFunction + onClose: VoidFunction, ) => { return () => { if (canClose) { diff --git a/apps/sim-core/packages/core/src/hooks/useSaveOrFork.ts b/apps/sim-core/packages/core/src/hooks/useSaveOrFork.ts index 0e8d110..cf9cf7a 100644 --- a/apps/sim-core/packages/core/src/hooks/useSaveOrFork.ts +++ b/apps/sim-core/packages/core/src/hooks/useSaveOrFork.ts @@ -17,7 +17,7 @@ export const useSaveOrFork = () => { Scope.fork, Scope.forkIfSignedIn, Scope.save, - Scope.saveIfSignedIn + Scope.saveIfSignedIn, ); const forkUrl = useSelector(selectForkCurrentProjectUrl); diff --git a/apps/sim-core/packages/core/src/hooks/useScrollState.ts b/apps/sim-core/packages/core/src/hooks/useScrollState.ts index f2480fd..4a6caac 100644 --- a/apps/sim-core/packages/core/src/hooks/useScrollState.ts +++ b/apps/sim-core/packages/core/src/hooks/useScrollState.ts @@ -100,7 +100,7 @@ export const useScrollState = (mode: Mode = "vertical") => { newRef.addEventListener("scroll", handler); } }, - [handler, setResizeObserverRef] + [handler, setResizeObserverRef], ); return [setRef, contentRemaining, scrollable] as const; diff --git a/apps/sim-core/packages/core/src/hooks/useSyncAnimations.ts b/apps/sim-core/packages/core/src/hooks/useSyncAnimations.ts index feb23e7..7e6b346 100644 --- a/apps/sim-core/packages/core/src/hooks/useSyncAnimations.ts +++ b/apps/sim-core/packages/core/src/hooks/useSyncAnimations.ts @@ -15,7 +15,7 @@ const MAX_RETRY = 5; */ export let useSyncAnimations = ( ref: RefObject, - className: string + className: string, ) => { useLayoutEffect(() => { const node = ref.current; @@ -54,7 +54,7 @@ export let useSyncAnimations = ( node.addEventListener("animationstart", handler); } else if (count < MAX_RETRY) { console.warn( - `useSyncAnimations: Attempt #${count + 1} failed, retrying` + `useSyncAnimations: Attempt #${count + 1} failed, retrying`, ); const request = requestAnimationFrame(() => { attempt(count + 1, signal); @@ -65,7 +65,7 @@ export let useSyncAnimations = ( }); } else { console.error( - "useSyncAnimations: hit max retry on animation syncing, giving up" + "useSyncAnimations: hit max retry on animation syncing, giving up", ); } return; @@ -74,10 +74,10 @@ export let useSyncAnimations = ( totalAnimations.push([node, nodeAnimations[0]]); const spinners = Array.from( - document.querySelectorAll(className) + document.querySelectorAll(className), ); const controlSpinner = spinners.find( - (spinner) => spinner !== node && syncedNodes.has(spinner) + (spinner) => spinner !== node && syncedNodes.has(spinner), ); if (controlSpinner) { @@ -88,10 +88,10 @@ export let useSyncAnimations = ( } const nodeAnimation = copyAnimations.find( - ([spinner]) => spinner === node + ([spinner]) => spinner === node, )![1]; const controlAnimation = copyAnimations.find( - ([spinner]) => spinner === controlSpinner + ([spinner]) => spinner === controlSpinner, )![1]; /** @@ -119,7 +119,9 @@ export let useSyncAnimations = ( if (IS_DEV) { requestAnimationFrame(function fourth() { const set = new Set( - totalAnimations.map((animation) => animation[1].currentTime) + totalAnimations.map( + (animation) => animation[1].currentTime, + ), ); if (set.size > 1) { console.warn("Syncing animations failed", Array.from(set)); @@ -141,7 +143,7 @@ export let useSyncAnimations = ( syncedNodes.delete(node); totalAnimations.splice( totalAnimations.findIndex((anim) => anim[0] === node), - 1 + 1, ); }; } @@ -149,14 +151,14 @@ export let useSyncAnimations = ( }; if ( - !Element.prototype.hasOwnProperty("getAnimations") || + !Object.prototype.hasOwnProperty.call(Element, "getAnimations") || typeof Animation === "undefined" || - !Animation.prototype.hasOwnProperty("play") || - !Animation.prototype.hasOwnProperty("currentTime") || - !Animation.prototype.hasOwnProperty("pause") + !Object.prototype.hasOwnProperty.call(Animation, "play") || + !Object.prototype.hasOwnProperty.call(Animation, "currentTime") || + !Object.prototype.hasOwnProperty.call(Animation, "pause") ) { console.warn( - "useSyncAnimations: unsupported browser – disabling animation syncing" + "useSyncAnimations: unsupported browser – disabling animation syncing", ); useSyncAnimations = () => {}; diff --git a/apps/sim-core/packages/core/src/index.html b/apps/sim-core/packages/core/src/index.html index cfe5eaf..977c946 100644 --- a/apps/sim-core/packages/core/src/index.html +++ b/apps/sim-core/packages/core/src/index.html @@ -25,15 +25,17 @@ /> - + - - + +
      + + diff --git a/apps/sim-core/packages/core/src/index.tsx b/apps/sim-core/packages/core/src/index.tsx index 6d41997..e8c5eae 100644 --- a/apps/sim-core/packages/core/src/index.tsx +++ b/apps/sim-core/packages/core/src/index.tsx @@ -3,7 +3,7 @@ import { render } from "react-dom"; import { App } from "./components/App"; import { HashRouter } from "./components/HashRouter/HashRouter"; -import { IS_LOCAL, IS_STAGING } from "./util/api"; +import { IS_STAGING } from "./util/api"; import { LocalStorageKey } from "./hooks/useLocalStorage"; import { boot } from "./boot"; import { @@ -14,35 +14,24 @@ import { store } from "./features/store"; import "./styles.css"; -if (IS_LOCAL) { - const whyDidYouRender = require("@welldone-software/why-did-you-render"); - whyDidYouRender(React, { - collapseGroups: true, - }); -} - if (IS_STAGING) { const hashVersion = getBuildStampFromUrl(); const storedVersion = localStorage.getItem(LocalStorageKey.CachedVersion); - if (hashVersion === WEBPACK_BUILD_STAMP) { - localStorage.setItem(LocalStorageKey.CachedVersion, WEBPACK_BUILD_STAMP); - } else if ( - storedVersion && - !(hashVersion && storedVersion === WEBPACK_BUILD_STAMP) - ) { + if (hashVersion === BUILD_STAMP) { + localStorage.setItem(LocalStorageKey.CachedVersion, BUILD_STAMP); + } else if (storedVersion && !(hashVersion && storedVersion === BUILD_STAMP)) { window.location.href = getUrlForCurrentRouteWithBuildStamp(storedVersion); } } // Report our version number on startup: -console.log("HASH Core Version:", WEBPACK_BUILD_STAMP); +console.log("HASH Core Version:", BUILD_STAMP); -boot(true).then(() => { - render( - - - , - document.getElementById("root") - ); -}); +await boot(true); +render( + + + , + document.getElementById("root"), +); diff --git a/apps/sim-core/packages/core/src/routes.ts b/apps/sim-core/packages/core/src/routes.ts index 0a8492e..6384575 100644 --- a/apps/sim-core/packages/core/src/routes.ts +++ b/apps/sim-core/packages/core/src/routes.ts @@ -11,7 +11,8 @@ export const slugify = (value: string) => remove: /[^\w-\s]/g, }); -const HASH_BUILD_STAMP_RE = /hash-(?:(?:prod)|(?:dev))-[0-9]{4}-[0-9]{2}-[0-9]{2}-T[0-9]{4}_[0-9]{5}(-pr-[0-9]+)?/; +const HASH_BUILD_STAMP_RE = + /hash-(?:(?:prod)|(?:dev))-[0-9]{4}-[0-9]{2}-[0-9]{2}-T[0-9]{4}_[0-9]{5}(-pr-[0-9]+)?/; export const getBuildStampFromUrl = () => HASH_BUILD_STAMP_RE.exec(location.pathname)?.[0]; @@ -28,7 +29,7 @@ export const getRouteFromQuery = () => { export const getUrlForRouteWithBuildStamp = ( route: string, - buildStamp = WEBPACK_BUILD_STAMP + buildStamp = BUILD_STAMP, ) => `${origin}/${buildStamp}/index.html${ route ? `?route=${encodeURIComponent(route)}` : "" @@ -40,9 +41,8 @@ export const getCurrentRoute = () => { return href.slice(origin.length).replace(/^\//, ""); }; -export const getUrlForCurrentRouteWithBuildStamp = ( - buildStamp = WEBPACK_BUILD_STAMP -) => getUrlForRouteWithBuildStamp(getCurrentRoute(), buildStamp); +export const getUrlForCurrentRouteWithBuildStamp = (buildStamp = BUILD_STAMP) => + getUrlForRouteWithBuildStamp(getCurrentRoute(), buildStamp); // @todo should this take into account access codes? export const urlFromProject = (project: LinkableProject): string => { @@ -66,6 +66,6 @@ export const createMergeRequestUrl = (project: SimulationProject) => ? urljoin( SITE_URL, project.forkOf.pathWithNamespace, - `merge-requests/new?compare=${urlFromProject(project)}` + `merge-requests/new?compare=${urlFromProject(project)}`, ) : ""; diff --git a/apps/sim-core/packages/core/src/setupTests.ts b/apps/sim-core/packages/core/src/setupTests.ts index 5ae09d8..6e706a0 100644 --- a/apps/sim-core/packages/core/src/setupTests.ts +++ b/apps/sim-core/packages/core/src/setupTests.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ + // required to run 'monaco-editor' in the 'jest-dom' environments // @see https://medium.com/hired-engineering/setting-up-monaco-with-jest-e1e4c963ac import "jest-canvas-mock"; @@ -21,8 +23,8 @@ beforeEach(() => { mock.mockReset(); mock.mockImplementation((...args) => mapFileId(...args)); }); - -global.WEBPACK_BUILD_STAMP = "JEST"; +// @ts-expect-error scoping issues +global.BUILD_STAMP = "JEST"; window.ResizeObserver = class ResizeObserver { observe() {} diff --git a/apps/sim-core/packages/core/src/shared/scopes.ts b/apps/sim-core/packages/core/src/shared/scopes.ts index 7330829..a04507e 100644 --- a/apps/sim-core/packages/core/src/shared/scopes.ts +++ b/apps/sim-core/packages/core/src/shared/scopes.ts @@ -7,7 +7,8 @@ export const ProjectAccessCodeAccessTypes = [ "ReadEmbed", ] as const; -export type ProjectAccessCodeAccessType = typeof ProjectAccessCodeAccessTypes[number]; +export type ProjectAccessCodeAccessType = + (typeof ProjectAccessCodeAccessTypes)[number]; export enum ProjectAccessScope { Read = "Read", diff --git a/apps/sim-core/packages/core/src/styles.css b/apps/sim-core/packages/core/src/styles.css index bca0872..9e5ad8b 100644 --- a/apps/sim-core/packages/core/src/styles.css +++ b/apps/sim-core/packages/core/src/styles.css @@ -1,7 +1,7 @@ /* See theme.js for HASH theme colors. */ @import "./styles/fonts.css"; @import "./styles/splitter.css"; -@import "~react-tabs/style/react-tabs.css"; +@import "react-tabs/style/react-tabs.css"; .splitter-layout .layout-pane.layout-pane-primary { /** @@ -184,6 +184,7 @@ button.text-only-button { .right-margin { margin-right: 1em; } + .clear-fix { clear: both; } diff --git a/apps/sim-core/packages/core/src/styles/fonts/apercu-mono.css b/apps/sim-core/packages/core/src/styles/fonts/apercu-mono.css index 4d8c8b4..0988fef 100644 --- a/apps/sim-core/packages/core/src/styles/fonts/apercu-mono.css +++ b/apps/sim-core/packages/core/src/styles/fonts/apercu-mono.css @@ -1,7 +1,8 @@ @font-face { font-family: "Apercu Mono"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-light-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-light-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-light-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-light-pro.woff") format("woff"), @@ -16,7 +17,8 @@ @font-face { font-family: "Apercu Mono"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-regular-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-regular-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-regular-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-regular-pro.woff") format("woff"), @@ -31,7 +33,8 @@ @font-face { font-family: "Apercu Mono"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-medium-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-medium-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-medium-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-medium-pro.woff") format("woff"), @@ -46,7 +49,8 @@ @font-face { font-family: "Apercu Mono"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-bold-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-bold-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-bold-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-mono-bold-pro.woff") format("woff"), diff --git a/apps/sim-core/packages/core/src/styles/fonts/apercu.css b/apps/sim-core/packages/core/src/styles/fonts/apercu.css index e5dc953..e2f2c80 100644 --- a/apps/sim-core/packages/core/src/styles/fonts/apercu.css +++ b/apps/sim-core/packages/core/src/styles/fonts/apercu.css @@ -1,7 +1,8 @@ @font-face { font-family: "Apercu"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-light-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-light-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-light-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-light-pro.woff") format("woff"), @@ -16,7 +17,8 @@ @font-face { font-family: "Apercu"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-light-italic-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-light-italic-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-light-italic-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-light-italic-pro.woff") format("woff"), @@ -31,7 +33,8 @@ @font-face { font-family: "Apercu"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-regular-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-regular-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-regular-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-regular-pro.woff") format("woff"), @@ -46,7 +49,8 @@ @font-face { font-family: "Apercu"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-regular-italic-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-regular-italic-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-regular-italic-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-regular-italic-pro.woff") format("woff"), @@ -61,7 +65,8 @@ @font-face { font-family: "Apercu"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-medium-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-medium-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-medium-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-medium-pro.woff") format("woff"), @@ -76,7 +81,8 @@ @font-face { font-family: "Apercu"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-medium-italic-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-medium-italic-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-medium-italic-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-medium-italic-pro.woff") format("woff"), @@ -91,7 +97,8 @@ @font-face { font-family: "Apercu"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-bold-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-bold-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-bold-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-bold-pro.woff") format("woff"), @@ -106,7 +113,8 @@ @font-face { font-family: "Apercu"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-bold-italic-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-bold-italic-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-bold-italic-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-bold-italic-pro.woff") format("woff"), @@ -121,7 +129,8 @@ @font-face { font-family: "Apercu"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-black-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-black-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-black-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-black-pro.woff") format("woff"), @@ -136,7 +145,8 @@ @font-face { font-family: "Apercu"; src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-black-italic-pro.eot"); - src: url("https://cdn-us1.hash.ai/assets/fonts/apercu-black-italic-pro.eot?#iefix") + src: + url("https://cdn-us1.hash.ai/assets/fonts/apercu-black-italic-pro.eot?#iefix") format("embedded-opentype"), url("https://cdn-us1.hash.ai/assets/fonts/apercu-black-italic-pro.woff") format("woff"), diff --git a/apps/sim-core/packages/core/src/styles/fonts/inter.css b/apps/sim-core/packages/core/src/styles/fonts/inter.css index b25890a..43ae236 100644 --- a/apps/sim-core/packages/core/src/styles/fonts/inter.css +++ b/apps/sim-core/packages/core/src/styles/fonts/inter.css @@ -3,7 +3,8 @@ font-style: normal; font-weight: 100; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-Thin-BETA.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-Thin-BETA.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-Thin-BETA.woff?v=3.11") format("woff"); @@ -13,7 +14,8 @@ font-style: italic; font-weight: 100; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-ThinItalic-BETA.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-ThinItalic-BETA.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-ThinItalic-BETA.woff?v=3.11") format("woff"); @@ -24,7 +26,8 @@ font-style: normal; font-weight: 200; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraLight-BETA.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraLight-BETA.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraLight-BETA.woff?v=3.11") format("woff"); @@ -34,7 +37,8 @@ font-style: italic; font-weight: 200; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraLightItalic-BETA.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraLightItalic-BETA.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraLightItalic-BETA.woff?v=3.11") format("woff"); @@ -45,7 +49,8 @@ font-style: normal; font-weight: 300; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-Light-BETA.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-Light-BETA.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-Light-BETA.woff?v=3.11") format("woff"); @@ -55,7 +60,8 @@ font-style: italic; font-weight: 300; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-LightItalic-BETA.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-LightItalic-BETA.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-LightItalic-BETA.woff?v=3.11") format("woff"); @@ -66,7 +72,8 @@ font-style: normal; font-weight: 400; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-Regular.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-Regular.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-Regular.woff?v=3.11") format("woff"); @@ -76,7 +83,8 @@ font-style: italic; font-weight: 400; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-Italic.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-Italic.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-Italic.woff?v=3.11") format("woff"); @@ -87,7 +95,8 @@ font-style: normal; font-weight: 500; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-Medium.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-Medium.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-Medium.woff?v=3.11") format("woff"); @@ -97,7 +106,8 @@ font-style: italic; font-weight: 500; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-MediumItalic.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-MediumItalic.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-MediumItalic.woff?v=3.11") format("woff"); @@ -108,7 +118,8 @@ font-style: normal; font-weight: 600; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-SemiBold.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-SemiBold.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-SemiBold.woff?v=3.11") format("woff"); @@ -118,7 +129,8 @@ font-style: italic; font-weight: 600; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-SemiBoldItalic.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-SemiBoldItalic.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-SemiBoldItalic.woff?v=3.11") format("woff"); @@ -129,7 +141,8 @@ font-style: normal; font-weight: 700; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-Bold.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-Bold.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-Bold.woff?v=3.11") format("woff"); @@ -139,7 +152,8 @@ font-style: italic; font-weight: 700; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-BoldItalic.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-BoldItalic.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-BoldItalic.woff?v=3.11") format("woff"); @@ -150,7 +164,8 @@ font-style: normal; font-weight: 800; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraBold.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraBold.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraBold.woff?v=3.11") format("woff"); @@ -160,7 +175,8 @@ font-style: italic; font-weight: 800; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraBoldItalic.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraBoldItalic.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-ExtraBoldItalic.woff?v=3.11") format("woff"); @@ -171,7 +187,8 @@ font-style: normal; font-weight: 900; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-Black.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-Black.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-Black.woff?v=3.11") format("woff"); @@ -181,7 +198,8 @@ font-style: italic; font-weight: 900; font-display: swap; - src: url("https://cdn-us1.hash.ai/assets/fonts/Inter-BlackItalic.woff2?v=3.11") + src: + url("https://cdn-us1.hash.ai/assets/fonts/Inter-BlackItalic.woff2?v=3.11") format("woff2"), url("https://cdn-us1.hash.ai/assets/fonts/Inter-BlackItalic.woff?v=3.11") format("woff"); diff --git a/apps/sim-core/packages/core/src/util/api/graphql-schema.json b/apps/sim-core/packages/core/src/util/api/graphql-schema.json deleted file mode 100644 index a66247a..0000000 --- a/apps/sim-core/packages/core/src/util/api/graphql-schema.json +++ /dev/null @@ -1,21863 +0,0 @@ -{ - "__schema": { - "queryType": { - "name": "Query" - }, - "mutationType": { - "name": "Mutation" - }, - "subscriptionType": null, - "types": [ - { - "kind": "OBJECT", - "name": "Query", - "description": "The queries available in this schema", - "fields": [ - { - "name": "cacheFlat", - "description": "A flat list of active cache keys", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "cacheStructured", - "description": "Active cache keys structured by namespace, resource, and query", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "coreVersions", - "description": "Retrieve a list of application build URLs", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "scrapedDatasets", - "description": "Query for scraped datasets (admin only)", - "args": [ - { - "name": "perPage", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "10" - }, - { - "name": "page", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "1" - }, - { - "name": "sort", - "description": null, - "type": { - "kind": "ENUM", - "name": "ScrapedSortOption", - "ofType": null - }, - "defaultValue": "dateModified" - }, - { - "name": "filters", - "description": null, - "type": { - "kind": "INPUT_OBJECT", - "name": "ScrapedDatasetFilters", - "ofType": null - }, - "defaultValue": "{published: exclude, ignored: exclude, updated: include, fileFormat: csv, zip: include}" - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ScrapedDatasetResults", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "datasetFilterValues", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "DatasetFilterValues", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "experimentRun", - "description": "Retrieve an experiment run by its id", - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ExperimentRun", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "simulationRun", - "description": "Retrieve a specific run by its id", - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "SimulationRun", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "experimentPlan", - "description": "Generate an experiment plan from a selected definition in an experiments.json object", - "args": [ - { - "name": "name", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "experimentsSrc", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ExperimentPlan", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "issue", - "description": "Retrieve a project issue", - "args": [ - { - "name": "projectPath", - "description": "The path of the project to raise the issue on, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "issueId", - "description": "The unique identifier of the issue", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Issue", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "keywords", - "description": "Return all keywords in use across the Index", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Keyword", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "licenses", - "description": "License which may be used to publish items to the Index under.\n\nIf no suitable license is listed, publishers are advised to select Copyright\n(All Rights Reserved) and then note their specific usage conditions in the\nlisting's descriptions.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "License", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mergeRequest", - "description": "Retrieve a project merge request", - "args": [ - { - "name": "projectPath", - "description": "The path of the project to raise the merge request on, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "mergeRequestId", - "description": "The unique identifier of the merge request", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "org", - "description": "Retrieve data on a specific organization by its ID or name. One of ID or name must be supplied", - "args": [ - { - "name": "id", - "description": "The ID of the organization", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The organization's name (case-insensitive, first partial match returned)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "shortname", - "description": "The organization's shortname (unique string identifier in HASH)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "orgs", - "description": "Retrieve data on all organizations, or those with names containing a specific string", - "args": [ - { - "name": "name", - "description": "Optional - search organizations by name (case-insensitive, all partial matches returned)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "polyModel", - "description": "Return a PolyModel by its slug", - "args": [ - { - "name": "slug", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PolyModel", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "polyModels", - "description": "Return all PolyModels available via the HASH API", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PolyModel", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "project", - "description": "Retrieve a project by its path", - "args": [ - { - "name": "projectPath", - "description": "The full path of the project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "ref", - "description": "Retrieve the project at a given tag, branch, or commit. Defaults to the\nlatest tag if it exists, or main if there are no releases.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "oldId", - "description": "Retrieve a project by its old database id, to service legacy URLs", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "oldType", - "description": "Whether the oldId belonged to an Index listing or a simulation", - "type": { - "kind": "ENUM", - "name": "OldProjectType", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "accessCode", - "description": "Access token to use if project is private.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "release", - "description": "Retrieve a release of a particular project", - "args": [ - { - "name": "projectPath", - "description": "The full path of the project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "tag", - "description": "The release tag/version to retrieve. Defaults to the latest release if none specified", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "files", - "description": "Specify only a subset of released files to retrieve. Otherwise, all files exported from the release are provided", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Release", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "specialProjects", - "description": "\"\nQuery for special types of projects", - "args": [ - { - "name": "type", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SpecialProjectType", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "searchProjects", - "description": "Search for projects matching the filters specified.", - "args": [ - { - "name": "query", - "description": "Text to search for in the project's description or keywords. Where this is\nprovided, results will be sorted by a relevance score which weights matches\nin keywords higher than in description.\n\nEnclose phrases in \"escaped quotes\" for exact phrase matches, and exclude\nresults containing specific words by -prefixing -them -with -a -minus.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "subjects", - "description": "Limit the results of a search to listings covering a specific subject or subjects.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "types", - "description": "The types of items being searched for", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SearchableTypeName", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "perPage", - "description": "The number of results to return (default 10).", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "10" - }, - { - "name": "page", - "description": "The page of results to return (default 1).", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "1" - }, - { - "name": "sort", - "description": "How the results should be sorted", - "type": { - "kind": "ENUM", - "name": "SortOption", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "language", - "description": "For behavior projects only, the programming language of the behavior(s)", - "type": { - "kind": "ENUM", - "name": "BehaviorLanguage", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "temporalCoverage", - "description": "For datasets only, the time period covered by the dataset(s)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "dataFrequency", - "description": "For datasets only, the frequency of data points within the dataset(s)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "spatialCoverage", - "description": "For datasets only, the geographical area covered by the dataset(s)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "releasedOnly", - "description": "Only return projects with at least one release", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectSearchResults", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "roles", - "description": "Return all site-wide roles in the system", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Role", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "scrapers", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "GitHubScraper", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "source", - "description": null, - "args": [], - "type": { - "kind": "OBJECT", - "name": "Source", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subjects", - "description": "Retrieve all available subject types in the system", - "args": [ - { - "name": "onlyPopulated", - "description": "Only return subjects which have Index listings associated with them, for\neither all listings, or a given type. Omit to return all categories,\nincluding ones which are not assigned to any listing.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectTypeFilter", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subject", - "description": "Retrieve a subject.", - "args": [ - { - "name": "name", - "description": "The subject's name", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": "If omitted, 'schema' is used", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "version", - "description": "If omitted, the latest is returned", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "properties", - "description": "Retrieve all available properties in the system", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Property", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "property", - "description": "Retrieve a property", - "args": [ - { - "name": "name", - "description": "The property's name", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": "If omitted, 'schema' is used", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "version", - "description": "If omitted, the latest is returned", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Property", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "me", - "description": "Information on the user making the request", - "args": [], - "type": { - "kind": "OBJECT", - "name": "User", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "users", - "description": "Retrieve all users by page, with optional filtering", - "args": [ - { - "name": "page", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "1" - }, - { - "name": "sort", - "description": null, - "type": { - "kind": "ENUM", - "name": "UserSortOption", - "ofType": null - }, - "defaultValue": "createdAt" - }, - { - "name": "sortDirection", - "description": null, - "type": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "search", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "filter", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "UsersResult", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "user", - "description": "Retrieve the details of a specific user by their ID, email address, or shortname", - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "email", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "shortname", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "User", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "userOrOrg", - "description": "Retrieve a user or organization by their shortname or id", - "args": [ - { - "name": "shortname", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "id", - "description": null, - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "UNION", - "name": "UserOrOrg", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "availableIntegrations", - "description": "Fetch available integrations, either for this user,\nor for this user that are also authorized for the given projectId.", - "args": [ - { - "name": "types", - "description": "A list of integration types to retrieve. Will retrieve all available integrations if no type specified.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SourceTypeName", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "hFlowOnly", - "description": "Filter integration types to those valid as hFlow sources only", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "namespaceId", - "description": "Limit the query to integrations belonging to this namespace.", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "projectId", - "description": "The project ID to query for authorizations for.\nIf not given, returns all integrations of these types that the user has access to.\nIf given, only returns integrations that the user has access to that are authorized for this project.", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Integration", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "integration", - "description": "Fetch full integration information -- _WILL_ include the secret of the credential itself if the user is allowed access.", - "args": [ - { - "name": "id", - "description": "The ID of the integration to retrieve.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "FullIntegration", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "integrations", - "description": "Internal-only endpoint for fetching integrations.", - "args": [ - { - "name": "ids", - "description": "The ID of the integration to retrieve.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "FullIntegration", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "resolveIntegrations", - "description": "Retrieves the set of integrations to be used for a given user and project.\nErrors out if the user has not set up integrations properly for the project.", - "args": [ - { - "name": "projectId", - "description": "The ID of the project to resolve integrations for.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ResolvedIntegration", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "String", - "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "JSONObject", - "description": "", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Int", - "description": "The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ScrapedSortOption", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "dateModified", - "description": "The date the dataset was last modified", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "datePublished", - "description": "The date the dataset was originally published", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "ScrapedDatasetFilters", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "query", - "description": "A text string to search", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "publisher", - "description": "The name of the organization as listed in the source", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "published", - "description": null, - "type": { - "kind": "ENUM", - "name": "FlagToggle", - "ofType": null - }, - "defaultValue": "exclude" - }, - { - "name": "ignored", - "description": null, - "type": { - "kind": "ENUM", - "name": "FlagToggle", - "ofType": null - }, - "defaultValue": "exclude" - }, - { - "name": "updated", - "description": null, - "type": { - "kind": "ENUM", - "name": "FlagToggle", - "ofType": null - }, - "defaultValue": "include" - }, - { - "name": "fileFormat", - "description": null, - "type": { - "kind": "ENUM", - "name": "FormatFilter", - "ofType": null - }, - "defaultValue": "csv" - }, - { - "name": "zip", - "description": null, - "type": { - "kind": "ENUM", - "name": "FlagToggle", - "ofType": null - }, - "defaultValue": "include" - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "FlagToggle", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "include", - "description": "Include results with the flag", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "exclude", - "description": "Exclude results with the flag", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "only", - "description": "Only show results with the flag", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "FormatFilter", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "any", - "description": "Show results with any files", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "none", - "description": "Show results with no files", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "accepted", - "description": "Only show results with an accepted file format", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "csv", - "description": "Only show results with a CSV file", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "json", - "description": "Only show results with a JSON file", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ScrapedDatasetResults", - "description": null, - "fields": [ - { - "name": "results", - "description": "The results for the query, limited to the requested page", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ScrapedDataset", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "perPage", - "description": "The number of results requested", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "page", - "description": "The page requested", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalCount", - "description": "The total number of datasets matching the query", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "publishers", - "description": "The publishers available for query", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PublisherCount", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "filters", - "description": "The filter settings for the query", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ScrapedDatasetFiltersUsed", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ScrapedDataset", - "description": null, - "fields": [ - { - "name": "source", - "description": "The source the dataset was scraped from", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sourceId", - "description": "The id used to identify the dataset in its original source", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sourceUrl", - "description": "The URL to view the dataset in its original source", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "revisionId", - "description": "The id of this specific revision of the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "published", - "description": "Whether or not the dataset has been published to the Index", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ignored", - "description": "Whether or not the dataset has been permanently ignored", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "actioned", - "description": "Whether or not a dataset has been actioned from the approval queue (i.e.\npublished, updated, temporarily ignored, or permanently ignored)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updated", - "description": "Whether a dataset has been updated since its publication on HASH", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "handled", - "description": "Whether a dataset has been handled/actioned from the queue", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "landingPage", - "description": "An exteral webpage for the dataset or dataset series", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "references", - "description": "Additional reference information for the dataset", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "version", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "language", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "datePublished", - "description": "Date published of the dataset itself, not the db entry (createdAt)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "dateModified", - "description": "Date the dataset itself was updated, not the db entry (createdAt)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateFreq", - "description": "How frequently the dataset is updated", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "keywords", - "description": "Keywords or tags associated with the dataset", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "keywordsInSource", - "description": "The keywords listed in the source", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "contactPoint", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "contactPointEmail", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "temporalCoverage", - "description": "The period of time the dataset covers", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "temporalFrequency", - "description": "The frequency interval of the datapoints within the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spatialCoverage", - "description": "The physical area covered by the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "rights", - "description": "Additional information about the rights held or offered on the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isPartOf", - "description": "The name of a collection or group the dataset belongs to", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "issn", - "description": "The International Standard Serial Number used to identify a serial publication", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "measurementTechnique", - "description": "The technique(s) used to measure the data", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "variableMeasured", - "description": "The specific variable the data measures", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "includedInDataCatalog", - "description": "The name of the data catalog the resource is included in, if any", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "category", - "description": "The HASH id(s) of the category the dataset has been published under", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "categoryInSource", - "description": "The category(s) listed in the source", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "publisher", - "description": "The HASH id of the organization the dataset has been published under", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "publisherInSource", - "description": "The publisher listed in the source (this will be the same as the organization if no other specific publisher was listed)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "organizationInSource", - "description": "The name of the organization responsible for the datase listed in the source", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "organizationLogoInSource", - "description": "A URL to the logo of the organization responsible for the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "license", - "description": "The HASH id of the license the dataset has been published under", - "args": [], - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "licenseInSource", - "description": "The license listed in the source", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "licenseUrlInSource", - "description": "A URL describing the license the dataset is made available under", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subjectInSource", - "description": "The subject listed in the source", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subject", - "description": "The HASH id of the subject or subjects of the dataset", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "resources", - "description": "Files associated with the dataset", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "DatasetResource", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The ID used for identifying a specific dataset", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "The title of the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "A friendly name for the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A description, instructions or notes on the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The url from which the dataset can be downloaded", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "The date/time the database record for the dataset was last updated", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The date/time the dataset was added to the database", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Boolean", - "description": "The `Boolean` scalar type represents `true` or `false`.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Date", - "description": "", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "ID", - "description": "The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DatasetResource", - "description": "A resource or file associated with a dataset", - "fields": [ - { - "name": "id", - "description": "The id of the resource in its source", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "revisionId", - "description": "The revisionId of the dataset this resource was introduced in", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "format", - "description": "The format of the file available under url", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A description of the resource", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "describedBy", - "description": "A URL to a file describing the resource", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "describedByType", - "description": "The type of file listed under describedBy", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the resource", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "URL to the resource itself, or its landing page", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "preview", - "description": "A preview of the dataset's first 30 rows (CSV only)", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "size", - "description": "The size of the file", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PublisherCount", - "description": null, - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "count", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ScrapedDatasetFiltersUsed", - "description": null, - "fields": [ - { - "name": "query", - "description": "A text string to search", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "publisher", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "published", - "description": null, - "args": [], - "type": { - "kind": "ENUM", - "name": "FlagToggle", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "handled", - "description": null, - "args": [], - "type": { - "kind": "ENUM", - "name": "FlagToggle", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ignored", - "description": null, - "args": [], - "type": { - "kind": "ENUM", - "name": "FlagToggle", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updated", - "description": null, - "args": [], - "type": { - "kind": "ENUM", - "name": "FlagToggle", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fileFormat", - "description": null, - "args": [], - "type": { - "kind": "ENUM", - "name": "FormatFilter", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DatasetFilterValues", - "description": null, - "fields": [ - { - "name": "temporalCoverage", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "dataFrequency", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spatialCoverage", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ExperimentRun", - "description": null, - "fields": [ - { - "name": "id", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "A friendly name for the ExperimentRun", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "project", - "description": "The project the experiment is related to.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projectPath", - "description": "The full path to the project this experiment is related to", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "packageName", - "description": "The name of the experiment package to run", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ExperimentPackageName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "packageData", - "description": "Contextual data needed by the experiment package, if any", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ExperimentPackageData", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "simPackages", - "description": "Information on which simulation packages to run in this experiment", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SimulationPackageData", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "commit", - "description": "The specific commit this experiment was started from", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "simulationRuns", - "description": "The individual runs within the experiment.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SimulationRun", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "experimentSrc", - "description": "The contents of experiment.json used to generate the experiment.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "simulationFiles", - "description": "The source files needed to run the simulation, including dependencies", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectFile", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "changedProperties", - "description": "[DEPRECATED - use packageData.changedProperties] All the different property\nconfigurations used to generate the individual runs", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sharedBehaviors", - "description": "[DEPRECATED - see simulationFiles instead] If the simulation depends on any\nshared behaviors, they will be provided here in createExperimentRun returns", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectFile", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sharedDatasets", - "description": "[DEPRECATED - see simulationFiles instead] If the simulation depends on any\nshared datasets, they will be provided here in createExperimentRun returns", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectFile", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "When the ExperimentRun was initiated.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "When the ExperimentRun was last updated (e.g. with compute usage).", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "usageFinalisedAt", - "description": "When the experiment's cloud compute usage was finalised (usually when the experiment ended)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "user", - "description": "The user that initiated the experiment", - "args": [], - "type": { - "kind": "OBJECT", - "name": "User", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "computeUsage", - "description": "How much cloud compute time the experiment used (in seconds)", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Project", - "description": "A collection of files that might be a simulation, dataset(s), or behavior(s)", - "fields": [ - { - "name": "_id", - "description": "The MongoDB ObjectId of the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "The ID of the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "A friendly name for the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "path", - "description": "The slug of the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "namespace", - "description": "The namespace the resource belongs to, which represents either a user or an organization", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "owner", - "description": "The user or organisation which owns the resource", - "args": [], - "type": { - "kind": "UNION", - "name": "UserOrOrg", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ownerType", - "description": "Whether the owner is a user or an org", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "OwnerTypeName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pathWithNamespace", - "description": "The full path of the resource, including its namespace and path/name, in the format @namespace/path", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "visibility", - "description": "The level of access restriction on the resource", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "VisibilityLevel", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "trusted", - "description": "A status given to some projects", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "size", - "description": "The total size of the project, in bytes", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A short description of the project", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "readme", - "description": "A mirror of README.md from the project repository", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of data model the project relates to", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectTypeName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "archived", - "description": "Whether or not the project is archived (read-only and hidden from search results)", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "files", - "description": "The file contents of the project", - "args": [ - { - "name": "withPreview", - "description": "For dataset files - include a preview sample of rows as part of the contents\n(a URL to download the entire file is always provided)", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectFile", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "experiments", - "description": "Experiments run on the project by the user or fellow organisation members", - "args": [ - { - "name": "limit", - "description": "Limit the results to this many experiments", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "createdFrom", - "description": "Limit the results to only experiments created on or after this timestamp", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ExperimentRun", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "history", - "description": null, - "args": [ - { - "name": "createdBefore", - "description": "Limit the results to only experiments created on or before this timestamp", - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "pageToCurrent", - "description": "Ensure the request release of the project is included in results – paging automatically if necessary", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } - ], - "type": { - "kind": "OBJECT", - "name": "ProjectHistoryReturn", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ref", - "description": "The branch or tag at which this project was requested (if any)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "avatar", - "description": "A URL to an image or video representing the project", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "issues", - "description": "Issues raised against a project", - "args": [ - { - "name": "labels", - "description": "Filter issues by label", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "IssueLabel", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "state", - "description": "Filter issues by state", - "type": { - "kind": "ENUM", - "name": "IssueState", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Issue", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "contributors", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ContributorInfo", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "issueCount", - "description": "The number of open issues on a project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mergeRequests", - "description": "Merge requests open against a project", - "args": [ - { - "name": "state", - "description": "Filter merge requests by state", - "type": { - "kind": "ENUM", - "name": "MergeRequestState", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mergeRequestCount", - "description": "The number of open merge requests on a project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "thumbnail", - "description": "Where the project avatar is a video, this is an URL to an image frame from the video to act as a thumbnail or fallback", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "image", - "description": "A URL to a wide-ratio (1.91:1) cover image to promote and illustrate projects", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "keywords", - "description": "Keywords / tags to help users locate the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "license", - "description": "The license the work is made available under", - "args": [], - "type": { - "kind": "OBJECT", - "name": "License", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subject", - "description": "The subject(s) of the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "languageSplit", - "description": "The percentage of behaviors in the project written in each programming\nlanguage (only available in Simulation or Behavior projects with releases -\ncalculation applies to the latest release)", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "LanguageSplit", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "languages", - "description": "For behavior releases only, the languages of the released behaviors", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "BehaviorLanguage", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "source", - "description": "The original source of the project (for dataset projects)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "landingPage", - "description": "An external webpage for the dataset or dataset series", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "temporalCoverage", - "description": "The period of time the project covers", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "dataFrequency", - "description": "The frequency interval of the datapoints within the project (for datasets)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spatialCoverage", - "description": "The physical area covered by the project", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "forkCount", - "description": "The number of times a project has been forked", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "starCount", - "description": "The number of times a project has been starred", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "forkOf", - "description": "What project, if any, this project is a fork of", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ForkOfProject", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "orgForkPaths", - "description": "The paths of forks of the project the requesting user organization has", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "userForkPaths", - "description": "The paths of forks of the project the requesting user has", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "userForkCount", - "description": "The number of forks of the project the requesting user has", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "dependencies", - "description": "The dependencies listed in a project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Release", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "dependents", - "description": "The number of simulations that depend on an item within the listing", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "relevance", - "description": "A weighted score of the listing's relevance to a search query", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "popularity", - "description": "A score assigned to the popularity of the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "latestRelease", - "description": "The latest release of the project (if any)", - "args": [], - "type": { - "kind": "OBJECT", - "name": "ReleaseBasic", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "releases", - "description": "All releases of a project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ReleaseBasic", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "downloadUrl", - "description": "A temporary URL from which the project can be downloaded as a zip file", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The date the project was originally created", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "The date the project was last updated", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "canUserEdit", - "description": "Whether or not the logged-in user can edit the project. To do so, one of the following must be true:\n\n1) The user is a site admin OR\n2) The project owner is the user OR\n3) The project owner is an organization to which the user belongs", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "canUserFork", - "description": "Whether or not the logged-in user can fork the project. Projects cannot be\nforked into the namespace they already exist in.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "UNION", - "name": "UserOrOrg", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": [ - { - "kind": "OBJECT", - "name": "User", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Org", - "ofType": null - } - ] - }, - { - "kind": "OBJECT", - "name": "User", - "description": "A registered user of the prototype HASH ecosystem", - "fields": [ - { - "name": "id", - "description": "The unique ID", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "givenName", - "description": "The user's given / first name", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "gitId", - "description": "The user's GitLab ID. ", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "additionalName", - "description": "Any additional name(s) the user has", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "familyName", - "description": "The user's family name / surname / last name", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fullName", - "description": "The user's given and family names combined, OR their given name if no family\nname is present, OR their email if no name at all is present", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shortname", - "description": "A unique string identifying the user in HASH", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "role", - "description": "The user's role", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Role", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "email", - "description": "The user's email address", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "telephone", - "description": "The user's telephone number", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "biography", - "description": "A brief description of the user's history / profile", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "location", - "description": "Where the user is geographically based", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "knowsLanguage", - "description": "The language(s) the user knows", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The user's website", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "image", - "description": "An image representing the user / their avatar", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lastLogin", - "description": "The start of the user's latest session on HASH", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "paymentMethods", - "description": "The user's registered payment methods", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PaymentMethod", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "computeUsageRemaining", - "description": "How many compute seconds the user has remaining this month", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "invoices", - "description": "The user's past invoices", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Invoice", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "upcomingInvoice", - "description": "Outstanding balance on a user's account for which an invoice has not been finalized", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Invoice", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "starredProjects", - "description": "List the paths of projects a user has starred", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "starredProjectsDetails", - "description": "Full details of projects a user has starred, sorted and paginated", - "args": [ - { - "name": "page", - "description": "The page to fetch. 10 projects are returned per page", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "1" - }, - { - "name": "sort", - "description": "How to sort the projects", - "type": { - "kind": "ENUM", - "name": "SortOption", - "ofType": null - }, - "defaultValue": "updatedAt" - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "UserOrOrgProjectResults", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "archived", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "memberOf", - "description": "Organisations the user belongs to, and their role in each", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OrgInfo", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projects", - "description": "Projects belonging to the namespace", - "args": [ - { - "name": "page", - "description": "The page to fetch. 10 projects are returned per page", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "1" - }, - { - "name": "sort", - "description": "How to sort the projects", - "type": { - "kind": "ENUM", - "name": "SortOption", - "ofType": null - }, - "defaultValue": "updatedAt" - }, - { - "name": "types", - "description": "Whether to filter projects by a particular type (e.g. simulation)", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectTypeName", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "UserOrOrgProjectResults", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projectCount", - "description": "The number of projects belonging to the namespace", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projectTypes", - "description": "The type of projects the namespace has available", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectTypeName", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "datasets", - "description": "Datasets which the user has write access to through ownership or sharing", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Dataset", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The date/time the user's record was created in the database", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "The date/time the users's record was last modified in the database", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "onboarded", - "description": "[DEPRECATED] Whether or not the user has been through the HASH onboarding tour", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "tourProgress", - "description": "The user's progress through the onboarding tour", - "args": [], - "type": { - "kind": "OBJECT", - "name": "TourProgress", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "staffMember", - "description": "Whether the user is a staff member", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "earlyCloudAccess", - "description": "[DEPRECATED] True if the user had early access to the HASH Cloud", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Role", - "description": "The site-wide role the user holds", - "fields": [ - { - "name": "id", - "description": "Role ID", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "Role name", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A longer description of the role", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PaymentMethod", - "description": null, - "fields": [ - { - "name": "id", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "brand", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "expiry", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "last4", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "default", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Invoice", - "description": null, - "fields": [ - { - "name": "number", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "status", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "created", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "periodStart", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "periodEnd", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "total", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "clientSecret", - "description": "For invoices requiring payment, the client secret for the PaymentIntent.\nNeeded in order to process an on-session payment in the client.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "SortOption", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "relevance", - "description": "Where a text query is provided, a score representing how well the project's\ntitle, keywords and description match the query", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "popularity", - "description": "Combined view and download count for the project", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "The date the project was last modified", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The date the project was originally created", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "UserOrOrgProjectResults", - "description": null, - "fields": [ - { - "name": "results", - "description": "The requested page of results", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalCount", - "description": "The total number of available results (of the selected type, if filtered)", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "page", - "description": "The page returned", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sort", - "description": "The sort applied", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortOption", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "types", - "description": "The type filter(s) applied, if any", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectTypeName", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ProjectTypeName", - "description": "The names of possible types of items a project", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Simulation", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Dataset", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Behavior", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OrgInfo", - "description": null, - "fields": [ - { - "name": "org", - "description": "Information on the organisation", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "role", - "description": "The user's access/permission level for the organization", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Role", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "jobTitle", - "description": "The user's job title in the organization", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Org", - "description": "An organization, company, etc", - "fields": [ - { - "name": "id", - "description": "The unique ID of the organization", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The short name for the organization", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "gitId", - "description": "The organization's GitLab ID.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "alternateName", - "description": "Alternate name(s) the organization may be referred to as", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "location", - "description": "Free single-line text to specify organization location (see 'address' for postal address)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "address", - "description": "The physical address(es) of the organization (see 'location' for a single line of free text)", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PostalAddress", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A description of the organization", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "legalName", - "description": "The full legal name of the organization", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shortname", - "description": "A unique string identifying the organization in HASH", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parentOrganization", - "description": "The parent organization of this organization, if any", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subOrganization", - "description": "The subsidiaries / child organizations of this organization, if any", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nonProfit", - "description": "Whether the organization is non-profit or not", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "members", - "description": "Users belonging to the organization", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "memberCount", - "description": "The number of users belonging to the organization", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "roles", - "description": "The roles available for members of the org (i.e. permissions over the org)", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Role", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "publicMembership", - "description": "Whether the organization's membership is made public or not", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "supportContact", - "description": "A way for HASH users to contact the organization with any questions", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "logo", - "description": "The organization's logo", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "avatar", - "description": "A square avatar representing the organization", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "image", - "description": "Any other images associated with the organization", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The organization's website(s)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projects", - "description": "Projects belonging to the namespace", - "args": [ - { - "name": "page", - "description": "The page to fetch. 10 projects are returned per page", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": "1" - }, - { - "name": "sort", - "description": "How to sort the projects", - "type": { - "kind": "ENUM", - "name": "SortOption", - "ofType": null - }, - "defaultValue": "updatedAt" - }, - { - "name": "types", - "description": "Whether to filter projects by a particular type (e.g. simulation)", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectTypeName", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "UserOrOrgProjectResults", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projectCount", - "description": "The number of projects belonging to the namespace", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projectTypes", - "description": "The type of projects the namespace has available", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectTypeName", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "canUserEdit", - "description": "Whether the current user may edit the org", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "When the org's HASH record was last updated", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "When the org was created in HASH", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PostalAddress", - "description": "A physical address of an organization or entity", - "fields": [ - { - "name": "postOfficeBoxNumber", - "description": "The post office box number for PO box addresses.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "streetAddress", - "description": "The street address.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addressLocality", - "description": "The locality in which the street address is (e.g. a town)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addressRegion", - "description": "The region (e.g. a state, county, or other top-level district in a country", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addressCountry", - "description": "The country", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "postalCode", - "description": "The postal code or zip code", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Dataset", - "description": "Metadata on a dataset for use in instantiating agents and other dataset properties", - "fields": [ - { - "name": "id", - "description": "The ID used for identifying a specific dataset", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "A friendly name for the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shortname", - "description": "The complete shortname for the dataset", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "filename", - "description": "A filename for the dataset", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "format", - "description": "The format of the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "extension", - "description": "The file extension for the dataset, without period. e.g. 'csv'", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A description, instructions or notes on the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subject", - "description": "The subject or subjects of the dataset", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "The url from which the dataset can be downloaded", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "The date/time the database record for the dataset was last updated", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The date/time the dataset was added to the database", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "source", - "description": "The original source of the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "landingPage", - "description": "An exteral webpage for the dataset or dataset series", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "size", - "description": "The size of the dataset in bytes", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "temporalCoverage", - "description": "The period of time the dataset covers", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "temporalFrequency", - "description": "The frequency interval of the datapoints within the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "spatialCoverage", - "description": "The physical area covered by the dataset", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "preview", - "description": "A preview of the dataset's contents", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Subject", - "description": "The subject of a dataset.", - "fields": [ - { - "name": "id", - "description": "The unique identifier of the subject", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the subject", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "namespace", - "description": "The namespace the resource belongs to, which represents either a user or an organization", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "owner", - "description": "The user or organisation which owns the resource", - "args": [], - "type": { - "kind": "UNION", - "name": "UserOrOrg", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ownerType", - "description": "Whether the owner is a user or an org", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "OwnerTypeName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pathWithNamespace", - "description": "The full path of the resource, including its namespace and path/name, in the format @namespace/path", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "visibility", - "description": "The level of access restriction on the resource", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "VisibilityLevel", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "Additional description of the subject", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subTypeOf", - "description": "The subject's direct parent(s)", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ancestors", - "description": "All the subjects which this inherits from (including via its parents)", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "children", - "description": "The direct children of this subject, if any", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "forkOf", - "description": "The source this subject was forked from, if any", - "args": [], - "type": { - "kind": "OBJECT", - "name": "SchemaReference", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parentChain", - "description": "A label showing the hierarchy or hierarchies above the subject", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "properties", - "description": "The subject's properties (whether belonging to itself directly, or via one of its ancestors)", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "PropertiesBySchema", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "license", - "description": "The license the schema is made available under", - "args": [], - "type": { - "kind": "OBJECT", - "name": "License", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "version", - "description": "Which version of this subject this is.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "relevance", - "description": "A weighted score of the subject's relevance to a search query", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "popularity", - "description": "A score assigned to the popularity of the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "Whether this is a ComplexType, or a primitive DataType", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SubjectType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "canUserEdit", - "description": "Can the requesting user edit this subject?", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "When the subject was created", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "When the subject was last updated", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "OwnerTypeName", - "description": "The type of entity that owns the project", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "User", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Org", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "VisibilityLevel", - "description": "The level of access restriction on the project", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "public", - "description": "Projects can be accessed by anyone", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "private", - "description": "Projects can only be accessed by users who have been granted access (either directly or via group membership)", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SchemaReference", - "description": null, - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "namespace", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "version", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PropertiesBySchema", - "description": null, - "fields": [ - { - "name": "id", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "schema", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SchemaReference", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "properties", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Property", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Property", - "description": null, - "fields": [ - { - "name": "id", - "description": "The unique identifier of the subject", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The property name", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "namespace", - "description": "The namespace the resource belongs to, which represents either a user or an organization", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "owner", - "description": "The user or organisation which owns the resource", - "args": [], - "type": { - "kind": "UNION", - "name": "UserOrOrg", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ownerType", - "description": "Whether the owner is a user or an org", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "OwnerTypeName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pathWithNamespace", - "description": "The full path of the resource, including its namespace and path/name, in the format @namespace/path", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "visibility", - "description": "The level of access restriction on the resource", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "VisibilityLevel", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A description of the property", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "propertyOf", - "description": "The subject(s) the property belongs directly to", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "expectedType", - "description": "The type of property or subject expected in this field", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SchemaReference", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subPropertyOf", - "description": "The superproperty of this property, if any", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SchemaReference", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subProperties", - "description": "The subproperties of this property, if any", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Property", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "supersededBy", - "description": "The property which superseded this property, if any", - "args": [], - "type": { - "kind": "OBJECT", - "name": "SchemaReference", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "inverseOf", - "description": "The inverse of this property, if anything", - "args": [], - "type": { - "kind": "OBJECT", - "name": "SchemaReference", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "version", - "description": "Which version of this property this is.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "canUserEdit", - "description": "Can the requesting user edit this property?", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "When the property was created", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "When the property was last updated", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "License", - "description": "A license under which a creative work is made available for viewing or use.", - "fields": [ - { - "name": "id", - "description": "The unique identifier of the license", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "key", - "description": "An additional slug identifier for the license", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the license", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "Additional description of the license", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": "A link to an explanation of the license's terms", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "default", - "description": "Whether the license is the default assigned when publishing to the Index", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nonCore", - "description": "Whether the license is not part of the core list of selectable licenses - it is available for use only if searched for", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "logo", - "description": "A URL for a logo for the license", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Float", - "description": "The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "SubjectType", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "ComplexType", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "DataType", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "TourProgress", - "description": null, - "fields": [ - { - "name": "completed", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "version", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lastStepViewed", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProjectFile", - "description": "A file in a project repository", - "fields": [ - { - "name": "id", - "description": "A unique identifier within the repo", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The filename", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "path", - "description": "The full path to the file within the repository", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "dependencyPath", - "description": "The path the user refers to this by in their simulation logic.\nIf this is an imported dependency, its full path.\ne.g. in the format @[namespace]/[slug]/[filename.ext]\nFor legacy behavior requests, this will be @[namespace]/[filename.ext]\nFor local datasets/behaviors, the filename.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "contents", - "description": "The contents of the file", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "size", - "description": "The size of the file in bytes", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lastCommit", - "description": "The id of the last commit that affected the file", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "commit", - "description": "The id of the commit this file is from", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ref", - "description": "The branch or tag this version of the file is from", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "\"The type of file. Only currently implemented for Dataset", - "args": [], - "type": { - "kind": "ENUM", - "name": "ProjectFileType", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "discoveredSubject", - "description": "The discovered subject of the dataset", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ProjectFileType", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Dataset", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Behavior", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProjectHistoryReturn", - "description": null, - "fields": [ - { - "name": "items", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectHistoryItem", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "next", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "remaining", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "receivedCurrent", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProjectHistoryItem", - "description": null, - "fields": [ - { - "name": "itemType", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectHistoryItemType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "item", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "UNION", - "name": "ProjectHistoryItemItem", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ProjectHistoryItemType", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Release", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "CommitGroup", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ExperimentRun", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "UNION", - "name": "ProjectHistoryItemItem", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": [ - { - "kind": "OBJECT", - "name": "ReleaseBasic", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "CommitGroup", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "ExperimentRun", - "ofType": null - } - ] - }, - { - "kind": "OBJECT", - "name": "ReleaseBasic", - "description": "Basic information about a release", - "fields": [ - { - "name": "tag", - "description": "The version number", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The date of the release", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A note accompanying the release (e.g. changes since last version)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "files", - "description": "The files exported from the release (or a subset of them if requested)", - "args": [ - { - "name": "withPreview", - "description": "For dataset files - include a preview sample of rows as part of the contents\n(a URL to download the entire file is always provided)", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectFile", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CommitGroup", - "description": null, - "fields": [ - { - "name": "commits", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Commit", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Commit", - "description": null, - "fields": [ - { - "name": "id", - "description": "A unique id for the commit", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "message", - "description": "The commit message", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stats", - "description": "Statistics on additions and deletions from the commit", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CommitStats", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The time at which the commit was created", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CommitStats", - "description": null, - "fields": [ - { - "name": "additions", - "description": "Lines added", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deletions", - "description": "Lines deleted", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "total", - "description": "Total actions", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "IssueLabel", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "bug", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "comment", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "request", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "question", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "IssueState", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "opened", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "closed", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Issue", - "description": "An issue raised on a project", - "fields": [ - { - "name": "id", - "description": "The unique identifier of the issue globally", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "iid", - "description": "The unique identifier of the issue within the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "The title of the issue", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "author", - "description": null, - "args": [], - "type": { - "kind": "OBJECT", - "name": "User", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A description of the issue", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "labels", - "description": "Label(s) representing the issue's type(s)", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "IssueLabel", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "state", - "description": "Whether the issue is open or closed", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "IssueState", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "awards", - "description": "Awards (emoji) the issue has received", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Award", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "discussions", - "description": "Discussion threads on the issue", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Discussion", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notesCount", - "description": "Number of comments on the issue", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "closedAt", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "closedBy", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Award", - "description": null, - "fields": [ - { - "name": "id", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The name of the award emoji (e.g. \"thumbs-up\")", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EmojiName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "author", - "description": "The shortname of the awarding user", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "EmojiName", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "thumbsup", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "thumbsdown", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Discussion", - "description": "A discussion thread on an issue or merge request", - "fields": [ - { - "name": "id", - "description": "The unique identifier of the discussion globally", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notes", - "description": "Notes (comments) in the discussion thread", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Note", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Note", - "description": null, - "fields": [ - { - "name": "author", - "description": null, - "args": [], - "type": { - "kind": "OBJECT", - "name": "User", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "awards", - "description": "Emojis awarded to the note", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Award", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "body", - "description": "The text content of the note", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "When the note was originally created", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "A globally unique id for the note", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "noteableIid", - "description": "The unique identifier of the noteable item within the project (iid)", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "noteableType", - "description": "The type of noteable item", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "NoteableTypeName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "resolvable", - "description": "Whether or not it is possible to resolve/unresolve a note (Merge Requests only)", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "resolved", - "description": "For resolvable notes, whether or not it is currently resolved", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "resolvedBy", - "description": "The shortname of the user who resolved the note", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "system", - "description": "If the note is system-generated rather than user text content", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "The last time the note was updated", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "NoteableTypeName", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Issue", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "MergeRequest", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ContributorInfo", - "description": null, - "fields": [ - { - "name": "id", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shortname", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "image", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "contributions", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ContributionData", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ContributionData", - "description": null, - "fields": [ - { - "name": "commits", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "MergeRequestState", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "opened", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "closed", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "locked", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "merged", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "MergeRequest", - "description": "A request to merge changes into a project branch", - "fields": [ - { - "name": "id", - "description": "The unique identifier of the merge request globally", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "iid", - "description": "The unique identifier of the merge request within the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sourcePath", - "description": "The path of the project the merge request originated from, in the format @namespace/path", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projectPath", - "description": "The path of the project the merge request is opened against, in the format @namespace/path", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "title", - "description": "The title of the merge request", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "author", - "description": null, - "args": [], - "type": { - "kind": "OBJECT", - "name": "User", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A description of the merge request", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "labels", - "description": "Label(s) representing the merge request's type(s)", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "MergeRequestLabel", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "changes", - "description": "The list of files changed as part of the merge request", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "FileChange", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "conflicts", - "description": "Conflicts between the source and target branch, if any", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "MergeRequestConflict", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "state", - "description": "Whether the merge request is open, closed, or merged", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "MergeRequestState", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mergeable", - "description": "Whether or not the merge request may be merged", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "hasConflicts", - "description": "Whether or not the merge request has conflicts", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "workInProgress", - "description": "Whether or not the merge request is marked as draft ", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "awards", - "description": "Awards (emoji) the merge request has received", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Award", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "discussions", - "description": "Discussion threads on the merge request", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Discussion", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notesCount", - "description": "Number of comments on the merge request", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "closedAt", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "closedBy", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mergedAt", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mergedBy", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "MergeRequestLabel", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "bugfix", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "feature", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "enhancement", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "FileChange", - "description": null, - "fields": [ - { - "name": "deletedFile", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "diff", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "newFile", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "newPath", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "oldPath", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "aMode", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "bMode", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "renamedFile", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "MergeRequestConflict", - "description": null, - "fields": [ - { - "name": "filePath", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "diff", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "LanguageSplit", - "description": "The languages in use in the project as of the latest release", - "fields": [ - { - "name": "language", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "BehaviorLanguage", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "percentage", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "BehaviorLanguage", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "JavaScript", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Python", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Rust", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ForkOfProject", - "description": null, - "fields": [ - { - "name": "path", - "description": "Project slug", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "namespace", - "description": "The namespace the project belongs to", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pathWithNamespace", - "description": "The full path of the project, including its namespace and path, in the format @namespace/path", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Release", - "description": "A release of specific files from a project, with a version tag", - "fields": [ - { - "name": "id", - "description": "An id for the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "A friendly name for the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "path", - "description": "The slug/shortname of the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "visibility", - "description": "The visibility of the project", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "VisibilityLevel", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "namespace", - "description": "The namespace the project belongs to, which represents either a user or an organization", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of project this release relates to", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectTypeName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "pathWithNamespace", - "description": "The full path of the project, including its namespace and path, in the format @namespace/path", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": "A description of the release", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "tag", - "description": "The specific release tag/version these files relate to", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "The date this version was released", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "files", - "description": "The files exported from the release (or a subset of them if requested)", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectFile", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "latestReleaseTag", - "description": "Provides the tag from the most recent release", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "latestCreatedAt", - "description": "The date of the latest release", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "canUserEdit", - "description": "Whether or not the logged-in user can edit the release's source project. To do so, one of the following must be true:\n\n1) The user is a site admin OR\n2) The project owner is the user OR\n3) The project owner is an organization to which the user belongs", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ExperimentPackageName", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "simple", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "single", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "optimization", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ExperimentPackageData", - "description": null, - "fields": [ - { - "name": "changedProperties", - "description": "The properties changed in an experiment (if known on creation)", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "metricName", - "description": "For optimization experiments, the metric to optimize for", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "metricObjective", - "description": "For optimization experiments, the objective for the metric", - "args": [], - "type": { - "kind": "ENUM", - "name": "MetricObjective", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "maxRuns", - "description": "The maximum number of runs to try in an experiment", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "maxSteps", - "description": "The maximum number of steps a run should go for", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "minSteps", - "description": "The minimum number of steps a run should go for before being terminated", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "initialPoints", - "description": "For optimization experiments, combinations of parameter values to use for the first runs.", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fields", - "description": "For optimization experiments, the fields to explore as hyperparameters", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "OptimizationField", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "MetricObjective", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "max", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "min", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "OptimizationField", - "description": null, - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "range", - "description": "A range of values to explore", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "values", - "description": "Discrete values to explore", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "JSON", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "distribution", - "description": "A distribution of values to explore", - "args": [], - "type": { - "kind": "ENUM", - "name": "DistributionName", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mean", - "description": "For normal distribution", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "std", - "description": "For normal distribution", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "alpha", - "description": "For beta distribution", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "beta", - "description": "For beta distribution", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mu", - "description": "For logNormal distribution", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sigma", - "description": "For logNormal distribution", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "rate", - "description": "For poisson distribution", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "shape", - "description": "For gamma distribution", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "scale", - "description": "For gamma distribution", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "JSON", - "description": "", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "DistributionName", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "normal", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "logNormal", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "poisson", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "beta", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "gamma", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SimulationPackageData", - "description": null, - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "data", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SimulationRun", - "description": null, - "fields": [ - { - "name": "id", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "propertyValues", - "description": "The specific property values different in this SimulationRun compared to the\nothers in the ExperimentRun. Will be null if this was a single-run experiment.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "propertiesSrc", - "description": "[DEPRECATED] - obsolete null value", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "An optional name to help identify the SimulationRun", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "metricOutcome", - "description": "For optimization experiments, the value of the metric of interest at the end of this run", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "s3Key", - "description": "The folder in s3 this run's output is stored in, in the hash-experiments bucket", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "experimentRun", - "description": "the ExperimentRun this is a part of", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ExperimentRun", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projectPath", - "description": "The path to the project this run is associated with", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "commit", - "description": "The commit this run's source code can be found at", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "files", - "description": "[DEPRECATED - use ExperimentRun.simulationFiles] The source code used to generate this run", - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectFile", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stepsLink", - "description": "URL to retrieve the JSON files containing steps data", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "analysisLink", - "description": "URL to retrieve the JSON files containing analysis data", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "When the SimulationRun was initiated.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "When the SimulationRun was last updated (e.g. to be renamed)", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ExperimentPlan", - "description": null, - "fields": [ - { - "name": "plan", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "definition", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Keyword", - "description": "A keyword used to tag an item in the Index to indicate its theme, content, subject matter, etc", - "fields": [ - { - "name": "name", - "description": "The keyword itself", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "count", - "description": "How many times the keyword appears across all Index listings", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "PolyModel", - "description": "A 3D Object for use in visualizing simulations", - "fields": [ - { - "name": "slug", - "description": "The unique slug for the 3D model", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "folderPath", - "description": "The path to the folder all the model assets are stored in", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "resourceUrls", - "description": "Urls for resource files making up the 3D model", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "OldProjectType", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Simulation", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "IndexListing", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "SpecialProjectType", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Onboarding", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Example", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Featured", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "SearchableTypeName", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Simulation", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Dataset", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Behavior", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Schema", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProjectSearchResults", - "description": null, - "fields": [ - { - "name": "results", - "description": "The results for the query, limited to the request page", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "UNION", - "name": "SearchableType", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "perPage", - "description": "The number of results requested", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "page", - "description": "The page requested", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "totalCount", - "description": "The total number of listings matching the query", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sort", - "description": "The field by which the results have been sorted", - "args": [], - "type": { - "kind": "ENUM", - "name": "SortOption", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "UNION", - "name": "SearchableType", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": [ - { - "kind": "OBJECT", - "name": "Project", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - ] - }, - { - "kind": "OBJECT", - "name": "GitHubScraper", - "description": null, - "fields": [ - { - "name": "createdAt", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "creator", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "files", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "GitHubScraperFile", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "frequency", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ScraperFrequency", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lastCheckedAt", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lastReleaseAt", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "namespace", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "path", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "repoPath", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "status", - "description": null, - "args": [], - "type": { - "kind": "ENUM", - "name": "ScraperStatus", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "GitHubScraperFile", - "description": null, - "fields": [ - { - "name": "fileDownloadUrl", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "filepathInRepo", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "filenameInHASH", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nameInHASH", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ScraperFrequency", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "daily", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "weekly", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "monthly", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ScraperStatus", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "active", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "error", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "paused", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Source", - "description": null, - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "url", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "publisher", - "description": null, - "args": [], - "type": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ProjectTypeFilter", - "description": "Whether to filter a response by a particular project type, or all projects", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Simulation", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Dataset", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Behavior", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "All", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "UserSortOption", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "createdAt", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lastLogin", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projectCount", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "role", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "SortDirection", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Asc", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Desc", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "UsersResult", - "description": null, - "fields": [ - { - "name": "totalCount", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "users", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "page", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sort", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "UserSortOption", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sortDirection", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SortDirection", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "filter", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "SourceTypeName", - "description": "An enum of possible source types.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "mapbox", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "bigquery", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mongodb", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "snowflake", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "elasticsearch", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "s3", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Integration", - "description": "An integration for connecting to other data sources and APIs.\nConsists of _exactly one_ source configuration (host, port, database, etc) and _exactly one_ credential.\nCan be owned by either a user or an organization.\nIf owned by an organization, only an admin can modify it, but any member of the organization can access it.", - "fields": [ - { - "name": "id", - "description": "The ObjectId of the integration in MongoDB.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The user-defined name of the integration. Any given owner-name-type combination must be unique.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of source that this is an integration for. Currently only Mapbox. Later BigQuery, Snowflake etc.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SourceTypeName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "credentialId", - "description": "The ObjectId of the attached credential for this integration.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ownerId", - "description": "The ObjectId of the owner of this integration.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "owner", - "description": "The owner itself -- either a user or an organization. Could theoretically be a simulation project itself in the future.", - "args": [], - "type": { - "kind": "UNION", - "name": "UserOrOrg", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "authorization", - "description": "Authorization information for this credential. Only relevant to the availableIntegrations endpoint,\nwhere it contains information about when and how a user gave authorization for an integration to be used in a project.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Authorization", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "source", - "description": "Source configuration information for this integration. Hostnames, databases, etc.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SubSource", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Authorization", - "description": "An authorization for an integration to be used by a project.", - "fields": [ - { - "name": "grantedAt", - "description": "When the authorization was initially granted.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "grantedBy", - "description": "The user that initially granted the authorization.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lastAuthorized", - "description": "A map of user IDs to: {\n date: Date!\n asName: String!\n}\nTo be used for finding the authorized integration the user is currently using for simulation runs.\ni.e., for a given user/project/required-integration-name combination, whichever authorization was used most\nrecently is the one the user is using. Hit the permitIntegration endpoint to update a\ncombination to the most recently used.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SubSource", - "description": "Source configuration information for an integration of a specific type.", - "fields": [ - { - "name": "id", - "description": "The ID of the source. ", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "A user-defined nickname for the source. Any given owner-name-type combination must be unique.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of configuration. Currently only mapbox.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SourceTypeName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ownerId", - "description": "The ID of the owner of this source.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "owner", - "description": "The owner itself. An organization or user. ", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "UNION", - "name": "UserOrOrg", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "configuration", - "description": "The type-specific source information. ", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "UNION", - "name": "SourceType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "allowedCredentials", - "description": "A list of the types of credentials that are compatible with this source.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "CredentialType", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "UNION", - "name": "SourceType", - "description": "A union of all possible configuration types.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": [ - { - "kind": "OBJECT", - "name": "Mapbox", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "BigQuery", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "MongoDB", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Snowflake", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "ElasticSearch", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "S3", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Unknown", - "ofType": null - } - ] - }, - { - "kind": "OBJECT", - "name": "Mapbox", - "description": "Configuration information for Mapbox.", - "fields": [ - { - "name": "baseUrl", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "BigQuery", - "description": "Configuration information for Google BigQuery.", - "fields": [ - { - "name": "url", - "description": "The base URL to query against. Example: https://bigquery.googleapis.com/bigquery/v1/projects/some-project-id/queries\nIf not specified, will be literally https://bigquery.googleapis.com/bigquery/v1/projects/$projectId/queries.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "projectId", - "description": "The ID of the _Google Cloud_ project (no relation to HASH project IDs).", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "datasetId", - "description": "The ID of the _Google Cloud_ dataset that will be queried.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "query", - "description": "Optional. If not specified here, must be specified in the transformation that uses it.\nSome valid SQL statement to use when querying the dataset. \nShould be in a format that runs successfully in Google's query editor. Example:\n\"#standardSQL\\nSELECT\\n growth.country_name,\\n growth.net_migration,\\n \nCAST(area.country_area AS INT64) AS country_area\\nFROM (\\n SELECT\\n \ncountry_name,\\n net_migration,\\n country_code\\n FROM\\n \n`bigquery-public-data.census_bureau_international.birth_death_growth_rates`\\n \nWHERE\\n year = 2020) growth\\nINNER JOIN (\\n SELECT\\n country_area,\\n \ncountry_code\\n FROM\\n \n`bigquery-public-data.census_bureau_international.country_names_area`)\narea\\nON\\n growth.country_code = area.country_code\\nORDER BY\\n net_migration DESC\",", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "useLegacySql", - "description": "Optional. If not specified here, must be specified in the transformation that uses it.\nWhether the query is using Legacy SQL features. Almost invariably false, and the user will likely know if it isn't.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "MongoDB", - "description": "Configuration information for MongoDB.", - "fields": [ - { - "name": "store", - "description": "Base database configuration information (host, port, et cetera).", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Datastore", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "replicaSet", - "description": "Optional. The name of the replica set.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "authenticationDatabase", - "description": "Optional. The name of the authentication database. Defaults to admin or $external depending on linked credentials.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "authenticationMechanism", - "description": "Optional. The authentication mechanism to use. Default depends on linked credentials.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Datastore", - "description": "Composition-over-inheritance type for common configuration fields for databases.", - "fields": [ - { - "name": "servers", - "description": "The host and port of the server(s) to connect to.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Server", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "database", - "description": "The name of the database to connect to.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "options", - "description": "Connection string options for this specific connection. Example: timezone=UTC&batchInsert=False", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "version", - "description": "Optional. Version of the database software. Defaults to latest version. Ex: 7.11.0", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Server", - "description": "An individual server for an integration.", - "fields": [ - { - "name": "host", - "description": "The host uri. Examples: 127.0.0.1 or https://localhost or mymongoserver.example.com.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "port", - "description": "The port. ", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Snowflake", - "description": "Configuration information for Snowflake.", - "fields": [ - { - "name": "accountName", - "description": "The Snowflake account name. Example: if the Snowflake URL for the user is mycompany.snowflakecomputing.com,\nthe value here would just be 'mycompany'.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "warehouse", - "description": "The warehouse name.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "database", - "description": "The database name.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "schema", - "description": "The name of the schema. This is the schema as understood by Snowflake, and is not related to HASH schemas.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "query", - "description": "Optional. If not specified here, must be specified in the transformation that uses it.\nSome valid SQL statement to use when querying the store. ", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "role", - "description": "Optional. The role to use.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ElasticSearch", - "description": "Configuration information for ElasticSearch.", - "fields": [ - { - "name": "version", - "description": "Optional. Version of the database software. Defaults to latest version. Ex: 7.11.0", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "indexName", - "description": "Optional. The name of the index to query against.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "query", - "description": "Optional. If not specified here, must be specified in the transformation that uses it. \nThe query JSON to run. Example: \"{\"query\":{\"match_all\":{}}}\"", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "server", - "description": "Server information for the elasticsearch cluster. ", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Server", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "S3", - "description": "Configuration information for an S3 bucket.", - "fields": [ - { - "name": "bucket", - "description": "The name of the bucket.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "key", - "description": "The object key or object key pattern. Example: if the S3 URI is\ns3://hash-terraform-state-s3-backend/base/terraform.tfstate,\nthe key is \"base/terraform.tfstate\", and a matching pattern could be \"base/*.tfstate\".", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "region", - "description": "The AWS region the bucket is located in. Example: us-east-1.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "format", - "description": "The format of the source file.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "FileFormat", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "FileFormat", - "description": "An enum of possible file types in S3 (or in the future other object storage services)", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "csv", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "json", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "parquet", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Unknown", - "description": "A type that could not be determined.", - "fields": [ - { - "name": "unknown", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "CredentialType", - "description": "An enum of the names of all accepted secret types.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "token", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "googleserviceaccount", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "userpass", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ldap", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "kerberos", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "x509", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "aws", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "FullIntegration", - "description": "An integration including the secret itself of the linked credential. Only accessible through the integration endpoint.", - "fields": [ - { - "name": "id", - "description": "The ObjectId of the integration in MongoDB.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": "The user-defined name of the integration. Any given owner-name-type combination must be unique.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of source that this is an integration for. Currently only Mapbox. Later BigQuery, Snowflake etc.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SourceTypeName", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "credentialId", - "description": "The ObjectId of the attached credential for this integration.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "credential", - "description": "The credential itself. This _WILL_ contain the secret itself if requested by an authorized entity. (!)", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Credential", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ownerId", - "description": "The ObjectId of the owner of this integration.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "owner", - "description": "The owner itself -- either a user or an organization. Could theoretically be a simulation project itself in the future.", - "args": [], - "type": { - "kind": "UNION", - "name": "UserOrOrg", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "authorization", - "description": "Authorization information for this credential. Currently only relevant to the availableIntegrations endpoint,\nwhere it contains information about when and how a user gave authorization for an integration to be used in a project.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Authorization", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "source", - "description": "Source configuration information for this integration. Hostnames, databases, etc.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SubSource", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Credential", - "description": "A credential for accessing an integration.", - "fields": [ - { - "name": "name", - "description": "User-defined name of the credential. Any given pair of owner ID and name must be unique.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": "The type of credential to store. Currently only supports persistent tokens. Later GCP credentials, keytabs, etc.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "CredentialType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "secret", - "description": "The credential itself. Currently only supports persistent tokens. Later GCP credentials, keytabs, etc.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "UNION", - "name": "SecretType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ownerId", - "description": "The ID of the owning entity -- either a User or an Organization.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": "When the credential was created.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": "When the credential was last updated.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedBy", - "description": "The user that last altered the credential.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "UNION", - "name": "SecretType", - "description": "A union type for all accepted secret types.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": [ - { - "kind": "OBJECT", - "name": "Token", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "GoogleServiceAccount", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "UserPass", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "LDAP", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "Kerberos", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "AWS", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "X509", - "ofType": null - } - ] - }, - { - "kind": "OBJECT", - "name": "Token", - "description": "A secret type for persistent (non-expiring) tokens.", - "fields": [ - { - "name": "accessToken", - "description": "A string of the token itself.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "GoogleServiceAccount", - "description": "A resolved secret type for Google Cloud service account credentials.\nThe key names differ from the conventional format because they are aligned with those of GCP.", - "fields": [ - { - "name": "type", - "description": "The type of account. Must be \"service_account\".", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "project_id", - "description": "The project ID. Typically matches the project ID of the source it is used with.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "private_key_id", - "description": "The ID of the private key for the account.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "private_key", - "description": "The private key itself.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "client_email", - "description": "The email address associated with the service account.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "client_id", - "description": "The ID of the client.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "auth_uri", - "description": "The URI of the authentication endpoint.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "token_uri", - "description": "The URI of the token endpoint.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "auth_provider_x509_cert_url", - "description": "The endpoint for x509 certification.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "client_x509_cert_url", - "description": "The client x509 certification url.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "UserPass", - "description": "A static username and password.", - "fields": [ - { - "name": "username", - "description": "The username.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "password", - "description": "The password.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "LDAP", - "description": "LDAP authentication information. Depending on configuration, the username may be of a\ntemplated format like alice@place.example.com, or the literal distinguished name\nof a format like cn=admin,dc=example,dc=com", - "fields": [ - { - "name": "username", - "description": "The username.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "password", - "description": "Optional. The password.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "distinguishedName", - "description": "The full distinguished name. Example: 'CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=COM'", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Kerberos", - "description": "Kerberos authentication information.", - "fields": [ - { - "name": "realm", - "description": "The name of the realm. Example: UPENN.EDU", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "kdcAddresses", - "description": "The location of the kdc server(s). Example: [\"kerberos1.upenn.edu\", \"kerberos2.upenn.edu\", \"kerberos3.upenn.edu\"]", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "principal", - "description": "The fully qualified principal name. Example: bob@UPENN.EDU", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "userKey", - "description": "The serialized keytab file and/or password for this principal.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AWS", - "description": "AWS authentication information. This is the _only_ accepted way to use AWS authorization.\nSee: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html", - "fields": [ - { - "name": "externalId", - "description": "A unique ID generated by the user to be used as a password/key when assuming the IAM role. \nSee https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html for more information.\nThis should be generated in-browser with instructions/links for the user to follow to set this up.\nThis key will never be shown to the user again, so warn them to properly set it up first.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "roleArn", - "description": "The Amazon Resource Name of the role to use. This role must have access to whatever resources it needs.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "useSessionToken", - "description": "Whether to include a temporary session token in requests.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "X509", - "description": "X.509 (TLS and/or SSL) authentication information. This is for the fairly niche case where the source requires\nHTTPS communication, but is using its own self-signing certificate authority. ", - "fields": [ - { - "name": "certificateKeyFilePem", - "description": "The x.509 PEM file for the client to use.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "certificateAuthorityFile", - "description": "The Certificate Authority file to trust, that signed both the client and the target instance's certificates.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "Upload", - "description": "", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ResolvedIntegration", - "description": "The full resolved integration for a project.", - "fields": [ - { - "name": "name", - "description": "The shortname of the integration referred to in the project.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "integration", - "description": "The integration itself.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "FullIntegration", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Mutation", - "description": "The mutation operations available in this schema", - "fields": [ - { - "name": "registerEvent", - "description": "[DEPRECATED] Register an occurence of an event", - "args": [ - { - "name": "action", - "description": "The name of the action taken", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EventAction", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "label", - "description": "A label for the event", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "context", - "description": "Any additional context about the event", - "type": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "registerEvents", - "description": "Register an occurence of events", - "args": [ - { - "name": "actions", - "description": "The actions to register", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "AnalyticEvent", - "ofType": null - } - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "clearCache", - "description": "Clear all cached data", - "args": [], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "snapshot", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "promoteToLive", - "description": "Promote a version to production", - "args": [ - { - "name": "stamp", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deleteCredential", - "description": "Delete an existing credential.", - "args": [ - { - "name": "id", - "description": "The ID of the credential to delete.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addDataset", - "description": "Create an entry in the database for the dataset and request a signed URL for uploading the file", - "args": [ - { - "name": "data", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DatasetCreationInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "DatasetInit", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateDataset", - "description": "Update the dataset's metadata", - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "data", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DatasetUpdateInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Dataset", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addDatasetToProject", - "description": "Add a dataset to a project.", - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "projectPath", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "rawCsv", - "description": "[DEPRECATED - ALL CSVS ARE FLAGGED AS RAW]. Whether the dataset you're\nuploading is a raw CSV file, or if it has been parsed to JSON already.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "exported", - "description": "Should the dataset you're uploading be marked as exported immediately", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "removeDatasetFromProject", - "description": "Remove a dataset from a project", - "args": [ - { - "name": "filename", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "projectPath", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateDatasetName", - "description": "Update the name of a dataset in a project", - "args": [ - { - "name": "filename", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "projectPath", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "publishDataset", - "description": "Publish a dataset from the dataset approval queue (admin only)", - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "data", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DatasetPublishInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ScrapedDataset", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "setDatasetStatus", - "description": "Ignore or un-ignore a scraped dataset (for approval queue filtering)", - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "ignored", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "ScrapedDataset", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addAndReleaseDataset", - "description": "Internal and system accounts only -- link and release an already persisted dataset.\nIncludes discovered schema only if it has changed.", - "args": [ - { - "name": "data", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DatasetRelease", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "discoveredSchema", - "description": null, - "type": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "UpdateAndReleaseReturn", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createDiscussion", - "description": "Create a discussion note on a 'noteable' (e.g. an issue or merge request)", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the noteable item is in, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableIid", - "description": "The unique identifier of the noteable item within the project (iid)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableType", - "description": "The type of noteable item", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "NoteableTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "body", - "description": "The text of the note", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "state", - "description": "To optionally close or re-open the noteable after commenting", - "type": { - "kind": "ENUM", - "name": "StateEvent", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "UNION", - "name": "NoteableType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createDiscussionReply", - "description": "Add a reply to a discussion thread", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the noteable item is in, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableIid", - "description": "The unique identifier of the noteable item within the project (iid)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableType", - "description": "The type of noteable item", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "NoteableTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "discussionId", - "description": "The id of the discussion thread", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "body", - "description": "The text of the reply", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Discussion", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "editNote", - "description": "Edit a note/comment", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the issue is in, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableIid", - "description": "The unique identifier of the noteable item within the project (iid)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableType", - "description": "The type of noteable item", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "NoteableTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteId", - "description": "The identifier of the note", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "body", - "description": "The text of the note", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "resolved", - "description": "Set the resolved status of the note", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Note", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateDiscussionStatus", - "description": "Resolve or unresolve an entire discussion thread", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the noteable item is in, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "mergeRequestId", - "description": "The unique identifier of the merge request", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "discussionId", - "description": "The id of the discussion thread", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "resolved", - "description": "Whether the thread should be resolved, or not", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Discussion", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "awardEmojiToNote", - "description": "Awards an emoji to a note", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the noteable is in, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableIid", - "description": "The unique identifier of the noteable item within the project (iid)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableType", - "description": "The type of noteable item", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "NoteableTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteId", - "description": "The identifier of the note on the issue", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The award type", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EmojiName", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Note", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "removeEmojiFromNote", - "description": "Removes an emoji from a note", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the noteable is in, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableIid", - "description": "The unique identifier of the noteable item within the project (iid)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableType", - "description": "The type of noteable item", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "NoteableTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteId", - "description": "The unique identifier of the note", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "awardId", - "description": "The unique identifier of the award", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Note", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "awardEmojiToNoteable", - "description": "Awards an emoji to an item that can receive comments (e.g. a merge request issue)", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the issue is in, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableIid", - "description": "The unique identifier of the noteable item within the project (iid)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableType", - "description": "The type of noteable item", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "NoteableTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The award type", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EmojiName", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "UNION", - "name": "NoteableType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "removeEmojiFromNoteable", - "description": "Remove an emoji from an item that can receive comments (e.g. a merge request issue)", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the issue is in, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableIid", - "description": "The unique identifier of the noteable item within the project (iid)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "noteableType", - "description": "The type of noteable item", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "NoteableTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "awardId", - "description": "The identifier of the award", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "UNION", - "name": "NoteableType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createExperimentRun", - "description": "Creates an ExperimentRun with a name - looks up the experiment name from the repo's experiments.json, and then:\n (1) for each necessary run in the experiment, applies the changed properties to the\n Simulation repository in a new commit\n (2) constructs an s3 folder to save the output of the SimulationRun to.\n format: [userId]/[experimentRunId]/[simulationRunId]\n\nEach SimulationRun has an s3Key indicating where its data is/should be saved.\n\ns3 Bucket: hash-experiments\n\nA single SimulationRun experiment using an exact copy of the referenced\nsimulation can be created by passing singleRun: true", - "args": [ - { - "name": "name", - "description": "The name of the experiment to be run (as defined in the simulation's experiments.json)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "projectPath", - "description": "The path to the simulation project to run this experiment on.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "ref", - "description": "A commit, tag or branch to run the experiment at. Defaults to 'main'. The\navailable experiment definitions will be determined by the contents of\nexperiments.json at this reference", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "packageName", - "description": "The experiment package to run. Defaults to 'simple'", - "type": { - "kind": "ENUM", - "name": "ExperimentPackageName", - "ofType": null - }, - "defaultValue": "simple" - }, - { - "name": "createRuns", - "description": "[DEPRECATED - IGNORED] Whether or not to immediately create records for\nSimulationRuns under this experiment. If false, createSimulationRun must be\ncalled for each run, to create a record of each run.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "true" - }, - { - "name": "singleRun", - "description": "[DEPRECATED] DO NOT USE", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ExperimentRunInitialData", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createSimulationRun", - "description": null, - "args": [ - { - "name": "id", - "description": "The id of the ExperimentRun to associate the SimulationRun with", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "propertyValues", - "description": "The property values in globals.json this experiment will vary", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SimulationRunInitialData", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "reportComputeUsage", - "description": "Report cloud compute usage for an ExperimentRun. Multiple reports may be made\nto update the usage count, until the report is finalised", - "args": [ - { - "name": "id", - "description": "The id of the ExperimentRun to report usage for", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "usage", - "description": "The compute seconds this ExperimentRun has used so far (cumulative)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "finalise", - "description": "Whether to finalise the usage report for this ExperimentRun", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ExperimentRun", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateExperimentRun", - "description": "Provide a name for a experiment run", - "args": [ - { - "name": "id", - "description": "The id of the ExperimentRun", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ExperimentRun", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateSimulationRun", - "description": "Provide a name or the outcome for a simulation run", - "args": [ - { - "name": "id", - "description": "The id of the SimulationRun", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "A friendly name for the run", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "metricOutcome", - "description": "The outcome of the metric of interest", - "type": { - "kind": "SCALAR", - "name": "Float", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SimulationRun", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deleteExperimentRun", - "description": "Deletes an experiment run and each simulation run within it, including the\nstored output and the immutable simulation variants used in the experiment.\nDoes not delete the original simulation that the experiment was called from.", - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deleteSimulationRun", - "description": "Deletes a simulation run, including the stored output and the immutable\nsimulation variant used to produce the run. Does not delete the original\nsimulatiton the experiment was based on, nor other simulation runs in the same\nexperiment. Returns the updated ExperimentRun without the deleted SimulationRun.", - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ExperimentRun", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "setComputeUsage", - "description": "Set computeUsageRemaining for a user", - "args": [ - { - "name": "shortname", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "amount", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createIssue", - "description": "Create an issue on a project", - "args": [ - { - "name": "projectPath", - "description": "The path of the project to raise the issue on, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "title", - "description": "Title of the issue", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "A description of the issue", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "labels", - "description": "The label(s)/types(s) of issue", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "IssueLabel", - "ofType": null - } - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Issue", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "editIssue", - "description": "Edit a project issue", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the issue is in, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "issueId", - "description": "The identifier of the issue", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "The description of the issue", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "title", - "description": "The title of the issue", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "labels", - "description": "The label(s)/type(s) of issue", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "IssueLabel", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "state", - "description": "To close or reopen an issue", - "type": { - "kind": "ENUM", - "name": "StateEvent", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Issue", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createMergeRequest", - "description": "Create an merge request", - "args": [ - { - "name": "projectPath", - "description": "The path of the project to request changes are merged into, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "sourcePath", - "description": "The path of the project to create the request from, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "title", - "description": "Title of the merge request", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "A description of the merge request", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "labels", - "description": "The label(s)/types(s) of merge request", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "MergeRequestLabel", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "editMergeRequest", - "description": "Edit a project merge request", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the merge request is opened against, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "mergeRequestId", - "description": "The identifier of the merge request", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "The description of the merge request", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "title", - "description": "The title of the merge request", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "labels", - "description": "The label(s)/type(s) of merge request", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "MergeRequestLabel", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "state", - "description": "To close or reopen a merge request", - "type": { - "kind": "ENUM", - "name": "StateEvent", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "acceptMergeRequest", - "description": "Accept a merge request and merges its changes in", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the merge request is opened against, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "mergeRequestId", - "description": "The identifier of the merge request", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "commitMessage", - "description": "An optional commit message for the merge commit", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "commitConflictsToMergeRequest", - "description": "Adds git conflicts as a separate commit to be resolved in hCore", - "args": [ - { - "name": "projectPath", - "description": "The path of the project the merge request is opened against, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "sourcePath", - "description": "The path of the project the merge request is sourced from, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "mergeRequestId", - "description": "The identifier of the merge request", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addOrg", - "description": "Add an organization, under a 'data' key, as an object following the shape defined by type OrgInput", - "args": [ - { - "name": "data", - "description": "The organization data to add", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "OrgInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "addCreator", - "description": "Whether or not to add the creating user as an org admin (can only be set false by site admins)", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "true" - } - ], - "type": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateOrg", - "description": "Update a specific organization, identified by the ID provided under the 'id'\nkey, with the fields to be added or updated under 'data'", - "args": [ - { - "name": "orgId", - "description": "The ID of the organization to update", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "data", - "description": "The fields to be added or updated", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "OrgInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deleteOrg", - "description": "Delete a specific organization, identified by the ID provided under the\n'orgId' key. User be an admin of the organization Returns true if successful.", - "args": [ - { - "name": "orgId", - "description": "The ID of the organization to delete", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addUserToOrg", - "description": "Adds a user to an organization.", - "args": [ - { - "name": "orgId", - "description": "The ID of the organization to add the user to", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "userId", - "description": "The ID of the user to add to the org", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "roleId", - "description": "The ID of the role to assign the user for this organization", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "jobTitle", - "description": "The user's title in the organization", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "removeUserFromOrg", - "description": "Removes a user from an organization.", - "args": [ - { - "name": "orgId", - "description": "The ID of the organization to remove the user from", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "userId", - "description": "The ID of the user to add to the org", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "removeMeFromOrg", - "description": "Remove yourself from an organization.", - "args": [ - { - "name": "orgId", - "description": "The ID of the organization to remove yourself from", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateMyJobTitle", - "description": "Update your job title in an organiization", - "args": [ - { - "name": "orgId", - "description": "The ID of the organization to update your job title for", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "jobTitle", - "description": "Your job title for this organization", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateUserOrgRole", - "description": "Update a user's role in an organization.", - "args": [ - { - "name": "orgId", - "description": "The ID of the organization to update the user's role in", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "userId", - "description": "The ID of the user to update the role of", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "roleId", - "description": "The ID of the new role to assign the user for this organization", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "jobTitle", - "description": "The user's title in the organization", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Org", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createProject", - "description": "Create a new project. Defaults to creating it in the current user's namespace if no other namespace is provided.", - "args": [ - { - "name": "name", - "description": "A display name for the project, unique in its namespace (case sensitive)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "path", - "description": "A slug for the project, unique in its namespace", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": "The organizational namespace to create the project in. If omitted, the\nproject will be created in the current user's namespace", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "type", - "description": "The type of project to create", - "type": { - "kind": "ENUM", - "name": "ProjectTypeName", - "ofType": null - }, - "defaultValue": "Simulation" - }, - { - "name": "visibility", - "description": "The level of access restriction on the project", - "type": { - "kind": "ENUM", - "name": "VisibilityLevel", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "description", - "description": "A short description for the project, to appear in search results", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "licenseId", - "description": "The id of a predefined license to make the project available under. For a custom license, add a commit with LICENSE.md", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "actions", - "description": "A commit to apply immediately after a project is created. If the commit fails, the project will be deleted", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CommitAction", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "message", - "description": "A message to accompany the initial commit (defaults to 'Initial commit')", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createCommit", - "description": "Create a commit in a project's repository", - "args": [ - { - "name": "projectPath", - "description": "The full path of the project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "message", - "description": "A message to accompany the commit", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "actions", - "description": "A list of commit actions", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CommitAction", - "ofType": null - } - } - } - }, - "defaultValue": null - }, - { - "name": "accessCode", - "description": "Access token to use if user does not have write permissions.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "CreateCommitReturn", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createRelease", - "description": "Creates a release of the project", - "args": [ - { - "name": "projectPath", - "description": "The full path of the project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "tag", - "description": "The version number for the release", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "An optional description / change note for the release", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ReleaseBasic", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deleteProject", - "description": "Deletes a project", - "args": [ - { - "name": "projectPath", - "description": "The full path of the project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "forkProject", - "description": "Fork a project into another namespace, optionally renaming it", - "args": [ - { - "name": "projectPath", - "description": "The full path of the project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": "The organizational namespace to fork the project in. If omitted, the project\nwill be forked in the current user's namespace", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "path", - "description": "The path (slug) to assign to the fork. If omitted, the current path will be used", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The display name to assign to the fork. If omitted, the current name will be used", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "ref", - "description": "An optional tag or ref to fork the project at (this will reset the forked project to the relevant commit)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "asBehavior", - "description": "If the forked project should be set as a behavior project", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateProject", - "description": "Update a project's metadata", - "args": [ - { - "name": "projectPath", - "description": "The full path of the project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "data", - "description": "The update object", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ProjectUpdate", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "commitMessage", - "description": "An optional commit message for use in any commit generated by the update", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateAndRelease", - "description": "Updates a project's metadata and then creates a release from the updated\nproject. A wrapper around the separate 'updateProject' and 'release'\nmutations, guaranteeing update before release.", - "args": [ - { - "name": "projectPath", - "description": "The full path of the project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "update", - "description": "The update object", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ProjectUpdate", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "commitMessage", - "description": "An optional commit message for use in any commit generated by the update", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "tag", - "description": "The version number for the release", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "An optional description / change note for the release", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "UpdateAndReleaseReturn", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "forkAndUpdate", - "description": "Forks a project and then applies an update. A wrapper around the separate\n'forkProject' and 'updateProject' mutations. If the update fails, the fork\nwill be deleted", - "args": [ - { - "name": "projectPath", - "description": "The full path of the source project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": "The organizational namespace to fork the project in. If omitted, the project\nwill be forked in the current user's namespace", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "path", - "description": "The path (slug) to assign to the fork. If omitted, the current path will be used", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The display name to assign to the fork. If omitted, the current name will be used", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "update", - "description": "The update object", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ProjectUpdate", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "commitMessage", - "description": "An optional commit message for use in any commit generated by the update", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "ref", - "description": "An optional tag or ref to fork the project at (this will reset the forked project to the relevant commit)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "forkAndCommit", - "description": "Forks a project and then applies a commit. A wrapper around the separate\n'forkProject' and 'createCommit'. If the commit fails, the fork will be deleted.", - "args": [ - { - "name": "projectPath", - "description": "The full path of the source project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": "The organizational namespace to fork the project in. If omitted, the project\nwill be forked in the current user's namespace", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "path", - "description": "The path (slug) to assign to the fork. If omitted, the current path will be used", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The display name to assign to the fork. If omitted, the current name will be used", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "commitMessage", - "description": "The commit message", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "actions", - "description": "A list of commit actions", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CommitAction", - "ofType": null - } - } - } - }, - "defaultValue": null - }, - { - "name": "ref", - "description": "An optional tag or ref to fork the project at (this will reset the forked project to the relevant commit)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ForkAndCommitReturn", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "forkAndReleaseBehavior", - "description": "Forks a project, applies an update, and creates a release of the specified\nbehavior file(s) from it, followed by updating the original project to import\nthe newly released behavior(s) and delete the local copies. If any step fails,\nthe fork will be deleted.\n\nupdate.files must be provided, specifying the name and path of file(s) within\nthe repo to be exported as part of the release", - "args": [ - { - "name": "projectPath", - "description": "The full path of the source project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": "The organizational namespace to fork the project in. If omitted, the project\nwill be forked in the current user's namespace", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "path", - "description": "The path (slug) to assign to the fork. If omitted, the current path will be used", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The display name to assign to the fork. If omitted, the current name will be used", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "update", - "description": "The update object", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ProjectUpdate", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "commitMessage", - "description": "An optional commit message for use in any commit generated by the update", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "tag", - "description": "The version number for the release", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "An optional description / change note for the release", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ForkAndReleaseBehaviorReturn", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "starProject", - "description": "Star a project", - "args": [ - { - "name": "projectPath", - "description": "The full path of the source project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "StarReturn", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "unstarProject", - "description": "Unstar a project", - "args": [ - { - "name": "projectPath", - "description": "The full path of the source project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "StarReturn", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "requestPrivateProjectAccessCode", - "description": "Request an access code for a private project. This may not always be unique.", - "args": [ - { - "name": "projectPath", - "description": "The full path of the source project, including its namespace and path, in the format @namespace/path", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "accessLevel", - "description": "What access level you are requesting", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectAccessCodeAccessType", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "unique", - "description": "Whether to require a unique code. May be unique even if not required.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectAccessCodeReturn", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addGitHubScraper", - "description": null, - "args": [ - { - "name": "data", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "GitHubScraperCreationData", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "GitHubScraper", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createSubject", - "description": "Create a subject/type", - "args": [ - { - "name": "description", - "description": "Additional description of the subject", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": "The namespace for the subject", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "A name for the subject, unique in the namespace.\nThis should be in PascalCase.\nThe first letter will be enforced as uppercase.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "subTypeOf", - "description": "The subject's direct parent(s)", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "SchemaReferenceInput", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "forkSubject", - "description": "Copies a subject to another namespace", - "args": [ - { - "name": "namespace", - "description": "The namespace of the subject to fork", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The name of the subject to fork", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "version", - "description": "The version to fork at (defaults to the latest available)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "targetNamespace", - "description": "The namespace in which to create the fork", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateSubject", - "description": "Updates a subject", - "args": [ - { - "name": "namespace", - "description": "The namespace of the subject to update", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The name of the subject to update", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "version", - "description": "The version to update (defaults to the latest available)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "description", - "description": "Additional description of the subject", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "properties", - "description": "The subject's properties (whether belonging to itself directly, or via one of its ancestors)", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "SchemaReferenceInput", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "subTypeOf", - "description": "The subject's direct parent(s)", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "SchemaReferenceInput", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Subject", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createProperty", - "description": "Creates a property", - "args": [ - { - "name": "description", - "description": "Description of the property", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "Name for the property, unique in this namespace.\nThis should be in camelCase.\nLowercase for the first letter is enforced.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": "Namespace for the property", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "expectedType", - "description": "The expected type(s) of the value of this property", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "SchemaReferenceInput", - "ofType": null - } - } - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Property", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateProperty", - "description": "Updates a property", - "args": [ - { - "name": "namespace", - "description": "The namespace of the property to update", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The name of the property to update", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "Description of the property", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "expectedType", - "description": "The expected type(s) of the value of this property", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "SchemaReferenceInput", - "ofType": null - } - } - } - }, - "defaultValue": null - }, - { - "name": "subPropertyOf", - "description": "The superproperty of this property, if any", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "SchemaReferenceInput", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "supersededBy", - "description": "The property which superseded this property, if any", - "type": { - "kind": "INPUT_OBJECT", - "name": "SchemaReferenceInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "inverseOf", - "description": "The inverse of this property, if anything", - "type": { - "kind": "INPUT_OBJECT", - "name": "SchemaReferenceInput", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Property", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deleteSource", - "description": "Delete an existing source.", - "args": [ - { - "name": "id", - "description": "The ID of the source to delete.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "addUser", - "description": "Add a user to the system", - "args": [ - { - "name": "data", - "description": "The data to create the user with. Email is required", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "UserCreationInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "User", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateUser", - "description": "Update a user's details (admins only)", - "args": [ - { - "name": "id", - "description": "The ID of the user to update", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "data", - "description": "The data to update the user with. Cannot change email at the moment.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "UserUpdateInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "User", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deleteUser", - "description": null, - "args": [ - { - "name": "email", - "description": "The email of the user to delete", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updateMe", - "description": "Update your details", - "args": [ - { - "name": "data", - "description": "The data to update your details with. Cannot change your email at the moment (to come)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "UserUpdateInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "registerPaymentMethod", - "description": "Obtain a client secret to use in registering a payment method", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "setDefaultPaymentMethod", - "description": null, - "args": [ - { - "name": "id", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "sendLoginReminder", - "description": null, - "args": [ - { - "name": "email", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "upsertIntegration", - "description": "Create or update an integration.", - "args": [ - { - "name": "name", - "description": "A user-defined name to give to the integration.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "integrationType", - "description": "The type of integration to create.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SourceTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "credential", - "description": "The credential to create for this integration.", - "type": { - "kind": "INPUT_OBJECT", - "name": "CredentialCreationInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "ownerId", - "description": "The owner of the integration -- if not specified, will be the user creating it.", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "source", - "description": "The source to create for this integration.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "SourceCreationInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Integration", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "integrate", - "description": "NOT IMPLEMENTED YET.\n TODO Requires CRUD operations on individual sources and credentials first.", - "args": [ - { - "name": "name", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "integrationType", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SourceTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "credentialId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "sourceId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "ownerId", - "description": null, - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Integration", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "permitIntegration", - "description": "Authorize a project to use a given integration.\nThis endpoint can be called repeatedly to update the latest authorized/used integrations for the project.", - "args": [ - { - "name": "projectId", - "description": "The actual _ObjectId_ of the project. This is _id as returned from this API, not 'id' which is actually a path string.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "integrationId", - "description": "The ID of the integration to authorize access to.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "asName", - "description": "The required integration name to authorize it as. The relevant names are in the\nrequiredIntegrations {\n type\n name\n}\ncomponent of projects.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "type": { - "kind": "OBJECT", - "name": "Authorization", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deleteIntegration", - "description": "Delete an existing integration.", - "args": [ - { - "name": "id", - "description": "The ID of the integration to delete.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "deleteSource", - "description": "Whether to destroy the associated source if possible. Defaults to false.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "deleteCredentials", - "description": "Whether to destroy the associated credentials if possible. Defaults to false.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - } - ], - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "EventAction", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "RunSimulation", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "OpenSimulation", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "OpenProject", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ExperimentRun", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ExperimentSimulationRun", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "AnalyticEvent", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "action", - "description": "The name of the action taken", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "EventAction", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "label", - "description": "A label for the event", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "context", - "description": "Any additional context about the event", - "type": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "DatasetCreationInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "name", - "description": "A friendly name for the dataset", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "filename", - "description": "The filename to be used when the dataset itself is uploaded", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "projectPath", - "description": "The full path of the project the dataset is being assigned to", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "DatasetInit", - "description": null, - "fields": [ - { - "name": "postForm", - "description": "The details the client needs to be able to upload a file", - "args": [], - "type": { - "kind": "OBJECT", - "name": "SignedPostForm", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "dataset", - "description": "The metadata held in the database on the dataset", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Dataset", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SignedPostForm", - "description": "Information required to upload a file using a temporary security policy", - "fields": [ - { - "name": "url", - "description": "The signed URL to be used for uploading the file", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fields", - "description": "The fields the client must attach to the form to be submitted, with the file to upload appended last under 'file'", - "args": [], - "type": { - "kind": "SCALAR", - "name": "JSONObject", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "DatasetUpdateInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "name", - "description": "A friendly name for the dataset", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "description", - "description": "A description, instructions or notes on the dataset", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "DatasetPublishInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "title", - "description": "The title of the dataset", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "A description, instructions or notes on the dataset", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "shortname", - "description": "A shortname unique among the publisher's listings", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "resources", - "description": "The actual file(s) to be made available under the listing", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DatasetResourceInput", - "ofType": null - } - } - } - }, - "defaultValue": null - }, - { - "name": "existingPublisherId", - "description": "The id of the publisher of the dataset", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "newPublisher", - "description": "Details of an organization to create as the dataset's publisher", - "type": { - "kind": "INPUT_OBJECT", - "name": "PublisherCreationInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "existingLicenseId", - "description": "The id of the license the dataset is made available under", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "newLicense", - "description": "Details of a license to create and assign the dataset to", - "type": { - "kind": "INPUT_OBJECT", - "name": "LicenseCreationInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "existingSubjectIds", - "description": "The id of the subject(s) of the dataset", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "landingPage", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "references", - "description": "Additional reference information for the dataset", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "version", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "language", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "updateFreq", - "description": "How frequently the dataset is updated", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "keywords", - "description": "Keywords or tags associated with the dataset", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "contactPoint", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "contactPointEmail", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "temporalCoverage", - "description": "The period of time the dataset covers", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "temporalFrequency", - "description": "The frequency interval of the datapoints within the dataset", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "spatialCoverage", - "description": "The physical area covered by the dataset", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "rights", - "description": "Additional information about the rights held or offered on the dataset", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "isPartOf", - "description": "The name of a collection or group the dataset belongs to", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "issn", - "description": "The International Standard Serial Number used to identify a serial publication", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "measurementTechnique", - "description": "The technique(s) used to measure the data", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "variableMeasured", - "description": "The specific variable the data measures", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "includedInDataCatalog", - "description": "The name of the data catalog the resource is included in, if any", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "DatasetResourceInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "id", - "description": "The id of the resource as assigned in its source", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "name", - "description": "The name of the resource", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "shortname", - "description": "The shortname of the resource, including extension", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "revisionId", - "description": "The revisionId in its source the resource was first made available under", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "url", - "description": "The URL to the specific file being uploaded and made available", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "format", - "description": "The file format of the resource, expressed as a mime-type", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "A description of the resource", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "describedBy", - "description": "A URL to an explanation of the resource", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "describedByType", - "description": "The type of file which describes the resource", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "size", - "description": "The size of the file", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "createdAt", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "updatedAt", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "PublisherCreationInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "name", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "logoUrl", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "logoFile", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "LicenseCreationInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "name", - "description": "The name of the license", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "Additional description of the license", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "url", - "description": "A link to an explanation of the license's terms", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "logo", - "description": "A link to a logo representing the license", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "DatasetRelease", - "description": "Input required for hFlow internal dataset creation.", - "fields": null, - "inputFields": [ - { - "name": "name", - "description": "The name of the dataset.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "filename", - "description": "The filename alias to use.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "projectPath", - "description": "The project path in the format '@owner/project-name'.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "s3Location", - "description": "S3 location information.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "S3LocationInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "message", - "description": "The message to add to the commit.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "size", - "description": "The size of all files (not the size of an individual file).", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "version", - "description": "The new version.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "S3LocationInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "bucket", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "folder", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "files", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "UpdateAndReleaseReturn", - "description": null, - "fields": [ - { - "name": "project", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "release", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ReleaseBasic", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "StateEvent", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "close", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "reopen", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "UNION", - "name": "NoteableType", - "description": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": [ - { - "kind": "OBJECT", - "name": "Issue", - "ofType": null - }, - { - "kind": "OBJECT", - "name": "MergeRequest", - "ofType": null - } - ] - }, - { - "kind": "OBJECT", - "name": "ExperimentRunInitialData", - "description": null, - "fields": [ - { - "name": "experimentRun", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ExperimentRun", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "computeUsageRemaining", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SimulationRunInitialData", - "description": null, - "fields": [ - { - "name": "id", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "s3Key", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "stepsUploadForm", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SignedPostForm", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "analysisUploadForm", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "SignedPostForm", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "OrgInput", - "description": "Inputs allowed when creating or updating an organization", - "fields": null, - "inputFields": [ - { - "name": "name", - "description": "The name for the organization", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "alternateName", - "description": "Alternate name(s) the organization may be referred to as", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "shortname", - "description": "A unique string identifying the organization in HASH (may only be updated after creation by admins)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "location", - "description": "Free single-line text to specify organization location (see 'address' for postal address)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "address", - "description": "The physical address(es) of the organization (see 'location' for a single line of free text)", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "PostalAddressInput", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "description", - "description": "A description of the organization", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "legalName", - "description": "The full legal name of the organization", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "parentOrganization", - "description": "The parent organization of this organization", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "nonProfit", - "description": "Whether the organization is non-profit or not", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "publicMembership", - "description": "Whether the organization's membership is made public or not", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "supportContact", - "description": "A way for HASH users to contact the organization with any questions", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "logo", - "description": "The organization's logo", - "type": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "avatar", - "description": "A square image representing the organization", - "type": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "image", - "description": "Another image associated with the organization", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "url", - "description": "The organization's website", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "PostalAddressInput", - "description": "A physical address of an organization or entity", - "fields": null, - "inputFields": [ - { - "name": "postOfficeBoxNumber", - "description": "The post office box number for PO box addresses.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "streetAddress", - "description": "The street address.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "addressLocality", - "description": "The locality in which the street address is (e.g. a town)", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "addressRegion", - "description": "The region (e.g. a state, county, or other top-level district in a country", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "addressCountry", - "description": "The country", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "postalCode", - "description": "The postal code or zip code", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CommitAction", - "description": "An action operating on a single file as part of a commit", - "fields": null, - "inputFields": [ - { - "name": "action", - "description": "The type of action to take", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "CommitActionVerb", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "filePath", - "description": "The path of the file to operate on (or the new path, if being moved)", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "previousPath", - "description": "If a file is being moved, its previous path in the repository", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "content", - "description": "If a file is being created or updated, its content", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "CommitActionVerb", - "description": "The types of action allowed on a file as part of a commit", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "create", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "delete", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "move", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "update", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CreateCommitReturn", - "description": null, - "fields": [ - { - "name": "commit", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Commit", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "project", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "ProjectUpdate", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "name", - "description": "A friendly name for the project", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": "A namespace to move the project into", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "description", - "description": "A short description of the project", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "files", - "description": "The files to export from the project in its releases (e.g. behaviors)", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ExportedFile", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "visibility", - "description": "The level of access restriction on the project", - "type": { - "kind": "ENUM", - "name": "VisibilityLevel", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "keywords", - "description": "Keywords / tags to help users locate the project", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "subject", - "description": "The subjects of the project", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "SchemaReferenceInput", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "license", - "description": "The id of the license the project is made available under", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "type", - "description": "Update the project type", - "type": { - "kind": "ENUM", - "name": "ProjectTypeName", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "newLicense", - "description": "Details of a new license to create and assign for the listing. This license\nwill become available for future use by the publisher only", - "type": { - "kind": "INPUT_OBJECT", - "name": "LicenseCreationInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "temporalCoverage", - "description": "The period of time the project's dataset(s) covers", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "dataFrequency", - "description": "The frequency interval of the datapoints of dataset(s) within the projcet", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "spatialCoverage", - "description": "The physical area covered by dataset(s) in the project", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "avatar", - "description": "An image to display representing the listing", - "type": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "image", - "description": "A wide-ratio (1.91:1) cover image to promote and illustrate listings", - "type": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "ExportedFile", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "filename", - "description": "The filename", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "path", - "description": "The path to the file within the repo", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "SchemaReferenceInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "name", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "version", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ForkAndCommitReturn", - "description": null, - "fields": [ - { - "name": "project", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "commit", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Commit", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ForkAndReleaseBehaviorReturn", - "description": null, - "fields": [ - { - "name": "sourceProject", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "behaviorProject", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "StarReturn", - "description": null, - "fields": [ - { - "name": "project", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "user", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "ProjectAccessCodeAccessType", - "description": "The level of access that an access code grants", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "Write", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "Read", - "description": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ReadEmbed", - "description": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProjectAccessCodeReturn", - "description": null, - "fields": [ - { - "name": "code", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "ProjectAccessCode", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "unique", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "ProjectAccessCode", - "description": null, - "fields": [ - { - "name": "code", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "accessLevel", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ProjectAccessCodeAccessType", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "project", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Project", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "creator", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "User", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "createdAt", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "updatedAt", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Date", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "GitHubScraperCreationData", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "description", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "files", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "GitHubScraperFileInput", - "ofType": null - } - } - } - }, - "defaultValue": null - }, - { - "name": "frequency", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "ScraperFrequency", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "licenseId", - "description": "The id of a predefined license to make the project available under.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "licenseText", - "description": "A custom license to create a LICENSE.md file from", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "name", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "namespace", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "path", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "readme", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "repoPath", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "GitHubScraperFileInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "fileDownloadUrl", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "filepathInRepo", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "filenameInHASH", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "nameInHASH", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "UserCreationInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "additionalName", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "biography", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "email", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "familyName", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "givenName", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "image", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "knowsLanguage", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "location", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "role", - "description": null, - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "shortname", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "telephone", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "url", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "UserUpdateInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "givenName", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "familyName", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "shortname", - "description": "Only admins may update shortnames after user creation", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "biography", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "knowsLanguage", - "description": null, - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null - }, - { - "name": "location", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "url", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "telephone", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "image", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "onboarded", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "tourProgress", - "description": null, - "type": { - "kind": "INPUT_OBJECT", - "name": "TourProgressInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "role", - "description": "The ID of the role to assign a user (admins only)", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "TourProgressInput", - "description": null, - "fields": null, - "inputFields": [ - { - "name": "completed", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "version", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "lastStepViewed", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CredentialCreationInput", - "description": "Required inputs for creating a new credential.", - "fields": null, - "inputFields": [ - { - "name": "name", - "description": "User-defined name of the credential. Any given pair of owner ID and name must be unique.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "type", - "description": "The type of credential to store. Currently token, googleserviceaccount, userpass, ldap, kerberos, x509, aws.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "CredentialType", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "ownerId", - "description": "Optional: the ID of the owning entity -- either a User or an Organization.\nIf not provided, the owner will be the user that created the credential.", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "accessToken", - "description": "A string of the secret token itself. Used for Token credentials.\nNote: GraphQL does not currently support union types in inputs.\nCheck SecretType for what fields are necessary for the type of credential you are creating.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "serviceAccountJson", - "description": "The Google Cloud service account JSON. A file. Will be of a format like that of the GoogleServiceAccount type.", - "type": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "userPass", - "description": "Inputs required for username and password credentials.", - "type": { - "kind": "INPUT_OBJECT", - "name": "UserPassInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "ldap", - "description": "Inputs required for LDAP credentials.", - "type": { - "kind": "INPUT_OBJECT", - "name": "LDAPInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "aws", - "description": "Inputs required for AWS credentials.", - "type": { - "kind": "INPUT_OBJECT", - "name": "AWSInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "kerberos", - "description": "Inputs required for Kerberos credentials.", - "type": { - "kind": "INPUT_OBJECT", - "name": "KerberosInput", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "x509", - "description": "Inputs required for x.509 credentials.", - "type": { - "kind": "INPUT_OBJECT", - "name": "X509Input", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "UserPassInput", - "description": "An input type for UserPass credentials.", - "fields": null, - "inputFields": [ - { - "name": "username", - "description": "The username.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "password", - "description": "The password.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "LDAPInput", - "description": "An input type for LDAP credentials. This differs little from UserPass, but affects configurations for some\nclients, e.g. MongoDB.", - "fields": null, - "inputFields": [ - { - "name": "username", - "description": "The username.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "password", - "description": "Optional. The password.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "distinguishedName", - "description": "The full distinguished name. Example: 'CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=COM'", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "AWSInput", - "description": "AWS authentication information. This is the _only_ accepted way to use AWS authorization.\nSee: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html", - "fields": null, - "inputFields": [ - { - "name": "externalId", - "description": "A unique ID generated by the user to be used as a password/key when assuming the IAM role. \nSee https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html for more information.\nThis should be generated in-browser with instructions/links for the user to follow to set this up.\nThis key will never be shown to the user again, so warn them to properly set it up first.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "roleArn", - "description": "The Amazon Resource Name of the role to use. This role must have access to whatever resources it needs.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "useSessionToken", - "description": "Whether to include a temporary session token in requests.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "KerberosInput", - "description": "Kerberos authentication information.", - "fields": null, - "inputFields": [ - { - "name": "realm", - "description": "The name of the realm. Example: UPENN.EDU", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "kdcAddresses", - "description": "The location of the kdc server(s). Example: [\"kerberos1.upenn.edu\", \"kerberos2.upenn.edu\", \"kerberos3.upenn.edu\"]", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - } - }, - "defaultValue": null - }, - { - "name": "principal", - "description": "The fully qualified principal name. Example: bob@UPENN.EDU", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "userKey", - "description": "The serialized keytab file and/or password for this principal.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "X509Input", - "description": "X.509 (TLS and/or SSL) authentication information. This is for the fairly niche case where the source requires\nHTTPS communication, but using its own self-signing certificate authority. ", - "fields": null, - "inputFields": [ - { - "name": "certificateKeyFilePem", - "description": "The x.509 PEM file for the client to use.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "certificateAuthorityFile", - "description": "The Certificate Authority file to trust, that signed both the client and the target instance's certificates.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Upload", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "SourceCreationInput", - "description": "Information required to create a new source.", - "fields": null, - "inputFields": [ - { - "name": "name", - "description": "The name of the source.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "type", - "description": "The type of source to create.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SourceTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "ownerId", - "description": "The ID of the owner of the new source. If not provided, this will be the user that created it.", - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "baseUrl", - "description": "MapBox: The base URL for the integration.\nNote: GraphQL does not currently support union types in inputs.\nCheck SourceType for what fields are necessary for the type of integration you are creating.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "bigquery", - "description": "Information to create a BigQuery source.", - "type": { - "kind": "INPUT_OBJECT", - "name": "BigQueryCreation", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "mongodb", - "description": "Information to create a MongoDB and/or MongoDB Atlas source.", - "type": { - "kind": "INPUT_OBJECT", - "name": "MongoDBCreation", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "snowflake", - "description": "Information to create a Snowflake source.", - "type": { - "kind": "INPUT_OBJECT", - "name": "SnowflakeCreation", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "elasticsearch", - "description": "Information to create an ElasticSearch source.", - "type": { - "kind": "INPUT_OBJECT", - "name": "ElasticSearchCreation", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "s3", - "description": "Information to create an S3 source.", - "type": { - "kind": "INPUT_OBJECT", - "name": "S3Creation", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "BigQueryCreation", - "description": "BigQuery source creation information.", - "fields": null, - "inputFields": [ - { - "name": "url", - "description": "The base URL to query against. Example: https://bigquery.googleapis.com/bigquery/v1/projects/some-project-id/queries\nIf not specified, will be literally https://bigquery.googleapis.com/bigquery/v1/projects/$projectId/queries.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "projectId", - "description": "The ID of the _Google Cloud_ project (no relation to HASH project IDs).", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "datasetId", - "description": "The ID of the _Google Cloud_ dataset that will be queried.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "query", - "description": "Optional. If not specified here, must be specified in the transformation that uses it.\nSome valid SQL statement to use when querying the dataset. \nShould be in a format that runs successfully in Google's query editor. Example:\n\"#standardSQL\\nSELECT\\n growth.country_name,\\n growth.net_migration,\\n \nCAST(area.country_area AS INT64) AS country_area\\nFROM (\\n SELECT\\n \ncountry_name,\\n net_migration,\\n country_code\\n FROM\\n \n`bigquery-public-data.census_bureau_international.birth_death_growth_rates`\\n \nWHERE\\n year = 2020) growth\\nINNER JOIN (\\n SELECT\\n country_area,\\n \ncountry_code\\n FROM\\n \n`bigquery-public-data.census_bureau_international.country_names_area`)\narea\\nON\\n growth.country_code = area.country_code\\nORDER BY\\n net_migration DESC\",", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "useLegacySql", - "description": "Optional. If not specified here, must be specified in the transformation that uses it.\nWhether the query is using Legacy SQL features. Almost invariably false, and the user will likely know if it isn't.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "MongoDBCreation", - "description": "MongoDB and/or MongoDB Atlas source creation information.", - "fields": null, - "inputFields": [ - { - "name": "store", - "description": "Base database configuration information (host, port, et cetera).", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "DatastoreInput", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "replicaSet", - "description": "Optional. The name of the replica set.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "authenticationDatabase", - "description": "Optional. The name of the authentication database. Defaults to admin or $external depending on linked credentials.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "authenticationMechanism", - "description": "Optional. The authentication mechanism to use. Default depends on linked credentials.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "DatastoreInput", - "description": "Composition-over-inheritance type for common configuration fields for databases, but an input type!", - "fields": null, - "inputFields": [ - { - "name": "servers", - "description": "The host and port of the server(s) to connect to.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ServerInput", - "ofType": null - } - } - } - }, - "defaultValue": null - }, - { - "name": "database", - "description": "The name of the database to connect to.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "options", - "description": "Connection string options for this specific connection. Example: timezone=UTC&batchInsert=False", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "version", - "description": "Optional. Version of the database software. Defaults to latest version. Ex: 7.11.0", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "ServerInput", - "description": "An individual server for an integration, but an input type.", - "fields": null, - "inputFields": [ - { - "name": "host", - "description": "The host uri. Examples: 127.0.0.1 or https://localhost or mymongoserver.example.com.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "port", - "description": "The port. ", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "SnowflakeCreation", - "description": "Snowflake source information.", - "fields": null, - "inputFields": [ - { - "name": "accountName", - "description": "The Snowflake account name. Example: if the Snowflake URL for the user is mycompany.snowflakecomputing.com,\nthe value here would just be 'mycompany'.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "warehouse", - "description": "The warehouse name.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "database", - "description": "The database name.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "schema", - "description": "The name of the schema. This is the schema as understood by Snowflake, and is not related to HASH schemas.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "query", - "description": "Optional. If not specified here, must be specified in the transformation that uses it.\nSome valid SQL statement to use when querying the store. ", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "role", - "description": "Optional. The role to use.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "ElasticSearchCreation", - "description": "Input information for ElasticSearch.", - "fields": null, - "inputFields": [ - { - "name": "version", - "description": "Optional. Version of the database software. Defaults to latest version. Ex: 7.11.0", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "indexName", - "description": "Optional. The name of the index to query against.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "query", - "description": "Optional. If not specified here, must be specified in the transformation that uses it. \nThe query JSON to run. Example: \"{\"query\":{\"match_all\":{}}}\"", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null - }, - { - "name": "server", - "description": "Server information for the elasticsearch cluster. ", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "ServerInput", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "S3Creation", - "description": "Input information for an S3 bucket.", - "fields": null, - "inputFields": [ - { - "name": "bucket", - "description": "The name of the bucket.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "key", - "description": "The object key or object key pattern. Example: if the S3 URI is\ns3://hash-terraform-state-s3-backend/base/terraform.tfstate,\nthe key is \"base/terraform.tfstate\", and a matching pattern could be \"base/*.tfstate\".", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "region", - "description": "The AWS region the bucket is located in. Example: us-east-1.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "format", - "description": "The format of the source file.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "FileFormat", - "ofType": null - } - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__Schema", - "description": "A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.", - "fields": [ - { - "name": "types", - "description": "A list of all types supported by this server.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "queryType", - "description": "The type that query operations will be rooted at.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mutationType", - "description": "If this server supports mutation, the type that mutation operations will be rooted at.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "subscriptionType", - "description": "If this server support subscription, the type that subscription operations will be rooted at.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "directives", - "description": "A list of all directives supported by this server.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Directive", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__Type", - "description": "The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name and description, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.", - "fields": [ - { - "name": "kind", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "__TypeKind", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "fields", - "description": null, - "args": [ - { - "name": "includeDeprecated", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Field", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "interfaces", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "possibleTypes", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "enumValues", - "description": null, - "args": [ - { - "name": "includeDeprecated", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": "false" - } - ], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__EnumValue", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "inputFields", - "description": null, - "args": [], - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ofType", - "description": null, - "args": [], - "type": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "__TypeKind", - "description": "An enum describing what kind of type a given `__Type` is.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "SCALAR", - "description": "Indicates this type is a scalar.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "OBJECT", - "description": "Indicates this type is an object. `fields` and `interfaces` are valid fields.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INTERFACE", - "description": "Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "UNION", - "description": "Indicates this type is a union. `possibleTypes` is a valid field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ENUM", - "description": "Indicates this type is an enum. `enumValues` is a valid field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INPUT_OBJECT", - "description": "Indicates this type is an input object. `inputFields` is a valid field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "LIST", - "description": "Indicates this type is a list. `ofType` is a valid field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "NON_NULL", - "description": "Indicates this type is a non-null. `ofType` is a valid field.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__Field", - "description": "Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.", - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "args", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isDeprecated", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deprecationReason", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__InputValue", - "description": "Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.", - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "type", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__Type", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "defaultValue", - "description": "A GraphQL-formatted string representing the default value for this input value.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__EnumValue", - "description": "One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.", - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isDeprecated", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "deprecationReason", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "__Directive", - "description": "A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.", - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "description", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "locations", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "__DirectiveLocation", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "args", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "__InputValue", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "ENUM", - "name": "__DirectiveLocation", - "description": "A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.", - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": [ - { - "name": "QUERY", - "description": "Location adjacent to a query operation.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "MUTATION", - "description": "Location adjacent to a mutation operation.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SUBSCRIPTION", - "description": "Location adjacent to a subscription operation.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FIELD", - "description": "Location adjacent to a field.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FRAGMENT_DEFINITION", - "description": "Location adjacent to a fragment definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FRAGMENT_SPREAD", - "description": "Location adjacent to a fragment spread.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INLINE_FRAGMENT", - "description": "Location adjacent to an inline fragment.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "VARIABLE_DEFINITION", - "description": "Location adjacent to a variable definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SCHEMA", - "description": "Location adjacent to a schema definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "SCALAR", - "description": "Location adjacent to a scalar definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "OBJECT", - "description": "Location adjacent to an object type definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "FIELD_DEFINITION", - "description": "Location adjacent to a field definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ARGUMENT_DEFINITION", - "description": "Location adjacent to an argument definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INTERFACE", - "description": "Location adjacent to an interface definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "UNION", - "description": "Location adjacent to a union definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ENUM", - "description": "Location adjacent to an enum definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ENUM_VALUE", - "description": "Location adjacent to an enum value definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INPUT_OBJECT", - "description": "Location adjacent to an input object type definition.", - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "INPUT_FIELD_DEFINITION", - "description": "Location adjacent to an input object field definition.", - "isDeprecated": false, - "deprecationReason": null - } - ], - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "File", - "description": null, - "fields": [ - { - "name": "filename", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "mimetype", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "encoding", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "FileFormatCount", - "description": null, - "fields": [ - { - "name": "name", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "count", - "description": null, - "args": [], - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "AvailableIntegrations", - "description": "A list of all integrations available to a user,\nOR\nA list of all integrations authorized for a project for a given user\n IF it is part of a Project response, or a projectId was given in the request.", - "fields": [ - { - "name": "integrations", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "OBJECT", - "name": "Integration", - "ofType": null - } - } - } - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "IntegrateInput", - "description": "NOT IMPLEMENTED YET.\n TODO Requires CRUD operations on individual sources and credentials first.\n Purpose is to enable sources without credentials and vice versa to be added at the organization level,\n and for sources to be tied directly to projects without credentials.", - "fields": null, - "inputFields": [ - { - "name": "name", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "integrationType", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "SourceTypeName", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "credentialId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "sourceId", - "description": null, - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "defaultValue": null - }, - { - "name": "ownerId", - "description": null, - "type": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - }, - "defaultValue": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - } - ], - "directives": [ - { - "name": "skip", - "description": "Directs the executor to skip this field or fragment when the `if` argument is true.", - "locations": [ - "FIELD", - "FRAGMENT_SPREAD", - "INLINE_FRAGMENT" - ], - "args": [ - { - "name": "if", - "description": "Skipped when true.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - } - ] - }, - { - "name": "include", - "description": "Directs the executor to include this field or fragment only when the `if` argument is true.", - "locations": [ - "FIELD", - "FRAGMENT_SPREAD", - "INLINE_FRAGMENT" - ], - "args": [ - { - "name": "if", - "description": "Included when true.", - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - }, - "defaultValue": null - } - ] - }, - { - "name": "deprecated", - "description": "Marks an element of a GraphQL schema as no longer supported.", - "locations": [ - "FIELD_DEFINITION", - "ENUM_VALUE" - ], - "args": [ - { - "name": "reason", - "description": "Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax (as specified by [CommonMark](https://commonmark.org/).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": "\"No longer supported\"" - } - ] - } - ] - } -} \ No newline at end of file diff --git a/apps/sim-core/packages/core/src/util/api/paths.ts b/apps/sim-core/packages/core/src/util/api/paths.ts index bca7282..4e9c38e 100644 --- a/apps/sim-core/packages/core/src/util/api/paths.ts +++ b/apps/sim-core/packages/core/src/util/api/paths.ts @@ -11,10 +11,9 @@ export const IS_STAGING = export const IS_LOCAL = process.env.NODE_ENV !== "production"; export const SITE_URL = "http://localhost:8080"; -export const API_LOGIN_URL = - typeof LOCAL_API !== "undefined" && LOCAL_API - ? "http://localhost:5000" - : "https://api.hash.ai"; + +export const API_LOGIN_URL = "http://localhost:5000"; + export const API_URL = urljoin(API_LOGIN_URL, "graphql"); export const ACCOUNT_URL = urljoin(SITE_URL, "account"); diff --git a/apps/sim-core/packages/core/src/util/api/queries/addDatasetToProject.ts b/apps/sim-core/packages/core/src/util/api/queries/addDatasetToProject.ts deleted file mode 100644 index 1c7dfd6..0000000 --- a/apps/sim-core/packages/core/src/util/api/queries/addDatasetToProject.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { - AddDatasetToProjectMutation, - AddDatasetToProjectMutationVariables, -} from "../auto-types"; -import { query } from "../query"; - -const queryString = /* GraphQL */ ` - mutation addDatasetToProject( - $id: ID! - $projectPath: String! - $csv: Boolean! - ) { - addDatasetToProject( - id: $id - projectPath: $projectPath - rawCsv: $csv - exported: false - ) { - id - files { - contents - name - path - } - } - } -`; - -export const addDatasetToProject = async ( - projectPath: string, - datasetId: string, - datasetS3Key: string | undefined, - rawCsv: boolean -) => { - const { files } = ( - await query< - AddDatasetToProjectMutation, - AddDatasetToProjectMutationVariables - >(queryString, { - id: datasetId, - projectPath: projectPath, - csv: rawCsv, - }) - ).addDatasetToProject; - - // @todo this will break when we can put files anywhere - const datasets = files - .filter((file) => file.path.startsWith("data/")) - .map((file) => ({ file, data: JSON.parse(file.contents) })); - - return datasets.find((dataset) => dataset.data.s3Key === datasetS3Key); -}; diff --git a/apps/sim-core/packages/core/src/util/api/queries/basicUser.ts b/apps/sim-core/packages/core/src/util/api/queries/basicUser.ts index 6477bf8..192522d 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/basicUser.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/basicUser.ts @@ -1,14 +1,4 @@ -import * as Sentry from "@sentry/browser"; -import SentryFullStory from "@sentry/fullstory"; -import { - identify as fsIdentify, - init as fsInit, - setUserVars as fsSetUserVars, -} from "@fullstory/browser"; -import { setupIntegration } from "@sentry/core/dist/integration"; - import { BasicUser } from "../types"; -import { IS_DEV, IS_LOCAL } from "../paths"; import { query } from "../query"; export const BasicUserFragment = /* GraphQL */ ` @@ -21,43 +11,6 @@ export const BasicUserFragment = /* GraphQL */ ` } `; -export const identifyBasicUser = (me?: BasicUser | undefined) => { - const user = me - ? { - email: me.email, - id: me.id, - name: me.fullName, - username: me.shortname, - staff: me.staffMember, - } - : null; - - if (!IS_LOCAL && (user?.staff || IS_DEV)) { - fsInit({ orgId: "ZCVMD" }); - if (user) { - fsIdentify(user.id, { - displayName: user.name, - email: user.email, - }); - } - fsSetUserVars({ staging: IS_DEV, production: !IS_DEV }); - - const client = Sentry.getCurrentHub().getClient(); - /** - * Using private API to add a new integration - * @todo figure out how to do this without a private API - */ - if (client) { - const sentryFullStory = new SentryFullStory("hashintel"); - setupIntegration(sentryFullStory); - // @ts-ignore - client._integrations[sentryFullStory.name] = sentryFullStory; - } - } - - Sentry.setUser(user); -}; - export const basicUser = async () => { const { me } = await query<{ me?: BasicUser }>(` query basicUser { @@ -67,7 +20,5 @@ export const basicUser = async () => { ${BasicUserFragment} `); - identifyBasicUser(me); - return me; }; diff --git a/apps/sim-core/packages/core/src/util/api/queries/bootstrapQuery.ts b/apps/sim-core/packages/core/src/util/api/queries/bootstrapQuery.ts index c7bf522..fc84810 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/bootstrapQuery.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/bootstrapQuery.ts @@ -1,10 +1,9 @@ import { BUILTIN_SIMULATIONS } from "../../builtinSimulations"; import { LocalStorageProject } from "../../../features/project/types"; -import { ProjectTypeName, VisibilityLevel } from "../auto-types"; +import { ProjectTypeName, VisibilityLevel } from "../types"; import type { User } from "../types"; import { getItem } from "../../../hooks/useLocalStorage"; import { getLocalStorageProject } from "../../../features/project/utils"; -import { identifyBasicUser } from "./basicUser"; import { prepareExamples } from "./exampleSimulations"; import { prepareUserProjects } from "./myProjects"; import { setLocalStorageProject } from "../../../features/middleware/localStorage"; @@ -47,9 +46,8 @@ import { setLocalStorageProject } from "../../../features/middleware/localStorag // ${ExampleProjectsFragment} // `; +//eslint-disable-next-line @typescript-eslint/require-await export const bootstrapQuery = async () => { - let me: User | undefined; - try { // const result = await query(queryString); // Migration shim @@ -63,7 +61,6 @@ export const bootstrapQuery = async () => { email: string; role: Pick; }; - me = user; return { ...bootstrap, @@ -76,8 +73,6 @@ export const bootstrapQuery = async () => { } catch { // Migration shim return { examples: [] }; - } finally { - identifyBasicUser(me); } }; @@ -86,7 +81,7 @@ const bootstrapQueryResponse = () => { for (const simulation of BUILTIN_SIMULATIONS) { const existingProject = getLocalStorageProject( simulation.pathWithNamespace, - simulation.ref + simulation.ref, ); if (!existingProject) { setLocalStorageProject({ ...simulation, actions: [] }); @@ -97,7 +92,7 @@ const bootstrapQueryResponse = () => { const myProjects = []; for (const key in localStorage) { if ( - !localStorage.hasOwnProperty(key) || + !Object.prototype.hasOwnProperty.call(localStorage, key) || !key.startsWith(`project/`) || !key.endsWith("/main") ) { diff --git a/apps/sim-core/packages/core/src/util/api/queries/canUserEditProject.ts b/apps/sim-core/packages/core/src/util/api/queries/canUserEditProject.ts index 85e8c7a..8e25363 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/canUserEditProject.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/canUserEditProject.ts @@ -1,7 +1,7 @@ import { CanUserEditProjectQuery, CanUserEditProjectQueryVariables, -} from "../auto-types"; +} from "../types"; import { query } from "../query"; const queryString = /* GraphQL */ ` @@ -18,11 +18,11 @@ const queryString = /* GraphQL */ ` export const canUserEditProject = async ( pathWithNamespace: string, - ref: string + ref: string, ) => ( await query( queryString, - { pathWithNamespace, ref } + { pathWithNamespace, ref }, ) ).project; diff --git a/apps/sim-core/packages/core/src/util/api/queries/commitActions.ts b/apps/sim-core/packages/core/src/util/api/queries/commitActions.ts index 3747495..91c6e1e 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/commitActions.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/commitActions.ts @@ -2,7 +2,7 @@ import { Commit, CommitActionsMutation, CommitActionsMutationVariables, -} from "../auto-types"; +} from "../types"; import { FileAction } from "../../../features/files/types"; import { FullProjectFragment } from "./unpreparedProjectByPath"; import { SimulationProjectWithHcFiles } from "../../../features/project/types"; @@ -56,12 +56,12 @@ export async function commitActions< IncludeFullProject extends boolean, Result extends IncludeFullProject extends true ? SimulationProjectWithHcFiles - : string + : string, >( pathWithNamespace: string, actions: FileAction[], includeFullProject: IncludeFullProject, - accessCode?: string + accessCode?: string, ): Promise<{ result: Result; commit: CommitWithoutStats }> { const result = await query< CommitActionsMutation, @@ -77,10 +77,10 @@ export async function commitActions< `${action.action}: ${ action.previousPath ? `${toFileName(action.previousPath)} → ${toFileName( - action.filePath + action.filePath, )}` : toFileName(action.filePath) - }` + }`, ) .join(", ")}`, accessCode, diff --git a/apps/sim-core/packages/core/src/util/api/queries/coreVersions.ts b/apps/sim-core/packages/core/src/util/api/queries/coreVersions.ts index 09bc695..406d1af 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/coreVersions.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/coreVersions.ts @@ -1,5 +1,5 @@ import { curriedQuery } from "./../query"; export const coreVersions = curriedQuery<{ coreVersions: string[] }, undefined>( - `query { coreVersions }` + `query { coreVersions }`, ); diff --git a/apps/sim-core/packages/core/src/util/api/queries/createDatasetQuery.ts b/apps/sim-core/packages/core/src/util/api/queries/createDatasetQuery.ts index 6ce1fd4..b6a6d31 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/createDatasetQuery.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/createDatasetQuery.ts @@ -3,7 +3,7 @@ import { query } from "../query"; export const createDatasetQuery = async ( projectPath: string, filename: string, - datasetName: string + datasetName: string, ) => { const { dataset, postForm } = ( await query<{ @@ -44,7 +44,7 @@ export const createDatasetQuery = async ( projectPath: projectPath, filename: filename, name: datasetName, - } + }, ) ).addDataset; diff --git a/apps/sim-core/packages/core/src/util/api/queries/createNewSimulationProject.ts b/apps/sim-core/packages/core/src/util/api/queries/createNewSimulationProject.ts index fc5adc3..f150428 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/createNewSimulationProject.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/createNewSimulationProject.ts @@ -13,7 +13,7 @@ export const createNewSimulationProject = async ( path: string, name: string, visibility: ProjectVisibility, - actions: ApiCommitAction[] + actions: ApiCommitAction[], ): Promise => prepareRemoteProject( ( @@ -29,8 +29,8 @@ export const createNewSimulationProject = async ( ${FullProjectFragment} `, - { path, visibility, name, namespace, actions } + { path, visibility, name, namespace, actions }, ) ).createProject, - null + null, ); diff --git a/apps/sim-core/packages/core/src/util/api/queries/createReleaseWithUpdate.ts b/apps/sim-core/packages/core/src/util/api/queries/createReleaseWithUpdate.ts index 6bfcbc0..51af59c 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/createReleaseWithUpdate.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/createReleaseWithUpdate.ts @@ -35,7 +35,7 @@ export const createReleaseWithUpdate = async ( projectPath: string, tag: string, updateDescription: string, - update: ProjectUpdate + update: ProjectUpdate, ) => ( await query<{ diff --git a/apps/sim-core/packages/core/src/util/api/queries/exampleSimulations.ts b/apps/sim-core/packages/core/src/util/api/queries/exampleSimulations.ts index 9beb854..2a14d17 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/exampleSimulations.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/exampleSimulations.ts @@ -18,7 +18,7 @@ export const ExampleProjectsFragment = /* GraphQL */ ` `; export const prepareExamples = ( - examples: UnpreparedPartialSimulationProject[] + examples: UnpreparedPartialSimulationProject[], ) => examples.map(preparePartialSimulationProject); export const exampleSimulations = async (): Promise< @@ -35,7 +35,7 @@ export const exampleSimulations = async (): Promise< ${PartialProjectFragment} ${ExampleProjectsFragment} - ` + `, ) ).specialProjects; diff --git a/apps/sim-core/packages/core/src/util/api/queries/fetchDependencies.ts b/apps/sim-core/packages/core/src/util/api/queries/fetchDependencies.ts index 843e094..c9bf5b6 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/fetchDependencies.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/fetchDependencies.ts @@ -3,15 +3,15 @@ import { Release } from "../../../features/project/types"; import { graphqlUuid } from "../utils"; import { query } from "../query"; -type DepArgs = { +interface DepArgs { pathWithNamespace: string; tag: string; files: string[]; -}; +} export async function fetchDependencies( dependencies: DependenciesDescriptor, - signal?: AbortSignal + signal?: AbortSignal, ): Promise { /** * DependenciesDescriptor is a full file path -> version record, but the API @@ -46,24 +46,22 @@ export async function fetchDependencies( return grouped; }, - {} - ) + {}, + ), ); - const res = await query<{ - [uuid: string]: Release | null; - }>( + const res = await query>( ` query fetchDependencies { ${groupedDependencies.reduce( (query, { pathWithNamespace, tag, files }) => `${query} ${graphqlUuid()}: release(projectPath: "${pathWithNamespace}", tag: "${tag}", files: ${JSON.stringify( - files + files, )}) { ...dependencyFields } `, - "" + "", )} } @@ -82,10 +80,10 @@ export async function fetchDependencies( } } `, - signal + signal, ); return Object.values(res).filter( - (release): release is Release => release !== null + (release): release is Release => release !== null, ); } diff --git a/apps/sim-core/packages/core/src/util/api/queries/forkAndReleaseBehaviorsQuery.ts b/apps/sim-core/packages/core/src/util/api/queries/forkAndReleaseBehaviorsQuery.ts index a11bc1e..9a9a9ab 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/forkAndReleaseBehaviorsQuery.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/forkAndReleaseBehaviorsQuery.ts @@ -1,5 +1,5 @@ import { FilesFragment } from "./unpreparedProjectByPath"; -import { ForkAndReleaseBehaviorsMutation } from "../auto-types"; +import { ForkAndReleaseBehaviorsMutation } from "../types"; import { ProjectVisibility } from "../../../features/project/types"; import { query } from "../query"; import { toHcFiles } from "../../../features/files/utils"; diff --git a/apps/sim-core/packages/core/src/util/api/queries/forkProjectQuery.ts b/apps/sim-core/packages/core/src/util/api/queries/forkProjectQuery.ts index 9265b60..acb8fa4 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/forkProjectQuery.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/forkProjectQuery.ts @@ -18,7 +18,7 @@ export const forkProjectQuery = async ( namespace: string, path: string, visibility: ProjectVisibility, - actions: FileAction[] = [] + actions: FileAction[] = [], ) => { const remoteProject = ( await query<{ forkAndUpdate: RemoteSimulationProject }>( @@ -52,14 +52,14 @@ export const forkProjectQuery = async ( namespace: namespace, path: path, visibility: visibility, - } + }, ) ).forkAndUpdate; if (actions.length) { return await commitActions( remoteProject.pathWithNamespace, actions, - true + true, ).then((res) => res.result); } diff --git a/apps/sim-core/packages/core/src/util/api/queries/getOnboardingProject.ts b/apps/sim-core/packages/core/src/util/api/queries/getOnboardingProject.ts index 0204aeb..2fb325e 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/getOnboardingProject.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/getOnboardingProject.ts @@ -3,34 +3,37 @@ import { PartialSimulationProject } from "../../../features/project/types"; import { preparePartialSimulationProject } from "../../../features/project/utils"; // import { query } from "../query"; -export const getOnboardingProject = async (): Promise => { - // Migration shim +/*eslint-disable @typescript-eslint/require-await*/ +export const getOnboardingProject = + async (): Promise => { + // Migration shim - // const res = await query<{ - // specialProjects: UnpreparedPartialSimulationProject[]; - // }>( - // ` - // query GetOnboardingSimulation { - // specialProjects(type: Onboarding) { - // ...PartialProjectFragment - // } - // } + // const res = await query<{ + // specialProjects: UnpreparedPartialSimulationProject[]; + // }>( + // ` + // query GetOnboardingSimulation { + // specialProjects(type: Onboarding) { + // ...PartialProjectFragment + // } + // } - // ${PartialProjectFragment} - // ` - // ); - const onBoardingProject = { - pathWithNamespace: "@hash/wildfires-regrowth", - name: "Wildfires - Regrowth", - updatedAt: "2022-05-19T13:57:26.000Z", - type: "Simulation", - visibility: "public", - latestRelease: { - createdAt: "2022-02-18T15:53:24.422Z", - tag: "9.9.0", - }, - forkOf: null, - } as any; + // ${PartialProjectFragment} + // ` + // ); + const onBoardingProject = { + pathWithNamespace: "@hash/wildfires-regrowth", + name: "Wildfires - Regrowth", + updatedAt: "2022-05-19T13:57:26.000Z", + type: "Simulation", + visibility: "public", + latestRelease: { + createdAt: "2022-02-18T15:53:24.422Z", + tag: "9.9.0", + }, + forkOf: null, + } as any; - return preparePartialSimulationProject(onBoardingProject!); -}; + return preparePartialSimulationProject(onBoardingProject); + }; +/*eslint-enable @typescript-eslint/require-await*/ diff --git a/apps/sim-core/packages/core/src/util/api/queries/getReleaseMeta.ts b/apps/sim-core/packages/core/src/util/api/queries/getReleaseMeta.ts index da33828..a35716d 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/getReleaseMeta.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/getReleaseMeta.ts @@ -1,8 +1,7 @@ import type { ReleaseMeta } from "../types"; -import { query } from "../query"; export const getReleaseMeta = (() => { - let lastRequest: Promise | null = null; + const lastRequest: Promise | null = null; return (): Promise => { if (lastRequest) { @@ -16,35 +15,35 @@ export const getReleaseMeta = (() => { subjects: undefined, }); - const currentRequest = query( - ` - query getReleaseMeta { - keywords { name, count } - licenses { - id - name - description - url - default - } - subjects { - id - name - parentChain - } - } - ` - ); + // const currentRequest = query( + // ` + // query getReleaseMeta { + // keywords { name, count } + // licenses { + // id + // name + // description + // url + // default + // } + // subjects { + // id + // name + // parentChain + // } + // } + // `, + // ); - lastRequest = currentRequest; + // lastRequest = currentRequest; - return currentRequest.catch((err) => { - if (err.name !== "AbortError") { - console.error("Unable to get release meta", err); - lastRequest = null; - } + // return currentRequest.catch((err) => { + // if (err.name !== "AbortError") { + // console.error("Unable to get release meta", err); + // lastRequest = null; + // } - throw err; - }); + // throw err; + // }); }; })(); diff --git a/apps/sim-core/packages/core/src/util/api/queries/linkableProjectByLegacyId.ts b/apps/sim-core/packages/core/src/util/api/queries/linkableProjectByLegacyId.ts index 8878939..6aea947 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/linkableProjectByLegacyId.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/linkableProjectByLegacyId.ts @@ -11,7 +11,7 @@ type LegacyProject = Pick< export const linkableProjectByLegacyId = async ( id: string, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { const { pathWithNamespace, latestRelease } = ( await query<{ @@ -26,7 +26,7 @@ export const linkableProjectByLegacyId = async ( } `, { id }, - signal + signal, ) ).project; diff --git a/apps/sim-core/packages/core/src/util/api/queries/myProjects.ts b/apps/sim-core/packages/core/src/util/api/queries/myProjects.ts index ab52732..8a893dc 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/myProjects.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/myProjects.ts @@ -6,13 +6,13 @@ import { import { preparePartialSimulationProject } from "../../../features/project/utils"; import { query } from "../query"; -type MyProjects = { +interface MyProjects { me: { projects: { results: UnpreparedPartialSimulationProject[]; }; }; -}; +} export const UserProjectsFragment = /* GraphQL */ ` fragment UserProjectsFragment on User { @@ -36,10 +36,10 @@ const queryString = /* GraphQL */ ` `; export const prepareUserProjects = ( - projects: UnpreparedPartialSimulationProject[] + projects: UnpreparedPartialSimulationProject[], ) => projects.map(preparePartialSimulationProject); export const myProjects = async (): Promise => prepareUserProjects( - (await query(queryString)).me.projects.results + (await query(queryString)).me.projects.results, ); diff --git a/apps/sim-core/packages/core/src/util/api/queries/partialProjectByPath.ts b/apps/sim-core/packages/core/src/util/api/queries/partialProjectByPath.ts index bf0096c..43d69a4 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/partialProjectByPath.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/partialProjectByPath.ts @@ -1,7 +1,7 @@ import { PartialProjectByPathQuery, PartialProjectByPathQueryVariables, -} from "../auto-types"; +} from "../types"; import { PartialSimulationProject } from "../../../features/project/types"; import { preparePartialSimulationProject } from "../../../features/project/utils"; import { query } from "../query"; @@ -36,7 +36,7 @@ const queryString = /* GraphQL */ ` export const partialProjectByPath = async ( pathWithNamespace: string, version: string, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { const { project } = await query< PartialProjectByPathQuery, diff --git a/apps/sim-core/packages/core/src/util/api/queries/projectHistory.ts b/apps/sim-core/packages/core/src/util/api/queries/projectHistory.ts index 4fba76f..1c2d7bf 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/projectHistory.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/projectHistory.ts @@ -4,7 +4,7 @@ import { ProjectHistoryItemType, ProjectHistoryQueryVariables, ProjectHistoryReturn, -} from "../auto-types"; +} from "../types"; import { LinkableProject, ReleaseDescription, @@ -23,7 +23,9 @@ export type ProjectHistoryItemItem = | CommitGroup | APIExperimentRun; -type ProjectHistoryItemShared = { createdAt: string }; +interface ProjectHistoryItemShared { + createdAt: string; +} export type ProjectHistoryItemExperimentRun = ProjectHistoryItemShared & { itemType: ProjectHistoryItemType.ExperimentRun; @@ -115,7 +117,7 @@ export const projectHistory = async ( pageToCurrent: boolean, createdBefore?: string | null, accessCode?: string, - signal?: AbortSignal + signal?: AbortSignal, ) => ( await query< @@ -131,6 +133,6 @@ export const projectHistory = async ( createdBefore, pageToCurrent, }, - signal + signal, ) ).project.history; diff --git a/apps/sim-core/packages/core/src/util/api/queries/projectReleaseTags.ts b/apps/sim-core/packages/core/src/util/api/queries/projectReleaseTags.ts index 62d9049..2fd3e0c 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/projectReleaseTags.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/projectReleaseTags.ts @@ -5,7 +5,7 @@ export const projectReleaseTags = async ( pathWithNamespace: string, ref: string | undefined | null, accessCode?: string, - signal?: AbortSignal + signal?: AbortSignal, ) => ( await query<{ @@ -19,6 +19,6 @@ export const projectReleaseTags = async ( } `, { pathWithNamespace, ref, accessCode }, - signal + signal, ) ).project.releases.map((release) => release.tag); diff --git a/apps/sim-core/packages/core/src/util/api/queries/promoteToLive.ts b/apps/sim-core/packages/core/src/util/api/queries/promoteToLive.ts index b96f2e1..2b14886 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/promoteToLive.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/promoteToLive.ts @@ -6,5 +6,5 @@ export const promoteToLive = curriedQuery< >( `mutation promoteToLive($stamp: String!) { promoteToLive(stamp: $stamp) - }` + }`, ); diff --git a/apps/sim-core/packages/core/src/util/api/queries/registerEvents.ts b/apps/sim-core/packages/core/src/util/api/queries/registerEvents.ts index f5c3ce8..78ed538 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/registerEvents.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/registerEvents.ts @@ -6,5 +6,5 @@ export const registerEvents = curriedQuery< >( `mutation registerEvents($actions: [AnalyticEvent!]!) { registerEvents(actions: $actions) - }` + }`, ); diff --git a/apps/sim-core/packages/core/src/util/api/queries/requestPrivateProjectAccessCode.ts b/apps/sim-core/packages/core/src/util/api/queries/requestPrivateProjectAccessCode.ts index e75fc8d..3c08468 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/requestPrivateProjectAccessCode.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/requestPrivateProjectAccessCode.ts @@ -4,7 +4,7 @@ import { query } from "../query"; export const requestPrivateProjectAccessCode = async ( project: LinkableProject, - level: ProjectAccessCodeAccessType + level: ProjectAccessCodeAccessType, ) => ( await query<{ @@ -17,6 +17,6 @@ export const requestPrivateProjectAccessCode = async ( } } `, - { project: project.pathWithNamespace, level } + { project: project.pathWithNamespace, level }, ) ).requestPrivateProjectAccessCode.code.code; diff --git a/apps/sim-core/packages/core/src/util/api/queries/searchResourceProjects.ts b/apps/sim-core/packages/core/src/util/api/queries/searchResourceProjects.ts index 3f5c544..f485c31 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/searchResourceProjects.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/searchResourceProjects.ts @@ -4,7 +4,7 @@ import { releaseToHcFiles } from "../../../features/files/utils"; export const searchResourceProjects = async ( searchTerm: string, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => ( await query<{ @@ -59,7 +59,7 @@ export const searchResourceProjects = async ( } `, { searchTerm }, - signal + signal, ) ).searchProjects.results.map((project) => ({ ...project, diff --git a/apps/sim-core/packages/core/src/util/api/queries/tourShowcase.ts b/apps/sim-core/packages/core/src/util/api/queries/tourShowcase.ts index 98f77a8..99bbde6 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/tourShowcase.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/tourShowcase.ts @@ -9,6 +9,7 @@ type ApiTourShowcase = UnpreparedPartialSimulationProject & { thumbnail?: string; }; +// eslint-disable-next-line @typescript-eslint/require-await export const getTourShowcase = async (): Promise => Object.values( // await query<{ @@ -34,7 +35,7 @@ export const getTourShowcase = async (): Promise => // {} // ) // Migration Shim - tourShowcaseResponse + tourShowcaseResponse, ).reduce((showcase, item) => { if (item) { showcase.push({ diff --git a/apps/sim-core/packages/core/src/util/api/queries/trackTourProgress.ts b/apps/sim-core/packages/core/src/util/api/queries/trackTourProgress.ts index 6154f85..961ca4e 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/trackTourProgress.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/trackTourProgress.ts @@ -15,6 +15,6 @@ export const trackTourProgress = async (progress: TourProgress) => } } `, - progress + progress, ) ).updateMe.id; diff --git a/apps/sim-core/packages/core/src/util/api/queries/unpreparedProjectByPath.ts b/apps/sim-core/packages/core/src/util/api/queries/unpreparedProjectByPath.ts index a3e36cf..dd62744 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/unpreparedProjectByPath.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/unpreparedProjectByPath.ts @@ -1,4 +1,4 @@ -import { ProjectByPathQuery, ProjectByPathQueryVariables } from "../auto-types"; +import { ProjectByPathQuery, ProjectByPathQueryVariables } from "../types"; import { query } from "../query"; export const FilesFragment = /* GraphQL */ ` @@ -84,7 +84,7 @@ export const unpreparedProjectByPath = async ( pathWithNamespace: string, version: string, accessCode?: string | undefined, - signal?: AbortSignal + signal?: AbortSignal, ) => { const { project } = await query< ProjectByPathQuery, diff --git a/apps/sim-core/packages/core/src/util/api/queries/userForks.ts b/apps/sim-core/packages/core/src/util/api/queries/userForks.ts index 5c9925b..028be02 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/userForks.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/userForks.ts @@ -3,7 +3,7 @@ import { query } from "../query"; export const userForks = async ( pathWithNamespace: string, accessCode?: string, - signal?: AbortSignal + signal?: AbortSignal, ) => ( await query<{ project: { userForkPaths: string[] } }>( @@ -15,6 +15,6 @@ export const userForks = async ( } `, { pathWithNamespace, accessCode }, - signal + signal, ) ).project.userForkPaths; diff --git a/apps/sim-core/packages/core/src/util/api/queries/utils.ts b/apps/sim-core/packages/core/src/util/api/queries/utils.ts index 87c58fc..58d62ef 100644 --- a/apps/sim-core/packages/core/src/util/api/queries/utils.ts +++ b/apps/sim-core/packages/core/src/util/api/queries/utils.ts @@ -8,7 +8,7 @@ import { toHcFiles } from "../../../features/files/utils"; export const prepareRemoteProject = ( remoteProject: RemoteSimulationProject, - access: ProjectAccess + access: ProjectAccess, ): SimulationProjectWithHcFiles => { const project = { ...remoteProject, diff --git a/apps/sim-core/packages/core/src/util/api/query.ts b/apps/sim-core/packages/core/src/util/api/query.ts index 4065b18..8c5b8a2 100644 --- a/apps/sim-core/packages/core/src/util/api/query.ts +++ b/apps/sim-core/packages/core/src/util/api/query.ts @@ -1,6 +1,3 @@ -import prettyStringify from "json-stringify-pretty-compact"; -import { Severity, addBreadcrumb } from "@sentry/browser"; - import { API_URL } from "./paths"; const parseQueryForName = (graphql: string) => @@ -15,17 +12,15 @@ const apiUrl = (graphql: string) => { return { queryName, url }; }; -type ApiError = { +interface ApiError { message: string; extensions?: { code: string; arguments?: object; }; -}; +} -type Variables = { - [key: string]: any; -}; +type Variables = Record; export class QueryError extends Error { queryName: string | undefined; @@ -62,7 +57,7 @@ export class QueryError extends Error { async function baseQuery( graphql: string, variables?: V, - signal?: AbortSignal + signal?: AbortSignal, ): Promise<{ data: T; errors?: ApiError[] | null; @@ -91,46 +86,22 @@ async function baseQuery( export async function query( graphql: string, variables?: V, - signal?: AbortSignal + signal?: AbortSignal, ): Promise { - const { data, errors, queryName } = await baseQuery( - graphql, - variables, - signal - ); - - const crumb = { - type: "query", - data: { - graphql, - variables: variables ? prettyStringify(variables) : "{}", - ...(errors ? { errors: prettyStringify(errors) } : {}), - }, - category: "graphql", - }; + const { data, errors } = await baseQuery(graphql, variables, signal); if (errors) { - addBreadcrumb({ - ...crumb, - level: Severity.Warning, - message: `Unsuccessful query ${queryName}`, - }); throw new QueryError({ graphql, - variables: variables || null, - errors: errors as ApiError[], - }); - } else { - addBreadcrumb({ - ...crumb, - message: `Successful query ${queryName}`, + variables: variables ?? null, + errors: errors, }); } return data; } -export const curriedQuery = (graphql: string) => ( - variables: V, - signal?: AbortSignal -) => query(graphql, variables, signal); +export const curriedQuery = + (graphql: string) => + (variables: V, signal?: AbortSignal) => + query(graphql, variables, signal); diff --git a/apps/sim-core/packages/core/src/util/api/types.ts b/apps/sim-core/packages/core/src/util/api/types.ts index a0407f3..b836451 100644 --- a/apps/sim-core/packages/core/src/util/api/types.ts +++ b/apps/sim-core/packages/core/src/util/api/types.ts @@ -1,23 +1,31 @@ -import { CommitActionVerb } from "./auto-types"; - -export type MyType = { me: T }; - -export type Org = { id: string; name: string; shortname: string }; -export type Role = { id: string; name: string; description?: string | null }; -export type OrgInfo = { org: Org; role: Role; jobTitle?: string | null }; -export type TourProgress = { +export interface Org { + id: string; + name: string; + shortname: string; +} +interface Role { + id: string; + name: string; + description?: string | null; +} +interface OrgInfo { + org: Org; + role: Role; + jobTitle?: string | null; +} +export interface TourProgress { completed: boolean; version?: string | null; lastStepViewed?: string | null; -}; +} -export type BasicUser = { +export interface BasicUser { id: string; email: string; fullName: string; shortname: string; staffMember?: boolean | null; -}; +} export type User = BasicUser & { memberOf?: OrgInfo[] | null; @@ -26,9 +34,15 @@ export type User = BasicUser & { image?: string | null; }; -type HasId = { id: string }; -type HasName = { name: string }; -type HasDescription = { description: string }; +export interface HasId { + id: string; +} +export interface HasName { + name: string; +} +export interface HasDescription { + description: string; +} export type Keyword = HasName & { count: string; @@ -50,15 +64,785 @@ export type Subject = HasId & layer?: "core" | "pending"; // SchemaOrgLayer }; -export type ReleaseMeta = { +export interface ReleaseMeta { keywords: Keyword[]; licenses: License[]; subjects?: Subject[]; -}; +} -export type ApiCommitAction = { +export interface ApiCommitAction { action: CommitActionVerb; filePath: string; previousPath?: string; content?: string; +} + +// Imported from the previously-but-no-longer generated file types.ts: + +type Maybe = T | null | undefined; +type Exact> = { [K in keyof T]: T[K] }; +/** All built-in and custom scalars, mapped to their actual values */ +interface Scalars { + ID: string; + String: string; + Boolean: boolean; + Int: number; + Float: number; + JSONObject: any; + Date: any; + JSON: any; + Upload: any; +} + +interface ExperimentRun { + id: Scalars["ID"]; + /** A friendly name for the ExperimentRun */ + name: Scalars["String"]; + /** The project the experiment is related to. */ + project: Project; + /** The full path to the project this experiment is related to */ + projectPath: Scalars["String"]; + /** The name of the experiment package to run */ + packageName: ExperimentPackageName; + /** Contextual data needed by the experiment package, if any */ + packageData?: Maybe; + /** Information on which simulation packages to run in this experiment */ + simPackages?: Maybe; + /** The specific commit this experiment was started from */ + commit: Scalars["String"]; + /** The individual runs within the experiment. */ + simulationRuns: SimulationRun[]; + /** The contents of experiment.json used to generate the experiment. */ + experimentSrc?: Maybe; + /** The source files needed to run the simulation, including dependencies */ + simulationFiles: ProjectFile[]; + /** + * [DEPRECATED - use packageData.changedProperties] All the different property + * configurations used to generate the individual runs + */ + changedProperties?: Maybe; + /** + * [DEPRECATED - see simulationFiles instead] If the simulation depends on any + * shared behaviors, they will be provided here in createExperimentRun returns + */ + sharedBehaviors?: Maybe[]>; + /** + * [DEPRECATED - see simulationFiles instead] If the simulation depends on any + * shared datasets, they will be provided here in createExperimentRun returns + */ + sharedDatasets?: Maybe[]>; + /** When the ExperimentRun was initiated. */ + createdAt: Scalars["Date"]; + /** When the ExperimentRun was last updated (e.g. with compute usage). */ + updatedAt: Scalars["Date"]; + /** When the experiment's cloud compute usage was finalised (usually when the experiment ended) */ + usageFinalisedAt?: Maybe; + /** The user that initiated the experiment */ + user?: Maybe; + /** How much cloud compute time the experiment used (in seconds) */ + computeUsage: Scalars["Int"]; +} + +/** A collection of files that might be a simulation, dataset(s), or behavior(s) */ +interface Project { + /** The MongoDB ObjectId of the project */ + _id: Scalars["ID"]; + /** The ID of the project */ + id: Scalars["ID"]; + /** A friendly name for the project */ + name: Scalars["String"]; + /** The slug of the project */ + path: Scalars["String"]; + /** The namespace the resource belongs to, which represents either a user or an organization */ + namespace: Scalars["String"]; + /** The user or organisation which owns the resource */ + owner?: Maybe; + /** Whether the owner is a user or an org */ + ownerType: OwnerTypeName; + /** The full path of the resource, including its namespace and path/name, in the format @namespace/path */ + pathWithNamespace: Scalars["String"]; + /** The level of access restriction on the resource */ + visibility: VisibilityLevel; + /** A status given to some projects */ + trusted?: Maybe; + /** The total size of the project, in bytes */ + size?: Maybe; + /** A short description of the project */ + description?: Maybe; + /** A mirror of README.md from the project repository */ + readme?: Maybe; + /** The type of data model the project relates to */ + type: ProjectTypeName; + /** Whether or not the project is archived (read-only and hidden from search results) */ + archived: Scalars["Boolean"]; + /** The file contents of the project */ + files: ProjectFile[]; + /** Experiments run on the project by the user or fellow organisation members */ + experiments?: Maybe; + history?: Maybe; + /** The branch or tag at which this project was requested (if any) */ + ref?: Maybe; + /** A URL to an image or video representing the project */ + avatar?: Maybe; + /** Issues raised against a project */ + issues: Issue[]; + contributors: ContributorInfo[]; + /** The number of open issues on a project */ + issueCount: Scalars["Int"]; + /** Merge requests open against a project */ + mergeRequests: MergeRequest[]; + /** The number of open merge requests on a project */ + mergeRequestCount: Scalars["Int"]; + /** Where the project avatar is a video, this is an URL to an image frame from the video to act as a thumbnail or fallback */ + thumbnail?: Maybe; + /** A URL to a wide-ratio (1.91:1) cover image to promote and illustrate projects */ + image?: Maybe; + /** Keywords / tags to help users locate the project */ + keywords: Scalars["String"][]; + /** The license the work is made available under */ + license?: Maybe; + /** The subject(s) of the project */ + subject: Subject[]; + /** + * The percentage of behaviors in the project written in each programming + * language (only available in Simulation or Behavior projects with releases - + * calculation applies to the latest release) + */ + languageSplit?: Maybe; + /** For behavior releases only, the languages of the released behaviors */ + languages?: Maybe; + /** The original source of the project (for dataset projects) */ + source?: Maybe; + /** An external webpage for the dataset or dataset series */ + landingPage?: Maybe; + /** The period of time the project covers */ + temporalCoverage?: Maybe; + /** The frequency interval of the datapoints within the project (for datasets) */ + dataFrequency?: Maybe; + /** The physical area covered by the project */ + spatialCoverage?: Maybe; + /** The number of times a project has been forked */ + forkCount: Scalars["Int"]; + /** The number of times a project has been starred */ + starCount: Scalars["Int"]; + /** What project, if any, this project is a fork of */ + forkOf?: Maybe; + /** The paths of forks of the project the requesting user organization has */ + orgForkPaths?: Maybe; + /** The paths of forks of the project the requesting user has */ + userForkPaths?: Maybe; + /** The number of forks of the project the requesting user has */ + userForkCount?: Maybe; + /** The dependencies listed in a project */ + dependencies: Release[]; + /** The number of simulations that depend on an item within the listing */ + dependents?: Maybe; + /** A weighted score of the listing's relevance to a search query */ + relevance?: Maybe; + /** A score assigned to the popularity of the project */ + popularity: Scalars["Int"]; + /** The latest release of the project (if any) */ + latestRelease?: Maybe; + /** All releases of a project */ + releases: ReleaseBasic[]; + /** A temporary URL from which the project can be downloaded as a zip file */ + downloadUrl?: Maybe; + /** The date the project was originally created */ + createdAt: Scalars["Date"]; + /** The date the project was last updated */ + updatedAt: Scalars["Date"]; + /** + * Whether or not the logged-in user can edit the project. To do so, one of the following must be true: + * + * 1) The user is a site admin OR + * 2) The project owner is the user OR + * 3) The project owner is an organization to which the user belongs + */ + canUserEdit: Scalars["Boolean"]; + /** + * Whether or not the logged-in user can fork the project. Projects cannot be + * forked into the namespace they already exist in. + */ + canUserFork: Scalars["Boolean"]; +} + +type UserOrOrg = User | Org; + +/** The names of possible types of items a project */ +export enum ProjectTypeName { + Simulation = "Simulation", + Dataset = "Dataset", + Behavior = "Behavior", +} +/** The type of entity that owns the project */ +enum OwnerTypeName { + User = "User", + Org = "Org", +} + +/** The level of access restriction on the project */ +export enum VisibilityLevel { + /** Projects can be accessed by anyone */ + Public = "public", + /** Projects can only be accessed by users who have been granted access (either directly or via group membership) */ + Private = "private", +} + +/** A file in a project repository */ +interface ProjectFile { + /** A unique identifier within the repo */ + id: Scalars["ID"]; + /** The filename */ + name: Scalars["String"]; + /** The full path to the file within the repository */ + path: Scalars["String"]; + /** + * The path the user refers to this by in their simulation logic. + * If this is an imported dependency, its full path. + * e.g. in the format @[namespace]/[slug]/[filename.ext] + * For legacy behavior requests, this will be @[namespace]/[filename.ext] + * For local datasets/behaviors, the filename. + */ + dependencyPath: Scalars["String"]; + /** The contents of the file */ + contents: Scalars["String"]; + /** The size of the file in bytes */ + size: Scalars["Int"]; + /** The id of the last commit that affected the file */ + lastCommit: Scalars["String"]; + /** The id of the commit this file is from */ + commit: Scalars["String"]; + /** The branch or tag this version of the file is from */ + ref: Scalars["String"]; + /** "The type of file. Only currently implemented for Dataset */ + type?: Maybe; + /** The discovered subject of the dataset */ + discoveredSubject?: Maybe; +} + +enum ProjectFileType { + Dataset = "Dataset", + Behavior = "Behavior", +} + +export interface ProjectHistoryReturn { + items: ProjectHistoryItem[]; + next?: Maybe; + remaining: Scalars["Boolean"]; + receivedCurrent: Scalars["Boolean"]; +} + +interface ProjectHistoryItem { + itemType: ProjectHistoryItemType; + item: ProjectHistoryItemItem; + createdAt: Scalars["Date"]; +} + +export enum ProjectHistoryItemType { + Release = "Release", + CommitGroup = "CommitGroup", + ExperimentRun = "ExperimentRun", +} + +type ProjectHistoryItemItem = ReleaseBasic | CommitGroup | ExperimentRun; + +/** Basic information about a release */ +interface ReleaseBasic { + /** The version number */ + tag: Scalars["String"]; + /** The date of the release */ + createdAt: Scalars["Date"]; + /** A note accompanying the release (e.g. changes since last version) */ + description?: Maybe; + /** The files exported from the release (or a subset of them if requested) */ + files: ProjectFile[]; +} + +export interface CommitGroup { + commits: Commit[]; +} + +export interface Commit { + /** A unique id for the commit */ + id: Scalars["ID"]; + /** The commit message */ + message: Scalars["String"]; + /** Statistics on additions and deletions from the commit */ + stats: CommitStats; + /** The time at which the commit was created */ + createdAt: Scalars["Date"]; +} + +interface CommitStats { + /** Lines added */ + additions: Scalars["Int"]; + /** Lines deleted */ + deletions: Scalars["Int"]; + /** Total actions */ + total: Scalars["Int"]; +} + +enum IssueLabel { + Bug = "bug", + Comment = "comment", + Request = "request", + Question = "question", +} + +enum IssueState { + Opened = "opened", + Closed = "closed", +} + +/** An issue raised on a project */ +interface Issue { + /** The unique identifier of the issue globally */ + id: Scalars["Int"]; + /** The unique identifier of the issue within the project */ + iid: Scalars["Int"]; + /** The title of the issue */ + title: Scalars["String"]; + author?: Maybe; + /** A description of the issue */ + description: Scalars["String"]; + /** Label(s) representing the issue's type(s) */ + labels: IssueLabel[]; + /** Whether the issue is open or closed */ + state: IssueState; + /** Awards (emoji) the issue has received */ + awards: Award[]; + /** Discussion threads on the issue */ + discussions: Discussion[]; + /** Number of comments on the issue */ + notesCount: Scalars["Int"]; + createdAt: Scalars["Date"]; + updatedAt: Scalars["Date"]; + closedAt?: Maybe; + closedBy?: Maybe; +} + +interface Award { + id: Scalars["Int"]; + /** The name of the award emoji (e.g. "thumbs-up") */ + name: EmojiName; + /** The shortname of the awarding user */ + author: Scalars["String"]; +} + +enum EmojiName { + Thumbsup = "thumbsup", + Thumbsdown = "thumbsdown", +} + +/** A discussion thread on an issue or merge request */ +interface Discussion { + /** The unique identifier of the discussion globally */ + id: Scalars["String"]; + /** Notes (comments) in the discussion thread */ + notes: Note[]; +} + +interface Note { + author?: Maybe; + /** Emojis awarded to the note */ + awards: Award[]; + /** The text content of the note */ + body: Scalars["String"]; + /** When the note was originally created */ + createdAt: Scalars["Date"]; + /** A globally unique id for the note */ + id: Scalars["Int"]; + /** The unique identifier of the noteable item within the project (iid) */ + noteableIid: Scalars["Int"]; + /** The type of noteable item */ + noteableType: NoteableTypeName; + /** Whether or not it is possible to resolve/unresolve a note (Merge Requests only) */ + resolvable: Scalars["Boolean"]; + /** For resolvable notes, whether or not it is currently resolved */ + resolved?: Maybe; + /** The shortname of the user who resolved the note */ + resolvedBy?: Maybe; + /** If the note is system-generated rather than user text content */ + system: Scalars["Boolean"]; + /** The last time the note was updated */ + updatedAt: Scalars["Date"]; +} + +enum NoteableTypeName { + Issue = "Issue", + MergeRequest = "MergeRequest", +} + +interface ContributorInfo { + id: Scalars["ID"]; + shortname: Scalars["String"]; + image: Scalars["String"]; + contributions: ContributionData; +} + +interface ContributionData { + commits: Scalars["Int"]; +} + +enum MergeRequestState { + Opened = "opened", + Closed = "closed", + Locked = "locked", + Merged = "merged", +} + +/** A request to merge changes into a project branch */ +interface MergeRequest { + /** The unique identifier of the merge request globally */ + id: Scalars["Int"]; + /** The unique identifier of the merge request within the project */ + iid: Scalars["Int"]; + /** The path of the project the merge request originated from, in the format @namespace/path */ + sourcePath: Scalars["String"]; + /** The path of the project the merge request is opened against, in the format @namespace/path */ + projectPath: Scalars["String"]; + /** The title of the merge request */ + title: Scalars["String"]; + author?: Maybe; + /** A description of the merge request */ + description: Scalars["String"]; + /** Label(s) representing the merge request's type(s) */ + labels?: Maybe; + /** The list of files changed as part of the merge request */ + changes: FileChange[]; + /** Conflicts between the source and target branch, if any */ + conflicts?: Maybe; + /** Whether the merge request is open, closed, or merged */ + state: MergeRequestState; + /** Whether or not the merge request may be merged */ + mergeable: Scalars["Boolean"]; + /** Whether or not the merge request has conflicts */ + hasConflicts: Scalars["Boolean"]; + /** Whether or not the merge request is marked as draft */ + workInProgress: Scalars["Boolean"]; + /** Awards (emoji) the merge request has received */ + awards: Award[]; + /** Discussion threads on the merge request */ + discussions: Discussion[]; + /** Number of comments on the merge request */ + notesCount: Scalars["Int"]; + createdAt: Scalars["Date"]; + updatedAt: Scalars["Date"]; + closedAt?: Maybe; + closedBy?: Maybe; + mergedAt?: Maybe; + mergedBy?: Maybe; +} + +enum MergeRequestLabel { + Bugfix = "bugfix", + Feature = "feature", + Enhancement = "enhancement", +} + +interface FileChange { + deletedFile?: Maybe; + diff: Scalars["String"]; + newFile?: Maybe; + newPath?: Maybe; + oldPath?: Maybe; + aMode?: Maybe; + bMode?: Maybe; + renamedFile?: Maybe; +} + +interface MergeRequestConflict { + filePath: Scalars["String"]; + diff: Scalars["String"]; +} + +/** The languages in use in the project as of the latest release */ +interface LanguageSplit { + language: BehaviorLanguage; + percentage: Scalars["Float"]; +} + +enum BehaviorLanguage { + JavaScript = "JavaScript", + Python = "Python", + Rust = "Rust", +} + +interface ForkOfProject { + /** Project slug */ + path: Scalars["String"]; + /** The namespace the project belongs to */ + namespace: Scalars["String"]; + /** The full path of the project, including its namespace and path, in the format @namespace/path */ + pathWithNamespace: Scalars["String"]; +} + +/** A release of specific files from a project, with a version tag */ +interface Release { + /** An id for the project */ + id: Scalars["String"]; + /** A friendly name for the project */ + name: Scalars["String"]; + /** The slug/shortname of the project */ + path: Scalars["String"]; + /** The visibility of the project */ + visibility: VisibilityLevel; + /** The namespace the project belongs to, which represents either a user or an organization */ + namespace: Scalars["String"]; + /** The type of project this release relates to */ + type: ProjectTypeName; + /** The full path of the project, including its namespace and path, in the format @namespace/path */ + pathWithNamespace: Scalars["String"]; + /** A description of the release */ + description?: Maybe; + /** The specific release tag/version these files relate to */ + tag: Scalars["String"]; + /** The date this version was released */ + createdAt: Scalars["Date"]; + /** The files exported from the release (or a subset of them if requested) */ + files: ProjectFile[]; + /** Provides the tag from the most recent release */ + latestReleaseTag: Scalars["String"]; + /** The date of the latest release */ + latestCreatedAt: Scalars["String"]; + /** + * Whether or not the logged-in user can edit the release's source project. To do so, one of the following must be true: + * + * 1) The user is a site admin OR + * 2) The project owner is the user OR + * 3) The project owner is an organization to which the user belongs + */ + canUserEdit: Scalars["Boolean"]; +} + +enum ExperimentPackageName { + Simple = "simple", + Single = "single", + Optimization = "optimization", +} + +interface ExperimentPackageData { + /** The properties changed in an experiment (if known on creation) */ + changedProperties?: Maybe; + /** For optimization experiments, the metric to optimize for */ + metricName?: Maybe; + /** For optimization experiments, the objective for the metric */ + metricObjective?: Maybe; + /** The maximum number of runs to try in an experiment */ + maxRuns?: Maybe; + /** The maximum number of steps a run should go for */ + maxSteps?: Maybe; + /** The minimum number of steps a run should go for before being terminated */ + minSteps?: Maybe; + /** For optimization experiments, combinations of parameter values to use for the first runs. */ + initialPoints?: Maybe; + /** For optimization experiments, the fields to explore as hyperparameters */ + fields?: Maybe; +} + +enum MetricObjective { + Max = "max", + Min = "min", +} + +interface OptimizationField { + name: Scalars["String"]; + /** A range of values to explore */ + range?: Maybe; + /** Discrete values to explore */ + values?: Maybe[]>; + /** A distribution of values to explore */ + distribution?: Maybe; + /** For normal distribution */ + mean?: Maybe; + /** For normal distribution */ + std?: Maybe; + /** For beta distribution */ + alpha?: Maybe; + /** For beta distribution */ + beta?: Maybe; + /** For logNormal distribution */ + mu?: Maybe; + /** For logNormal distribution */ + sigma?: Maybe; + /** For poisson distribution */ + rate?: Maybe; + /** For gamma distribution */ + shape?: Maybe; + /** For gamma distribution */ + scale?: Maybe; +} + +enum DistributionName { + Normal = "normal", + LogNormal = "logNormal", + Poisson = "poisson", + Beta = "beta", + Gamma = "gamma", +} + +interface SimulationPackageData { + name: Scalars["String"]; + data?: Maybe; +} + +interface SimulationRun { + id: Scalars["ID"]; + /** + * The specific property values different in this SimulationRun compared to the + * others in the ExperimentRun. Will be null if this was a single-run experiment. + */ + propertyValues?: Maybe; + /** [DEPRECATED] - obsolete null value */ + propertiesSrc?: Maybe; + /** An optional name to help identify the SimulationRun */ + name?: Maybe; + /** For optimization experiments, the value of the metric of interest at the end of this run */ + metricOutcome?: Maybe; + /** The folder in s3 this run's output is stored in, in the hash-experiments bucket */ + s3Key: Scalars["String"]; + /** the ExperimentRun this is a part of */ + experimentRun: ExperimentRun; + /** The path to the project this run is associated with */ + projectPath: Scalars["String"]; + /** The commit this run's source code can be found at */ + commit: Scalars["String"]; + /** [DEPRECATED - use ExperimentRun.simulationFiles] The source code used to generate this run */ + files?: Maybe; + /** URL to retrieve the JSON files containing steps data */ + stepsLink?: Maybe; + /** URL to retrieve the JSON files containing analysis data */ + analysisLink?: Maybe; + /** When the SimulationRun was initiated. */ + createdAt: Scalars["Date"]; + /** When the SimulationRun was last updated (e.g. to be renamed) */ + updatedAt?: Maybe; +} + +/** An action operating on a single file as part of a commit */ +interface CommitAction { + /** The type of action to take */ + action: CommitActionVerb; + /** The path of the file to operate on (or the new path, if being moved) */ + filePath: Scalars["String"]; + /** If a file is being moved, its previous path in the repository */ + previousPath?: Maybe; + /** If a file is being created or updated, its content */ + content?: Maybe; +} + +/** The types of action allowed on a file as part of a commit */ +export enum CommitActionVerb { + Create = "create", + Delete = "delete", + Move = "move", + Update = "update", +} + +export type CanUserEditProjectQueryVariables = Exact<{ + pathWithNamespace: Scalars["String"]; + ref: Scalars["String"]; +}>; + +export interface CanUserEditProjectQuery { + project: Pick & { + dependencies: Pick[]; + }; +} + +export type CommitActionsMutationVariables = Exact<{ + pathWithNamespace: Scalars["String"]; + actions: CommitAction[] | CommitAction; + message: Scalars["String"]; + includeFullProject: Scalars["Boolean"]; + accessCode?: Maybe; +}>; + +export interface CommitActionsMutation { + createCommit: { + project?: Maybe & FullProjectFragmentFragment>; + commit: Pick; + }; +} + +export interface ForkAndReleaseBehaviorsMutation { + forkAndReleaseBehavior: { + sourceProject: Pick & FilesFragmentFragment; + behaviorProject: Pick; + }; +} + +type PartialProjectFragmentFragment = Pick< + Project, + "pathWithNamespace" | "name" | "updatedAt" | "type" | "visibility" +> & { + latestRelease?: Maybe>; + forkOf?: Maybe>; }; + +export type PartialProjectByPathQueryVariables = Exact<{ + pathWithNamespace: Scalars["String"]; + version: Scalars["String"]; +}>; + +export interface PartialProjectByPathQuery { + project: PartialProjectFragmentFragment; +} + +export type ProjectHistoryQueryVariables = Exact<{ + pathWithNamespace: Scalars["String"]; + ref: Scalars["String"]; + pageToCurrent: Scalars["Boolean"]; + accessCode?: Maybe; + createdBefore?: Maybe; +}>; + +interface FilesFragmentFragment { + files: Pick[]; + dependencies: (Pick< + Release, + | "pathWithNamespace" + | "tag" + | "latestReleaseTag" + | "canUserEdit" + | "visibility" + > & { + files: Pick< + ProjectFile, + "name" | "path" | "dependencyPath" | "contents" | "ref" + >[]; + })[]; +} + +type FullProjectFragmentFragment = Pick< + Project, + | "id" + | "name" + | "description" + | "image" + | "thumbnail" + | "createdAt" + | "updatedAt" + | "canUserEdit" + | "pathWithNamespace" + | "namespace" + | "type" + | "ref" + | "visibility" + | "ownerType" + | "keywords" +> & { + forkOf?: Maybe>; + latestRelease?: Maybe>; + license?: Maybe>; +} & FilesFragmentFragment; + +export type ProjectByPathQueryVariables = Exact<{ + pathWithNamespace: Scalars["String"]; + version: Scalars["String"]; + accessCode?: Maybe; +}>; + +export interface ProjectByPathQuery { + project: FullProjectFragmentFragment; +} diff --git a/apps/sim-core/packages/core/src/util/api/utils.ts b/apps/sim-core/packages/core/src/util/api/utils.ts index e9b9f32..3c3bfd7 100644 --- a/apps/sim-core/packages/core/src/util/api/utils.ts +++ b/apps/sim-core/packages/core/src/util/api/utils.ts @@ -1,7 +1,7 @@ import { v4 as uuid } from "uuid"; import { ApiCommitAction } from "./types"; -import { CommitActionVerb } from "./auto-types"; +import { CommitActionVerb } from "./types"; import { FileAction } from "../../features/files/types"; export const graphqlUuid = () => `_${uuid().replace(/-/g, "_")}`; diff --git a/apps/sim-core/packages/core/src/util/builtinSimulations.ts b/apps/sim-core/packages/core/src/util/builtinSimulations.ts index 69a44c6..4a1a172 100644 --- a/apps/sim-core/packages/core/src/util/builtinSimulations.ts +++ b/apps/sim-core/packages/core/src/util/builtinSimulations.ts @@ -168,12 +168,11 @@ const remoteSimulationProjects: RemoteSimulationProject[] = [ }, ]; -export const BUILTIN_SIMULATIONS: SimulationProjectWithHcFiles[] = remoteSimulationProjects.map( - (project) => ({ +export const BUILTIN_SIMULATIONS: SimulationProjectWithHcFiles[] = + remoteSimulationProjects.map((project) => ({ ...project, config: toHcConfig(project), files: toHcFiles(project), ref: project.ref ?? "main", access: null, - }) -); + })); diff --git a/apps/sim-core/packages/core/src/util/countMatches.ts b/apps/sim-core/packages/core/src/util/countMatches.ts index 67bdf66..32c09d0 100644 --- a/apps/sim-core/packages/core/src/util/countMatches.ts +++ b/apps/sim-core/packages/core/src/util/countMatches.ts @@ -1,5 +1,5 @@ export const countMatches = ( arr: T[], - predicate: (item: T) => boolean + predicate: (item: T) => boolean, ): number => arr.reduce((count, item) => (predicate(item) ? count + 1 : count), 0); diff --git a/apps/sim-core/packages/core/src/util/descByUpdatedAt.ts b/apps/sim-core/packages/core/src/util/descByUpdatedAt.ts index 6038bf3..66b98fc 100644 --- a/apps/sim-core/packages/core/src/util/descByUpdatedAt.ts +++ b/apps/sim-core/packages/core/src/util/descByUpdatedAt.ts @@ -1,6 +1,6 @@ export function descByUpdatedAt( { updatedAt: a }: T, - { updatedAt: b }: T + { updatedAt: b }: T, ): number { return a === b ? 0 : a > b ? -1 : 1; } diff --git a/apps/sim-core/packages/core/src/util/exhaustMapWithTrailing.ts b/apps/sim-core/packages/core/src/util/exhaustMapWithTrailing.ts index 1b14384..6a23af9 100644 --- a/apps/sim-core/packages/core/src/util/exhaustMapWithTrailing.ts +++ b/apps/sim-core/packages/core/src/util/exhaustMapWithTrailing.ts @@ -7,7 +7,7 @@ import { Observable, ObservableInput, Subscription, from } from "rxjs"; export function exhaustMapWithTrailing( - fn: (value: T) => ObservableInput + fn: (value: T) => ObservableInput, ) { return (source: Observable) => new Observable((subscriber) => { @@ -70,7 +70,7 @@ export function exhaustMapWithTrailing( subscriber.complete(); } }, - }) + }), ); return subscription; diff --git a/apps/sim-core/packages/core/src/util/files/parse.spec.ts b/apps/sim-core/packages/core/src/util/files/parse.spec.ts index bff9859..2dcba6e 100644 --- a/apps/sim-core/packages/core/src/util/files/parse.spec.ts +++ b/apps/sim-core/packages/core/src/util/files/parse.spec.ts @@ -24,7 +24,7 @@ describe("parse", () => { const filePartTests: [ FilePathParts, - Omit + Omit, ][] = [ [ { diff --git a/apps/sim-core/packages/core/src/util/files/parse.ts b/apps/sim-core/packages/core/src/util/files/parse.ts index 3d7d329..b209d75 100644 --- a/apps/sim-core/packages/core/src/util/files/parse.ts +++ b/apps/sim-core/packages/core/src/util/files/parse.ts @@ -4,7 +4,7 @@ import type { FilePathParts, ParsedPath } from "./types"; /** * @todo can probably generate this */ -const extByMatch: { [match: string]: Ext } = { +const extByMatch: Record = { ".bpmn": Ext.Bpmn, ".csv": Ext.Csv, ".csv.json": Ext.CsvJson, @@ -21,7 +21,7 @@ const extByMatch: { [match: string]: Ext } = { ".txt": Ext.Txt, }; -export const extByName: { [name: string]: Ext } = { +export const extByName: Record = { README: Ext.Md, init: Ext.Json, globals: Ext.Json, @@ -31,7 +31,7 @@ export const extByName: { [name: string]: Ext } = { loading: Ext.Txt, }; -export const nameByMatch: { [match: string]: string } = { +export const nameByMatch: Record = { description: "README", initialState: "init", properties: "globals", diff --git a/apps/sim-core/packages/core/src/util/files/rename.ts b/apps/sim-core/packages/core/src/util/files/rename.ts index d3dc35c..87b5e9c 100644 --- a/apps/sim-core/packages/core/src/util/files/rename.ts +++ b/apps/sim-core/packages/core/src/util/files/rename.ts @@ -7,12 +7,12 @@ type RequiredFileKeys = Pick; export const destinationPathInUse = ( files: RequiredFileKeys[], sourceId: string | undefined | null, - destination: ParsedPath + destination: ParsedPath, ) => files.some((file) => file.kind === HcFileKind.Behavior && (sourceId ? sourceId !== file.id : true) ? file.path.formatted.toLowerCase() === destination.formatted.toLowerCase() - : false + : false, ); diff --git a/apps/sim-core/packages/core/src/util/files/types.ts b/apps/sim-core/packages/core/src/util/files/types.ts index 5ce23c7..51ffbb9 100644 --- a/apps/sim-core/packages/core/src/util/files/types.ts +++ b/apps/sim-core/packages/core/src/util/files/types.ts @@ -1,11 +1,11 @@ import type { Ext } from "./enums"; -export type FilePathParts = { +export interface FilePathParts { name: string; ext: Ext; dir?: string; root?: string; -}; +} export type ParsedPath = Required & { formatted: string; diff --git a/apps/sim-core/packages/core/src/util/fromStore.ts b/apps/sim-core/packages/core/src/util/fromStore.ts index 3502263..77b7629 100644 --- a/apps/sim-core/packages/core/src/util/fromStore.ts +++ b/apps/sim-core/packages/core/src/util/fromStore.ts @@ -8,4 +8,4 @@ import { InteropObservable, from } from "rxjs"; * @todo find out why */ export const fromStore = (store: Store) => - from((store as any) as InteropObservable); + from(store as any as InteropObservable); diff --git a/apps/sim-core/packages/core/src/util/getEmbedParams.ts b/apps/sim-core/packages/core/src/util/getEmbedParams.ts index 1204a53..ccb623a 100644 --- a/apps/sim-core/packages/core/src/util/getEmbedParams.ts +++ b/apps/sim-core/packages/core/src/util/getEmbedParams.ts @@ -13,14 +13,14 @@ export type ValidatedEmbedParams = { } & ParseAccessCodeParam; const validateEmbedParams = ( - params: ParseAccessCodeParam & HookRouter.QueryParams + params: ParseAccessCodeParam & HookRouter.QueryParams, ): params is ValidatedEmbedParams => typeof params.project === "string" && typeof params.ref === "string"; export const getEmbedParams = () => { const params = parseAccessCodeInParams( getSafeQueryParams(), - ProjectAccessScope.ReadEmbed + ProjectAccessScope.ReadEmbed, ); if (!validateEmbedParams(params)) { diff --git a/apps/sim-core/packages/core/src/util/getSafeQueryParams.ts b/apps/sim-core/packages/core/src/util/getSafeQueryParams.ts index 60a98db..1003506 100644 --- a/apps/sim-core/packages/core/src/util/getSafeQueryParams.ts +++ b/apps/sim-core/packages/core/src/util/getSafeQueryParams.ts @@ -1,7 +1,7 @@ import { memoize } from "lodash"; const memoizedSafeGetQueryParams = memoize((search: string) => - Object.fromEntries(new URLSearchParams(search)) + Object.fromEntries(new URLSearchParams(search)), ); /** diff --git a/apps/sim-core/packages/core/src/util/initSentry.ts b/apps/sim-core/packages/core/src/util/initSentry.ts deleted file mode 100644 index c58b1e5..0000000 --- a/apps/sim-core/packages/core/src/util/initSentry.ts +++ /dev/null @@ -1,50 +0,0 @@ -import * as Sentry from "@sentry/browser"; -import { CaptureConsole as CaptureConsoleIntegration } from "@sentry/integrations"; -import { Options } from "@sentry/types"; - -import { IS_DEV, IS_LOCAL } from "./api"; - -export let sentryConsoleLogAbortController = new AbortController(); - -export const initSentry = (integrations?: Options["integrations"]) => { - if (!IS_LOCAL) { - // Enable error reporting: - Sentry.init({ - dsn: "https://38b4aff591fa46f096b59d49d71c5d45@sentry.io/1509252", - release: WEBPACK_BUILD_STAMP, - environment: IS_DEV ? "Development" : "Production", - integrations: [ - new CaptureConsoleIntegration({ - levels: ["error"], - ...(integrations ?? []), - }), - ], - attachStacktrace: true, - - /** - * We delay the logging of console errors to the end of the current tick - * to ensure that ErrorBoundary has the opportunity to cancel it – this - * helps prevent double logging - */ - beforeSend(event) { - if (event.logger === "console") { - sentryConsoleLogAbortController = new AbortController(); - - const { signal } = sentryConsoleLogAbortController; - - return new Promise((resolve) => { - setImmediate(() => { - resolve(signal.aborted ? null : event); - }); - }); - } - - return event; - }, - }); - - // And put it in the console for us to access. - // @ts-ignore - window["Sentry"] = Sentry; - } -}; diff --git a/apps/sim-core/packages/core/src/util/monaco-config/completions-hstd.d.ts b/apps/sim-core/packages/core/src/util/monaco-config/completions-hstd.d.ts index 6fc2fba..90bc607 100644 --- a/apps/sim-core/packages/core/src/util/monaco-config/completions-hstd.d.ts +++ b/apps/sim-core/packages/core/src/util/monaco-config/completions-hstd.d.ts @@ -10,7 +10,7 @@ declare namespace hstd { function distanceBetween( agentA: Agent, agentB: Agent, - distanceFunction?: "manhattan" | "euclidean" | "euclidean_sq" | "chebyshev" + distanceFunction?: "manhattan" | "euclidean" | "euclidean_sq" | "chebyshev", ): number; /** * Return the unit vector of vec @@ -32,7 +32,7 @@ declare namespace hstd { neighbors: Agent[], max_radius?: number, min_radius?: number, - z_axis?: boolean + z_axis?: boolean, ); /** * Return all neighbors in front of the plane of the agent. The agent must have a direction property. Pass true to colinear to only return neighbors that lie on the direction vector @@ -40,7 +40,7 @@ declare namespace hstd { function neighborsInFront( agentA: Agent, neighbors: Agent[], - colinear?: boolean + colinear?: boolean, ); /** * Return all neighbors behind the plane of the agent. The agent must have a direction property. Pass true to colinear to only return neighbors that lie on the direction vector @@ -48,7 +48,7 @@ declare namespace hstd { function neighborsBehind( agentA: Agent, neighbors: Agent[], - colinear?: boolean + colinear?: boolean, ); /** @@ -73,7 +73,7 @@ declare namespace hstd.init { function scatter( count: number, topology: Topology, - template: Agent | AgentFunction + template: Agent | AgentFunction, ): Agent[]; /** @@ -102,7 +102,7 @@ declare namespace hstd.init { function createLayout( layout: string[][], templates: { [key: string]: Agent }, - offset: number[] + offset: number[], ): Agent[]; } diff --git a/apps/sim-core/packages/core/src/util/monaco-config/completions.d.ts b/apps/sim-core/packages/core/src/util/monaco-config/completions.d.ts index bef4849..0202325 100644 --- a/apps/sim-core/packages/core/src/util/monaco-config/completions.d.ts +++ b/apps/sim-core/packages/core/src/util/monaco-config/completions.d.ts @@ -19,54 +19,54 @@ declare interface AgentState { /** * Return the value of field in the agent's state */ - static get: (field: AgentField) => any; + get: (field: AgentField) => any; /** * Set the value of field to val in the agent's state */ - static set: (field: AgentField, val: any) => void; + set: (field: AgentField, val: any) => void; /** * Append a message to the agent's "messages" field. The message is formatted as { to, type, data } */ - static addMessage: (to: string | string[], type: string, data?: any) => void; + addMessage: (to: string | string[], type: string, data?: any) => void; /** * Replace the value of field by appling func to the current value */ - static modify: (field: AgentField, func: (val: any) => any) => void; + modify: (field: AgentField, func: (val: any) => any) => void; /** * Return the index of the currently executing behavior in the agent's behavior chain. */ - static behaviorIndex: () => number; + behaviorIndex: () => number; } declare interface AgentContext { /** * Return an array of all neighbors visible to the agent */ - static neighbors: () => any; + neighbors: () => any; /** * Return an object containing all global variables defined in globals.json */ - static globals: () => any; + globals: () => any; /** * Return an array of all messages sent to the agent in the previous time step */ - static messages: () => any; + messages: () => any; /** * Return an object containing all datasets imported to the simulation. Access individual datasets by their names */ - static data: () => any; + data: () => any; /** * Return the current step number of the simulation. */ - static step: () => number; + step: () => number; } declare interface Topology { - static x_bounds: number[] | undefined; - static y_bounds: number[] | undefined; - static z_bounds: number[] | undefined; + x_bounds: number[] | undefined; + y_bounds: number[] | undefined; + z_bounds: number[] | undefined; } declare type Agent = { @@ -79,10 +79,10 @@ declare interface InitContext { /** * Return an object containing all global variables defined in globals.json */ - static globals: () => any; + globals: () => any; /** * Return an object containing all datasets imported to the simulation. Access individual datasets by their names */ - static data: () => any; + data: () => any; } diff --git a/apps/sim-core/packages/core/src/util/monaco-config/monaco-js.ts b/apps/sim-core/packages/core/src/util/monaco-config/monaco-js.ts index 66280ed..a91ab4a 100644 --- a/apps/sim-core/packages/core/src/util/monaco-config/monaco-js.ts +++ b/apps/sim-core/packages/core/src/util/monaco-config/monaco-js.ts @@ -1,7 +1,5 @@ -// @ts-ignore -import completions from "!!raw-loader!./completions.d.ts"; -// @ts-ignore -import completionsHStd from "!!raw-loader!./completions-hstd.d.ts"; +import completions from "./completions.d.ts?raw"; +import completionsHStd from "./completions-hstd.d.ts?raw"; import { languages } from "monaco-editor"; export function configureJsCompletions() { @@ -21,6 +19,6 @@ export function configureJsCompletions() { languages.typescript.javascriptDefaults.addExtraLib(completions); languages.typescript.javascriptDefaults.addExtraLib(completionsHStd); languages.typescript.javascriptDefaults.addExtraLib( - completionsHStd?.replace(/hstd/g, "hash_stdlib") + completionsHStd?.replace(/hstd/g, "hash_stdlib"), ); } diff --git a/apps/sim-core/packages/core/src/util/monaco-config/monaco-theme.ts b/apps/sim-core/packages/core/src/util/monaco-config/monaco-theme.ts index f9ed5d8..31ac59a 100644 --- a/apps/sim-core/packages/core/src/util/monaco-config/monaco-theme.ts +++ b/apps/sim-core/packages/core/src/util/monaco-config/monaco-theme.ts @@ -3,13 +3,16 @@ import produce, { Draft } from "immer"; import { theme } from "../theme"; -export const monacoTheme = produce(nightOwl as any, (draft: Draft) => { - draft.colors["editor.background"] = theme["editor-background"]; - draft.colors["editor.lineHighlightBackground"] = - theme["editor-background-highlight"]; +export const monacoTheme = produce( + nightOwl as any, + (draft: Draft<{ colors: any; rules: [any] }>) => { + draft.colors["editor.background"] = theme["editor-background"]; + draft.colors["editor.lineHighlightBackground"] = + theme["editor-background-highlight"]; - draft.rules.unshift({ - token: "", - background: draft.colors["editor.background"].slice(1), - }); -}); + draft.rules.unshift({ + token: "", + background: draft.colors["editor.background"].slice(1), + }); + }, +); diff --git a/apps/sim-core/packages/core/src/util/palette.ts b/apps/sim-core/packages/core/src/util/palette.ts index 29cbad3..e3103ed 100644 --- a/apps/sim-core/packages/core/src/util/palette.ts +++ b/apps/sim-core/packages/core/src/util/palette.ts @@ -1,27 +1,23 @@ -import * as o from "fp-ts/es6/Option"; - import { mod } from "./math"; import { themeNumbers } from "./theme"; -export const mapColor: (src: string, sd?: string) => o.Option = ( +export const mapColor: (src: string, sd?: string) => number | null = ( src, - seed + seed, ) => - o.fromNullable( - src === "random" - ? themeColor( - mod(hashNum(seed ?? Math.random().toString(36).substring(7)), 1) - ) - : src === "primary" + src === "random" + ? themeColor( + mod(hashNum(seed ?? Math.random().toString(36).substring(7)), 1), + ) + : src === "primary" ? themeNumbers.purple : src === "accent" - ? themeNumbers.green - : !isNaN(Number(src)) - ? themeColor(mod(Number(src) / themeBase.length, 1)) - : themeNumbers.hasOwnProperty(src) - ? themeNumbers[src] - : undefined - ); + ? themeNumbers.green + : !isNaN(Number(src)) + ? themeColor(mod(Number(src) / themeBase.length, 1)) + : Object.prototype.hasOwnProperty.call(themeNumbers, src) + ? themeNumbers[src] + : null; const themeBase = [ themeNumbers.purple, @@ -56,7 +52,7 @@ const themeColor: (r: number) => number = (val) => { // From https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript const hash = (str: string) => { - var hash = 0, + let hash = 0, idx, chr; if (str.length === 0) return hash; diff --git a/apps/sim-core/packages/core/src/util/parseAccessCodeInParams.ts b/apps/sim-core/packages/core/src/util/parseAccessCodeInParams.ts index 788cd78..4b7aa72 100644 --- a/apps/sim-core/packages/core/src/util/parseAccessCodeInParams.ts +++ b/apps/sim-core/packages/core/src/util/parseAccessCodeInParams.ts @@ -6,14 +6,16 @@ import { } from "../shared/scopes"; import { ProjectAccessParsed } from "../features/project/types"; -export type AccessCodeParam = { accessCode?: string | null }; +export interface AccessCodeParam { + accessCode?: string | null; +} -export type ParseAccessCodeParam = { +export interface ParseAccessCodeParam { access?: ProjectAccessParsed; -}; +} const isValidAccessLevel = ( - level: string + level: string, ): level is ProjectAccessCodeAccessType => ProjectAccessCodeAccessTypes.includes(level as any); @@ -26,17 +28,17 @@ const parseAccessLevel = (level: string): ProjectAccessCodeAccessType => { }; export const parseAccessCodeInParams = < - T extends Record, any> + T extends Record, any>, >( { accessCode, ...params }: AccessCodeParam & T, - requiredScope?: ProjectAccessScope + requiredScope?: ProjectAccessScope, ): ParseAccessCodeParam & T => { const castParams = params as T; if (accessCode) { try { const json = atob(accessCode); - const parsed = JSON.parse(json); + const parsed = JSON.parse(json) as { accessLevel: string }; const accessLevel = parseAccessLevel(parsed.accessLevel); if ( @@ -54,9 +56,9 @@ export const parseAccessCodeInParams = < } } catch (err) { console.warn("Cannot parse access code", err); - return castParams as T; + return castParams; } } - return castParams as T; + return castParams; }; diff --git a/apps/sim-core/packages/core/src/util/parseBehaviorKeysQuery.ts b/apps/sim-core/packages/core/src/util/parseBehaviorKeysQuery.ts index 3a39ef0..ebbe6f6 100644 --- a/apps/sim-core/packages/core/src/util/parseBehaviorKeysQuery.ts +++ b/apps/sim-core/packages/core/src/util/parseBehaviorKeysQuery.ts @@ -7,7 +7,7 @@ import { validateBehaviorKeyName } from "../features/files/validate"; export const parseBehaviorKeysQuery = async ( file: HcBehaviorFile, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { let result: { error?: { code: string } | null; @@ -30,7 +30,7 @@ export const parseBehaviorKeysQuery = async ( result = await req.json(); - if (!req.ok || result.error || !result.success) { + if (!req.ok || (result.error ?? !result.success)) { console.error("Cannot fetch behavior keys", result); } } catch (err) { @@ -40,8 +40,8 @@ export const parseBehaviorKeysQuery = async ( if (result?.keys) { return Object.fromEntries( Object.entries(result.keys).filter( - ([key]) => validateBehaviorKeyName(key).length === 0 - ) + ([key]) => validateBehaviorKeyName(key).length === 0, + ), ); } diff --git a/apps/sim-core/packages/core/src/util/postFormData.ts b/apps/sim-core/packages/core/src/util/postFormData.ts index 20d109c..cb02558 100644 --- a/apps/sim-core/packages/core/src/util/postFormData.ts +++ b/apps/sim-core/packages/core/src/util/postFormData.ts @@ -1,7 +1,7 @@ export const postFormData = async ( url: string, formData: FormData, - reportProgress?: (value: number) => void + reportProgress?: (value: number) => void, ) => { await new Promise((resolve, reject) => { const request = new XMLHttpRequest(); diff --git a/apps/sim-core/packages/core/src/util/prepareFormDataWithFile.ts b/apps/sim-core/packages/core/src/util/prepareFormDataWithFile.ts index b4bac72..fcd5031 100644 --- a/apps/sim-core/packages/core/src/util/prepareFormDataWithFile.ts +++ b/apps/sim-core/packages/core/src/util/prepareFormDataWithFile.ts @@ -1,6 +1,6 @@ export const prepareFormDataWithFile = ( file: File, - fields: Record = {} + fields: Record = {}, ) => { const formData = new FormData(); diff --git a/apps/sim-core/packages/core/src/util/resizeObserverPromise.ts b/apps/sim-core/packages/core/src/util/resizeObserverPromise.ts index e3bdd03..05172ee 100644 --- a/apps/sim-core/packages/core/src/util/resizeObserverPromise.ts +++ b/apps/sim-core/packages/core/src/util/resizeObserverPromise.ts @@ -1,10 +1,12 @@ -export let resizeObserverPromise = Promise.resolve(window.ResizeObserver!); +export let resizeObserverPromise = Promise.resolve(window.ResizeObserver); if (!window.ResizeObserver) { + //@ts-expect-error Todo: Clean out this polyfill. resizeObserverPromise = import( /* webpackChunkName: "ResizeObserver-polyfill" */ "@juggle/resize-observer/lib/exports/resize-observer" ) .then((module) => { + //@ts-expect-error Todo: Clean out this polyfill. window.ResizeObserver = module.ResizeObserver; return module.ResizeObserver; diff --git a/apps/sim-core/packages/core/src/util/safeParseJsonTracked.ts b/apps/sim-core/packages/core/src/util/safeParseJsonTracked.ts index 98b64cd..68ecca5 100644 --- a/apps/sim-core/packages/core/src/util/safeParseJsonTracked.ts +++ b/apps/sim-core/packages/core/src/util/safeParseJsonTracked.ts @@ -1,11 +1,12 @@ import { Json } from "@hashintel/engine-web"; import { ParsedAnalysis, ParsedGlobals } from "../features/files/types"; +import { getErrorMessage } from "../features/utils"; // type SafeParseJsonTrackedReturn = () => T; export const safeParseJsonTracked = ( - inputString?: string | null + inputString?: string | null, ): { lastInputString: null | string; parsed: null | T | Json; @@ -20,7 +21,7 @@ export const safeParseJsonTracked = ( try { parsed = JSON.parse(inputString); } catch (err) { - error = err.message; + error = getErrorMessage(err); parsed = null; } return { diff --git a/apps/sim-core/packages/core/src/util/setSignalTimeout.ts b/apps/sim-core/packages/core/src/util/setSignalTimeout.ts index 49daa48..b23c3d3 100644 --- a/apps/sim-core/packages/core/src/util/setSignalTimeout.ts +++ b/apps/sim-core/packages/core/src/util/setSignalTimeout.ts @@ -1,7 +1,7 @@ export const setSignalTimeout = ( handler: Function, ms: number, - signal: AbortSignal + signal: AbortSignal, ) => { const timeout = setTimeout(() => { if (!signal.aborted) { diff --git a/apps/sim-core/packages/core/src/util/theme.ts b/apps/sim-core/packages/core/src/util/theme.ts index ed7b7ae..4a26511 100644 --- a/apps/sim-core/packages/core/src/util/theme.ts +++ b/apps/sim-core/packages/core/src/util/theme.ts @@ -1,5 +1,5 @@ -type Theme = { [key: string]: string }; -type ThemeNumber = { [key: string]: number }; +type Theme = Record; +type ThemeNumber = Record; // export to the JS world for easy reference: export const theme: Theme = { @@ -76,5 +76,5 @@ export const themeNumbers: ThemeNumber = Object.fromEntries( Object.entries(theme).map(([key, value]) => [ key, parseInt(value.substr(1), 16), - ]) + ]), ); diff --git a/apps/sim-core/packages/core/src/util/types.ts b/apps/sim-core/packages/core/src/util/types.ts index 952ee77..77e9331 100644 --- a/apps/sim-core/packages/core/src/util/types.ts +++ b/apps/sim-core/packages/core/src/util/types.ts @@ -1,6 +1,6 @@ import { ExperimentRun } from "@hashintel/engine-web"; -export type NamedBehaviorSrc = { +export interface NamedBehaviorSrc { name: string; shortname: string; behaviorSrc: string; @@ -10,44 +10,42 @@ export type NamedBehaviorSrc = { * @todo this field is unused I believe – remove it? */ dependencies: string[]; -}; +} -export type InitSrc = { +export interface InitSrc { id: string; name: string; initSrc: string; -}; +} -export type SimulationSrc = { +export interface SimulationSrc { initializers: InitSrc[]; propertiesSrc: string; behaviors: NamedBehaviorSrc[]; analysisSrc: string; dependenciesSrc: string; experimentsSrc: string; -}; +} /** * @deprecated * @use auto generated types * @todo remove this */ -export type APISimulationRun = { +export interface APISimulationRun { id: string; stepsLink?: string | null; analysisLink?: string | null; - propertyValues: { - [key: string]: number; - }; + propertyValues: Record; metricOutcome?: number | null; -}; +} /** * @deprecated * @use auto generated types * @todo remove this */ -export type APIExperimentRun = { +export interface APIExperimentRun { id: string; name: string; experimentSrc: any; @@ -57,4 +55,4 @@ export type APIExperimentRun = { metricObjective?: ExperimentRun["metricObjective"] | null; metricName?: string | null; }; -}; +} diff --git a/apps/sim-core/packages/core/src/util/validation.ts b/apps/sim-core/packages/core/src/util/validation.ts index e878f04..fcb07e4 100644 --- a/apps/sim-core/packages/core/src/util/validation.ts +++ b/apps/sim-core/packages/core/src/util/validation.ts @@ -1,7 +1,7 @@ const invalidCharactersRegExp = /[^\w|\d|\-|_]/; export const validateFileName: (name: string) => string | undefined = ( - name + name, ) => { if (invalidCharactersRegExp.test(name)) { return "ONLY LETTERS, NUMBERS, - & _ ARE ALLOWED (NO SPACES)"; @@ -13,5 +13,5 @@ export const validateFileName: (name: string) => string | undefined = ( }; export const stripInvalidFileNameCharacters: (name: string) => string = ( - name + name, ) => name.replace(new RegExp(invalidCharactersRegExp, "g"), ""); diff --git a/apps/sim-core/packages/core/src/util/withSignal.ts b/apps/sim-core/packages/core/src/util/withSignal.ts index 62db273..ff384f4 100644 --- a/apps/sim-core/packages/core/src/util/withSignal.ts +++ b/apps/sim-core/packages/core/src/util/withSignal.ts @@ -3,7 +3,7 @@ */ export function withSignal( promise: Promise & { abort(reason?: string): void }, - signal?: AbortSignal + signal?: AbortSignal, ) { if (!signal) { return promise; diff --git a/apps/sim-core/packages/core/src/util/yieldToBrowser.ts b/apps/sim-core/packages/core/src/util/yieldToBrowser.ts index ab6ed31..7ecd6e4 100644 --- a/apps/sim-core/packages/core/src/util/yieldToBrowser.ts +++ b/apps/sim-core/packages/core/src/util/yieldToBrowser.ts @@ -17,7 +17,7 @@ export const yieldToBrowser = () => port2.removeEventListener("message", yieldToBrowserMessageHandler); resolve(); } - } + }, ); port1.postMessage(uid); }); diff --git a/apps/sim-core/packages/core/src/vite-env.d.ts b/apps/sim-core/packages/core/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/apps/sim-core/packages/core/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/apps/sim-core/packages/core/src/workers/analyzer-worker/index.ts b/apps/sim-core/packages/core/src/workers/analyzer-worker/index.ts index e006edf..f1a7bb9 100644 --- a/apps/sim-core/packages/core/src/workers/analyzer-worker/index.ts +++ b/apps/sim-core/packages/core/src/workers/analyzer-worker/index.ts @@ -3,10 +3,10 @@ import { AnalyzerRunner } from "@hashintel/engine-web"; const runner = new AnalyzerRunner(); -RegisterPromiseWorker(async (message) => { +RegisterPromiseWorker((message) => { // Validate the message is something we care about if (typeof message === "object") { - if ((message as {}).hasOwnProperty("type")) { + if (Object.prototype.hasOwnProperty.call(message, "type")) { return runner.handleRequest(message); } } diff --git a/apps/sim-core/packages/core/tests/jest.config.js b/apps/sim-core/packages/core/tests/jest.config.cjs similarity index 100% rename from apps/sim-core/packages/core/tests/jest.config.js rename to apps/sim-core/packages/core/tests/jest.config.cjs diff --git a/apps/sim-core/packages/core/tsconfig.json b/apps/sim-core/packages/core/tsconfig.json index b16f14f..666e5ae 100644 --- a/apps/sim-core/packages/core/tsconfig.json +++ b/apps/sim-core/packages/core/tsconfig.json @@ -4,8 +4,15 @@ "noEmit": true, // Do not emit outputs. "incremental": false, // Enable incremental compilation "isolatedModules": true, // Transpile each file as a separate module (similar to 'ts.transpileModule'). - "skipLibCheck": true + "skipLibCheck": true // set to true when needed to work around upstream errors caused by isolatedModules }, - "include": ["site.d.ts", "scripts/**/*", "src/**/*"], - "exclude": ["node_modules"] + "include": [ + "vite.config.ts", + "site.d.ts", + "scripts/**/*", + "src/**/*", + "postcss.config.js", + ".eslintrc.cjs", + "*.cjs" + ] } diff --git a/apps/sim-core/packages/core/vite.config.ts b/apps/sim-core/packages/core/vite.config.ts new file mode 100644 index 0000000..98dc744 --- /dev/null +++ b/apps/sim-core/packages/core/vite.config.ts @@ -0,0 +1,65 @@ +import { defineConfig } from "vite"; +import monacoEditorPluginCJS from "vite-plugin-monaco-editor"; +import react from "@vitejs/plugin-react"; +import timestampCJS from "time-stamp"; +import wasm from "vite-plugin-wasm"; +import topLevelAwait from "vite-plugin-top-level-await"; + +//commonJS adaptor shims +const monacoEditorPlugin = (monacoEditorPluginCJS as any).default; +const utc = (timestampCJS as any).utc; + +export default defineConfig(({ mode }) => { + const isProduction = mode === "production"; + + const BUILD_STAMP = [ + "hash", + isProduction ? "prod" : "dev", + utc("YYYY-MM-DD-THHmm_ssms"), + ].join("-"); + + return { + root: "src", + build: { + // Relative to the root + outDir: "../dist", + emptyOutDir: true, + rollupOptions: { + input: { + main: "./src/index.html", + embed: "./src/embed.html", + }, + }, + reportCompressedSize: false, + minify: true, + sourcemap: false, + }, + define: { + BUILD_STAMP: JSON.stringify(BUILD_STAMP), + }, + server: { + port: 8080, + }, + preview: { + port: 8080, + open: true, + }, + resolve: { + alias: { + // Aliases preserved from old webpack config for migration, should investigate removing. + lodash: "lodash-es", + "lodash.omit": "lodash-es/omit", + "lodash.pick": "lodash-es/pick", + "@juggle/resize-observer$": "empty-module", + + // mapgl bug workaround https://github.com/alex3165/react-mapbox-gl/issues/822#issuecomment-835781698 + "react-mapbox-gl": "react-mapbox-gl/lib", + }, + }, + worker: { + plugins: () => [wasm(), topLevelAwait()], + format: "es", + }, + plugins: [wasm(), topLevelAwait(), react(), monacoEditorPlugin({})], + }; +}); diff --git a/apps/sim-core/packages/core/webpack.config.js b/apps/sim-core/packages/core/webpack.config.js deleted file mode 100644 index 3d8931c..0000000 --- a/apps/sim-core/packages/core/webpack.config.js +++ /dev/null @@ -1,342 +0,0 @@ -const path = require("path"); -const timestamp = require("time-stamp"); -const urljoin = require("url-join"); -const webpack = require("webpack"); -const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); -const HtmlWebpackPlugin = require("html-webpack-plugin"); -const ManifestPlugin = require("webpack-manifest-plugin"); -const MonacoWebpackPlugin = require("monaco-editor-webpack-plugin"); -const SentryWebpackPlugin = require("@sentry/webpack-plugin"); -const WebpackMessages = require("webpack-messages"); -const { RetryChunkLoadPlugin } = require("webpack-retry-chunk-load-plugin"); -const { UnusedModulesWebpackPlugin } = require("unused-modules-webpack-plugin"); -require("dotenv").config(); - -const { - description: defaultMetaDescription, - image: defaultMetaImage, -} = require("./src/metaTags.json"); - -module.exports = (_env, argv) => { - const isProduction = argv.mode === "production"; - - const BUILD_STAMP = [ - "hash", - isProduction ? "prod" : "dev", - timestamp.utc("YYYY-MM-DD-THHmm_ssms"), - ] - .concat( - process && process.env && process.env.CIRCLE_PR_NUMBER - ? ["pr", process.env.CIRCLE_PR_NUMBER] - : [] - ) - .join("-"); - - const OUTPUT_PATH = path.resolve(__dirname, `dist/${BUILD_STAMP}/`); - const PUBLIC_PATH = `/${BUILD_STAMP}/`; - - const sharedManifest = { BUILD_STAMP: BUILD_STAMP }; - - const browserConfig = { - entry: { - index: path.join(__dirname, "/src/index.tsx"), - embed: path.join(__dirname, "/src/embed.tsx"), - }, - output: { - path: OUTPUT_PATH, - filename: "[name].js", - publicPath: PUBLIC_PATH, - }, - resolve: { - extensions: [ - ".ts", // Add typescript support - ".tsx", // Add typescript + react support - ".js", // Preserving webpack default - ".jsx", // Preserving webpack default - ".json", // Preserving webpack default - ".css", // Preserving webpack default - ], - alias: { - lodash: "lodash-es", - "lodash.omit": "lodash-es/omit", - "lodash.pick": "lodash-es/pick", - - // We want to control how this is included in the bundle - "@juggle/resize-observer$": "empty-module", - }, - }, - module: { - rules: [ - /** - * Work around an issue with simplebar CSS being incorrectly tree shaken - * Remove when the below issue is fixed - * @see https://github.com/Grsmto/simplebar/issues/511 - */ - { - test: /node_modules\/simplebar-react\/dist\/simplebar.min.css/, - sideEffects: true, - }, - { - test: /\.s?css$/i, - use: [ - "style-loader", - "css-loader", - { - loader: "postcss-loader", - options: { - postcssOptions: { - plugins: [["autoprefixer"]], - }, - }, - }, - "sass-loader", - ], - }, - { - test: /\.(t|j)sx?$/, - exclude: /node_modules/, - use: { - loader: "babel-loader", - options: { - cacheDirectory: true, - // cacheCompression: false - }, - }, - }, - { - test: /\.(png|woff|woff2|eot|ttf|svg)$/, - loader: "url-loader", - options: { limit: 100000 }, - }, - ], - }, - plugins: [ - new webpack.DefinePlugin({ - // Share PUBLIC_PATH with our app to help us with dynamic loading, e.g. the webworker path. - // ...The value is injected into the output verbatim, so we must manually put "'s on it. - WEBPACK_PUBLIC_PATH: `"${PUBLIC_PATH}"`, - WEBPACK_BUILD_STAMP: `"${BUILD_STAMP}"`, - LOCAL_API: process.env.LOCAL_API === "true", - MAPBOX_API_TOKEN: process.env.MAPBOX_API_TOKEN - ? `"${process.env.MAPBOX_API_TOKEN}"` - : `null`, - }), - /** - * for a list of all available options/languages/features - * @see https://github.com/microsoft/monaco-editor-webpack-plugin#options - */ - new MonacoWebpackPlugin({ - languages: [ - "javascript", - "json", - "markdown", - "python", - "rust", - "typescript", // Monaco javascript depends on typescript - ], - }), - new WebpackMessages({ - name: "client", - logger: (str) => console.log(`>> ${str}`), - }), - new HtmlWebpackPlugin({ - template: path.join(__dirname, "/src/index.html"), - chunks: ["index"], - templateParameters: { - meta_description: defaultMetaDescription, - meta_image: defaultMetaImage, - }, - }), - new HtmlWebpackPlugin({ - template: path.join(__dirname, "/src/index.html"), - chunks: ["embed"], - filename: "embed.html", - templateParameters: { - meta_description: defaultMetaDescription, - meta_image: defaultMetaImage, - }, - }), - new ManifestPlugin({ - seed: sharedManifest, - }), - new ForkTsCheckerWebpackPlugin(), - new UnusedModulesWebpackPlugin({ - patterns: [ - "src/**/**.ts", - "src/**/**.tsx", - "!src/**/types.ts", - "!src/**/mocks.ts", - "!src/util/simulation/mock-coreweb.ts", - "!src/workers/analyzer-worker/index.ts", - "!src/workers/simulation-worker/index.ts", - "!src/setupTests.ts", - "!src/**/**.spec.ts", - "!src/**/**.spec.tsx", - "!src/**/**.d.ts", - ], - globOptions: { ignore: "node_modules/**/*" }, - }), - /** - * v2.x of this plugin must be used if we upgrade to Webpack 5+. - * @todo remove this comment when using Webpack 5+. - * */ - new RetryChunkLoadPlugin({ - maxRetries: 2, - }), - ], - devtool: "source-map", - devServer: { - // does not work with the sandbox iframe. - disableHostCheck: true, - hot: false, - inline: false, - stats: "errors-only", - // https://stackoverflow.com/a/34125010 - // Instruct webpack-dev-server to behave like a SPA - historyApiFallback: { - rewrites: [ - { from: /^\/embed.html/, to: urljoin(PUBLIC_PATH, "embed.html") }, - { from: /./, to: urljoin(PUBLIC_PATH, "index.html") }, - ], - }, - }, - optimization: { - usedExports: true, - splitChunks: { - chunks: "all", - }, - }, - }; - - const simulationWorkerConfig = { - entry: path.join(__dirname, "./src/workers/simulation-worker/index.ts"), - target: "webworker", - output: { - path: OUTPUT_PATH, - filename: "simulationworker.js", - publicPath: PUBLIC_PATH, - }, - resolve: { - extensions: [ - ".ts", // Add typescript support - // ".tsx", // Add typescript + react support - ".js", // Preserving webpack default - // ".jsx", // Preserving webpack default - ".json", // Preserving webpack default - ".css", // Preserving webpack default - ], - }, - module: { - rules: [ - { - test: /\.(j|t)sx?$/, - exclude: /node_modules/, - use: { - loader: "babel-loader", - options: { - cacheDirectory: true, - }, - }, - }, - { - test: /\.py$/i, - use: [ - { - loader: "raw-loader", - options: { - esModule: false, - }, - }, - ], - }, - ], - }, - devtool: "source-map", - plugins: [ - new ManifestPlugin({ - seed: sharedManifest, - }), - ], - }; - - const analyzerWorkerConfig = { - entry: path.join(__dirname, "./src/workers/analyzer-worker/index.ts"), - target: "webworker", - output: { - path: OUTPUT_PATH, - filename: "analyzerworker.js", - publicPath: PUBLIC_PATH, - }, - resolve: { - extensions: [ - ".ts", // Add typescript support - // ".tsx", // Add typescript + react support - ".js", // Preserving webpack default - // ".jsx", // Preserving webpack default - ".json", // Preserving webpack default - ".css", // Preserving webpack default - ], - }, - module: { - rules: [ - { - test: /\.(j|t)sx?$/, - exclude: /node_modules/, - use: { - loader: "babel-loader", - options: { - cacheDirectory: true, - // cacheCompression: false - }, - }, - }, - ], - }, - devtool: "source-map", - plugins: [ - new ManifestPlugin({ - seed: sharedManifest, - }), - ], - }; - - // Migration shim - // Sentry disabled during hCore migration - if (isProduction && false) { - const sentryPlugin = new SentryWebpackPlugin({ - authToken: process.env.SENTRY_AUTH_TOKEN, - include: `./dist/${BUILD_STAMP}`, - org: "hashintel", - project: "hash-core", - release: BUILD_STAMP, - urlPrefix: `~/${BUILD_STAMP}/`, - }); - browserConfig.plugins.push(sentryPlugin); - simulationWorkerConfig.plugins.push(sentryPlugin); - analyzerWorkerConfig.plugins.push(sentryPlugin); - } - - if (argv["copy-index-to-root"]) { - /** - * Also output index.html to the root of the dist/ directory so that the contents of dist/ - * can be served directly by a webserver. - * - * This is necessary because JS scripts are injected into HTML files assuming a `/[BUILD_STAMP]/[filename]` path, - * which means index.html must be located above `/[BUILD_STAMP]/`. The default config outputs it to `/[BUILD_STAMP]/`. - * The default config is to allow for past versions of the app to be retained in the dist/ directory. - */ - browserConfig.plugins.push( - new HtmlWebpackPlugin({ - template: path.join(__dirname, "/src/index.html"), - chunks: ["index"], - filename: "../index.html", - templateParameters: { - meta_description: defaultMetaDescription, - meta_image: defaultMetaImage, - }, - }) - ); - } - - return [browserConfig, simulationWorkerConfig, analyzerWorkerConfig]; -}; diff --git a/apps/sim-core/packages/engine-web/babel.config.js b/apps/sim-core/packages/engine-web/babel.config.js index dc98224..30c7d1b 100644 --- a/apps/sim-core/packages/engine-web/babel.config.js +++ b/apps/sim-core/packages/engine-web/babel.config.js @@ -4,8 +4,5 @@ module.exports = { ["@babel/preset-env", { useBuiltIns: "usage", corejs: { version: 3 } }], "@babel/preset-typescript", ], - plugins: [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-proposal-numeric-separator", - ], + plugins: [], }; diff --git a/apps/sim-core/packages/engine-web/package.json b/apps/sim-core/packages/engine-web/package.json index 0c956a1..ebca0d4 100644 --- a/apps/sim-core/packages/engine-web/package.json +++ b/apps/sim-core/packages/engine-web/package.json @@ -10,13 +10,13 @@ "build": "npx tsc", "prebuild:node": "wasm-pack build --target nodejs --out-dir wasm/node --out-name hash", "build:node": "tsc --module commonjs --outdir dist-node", - "fmt": "prettier \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\" --write; eslint --quiet --fix \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\"", - "fmt-check": "prettier \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\" --check || exit 1; eslint --quiet \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\"", + "fmt": "prettier --write --cache \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\" && eslint --quiet --fix \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\"", + "lint": "prettier --check --cache \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\" && eslint --quiet \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\" && tsc --noEmit", "pretest": "yarn prebuild:node", "test": "jest", "prepare": "npx npm-run-all clean build build:node", - "prod-env": "cross-env-shell NODE_OPTIONS=--max_old_space_size=4096 NODE_ENV=production", - "dev-env": "cross-env-shell NODE_OPTIONS=--max_old_space_size=4096 NODE_ENV=development", + "prod-env": "cross-env-shell NODE_OPTIONS=\"--max_old_space_size=4096 --openssl-legacy-provider\" NODE_ENV=production", + "dev-env": "cross-env-shell NODE_OPTIONS=\"--max_old_space_size=4096 --openssl-legacy-provider\" NODE_ENV=development", "build-stdlib": "yarn prod-env webpack --mode production", "build-stdlib-dev": "yarn dev-env webpack --mode development" }, @@ -42,5 +42,6 @@ }, "main": "dist-node/index.js", "module": "dist/index.js", - "types": "dist/index.d.ts" + "types": "dist/index.d.ts", + "devDependencies": {} } diff --git a/apps/sim-core/packages/engine-web/src/engine-web/analysis/analyzer.ts b/apps/sim-core/packages/engine-web/src/engine-web/analysis/analyzer.ts index ea31eb3..eb44ef3 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/analysis/analyzer.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/analysis/analyzer.ts @@ -15,7 +15,7 @@ export class AnalyzerRunner { return { type: "analyze", outputs: Object.values(request.data).map((a) => - this.analyzer.analyze(a) + this.analyzer.analyze(a), ), }; diff --git a/apps/sim-core/packages/engine-web/src/engine-web/analysis/evalAnalysis.ts b/apps/sim-core/packages/engine-web/src/engine-web/analysis/evalAnalysis.ts index 67b1190..82bcae2 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/analysis/evalAnalysis.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/analysis/evalAnalysis.ts @@ -2,9 +2,7 @@ import { AgentState, OutputDefinition, OutputFn, OutputSeries } from "../../"; import { Comparison, EvalError, Op } from "../simulation"; import { PlotDefinition } from "./plots"; -export function evalAnalysis( - analysisSrc: string -): { +export function evalAnalysis(analysisSrc: string): { outputs: OutputDefinition[]; plots: PlotDefinition[]; } { @@ -31,9 +29,9 @@ export function evalAnalysis( entry[1].map((op) => op.op === "filter" && Array.isArray(op.value) ? op.value.map((val) => ({ ...op, value: val })) - : [op] + : [op], ), - ] as [string, Op[][]] + ] as [string, Op[][]], ) .flatMap( (entry: [string, Op[][]]) => @@ -49,16 +47,16 @@ export function evalAnalysis( [ name + "_" + (op as { value: any }).value!, opsa.concat([op]), - ] as [string, Op[]] + ] as [string, Op[]], ) : // if it's just a single op, concat it to all the entries so far - [[name, opsa.concat(op)]] + [[name, opsa.concat(op)]], ), /* start with just the name */ [[entry[0], []]] as [ string, - Op[] - ][] - ) as [string, Op[]][] + Op[], + ][], + ) as [string, Op[]][], ) .map(([name, ops]: [string, Op[]]) => ({ name, @@ -69,8 +67,8 @@ export function evalAnalysis( (plotDefinition: PlotDefinition, i: number): PlotDefinition => ({ ...plotDefinition, layout: { - width: ("50%" as unknown) as number, // gross but it works - height: ("40%" as unknown) as number, + width: "50%" as unknown as number, // gross but it works + height: "40%" as unknown as number, ...plotDefinition.layout, }, position: { @@ -78,7 +76,7 @@ export function evalAnalysis( y: `${Math.floor(i / 2) * 40}%`, ...plotDefinition.position, }, - }) + }), ) ?? [], }; } catch (e) { @@ -92,7 +90,7 @@ const nestedAccess = (accessor: string, val: any) => function opChain(ops: Op[]): OutputFn { return ops.reduce( (fn, op) => (arr) => OpFn(op)(fn(arr) as any[]), - ((state: AgentState[]) => state) as (as: any[]) => any[] | number + ((state: AgentState[]) => state) as (as: any[]) => any[] | number, ); } @@ -117,7 +115,7 @@ const OpFn = (op: Op): ((as: any[]) => any[] | number) => { case "filter": return (as: any[]) => as.filter((a: any) => - ComparisonFn[op.comparison](nestedAccess(op.field, a), op.value) + ComparisonFn[op.comparison](nestedAccess(op.field, a), op.value), ); } }; @@ -168,7 +166,7 @@ function splitBy(field: string, options: any[], rawFn: Function | Chain) { return fn( list.filter((a) => match(a[field], option)), series, - context + context, ); }); } @@ -331,7 +329,7 @@ class Chain { return ( slice.reduce( (acc, x) => acc + (x && !(x instanceof Array) ? x : 0), - 0 + 0, ) / slice.length ); }); diff --git a/apps/sim-core/packages/engine-web/src/engine-web/analysis/plots.ts b/apps/sim-core/packages/engine-web/src/engine-web/analysis/plots.ts index b6cf79d..fde899e 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/analysis/plots.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/analysis/plots.ts @@ -5,9 +5,9 @@ import { AgentState, Analysis, Json } from "../../"; export type DatumKeys = "x" | "y" | "z"; export type OutputSlice = { name: string; slice: [number] | [number, number] }; export function isOutputSlice( - d: HashDatum + d: HashDatum, ): d is OutputSlice { - return d.hasOwnProperty("name"); + return Object.prototype.hasOwnProperty.call(d, "name"); } export type HashDatum = PlotData[K] | string | OutputSlice; diff --git a/apps/sim-core/packages/engine-web/src/engine-web/analysis/wrapper.ts b/apps/sim-core/packages/engine-web/src/engine-web/analysis/wrapper.ts index 12aad50..8acb270 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/analysis/wrapper.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/analysis/wrapper.ts @@ -8,18 +8,18 @@ export class AnalyzerProvider { constructor(path: string) { this.promiseWorker = new PromiseWorker( - new Worker(path, { name: "hash-analyzer" }) + new Worker(path, { name: "hash-analyzer", type: "module" }), ); } async analyze( - state: SerializableAgentState[][] + state: SerializableAgentState[][], ): Promise> { return this.promiseWorker.postMessage({ type: "analyze", data: state }, []); } async setAnalysisSrc( - src: string + src: string, ): Promise> { return this.promiseWorker.postMessage({ type: "setAnalysisSrc", src }, []); } diff --git a/apps/sim-core/packages/engine-web/src/engine-web/experiments/definition.ts b/apps/sim-core/packages/engine-web/src/engine-web/experiments/definition.ts index 89f9eed..8e9503c 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/experiments/definition.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/experiments/definition.ts @@ -13,24 +13,20 @@ import { sampleDistribution } from "./montecarlo"; export const createExperimentDefinition = ( experimentsSrc: string, - experimentName: string + experimentName: string, ): ExperimentDefinition => { - const experimentDefinitions: ParsedExperimentDefinitions = parseAndThrowProper( - experimentsSrc, - "experiments.json" - ); + const experimentDefinitions: ParsedExperimentDefinitions = + parseAndThrowProper(experimentsSrc, "experiments.json"); return experimentDefinitions[experimentName]; }; export const createExperimentPlan = ( experimentsSrc: string, - experimentName: string + experimentName: string, ): [ExperimentPlan, ExperimentDefinitionWithoutOptimization] => { - const experimentDefinitions: ParsedExperimentDefinitions = parseAndThrowProper( - experimentsSrc, - "experiments.json" - ); + const experimentDefinitions: ParsedExperimentDefinitions = + parseAndThrowProper(experimentsSrc, "experiments.json"); const selectedExperiment = experimentDefinitions[experimentName]; @@ -46,7 +42,7 @@ export const createExperimentPlan = ( export const createExperimentVariants = ( experimentName: string, - experimentDefinitions: ParsedExperimentDefinitions + experimentDefinitions: ParsedExperimentDefinitions, ): ExperimentPlan => { // Select the experiment from the name that the user gave us const selectedExperiment = experimentDefinitions[experimentName]; @@ -54,7 +50,7 @@ export const createExperimentVariants = ( // Panic if there's no experiment definition with that name if (!selectedExperiment) { throw new Error( - `No experiment with name '${experimentName}' found in experiments.json` + `No experiment with name '${experimentName}' found in experiments.json`, ); } switch (selectedExperiment.type) { @@ -63,7 +59,7 @@ export const createExperimentVariants = ( case "multiparameter": return createMultiparameterVariant( selectedExperiment, - experimentDefinitions + experimentDefinitions, ); default: return createExperimentPlanFromArgs(selectedExperiment); @@ -71,7 +67,7 @@ export const createExperimentVariants = ( }; const createExperimentPlanFromArgs = ( - selectedExperiment: ExperimentDefinition + selectedExperiment: ExperimentDefinition, ) => { switch (selectedExperiment.type) { case "monte-carlo": @@ -92,7 +88,7 @@ const createExperimentPlanFromArgs = ( default: throw new EvalError( "Not a valid experiment type, see docs.hash.ai/experiments on how to define an experiment run", - "experiments.json" + "experiments.json", ); } }; @@ -100,7 +96,7 @@ const createExperimentPlanFromArgs = ( const createVariantWithMappedValue = ( field: string, items: any[], - mapper: (item: any, idx: number) => any + mapper: (item: any, idx: number) => any, ) => items.reduce((acc, val, idx) => { const mappedValue = mapper(val, idx); @@ -139,12 +135,12 @@ const linspace = (start: number, stop: number, numSamples: number) => { }; const createValueVariant = ( - definition: ExperimentDefinition<"values"> + definition: ExperimentDefinition<"values">, ): ExperimentPlan => createVariantWithMappedValue( definition.field, definition.values, - (val) => val + (val) => val, ); const createLinspaceVariant = ({ @@ -156,7 +152,7 @@ const createLinspaceVariant = ({ createVariantWithMappedValue( field, Array(samples).fill(0), - (_, idx) => start + (idx * (stop - start)) / (samples - 1) + (_, idx) => start + (idx * (stop - start)) / (samples - 1), ); const createMeshgridVariant = ({ @@ -191,7 +187,7 @@ const createMeshgridVariant = ({ const createMultiparameterVariant = ( definition: ExperimentDefinition<"multiparameter">, - experimentDefinitions: ParsedExperimentDefinitions + experimentDefinitions: ParsedExperimentDefinitions, ): ExperimentPlan => { const parameterList = definition.runs.map((runName) => { const definition = experimentDefinitions[runName]; @@ -246,29 +242,29 @@ const createArangeVariant = ({ createVariantWithMappedValue( field, arange(start, stop, increment), - (val) => val + (val) => val, ); const createGroupVariant = ( definition: ExperimentDefinition<"group">, - experimentDefinitions: ParsedExperimentDefinitions + experimentDefinitions: ParsedExperimentDefinitions, ) => { const plan = definition.runs.reduce( (acc, name) => ({ ...acc, ...createExperimentVariants(name, experimentDefinitions), }), - {} + {}, ); return plan; }; export const createMonteCarloVariant = ( - definition: ExperimentDefinition<"monte-carlo"> + definition: ExperimentDefinition<"monte-carlo">, ): ExperimentPlan => createVariantWithMappedValue( definition.field, Array(definition.samples).fill(0), - () => sampleDistribution(definition) + () => sampleDistribution(definition), ); diff --git a/apps/sim-core/packages/engine-web/src/engine-web/experiments/listener.ts b/apps/sim-core/packages/engine-web/src/engine-web/experiments/listener.ts index 480c95f..4224fe3 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/experiments/listener.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/experiments/listener.ts @@ -17,7 +17,7 @@ export const prepareExperiment = ({ }: ExperimentSrc): QueuedExperimentRunWithoutOptimization => { const manifest: RawManifest = parseAndThrowProper( manifestSrc, - "manifest.json" + "manifest.json", ); const { experimentsSrc } = manifest; @@ -27,13 +27,13 @@ export const prepareExperiment = ({ const [plannedRuns, selectedExperiment] = createExperimentPlan( experimentsSrc, - experimentName + experimentName, ); if (!selectedExperiment.steps) { throw new EvalError( `Must specify 'steps' field for experiment '${experimentName}'`, - "experiments.json" + "experiments.json", ); } @@ -62,7 +62,7 @@ export const experimentToRuns = ( plan, definition, }: QueuedExperimentRunWithoutOptimization, - pyodideEnabled: boolean + pyodideEnabled: boolean, ): RunnerRequest<"initialize">[] => { const requests: RunnerRequest<"initialize">[] = []; console.log("queued run is ", queuedSimulationRunIds); diff --git a/apps/sim-core/packages/engine-web/src/engine-web/experiments/types.ts b/apps/sim-core/packages/engine-web/src/engine-web/experiments/types.ts index a3e5b33..72c4424 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/experiments/types.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/experiments/types.ts @@ -197,13 +197,11 @@ export class DeferredPromise { } } -type WithoutOptimization< - Definition extends ExperimentDefinition -> = Definition extends ExperimentDefinition<"optimization"> - ? never - : Definition; +type WithoutOptimization = + Definition extends ExperimentDefinition<"optimization"> ? never : Definition; -export type ExperimentDefinitionWithoutOptimization = WithoutOptimization; +export type ExperimentDefinitionWithoutOptimization = + WithoutOptimization; export type QueuedExperimentRunWithoutOptimization = Omit< QueuedExperimentRun, diff --git a/apps/sim-core/packages/engine-web/src/engine-web/runners/actions.ts b/apps/sim-core/packages/engine-web/src/engine-web/runners/actions.ts index ebff7c3..839431a 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/runners/actions.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/runners/actions.ts @@ -19,14 +19,14 @@ import { const rebuildWrapper = ( wasmlib: WasmLib, components: SimulationComponents, - fromState: AgentState[] + fromState: AgentState[], ) => wasmlib.start_simulation( fromState, components?.properties, components?.datasets, components?.behaviors, - components?.handlers + components?.handlers, ); /** @@ -53,7 +53,7 @@ const runSim = async (runner: RunnerState) => { runner.stepsLeft -= 1; // awaiting the runner might be instant, so we need to prevent the thread from locking - await new Promise((resolve) => setImmediate(resolve)); + await new Promise((resolve) => setTimeout(resolve)); if (runner.stepHandler) { await runner.stepHandler(runner.stepsTaken + 1, newState); @@ -71,7 +71,7 @@ const runSim = async (runner: RunnerState) => { const initialize = async ( request: RunnerRequestArgs<"initialize">, - runner: RunnerState + runner: RunnerState, ) => { if (runner.wrapper) { runner.wrapper.free(); @@ -90,10 +90,10 @@ const initialize = async ( runner.parsedSimulation = await simulationFromRequest( request.manifestSrc, runner.datasetCache, - request.pyodideEnabled + request.pyodideEnabled, ); } catch (err) { - if (err.message === "Cannot load pyodide") { + if (err instanceof Error && err.message === "Cannot load pyodide") { runner.pyodide = "errored"; return false; } else { @@ -117,7 +117,7 @@ const initialize = async ( runner.wrapper = rebuildWrapper( runner.wasmlib, runner.parsedSimulation, - initialState + initialState, ); runner.latestState = runner.wrapper.initial_state() as AgentState[]; @@ -129,7 +129,7 @@ const initialize = async ( // Ensure the behavior's properties are up to date runner.parsedSimulation.behaviors.updateProperties( - runner.parsedSimulation.properties + runner.parsedSimulation.properties, ); return true; @@ -138,7 +138,7 @@ const initialize = async ( // Step N steps and then give a response const step = async ( request: RunnerRequestArgs<"step">, - runner: RunnerState + runner: RunnerState, ) => { if (runner.earlyStop) { return; @@ -197,7 +197,7 @@ const getReadySteps = async (runner: RunnerState) => { */ const updateComponents = ( request: RunnerRequestArgs<"updateComponents">, - runner: RunnerState + runner: RunnerState, ) => { try { if (runner.parsedSimulation) { @@ -216,7 +216,7 @@ const updateComponents = ( runner.wrapper = rebuildWrapper( runner.wasmlib, runner.parsedSimulation, - runner.latestState + runner.latestState, ); } } catch (err) { diff --git a/apps/sim-core/packages/engine-web/src/engine-web/runners/cloud-runner.ts b/apps/sim-core/packages/engine-web/src/engine-web/runners/cloud-runner.ts index 9db2b61..c0972f1 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/runners/cloud-runner.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/runners/cloud-runner.ts @@ -47,7 +47,7 @@ export class CloudExperimentRunner implements ExperimentRunner { // TODO @Jon this path should never be hit anyway, we don't provide a single cloud runner // We also don't expose individual controls of the runs via the sidebar throw new Error( - "Sending single-runner commands to cloud is not supported!" + "Sending single-runner commands to cloud is not supported!", ); } @@ -63,7 +63,7 @@ export class CloudExperimentRunner implements ExperimentRunner { const experimentSrc: string = JSON.parse(manifestSrc)["experimentsSrc"]; const experimentArgs = createExperimentDefinition( experimentSrc, - experimentName + experimentName, ); const path = `${this.wssConnectUrl}?${new URLSearchParams({ @@ -160,7 +160,7 @@ export class CloudExperimentRunner implements ExperimentRunner { if (this.devMode) { console.warn( "Closing websocket connecting with cloud because: ", - evt + evt, ); } if (!hasErrored) { @@ -190,14 +190,14 @@ export class CloudExperimentRunner implements ExperimentRunner { */ return concat( of(socketResponse), - throwError(new Error("Out of cloud compute credits")) + throwError(new Error("Out of cloud compute credits")), ); } return of(socketResponse); }), takeWhile( (response) => hasErrored || response.running !== "finished", - true + true, ), mergeMap((response) => { const responses: ExperimentStreamResponse[] = []; @@ -321,7 +321,7 @@ export class CloudExperimentRunner implements ExperimentRunner { } return responses; - }) + }), ); } } diff --git a/apps/sim-core/packages/engine-web/src/engine-web/runners/index.ts b/apps/sim-core/packages/engine-web/src/engine-web/runners/index.ts index 257da25..f176e3c 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/runners/index.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/runners/index.ts @@ -50,7 +50,7 @@ export interface ExperimentRunner { ) => Promise; queueExperiment( - experiment: ExperimentSrc + experiment: ExperimentSrc, ): | Observable | Promise; diff --git a/apps/sim-core/packages/engine-web/src/engine-web/runners/wasm-runner.ts b/apps/sim-core/packages/engine-web/src/engine-web/runners/wasm-runner.ts index fb2fd2d..f12e6e9 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/runners/wasm-runner.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/runners/wasm-runner.ts @@ -36,7 +36,7 @@ export interface RunnerState { export const WasmRequestHandler = async ( request: RunnerRequest, - runner: RunnerState + runner: RunnerState, ): Promise => { let includeSteps = false; @@ -51,7 +51,7 @@ export const WasmRequestHandler = async ( numSteps: request.numSteps, includeSteps: request.includeSteps, }, - runner + runner, ); includeSteps = request.includeSteps; } @@ -81,7 +81,7 @@ export const WasmRequestHandler = async ( } } catch (err) { console.error("Failed handling request", err); - runner.runnerError = err; + runner.runnerError = err instanceof Error ? err : null; } if (runner.runnerError) { @@ -98,8 +98,8 @@ export const WasmRequestHandler = async ( JSON.stringify( runner.runnerError, // JSON.stringify doesn't work by default on error types – this makes it work - Object.getOwnPropertyNames(runner.runnerError) - ) + Object.getOwnPropertyNames(runner.runnerError), + ), ); } diff --git a/apps/sim-core/packages/engine-web/src/engine-web/runners/web-runner.ts b/apps/sim-core/packages/engine-web/src/engine-web/runners/web-runner.ts index c44572c..cb542e3 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/runners/web-runner.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/runners/web-runner.ts @@ -15,7 +15,7 @@ type WorkerId = string; type QueueEntry = [ RunnerRequest, DeferredPromise, - DeferredPromise + DeferredPromise, ]; // experimentQueue = new Map(); @@ -40,7 +40,7 @@ export class WebExperimentRunner implements ExperimentRunner { async handleRequest( req: RunnerRequest, - simulationRunId: string + simulationRunId: string, ): Promise { // This method should never be called, but regardless, throw an error throw new Error("Single-actions are not supported (yet) with experiments"); @@ -50,7 +50,7 @@ export class WebExperimentRunner implements ExperimentRunner { * @todo implement stream */ async queueExperiment( - src: ExperimentSrc + src: ExperimentSrc, ): Promise { const experiment = prepareExperiment(src); @@ -63,7 +63,7 @@ export class WebExperimentRunner implements ExperimentRunner { [...runs].map<[string, QueueEntry]>((run) => [ run.presetRunId ?? "", [run, new DeferredPromise(), new DeferredPromise()], - ]) + ]), ); // Add the collection to our internal queue @@ -76,14 +76,14 @@ export class WebExperimentRunner implements ExperimentRunner { Object.entries(runQueue).map(([runId, [, runnerProm]]) => [ runId, runnerProm, - ]) + ]), ); const startedPromises = Object.fromEntries( Object.entries(runQueue).map(([runId, [, , startedProm]]) => [ runId, startedProm, - ]) + ]), ); // Combine the completion of all the runs to a final experiment promise diff --git a/apps/sim-core/packages/engine-web/src/engine-web/runners/worker-runner.ts b/apps/sim-core/packages/engine-web/src/engine-web/runners/worker-runner.ts index 112a3fe..8538563 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/runners/worker-runner.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/runners/worker-runner.ts @@ -17,7 +17,7 @@ export class WebWorkerRunner implements ExperimentRunner { worker: PromiseWorker; constructor(runnerId: string, fileName: string, devMode = false) { - this.rawWorker = new Worker(fileName, { name: runnerId }); + this.rawWorker = new Worker(fileName, { name: runnerId, type: "module" }); this.worker = new PromiseWorker(this.rawWorker); } diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/EvalError.ts b/apps/sim-core/packages/engine-web/src/engine-web/simulation/EvalError.ts index eb00d54..2c8ec28 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/EvalError.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/EvalError.ts @@ -33,7 +33,7 @@ export class EvalError { } } catch (e) { console.error( - "Could not parse error stack correctly: " + original.stack + "Could not parse error stack correctly: " + original.stack, ); console.error(e); } diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/behavior.ts b/apps/sim-core/packages/engine-web/src/engine-web/simulation/behavior.ts index 596e902..6ee72ae 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/behavior.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/behavior.ts @@ -26,7 +26,7 @@ const loadBehavior = async (code: string, namespace: PyProxy) => { */ export const getBehaviorFn = async ( fileName: string, - behaviorCode: string + behaviorCode: string, ): Promise => { const extension = fileName.split(".").pop(); @@ -45,7 +45,7 @@ export const getBehaviorFn = async ( const fn = new Function( "hash_stdlib", "hstd", - `${behaviorCode}\n return behavior` + `${behaviorCode}\n return behavior`, )(hash_stdlib, hash_stdlib); // Return the behavior closure diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/buildpython.ts b/apps/sim-core/packages/engine-web/src/engine-web/simulation/buildpython.ts index 5f3f708..45fbe04 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/buildpython.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/buildpython.ts @@ -72,12 +72,12 @@ export const runPythonNamespaced = async ( code: string, namespace: PyProxy, messageCallback?: MessageCallback, - errorCallback?: ErrorCallback + errorCallback?: ErrorCallback, ): Promise => { await runnerPython?.loadPackagesFromImports( code, messageCallback, - errorCallback + errorCallback, ); const coroutine = runnerPython?.pyodide_py.eval_code_async(code, namespace); try { @@ -93,10 +93,10 @@ export const buildPyodide = async () => { if ( typeof global === "object" && typeof require === "function" && - global.hasOwnProperty("pythonLoader") + Object.prototype.hasOwnProperty.call(global, "pythonLoader") ) { try { - // @ts-ignore + // @ts-expect-error runnerPython = await global.pythonLoader(); } catch (err) { console.error("No pyodide loader provided!", err); diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/dataset.ts b/apps/sim-core/packages/engine-web/src/engine-web/simulation/dataset.ts index 29e0b56..7bb6339 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/dataset.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/dataset.ts @@ -21,14 +21,14 @@ let datasetNamespace: PyProxy | null = null; */ export async function fetchDatasetContent( datasets: FetchedDataset[], - cache: DatasetCache + cache: DatasetCache, ): Promise { const data: Record = {}; const kvps: DataKeyValuePair[] = await Promise.all( datasets.map((dataset) => { return Promise.resolve() - .then(() => { + .then(async () => { if (cache.has(dataset.s3Key)) { return Promise.resolve(cache.get(dataset.s3Key)?.data); } @@ -37,7 +37,7 @@ export async function fetchDatasetContent( return fetchDataset( dataset.url, dataset.format, - dataset.inPlaceData + dataset.inPlaceData, ); } @@ -53,20 +53,20 @@ export async function fetchDatasetContent( console.error( "Unable to load dataset", dataset.shortname, - dataset.id + dataset.id, ); return null; }); - }) + }), ).then((datakeys: (DataKeyValuePair | null)[]): DataKeyValuePair[] => datakeys.filter( - (kvp): kvp is DataKeyValuePair => kvp !== null - ) + (kvp): kvp is DataKeyValuePair => kvp !== null, + ), ); for (const kvp of kvps) { data[kvp.name] = kvp.value; - if (!cache.hasOwnProperty(kvp.s3Key)) { + if (!Object.prototype.hasOwnProperty.call(cache, kvp.s3Key)) { cache.set(kvp.s3Key, { data: kvp.value, name: kvp.name }); } } @@ -80,6 +80,9 @@ export async function fetchDatasetContent( export const refreshPyodideDatasetCache = async (cache: DatasetCache) => { if (datasetNamespace === null) { datasetNamespace = self.pyodide.toPy({}); + if (datasetNamespace === null) { + throw new Error("Expected non-null namespace from pyodide"); + } } // Cache datasets // Inject whatever datasets are not cached in the python side into pyodide @@ -115,7 +118,7 @@ cached_dataset_names.append("${k}") cached_datasets["${name}"] = json.loads(pythonDatasetCache) pythonDatasetCache = "" `, - datasetNamespace + datasetNamespace, ); } } diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/initializer.ts b/apps/sim-core/packages/engine-web/src/engine-web/simulation/initializer.ts index 930b2d1..86319df 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/initializer.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/initializer.ts @@ -23,7 +23,7 @@ const loadInitializer = async (code: string, ns: PyProxy) => { */ export const getInitFn = async ( fileName: string, - initCode: string + initCode: string, ): Promise => { const extension = fileName.split(".").pop(); @@ -44,7 +44,7 @@ export const getInitFn = async ( const fn = new Function( "hash_stdlib", "hstd", - `${initCode}\nreturn init` + `${initCode}\nreturn init`, )(hash_stdlib, hash_stdlib); return (context) => { diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/messagehandler.ts b/apps/sim-core/packages/engine-web/src/engine-web/simulation/messagehandler.ts index 257bb28..c933178 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/messagehandler.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/messagehandler.ts @@ -12,11 +12,11 @@ export const builtInMessageHandlers: MessageHandler[] = [ state.get_messages().map((message: IncomingMessage) => self .fetch( - `https://api.mapbox.com/directions/v5/mapbox/${message.data["transportation_method"]}/${message.data["request_route"]}?geometries=geojson&access_token=pk.eyJ1IjoiYmVuZ29sZGhhYmVyIiwiYSI6ImNrN3AzaWE4ZjBnOGUzZG1mMmNqMXN4cDMifQ.nIFHk8XqZR7H8-IqaSKXTA` + `https://api.mapbox.com/directions/v5/mapbox/${message.data["transportation_method"]}/${message.data["request_route"]}?geometries=geojson&access_token=pk.eyJ1IjoiYmVuZ29sZGhhYmVyIiwiYSI6ImNrN3AzaWE4ZjBnOGUzZG1mMmNqMXN4cDMifQ.nIFHk8XqZR7H8-IqaSKXTA`, ) .then((res) => res.json()) - .then((json) => [json, message.from] as [string, string]) - ) + .then((json) => [json, message.from] as [string, string]), + ), ).then((resultArr: [string, string][]) => { resultArr.forEach(([json, fromId]: [string, string]) => state.add_message({ @@ -24,7 +24,7 @@ export const builtInMessageHandlers: MessageHandler[] = [ from: "mapbox", type: "mapbox_response", data: json, - }) + }), ); return state; }), diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/pyodide.js b/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/pyodide.js index c22cf2b..8394ebf 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/pyodide.js +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/pyodide.js @@ -30,7 +30,7 @@ export const getPyodideLoader = () => { if (globalThis.__pyodideLoading) { if (globalThis.languagePluginURL) { throw new Error( - "Pyodide is already loading because languagePluginURL is defined." + "Pyodide is already loading because languagePluginURL is defined.", ); } else { throw new Error("Pyodide is already loading."); @@ -88,7 +88,7 @@ export const getPyodideLoader = () => { names, _messageCallback, errorCallback, - sharedLibsOnly + sharedLibsOnly, ) { const packages = Module.packages.dependencies; const loadedPackages = Module.loadedPackages; @@ -116,8 +116,8 @@ export const getPyodideLoader = () => { if (toLoad.has(pkgname) && toLoad.get(pkgname) !== name) { errorCallback( `Loading same package ${pkgname} from ${name} and ${toLoad.get( - pkgname - )}` + pkgname, + )}`, ); continue; } @@ -179,7 +179,7 @@ export const getPyodideLoader = () => { windowErrorPromise = new Promise((_res, rej) => { windowErrorHandler = (e) => { errorCallback( - "Unhandled error. We don't know what it is or whether it is related to 'loadPackage' but out of an abundance of caution we will assume that loading failed." + "Unhandled error. We don't know what it is or whether it is related to 'loadPackage' but out of an abundance of caution we will assume that loading failed.", ); errorCallback(e); rej(e.message); @@ -207,7 +207,7 @@ export const getPyodideLoader = () => { errorCallback( `URI mismatch, attempting to load package ${pkg} from ${uri} ` + `while it is already loaded from ${loaded}. To override a dependency, ` + - `load the custom package first.` + `load the custom package first.`, ); continue; } @@ -218,7 +218,7 @@ export const getPyodideLoader = () => { loadScript(scriptSrc).catch(() => { errorCallback(`Couldn't load package from URL ${scriptSrc}`); toLoad.delete(pkg); - }) + }), ); } @@ -276,7 +276,7 @@ export const getPyodideLoader = () => { // We have to invalidate Python's import caches, or it won't // see the new files. Module.runPythonSimple( - "import importlib\n" + "importlib.invalidate_caches()\n" + "import importlib\n" + "importlib.invalidate_caches()\n", ); } @@ -315,7 +315,7 @@ export const getPyodideLoader = () => { Module.loadPackage = async function ( names, messageCallback, - errorCallback + errorCallback, ) { if (Module.isPyProxy(names)) { let temp; @@ -338,7 +338,7 @@ export const getPyodideLoader = () => { names, messageCallback, errorCallback, - true + true, ); for (let pkg of sharedLibraryPackagesToLoad) { sharedLibraryNames.push(pkg[0]); @@ -372,7 +372,7 @@ export const getPyodideLoader = () => { global: true, nodelete: true, }); - } + }, ); }; } else { @@ -388,8 +388,8 @@ export const getPyodideLoader = () => { _loadPackage( sharedLibraryNames, messageCallback || console.log, - errorCallback || console.error - ) + errorCallback || console.error, + ), ); loadPackageChain = loadPackageChain.then(() => promise.catch(() => {})); await promise; @@ -399,8 +399,8 @@ export const getPyodideLoader = () => { _loadPackage( names, messageCallback || console.log, - errorCallback || console.error - ) + errorCallback || console.error, + ), ); loadPackageChain = loadPackageChain.then(() => promise.catch(() => {})); await promise; @@ -429,7 +429,7 @@ export const getPyodideLoader = () => { recursionLimit = 1000; } pyodide.runPythonSimple( - `import sys; sys.setrecursionlimit(int(${recursionLimit}))` + `import sys; sys.setrecursionlimit(int(${recursionLimit}))`, ); } @@ -482,7 +482,7 @@ export const getPyodideLoader = () => { fatal_error_occurred = true; console.error( "Pyodide has suffered a fatal error. " + - "Please report this to the Pyodide maintainers." + "Please report this to the Pyodide maintainers.", ); console.error("The cause of the fatal error was:"); console.error(e); @@ -490,7 +490,7 @@ export const getPyodideLoader = () => { let fd_stdout = 1; Module.__Py_DumpTraceback( fd_stdout, - Module._PyGILState_GetThisThreadState() + Module._PyGILState_GetThisThreadState(), ); for (let key of PUBLIC_API) { if (key === "version") { @@ -501,7 +501,7 @@ export const getPyodideLoader = () => { configurable: true, get: () => { throw new Error( - "Pyodide already fatally failed and can no longer be used." + "Pyodide already fatally failed and can no longer be used.", ); }, }); @@ -664,7 +664,7 @@ export const getPyodideLoader = () => { Module.loadPackagesFromImports = async function ( code, messageCallback, - errorCallback + errorCallback, ) { let imports = Module.pyodide_py.find_imports(code).toJs(); if (imports.length === 0) { @@ -681,7 +681,7 @@ export const getPyodideLoader = () => { await Module.loadPackage( Array.from(packages.keys()), messageCallback, - errorCallback + errorCallback, ); } }; @@ -699,7 +699,7 @@ export const getPyodideLoader = () => { Module.pyimport = (name) => { console.warn( "Access to the Python global namespace via pyodide.pyimport is deprecated and " + - "will be removed in version 0.18.0. Use pyodide.globals.get('key') instead." + "will be removed in version 0.18.0. Use pyodide.globals.get('key') instead.", ); return Module.globals.get(name); }; @@ -746,12 +746,12 @@ export const getPyodideLoader = () => { Module.runPythonAsync = async function ( code, messageCallback, - errorCallback + errorCallback, ) { await Module.loadPackagesFromImports( code, messageCallback, - errorCallback + errorCallback, ); let coroutine = Module.pyodide_py.eval_code_async(code, Module.globals); try { @@ -920,7 +920,7 @@ def temp(Module): if (globalThis.languagePluginUrl) { console.warn( "languagePluginUrl is deprecated and will be removed in version 0.18.0, " + - "instead use loadPyodide({ indexURL : })" + "instead use loadPyodide({ indexURL : })", ); /** diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/pyodideTypes.d.ts b/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/pyodideTypes.d.ts index 14df43f..4622b08 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/pyodideTypes.d.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/pyodideTypes.d.ts @@ -20,13 +20,13 @@ export interface Pyodide { loadPackage( names: string | string[], messageCallback?: MessageCallback, - errorCallback?: ErrorCallback + errorCallback?: ErrorCallback, ): Promise; loadPackagesFromImports( code: string, messageCallback?: MessageCallback, - errorCallback?: ErrorCallback + errorCallback?: ErrorCallback, ): Promise; loadedPackages: object; @@ -36,7 +36,7 @@ export interface Pyodide { runPythonAsync( script: string, messageCallback?: MessageCallback, - errorCallback?: ErrorCallback + errorCallback?: ErrorCallback, ): Promise; registerJsModule(name: string, module: object): void; diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/wrappers.ts b/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/wrappers.ts index 434c496..8cc792d 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/wrappers.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/python/wrappers.ts @@ -51,7 +51,7 @@ export class PyContextWrapper { const ret = this.context ?.neighbors() .filter( - (neighbor) => neighbor.agent_id && ids.includes(neighbor.agent_id) + (neighbor) => neighbor.agent_id && ids.includes(neighbor.agent_id), ) .map((n) => JSON.stringify(n)); return ret; @@ -63,7 +63,7 @@ export class PyContextWrapper { | undefined; return JSON.stringify( - neighbors?.find((neighbor) => neighbor.agent_id === id)?.[key] + neighbors?.find((neighbor) => neighbor.agent_id === id)?.[key], ); } diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/simFromSrc.ts b/apps/sim-core/packages/engine-web/src/engine-web/simulation/simFromSrc.ts index bbc6852..789a745 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/simFromSrc.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/simFromSrc.ts @@ -25,16 +25,16 @@ import { builtInMessageHandlers } from "./messagehandler"; export async function simulationFromRequest( manifestSrc: string, datasetCache: DatasetCache, - pyodideEnabled: boolean + pyodideEnabled: boolean, ): Promise { const manifest: RawManifest = parseAndThrowProper( manifestSrc, - "manifest.json" + "manifest.json", ); const properties: Json = parseAndThrowProper( manifest.propertiesSrc, - "globals.json" + "globals.json", ); const datasets = await fetchDatasetContent(manifest.datasets, datasetCache); @@ -43,7 +43,7 @@ export async function simulationFromRequest( if (manifest.initializers.length !== 1) { throw new Error( - `Only one initializer is supported, but the following were supplied: ${manifest.initializers}` + `Only one initializer is supported, but the following were supplied: ${manifest.initializers}`, ); } const initFile = manifest.initializers.pop()!; diff --git a/apps/sim-core/packages/engine-web/src/engine-web/simulation/util.ts b/apps/sim-core/packages/engine-web/src/engine-web/simulation/util.ts index e38a9b5..2aab9e5 100644 --- a/apps/sim-core/packages/engine-web/src/engine-web/simulation/util.ts +++ b/apps/sim-core/packages/engine-web/src/engine-web/simulation/util.ts @@ -5,7 +5,7 @@ export const convertToObject = (value: any): any => { return value.map(convertToObject); } else if (value instanceof Map) { return Object.fromEntries( - Array.from(value.entries(), ([k, v]) => [k, convertToObject(v)]) + Array.from(value.entries(), ([k, v]) => [k, convertToObject(v)]), ); } return value; diff --git a/apps/sim-core/packages/engine-web/src/glue/JsCustomBehavior.ts b/apps/sim-core/packages/engine-web/src/glue/JsCustomBehavior.ts index 1ed0636..4fdbfb5 100644 --- a/apps/sim-core/packages/engine-web/src/glue/JsCustomBehavior.ts +++ b/apps/sim-core/packages/engine-web/src/glue/JsCustomBehavior.ts @@ -23,7 +23,7 @@ export class JsCustomBehavior { src: NamedBehavior, properties: Json, datasets: Json, - agentCache: AgentCache + agentCache: AgentCache, ) { this.name = src.name; this.dependencies = src.dependencies; @@ -35,7 +35,7 @@ export class JsCustomBehavior { public apply( stateWrapper: AgentStateWrapper, - contextWrapper: ContextWrapper + contextWrapper: ContextWrapper, ) { const context: Context = { messages: () => contextWrapper.messages(), @@ -59,15 +59,18 @@ export class JsCustomBehavior { // Errors from flushing to Rust do not go through our extended EvalError // We need to add information about the behavior and cause throw new Error( - `error setting agent state after behavior ${this.name}: ${err.message}` + `error setting agent state after behavior ${this.name}: ${ + err instanceof Error ? err.message : err + }`, ); } - } catch (e) { + } catch (err) { /** * @todo this context is lost when stringifying in WasmRequestHandler * figure out why and do something about it, or stop adding it. */ - e.args = { + // @ts-expect-error args isn't on the err type, we're bolting it on. + err.args = { context: { messages: JSON.parse(JSON.stringify(context.messages())), neighbors: JSON.parse(JSON.stringify(context.neighbors())), @@ -75,7 +78,7 @@ export class JsCustomBehavior { // use the copy in the main thread. }, }; - throw e; + throw err; } finally { /** * Make sure to free memory! @@ -99,8 +102,10 @@ export class JsCustomBehavior { const agent_id = state.wrapper.get("agent_id"); throw new Error( `could not set state variable '${key}' to value ${JSON.stringify( - value - )} on agent with id '${agent_id}': ${err.message}` + value, + )} on agent with id '${agent_id}': ${ + err instanceof Error ? err.message : err + }`, ); } }); diff --git a/apps/sim-core/packages/engine-web/src/glue/JsCustomBehaviors.spec.ts b/apps/sim-core/packages/engine-web/src/glue/JsCustomBehaviors.spec.ts index 6302ea7..013aa0c 100644 --- a/apps/sim-core/packages/engine-web/src/glue/JsCustomBehaviors.spec.ts +++ b/apps/sim-core/packages/engine-web/src/glue/JsCustomBehaviors.spec.ts @@ -47,7 +47,7 @@ describe("JS-side cache", () => { behaviors: ["check-neighbors", "generate"], }, }, - ]) + ]), ); return state; }, @@ -71,7 +71,7 @@ describe("JS-side cache", () => { {}, behaviors, [], - analyzer + analyzer, ); let step = 0; @@ -80,7 +80,7 @@ describe("JS-side cache", () => { for (const agent of state) { if (agent.step !== step) { throw new Error( - `steps not updated correctly: ${agent.agent_id} ${agent.step}` + `steps not updated correctly: ${agent.agent_id} ${agent.step}`, ); } } @@ -148,7 +148,7 @@ describe("JS-side cache", () => { {}, behaviors, [], - analyzer + analyzer, ); let step = 0; diff --git a/apps/sim-core/packages/engine-web/src/glue/JsCustomBehaviors.ts b/apps/sim-core/packages/engine-web/src/glue/JsCustomBehaviors.ts index 21f0d58..3c82d1b 100644 --- a/apps/sim-core/packages/engine-web/src/glue/JsCustomBehaviors.ts +++ b/apps/sim-core/packages/engine-web/src/glue/JsCustomBehaviors.ts @@ -21,7 +21,7 @@ export class JsCustomBehaviors { [cacheStep]: 0, }; this.behaviors = behaviors.map( - (b) => new JsCustomBehavior(b, properties, datasets, this.agentCache) + (b) => new JsCustomBehavior(b, properties, datasets, this.agentCache), ); } diff --git a/apps/sim-core/packages/engine-web/src/glue/JsMessageHandler.ts b/apps/sim-core/packages/engine-web/src/glue/JsMessageHandler.ts index 8e1b426..306f164 100644 --- a/apps/sim-core/packages/engine-web/src/glue/JsMessageHandler.ts +++ b/apps/sim-core/packages/engine-web/src/glue/JsMessageHandler.ts @@ -21,7 +21,7 @@ export class JsMessageHandler { public handle(state: MessageHandlerState, properties: Json) { return this.inner(state, properties).then( - (mh) => new MessageHandlerStateWrapper(mh) + (mh) => new MessageHandlerStateWrapper(mh), ); } } diff --git a/apps/sim-core/packages/engine-web/src/glue/JsMessageHandlers.spec.ts b/apps/sim-core/packages/engine-web/src/glue/JsMessageHandlers.spec.ts index d503779..59e42d8 100644 --- a/apps/sim-core/packages/engine-web/src/glue/JsMessageHandlers.spec.ts +++ b/apps/sim-core/packages/engine-web/src/glue/JsMessageHandlers.spec.ts @@ -43,7 +43,7 @@ describe("JS Message handlers", () => { {}, [], messageHandlers, - analyzer + analyzer, ); let i = 0; @@ -94,7 +94,7 @@ describe("JS Message handlers", () => { {}, [], messageHandlers, - analyzer + analyzer, ); let i = 0; @@ -156,8 +156,8 @@ describe("JS Message handlers", () => { (m.from === "send" && m.type === "sent" && m.data.message === "received"), - false - ) + false, + ), ); state.addMessage("send_to_xyz", "trigger_send"); return state; @@ -171,7 +171,7 @@ describe("JS Message handlers", () => { {}, [checkMessageReceived], messageHandlers, - analyzer + analyzer, ); let i = 0; @@ -209,7 +209,7 @@ describe("JS Message handlers", () => { name: "timeout", handler: async (state, props) => { const timeout = await new Promise((res, _) => - setTimeout(() => res("xyz"), 10) + setTimeout(() => res("xyz"), 10), ); state.add_agent({ agent_id: timeout as string, @@ -226,7 +226,7 @@ describe("JS Message handlers", () => { {}, [], messageHandlers, - analyzer + analyzer, ); let i = 0; @@ -281,7 +281,7 @@ describe("JS Message handlers", () => { {}, [], messageHandlers, - analyzer + analyzer, ); let i = 0; @@ -346,7 +346,7 @@ describe("JS Message handlers", () => { {}, [sendMessage], messageHandlers, - analyzer + analyzer, ); let i = 0; @@ -422,7 +422,7 @@ describe("JS Message handlers", () => { {}, [sendMessage], messageHandlers, - analyzer + analyzer, ); let i = 0; @@ -473,7 +473,7 @@ describe("JS Message handlers", () => { {}, [], messageHandlers, - analyzer + analyzer, ); let i = 0; diff --git a/apps/sim-core/packages/engine-web/src/glue/types.ts b/apps/sim-core/packages/engine-web/src/glue/types.ts index 8d551ee..4e05da1 100644 --- a/apps/sim-core/packages/engine-web/src/glue/types.ts +++ b/apps/sim-core/packages/engine-web/src/glue/types.ts @@ -19,7 +19,7 @@ export type MessageHandler = { export type MessageHandlerFn = ( state: MessageHandlerState, - properties: Json + properties: Json, ) => Promise; export type MessageHandlerState = { diff --git a/apps/sim-core/packages/engine-web/src/simulation/Simulation.spec.ts b/apps/sim-core/packages/engine-web/src/simulation/Simulation.spec.ts index 1a1f82c..c3e281c 100644 --- a/apps/sim-core/packages/engine-web/src/simulation/Simulation.spec.ts +++ b/apps/sim-core/packages/engine-web/src/simulation/Simulation.spec.ts @@ -37,7 +37,7 @@ test("should run", async () => { {}, behaviors, [], - analyzer + analyzer, ); let i = 0; @@ -58,6 +58,6 @@ test("should not reuse a dropped Simulation", async () => { await sim.drop(); await expect(sim.next_state()).rejects.toEqual( - new Error("Cannot reuse a dropped Simulation") + new Error("Cannot reuse a dropped Simulation"), ); }); diff --git a/apps/sim-core/packages/engine-web/src/simulation/Simulation.ts b/apps/sim-core/packages/engine-web/src/simulation/Simulation.ts index 01b3819..f8a7564 100644 --- a/apps/sim-core/packages/engine-web/src/simulation/Simulation.ts +++ b/apps/sim-core/packages/engine-web/src/simulation/Simulation.ts @@ -33,14 +33,14 @@ export class Simulation { datasets: Json, customBehaviors: NamedBehavior[], messageHandlers: MessageHandler[], - analyzer: Analyzer + analyzer: Analyzer, ) { this.datasets = datasets; this.properties = properties; this.customBehaviors = new JsCustomBehaviors( customBehaviors, properties, - datasets + datasets, ); this.messageHandlers = new JsMessageHandlers(messageHandlers); this.analyzer = analyzer; @@ -100,7 +100,7 @@ export class Simulation { this.properties, this.datasets, this.customBehaviors, - this.messageHandlers + this.messageHandlers, ); this.latestState = this.stateIteratorWrapper.initial_state(); this.customBehaviors.updateAgentCache(this.latestState); diff --git a/apps/sim-core/packages/engine-web/src/stdlib/py/pystdlib.ts b/apps/sim-core/packages/engine-web/src/stdlib/py/pystdlib.ts index edc9092..74a19a1 100644 --- a/apps/sim-core/packages/engine-web/src/stdlib/py/pystdlib.ts +++ b/apps/sim-core/packages/engine-web/src/stdlib/py/pystdlib.ts @@ -1,4 +1,4 @@ -// // @ts-ignore +// // @ts-expect-error // import pystdlibsrc from "!!raw-loader!./pystdlib.py"; // export { pystdlibsrc }; diff --git a/apps/sim-core/packages/engine-web/src/stdlib/ts/stdlib.spec.ts b/apps/sim-core/packages/engine-web/src/stdlib/ts/stdlib.spec.ts index 34c4f32..c55632b 100644 --- a/apps/sim-core/packages/engine-web/src/stdlib/ts/stdlib.spec.ts +++ b/apps/sim-core/packages/engine-web/src/stdlib/ts/stdlib.spec.ts @@ -55,15 +55,13 @@ test("random position", () => { test("normalize direction of [1,1]", () => { expect(normalizeVector(a.direction)).toEqual([ - 0.7071067811865475, - 0.7071067811865475, + 0.7071067811865475, 0.7071067811865475, ]); }); test("normalize direction of [1,3]", () => { expect(normalizeVector(b.direction)).toEqual([ - 0.31622776601683794, - 0.9486832980505138, + 0.31622776601683794, 0.9486832980505138, ]); }); @@ -97,11 +95,11 @@ test("find neighbors within a radius of 3", () => { }); test("find neighbors within a max radius of 4 and min radius of 3", () => { + expect(neighborsInRadius(ng, [na, nb, nc, nd, nf, nh, ni, nj], 4, 3)).toEqual( + [{ position: [3, 2, 0] }, { position: [3, 2, 2] }], + ); expect( - neighborsInRadius(ng, [na, nb, nc, nd, nf, nh, ni, nj], 4, 3) - ).toEqual([{ position: [3, 2, 0] }, { position: [3, 2, 2] }]); - expect( - neighborsInRadius(ng, [na, nb, nc, nd, nf, nh, ni, nj], 4, 3, true) + neighborsInRadius(ng, [na, nb, nc, nd, nf, nh, ni, nj], 4, 3, true), ).toEqual([{ position: [3, 2, 2] }]); }); @@ -114,13 +112,13 @@ test("find neighbors in front of agent tests", () => { { position: [3, 2, 2] }, ]), expect( - neighborsInFront(na, [nb, nc, ne, nf, ng, nh, nj, nk, nl], true) + neighborsInFront(na, [nb, nc, ne, nf, ng, nh, nj, nk, nl], true), ).toEqual([{ position: [3, 1, 0] }]), expect( - neighborsInFront(nl, [na, nb, nc, ne, nf, ng, nh, nj, nk], true) + neighborsInFront(nl, [na, nb, nc, ne, nf, ng, nh, nj, nk], true), ).toEqual([{ position: [3, 2, 2] }]), expect( - neighborsInFront(nb, [na, nc, ne, nf, ng, nh, nj, nk], true) + neighborsInFront(nb, [na, nc, ne, nf, ng, nh, nj, nk], true), ).toEqual([{ position: [2, 3, 0] }]); }); @@ -137,7 +135,7 @@ test("find neighbors located behind agent tests", () => { { position: [0, 1, 0] }, ]); expect( - neighborsBehind(nl, [na, nb, nc, ne, ng, nh, nj, nm, nn], true) + neighborsBehind(nl, [na, nb, nc, ne, ng, nh, nj, nm, nn], true), ).toEqual([{ position: [0, -1, -1] }]); }); @@ -176,7 +174,7 @@ const scatterAgents = init.scatter(numAgents, initTopology, agent); const scatterAgentsFunction = init.scatter( numAgents, initTopology, - agentFunction + agentFunction, ); function scatterTest(a: { [key: string]: any }) { expect(a.position[0]).toBeGreaterThanOrEqual(initTopology.x_bounds[0]); diff --git a/apps/sim-core/packages/engine-web/src/stdlib/ts/stdlib.ts b/apps/sim-core/packages/engine-web/src/stdlib/ts/stdlib.ts index 23187e2..3c8eb87 100644 --- a/apps/sim-core/packages/engine-web/src/stdlib/ts/stdlib.ts +++ b/apps/sim-core/packages/engine-web/src/stdlib/ts/stdlib.ts @@ -15,12 +15,12 @@ * ``` */ -// @ts-ignore +// @ts-expect-error import { jStat } from "jstat"; import { number } from "prop-types"; import { v4 as uuid } from "uuid"; -// @ts-ignore +// @ts-expect-error export { jStat as stats } from "jstat"; export function incr(n: number) { @@ -52,7 +52,7 @@ export const init = { scatter: ( count: number, topology: Topology, - template: PotentialAgent | Function + template: PotentialAgent | Function, ) => scatter(count, topology, template), stack: (count: number, template: PotentialAgent | Function) => stack(count, template), @@ -65,7 +65,7 @@ export const init = { function scatter( count: number, topology: Topology, - template: PotentialAgent | Function + template: PotentialAgent | Function, ) { const { x_bounds, y_bounds } = topology; @@ -144,7 +144,7 @@ export function grid(topology: Topology, template: PotentialAgent | Function) { export function createLayout( layout: string[][], templates: { [key: string]: PotentialAgent }, - offset: number[] = [0, 0, 0] + offset: number[] = [0, 0, 0], ) { const height = layout.length; const agents: { [key: string]: PotentialAgent[] } = {}; @@ -249,7 +249,7 @@ export function random() { export function distanceBetween( agentA: PotentialAgent, agentB: PotentialAgent, - distance = "euclidean" + distance = "euclidean", ) { interface IdFuncs { [index: string]: (a_pos: number[], b_pos: number[]) => number; @@ -266,7 +266,7 @@ export function distanceBetween( sqrt( pow(a_pos[0] - b_pos[0], 2) + pow(a_pos[1] - b_pos[1], 2) + - pow(a_pos[2] - b_pos[2], 2) + pow(a_pos[2] - b_pos[2], 2), ), euclidean_sq: (a_pos: number[], b_pos: number[]) => pow(a_pos[0] - b_pos[0], 2) + @@ -276,7 +276,7 @@ export function distanceBetween( max( abs(a_pos[0] - b_pos[0]), abs(a_pos[1] - b_pos[1]), - abs(a_pos[2] - b_pos[2]) + abs(a_pos[2] - b_pos[2]), ), }; @@ -297,7 +297,7 @@ export function distanceBetween( */ export function normalizeVector(vec: number[]) { const magnitude = Math.sqrt( - vec.reduce((acc: number, val: number) => acc + val ** 2, 0) + vec.reduce((acc: number, val: number) => acc + val ** 2, 0), ); return vec.map((v) => v / magnitude); } @@ -313,7 +313,7 @@ export function randomPosition( x_bounds: number[] | undefined; y_bounds: number[] | undefined; }, - z_plane = false + z_plane = false, ) { const { floor, random } = Math; @@ -324,7 +324,7 @@ export function randomPosition( } z_pos = floor( random() * (topology.z_bounds[1] - topology.z_bounds[0]) + - topology.z_bounds[0] + topology.z_bounds[0], ); } if (!topology.x_bounds || !topology.y_bounds) { @@ -333,11 +333,11 @@ export function randomPosition( return [ floor( random() * (topology.x_bounds[1] - topology.x_bounds[0]) + - topology.x_bounds[0] + topology.x_bounds[0], ), floor( random() * (topology.y_bounds[1] - topology.y_bounds[0]) + - topology.y_bounds[0] + topology.y_bounds[0], ), z_pos, ]; @@ -352,7 +352,7 @@ export function randomPosition( * */ export function neighborsOnPosition( agentA: PotentialAgent, - neighbors: PotentialAgent[] + neighbors: PotentialAgent[], ) { return neighbors.filter((neighbor) => { const aPos: number[] | undefined = @@ -389,7 +389,7 @@ export function neighborsInRadius( neighbors: PotentialAgent[], max_radius = 1, min_radius = 0, - z_axis = false + z_axis = false, ) { return neighbors.filter((neighbor) => { const aPos: number[] | undefined = @@ -434,7 +434,7 @@ export function neighborsInRadius( export function neighborsInFront( agentA: PotentialAgent, neighbors: PotentialAgent[], - colinear = false + colinear = false, ) { return neighbors.filter((neighbor) => { const aPos: number[] | undefined = @@ -521,7 +521,7 @@ export function neighborsInFront( export function neighborsBehind( agentA: PotentialAgent, neighbors: PotentialAgent[], - colinear = false + colinear = false, ) { return neighbors.filter((neighbor) => { const aPos: number[] | undefined = diff --git a/apps/sim-core/packages/utils/package.json b/apps/sim-core/packages/utils/package.json index 0398599..e655587 100644 --- a/apps/sim-core/packages/utils/package.json +++ b/apps/sim-core/packages/utils/package.json @@ -8,8 +8,8 @@ "postinstall": "tsc -b .", "build": "tsc -b .", "build:watch": "tsc -b . -w", - "fmt": "prettier \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\" --write; eslint --quiet --fix \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\"", - "fmt-check": "prettier \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\" --check || exit 1; eslint --quiet \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\"" + "fmt": "prettier --write --cache \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\" && eslint --quiet --fix \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\"", + "lint": "prettier --check --cache \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\" && eslint --quiet \"*.{ts,js,json}\" \"{scripts,src}/**/*.{ts,js,json}\" && tsc --noEmit" }, "license": "SSPL-1.0", "devDependencies": { diff --git a/apps/sim-core/packages/utils/src/datasets/fetchDataset.ts b/apps/sim-core/packages/utils/src/datasets/fetchDataset.ts index e0c9275..0af00e1 100644 --- a/apps/sim-core/packages/utils/src/datasets/fetchDataset.ts +++ b/apps/sim-core/packages/utils/src/datasets/fetchDataset.ts @@ -8,7 +8,7 @@ export enum DatasetFormat { export const datasetFormat = ( ext: string, - rawCsv: boolean | undefined + rawCsv: boolean | undefined, ): DatasetFormat | null => { switch (ext) { case ".json": @@ -38,7 +38,7 @@ export async function fetchDataset( url: string, format: DatasetFormat, inPlaceData: string | null, - signal?: AbortSignal + signal?: AbortSignal, ): Promise { let responseText = null; if (inPlaceData) { @@ -55,7 +55,7 @@ export async function fetchDataset( if (!response.ok) { throw new DatasetRequestError( - `${response.status}: ${response.statusText}` + `${response.status}: ${response.statusText}`, ); } diff --git a/apps/sim-core/packages/utils/src/parsers/parseCsvAsJson.ts b/apps/sim-core/packages/utils/src/parsers/parseCsvAsJson.ts index b31ecbf..e155328 100644 --- a/apps/sim-core/packages/utils/src/parsers/parseCsvAsJson.ts +++ b/apps/sim-core/packages/utils/src/parsers/parseCsvAsJson.ts @@ -9,7 +9,7 @@ import { parse } from "papaparse"; */ export const parseCsvAsJson = ( input: string | File | NodeJS.ReadableStream, - reportProgress?: { size: number; reporter: (progress: number) => void } + reportProgress?: { size: number; reporter: (progress: number) => void }, ): Promise => new Promise((resolve, reject) => { let parsedString = "["; @@ -33,7 +33,7 @@ export const parseCsvAsJson = ( return; } reportProgress?.reporter( - Math.round((chunk.meta.cursor / reportProgress.size) * 100) + Math.round((chunk.meta.cursor / reportProgress.size) * 100), ); }, complete: () => { diff --git a/apps/sim-core/scripts/integration_tests/cypress/integration/sample_spec.js b/apps/sim-core/scripts/integration_tests/cypress/integration/sample_spec.js index d15b878..90eef35 100644 --- a/apps/sim-core/scripts/integration_tests/cypress/integration/sample_spec.js +++ b/apps/sim-core/scripts/integration_tests/cypress/integration/sample_spec.js @@ -54,7 +54,7 @@ describe("hash.ai platform testing", () => { cy.get(simulationFileElementSelector).should( "have.attr", "title", - "@hash/bid.js" + "@hash/bid.js", ); }); }); diff --git a/apps/sim-core/scripts/upload_builtin_behaviors.ts b/apps/sim-core/scripts/upload_builtin_behaviors.ts index d5bc48e..aab3a48 100644 --- a/apps/sim-core/scripts/upload_builtin_behaviors.ts +++ b/apps/sim-core/scripts/upload_builtin_behaviors.ts @@ -19,7 +19,7 @@ const uploadBehaviorToHASHIndex = ( cookie: string, behavior_name: string, behavior_source: string, - behavior_slug: string + behavior_slug: string, ) => { let data = { title: behavior_name, @@ -36,7 +36,7 @@ const uploadBehaviorToHASHIndex = ( if (options.env !== "prod") { throw new Error( - "There is no dev API to upload to: https://devapi.hash.ai/graphql was deprecated in Nov 2022" + "There is no dev API to upload to: https://devapi.hash.ai/graphql was deprecated in Nov 2022", ); } const url = "https://api.hash.ai/graphql"; @@ -88,7 +88,7 @@ fs.readdir("builtin_behaviors", {}, (err: any, files: string[]) => { cookie!, snakeToTitleCase(behavior_name), data.toString(), - behavior_slug + behavior_slug, ); }); } diff --git a/apps/sim-core/tsconfig.json b/apps/sim-core/tsconfig.json index 1a9ad56..a46f5a4 100644 --- a/apps/sim-core/tsconfig.json +++ b/apps/sim-core/tsconfig.json @@ -1,11 +1,12 @@ { "compilerOptions": { /* Basic Options */ - "target": "esnext", // Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. - "module": "esnext", // Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. + "target": "ESNext", // Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. + "module": "ESNext", // Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. "lib": ["DOM", "DOM.Iterable", "ESNext"], // Specify library files to be included in the compilation. "jsx": "react", // Specify JSX code generation: 'preserve', 'react-native', or 'react'. "removeComments": true, // Do not emit comments to output. + "skipLibCheck": true, // set to true when needed to work around upstream errors caused by isolatedModules /* Strict Type-Checking Options */ "strict": true, // Enable all strict type-checking options. @@ -17,7 +18,9 @@ /* Even More Options */ "resolveJsonModule": true, "incremental": true, - "noEmit": false + "noEmit": true, + + "strictPropertyInitialization": false, /** * HI, HELLO! READ THIS: diff --git a/apps/sim-core/vercel.json b/apps/sim-core/vercel.json index e37b4ff..051751b 100644 --- a/apps/sim-core/vercel.json +++ b/apps/sim-core/vercel.json @@ -4,7 +4,7 @@ "autoJobCancelation": true }, "installCommand": "./scripts/install-dependencies.sh", - "buildCommand": "yarn ws:core build --copy-index-to-root", + "buildCommand": "yarn ws:core build", "outputDirectory": "./packages/core/dist", "rewrites": [ { diff --git a/apps/sim-core/yarn.lock b/apps/sim-core/yarn.lock index 6b6df08..064e8f2 100644 --- a/apps/sim-core/yarn.lock +++ b/apps/sim-core/yarn.lock @@ -2,50 +2,46 @@ # yarn lockfile v1 -"3d-view@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/3d-view/-/3d-view-2.0.0.tgz#831ae942d7508c50801e3e06fafe1e8c574e17be" - integrity sha1-gxrpQtdQjFCAHj4G+v4ejFdOF74= - dependencies: - matrix-camera-controller "^2.1.1" - orbit-camera-controller "^4.0.0" - turntable-camera-controller "^3.0.0" - -"@alloc/types@^1.2.1": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@alloc/types/-/types-1.3.0.tgz#904245b8d3260a4b7d8a801c12501968f64fac08" - integrity sha512-mH7LiFiq9g6rX2tvt1LtwsclfG5hnsmtIfkZiauAGrm1AwXhoRS0sF2WrN9JGN7eV5vFXqNaB0eXZ3IvMsVi9g== - -"@ardatan/aggregate-error@0.0.6": - version "0.0.6" - resolved "https://registry.yarnpkg.com/@ardatan/aggregate-error/-/aggregate-error-0.0.6.tgz#fe6924771ea40fc98dc7a7045c2e872dc8527609" - integrity sha512-vyrkEHG1jrukmzTPtyWB4NLPauUw5bQeg4uhn8f+1SSynmrOcyvlb1GKQjjgoBzElLdfXCRYX8UnBlhklOHYRQ== - dependencies: - tslib "~2.0.1" +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@babel/highlight" "^7.10.4" + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== dependencies: "@babel/highlight" "^7.12.13" -"@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" - integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== +"@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" -"@babel/compat-data@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" - integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog== +"@babel/code-frame@^7.23.4", "@babel/code-frame@^7.8.3": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.4.tgz#03ae5af150be94392cb5c7ccd97db5a19a5da6aa" + integrity sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.12.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.9": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" + integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== "@babel/core@7.12.3", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5": version "7.12.3" @@ -69,27 +65,26 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.0.0": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.8.tgz#c191d9c5871788a591d69ea1dc03e5843a3680fb" - integrity sha512-oYapIySGw1zGhEFRd6lzWNLWFX2s5dA/jm+Pw/+59ZdXtjyIuwlXbrId22Md0rgZVop+aVoqow2riXhBLNyuQg== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.0" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helpers" "^7.13.0" - "@babel/parser" "^7.13.4" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - convert-source-map "^1.7.0" +"@babel/core@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" + integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.3" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.2" + "@babel/parser" "^7.23.3" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.3" + "@babel/types" "^7.23.3" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" - lodash "^4.17.19" - semver "^6.3.0" - source-map "^0.5.0" + json5 "^2.2.3" + semver "^6.3.1" "@babel/generator@^7.12.1", "@babel/generator@^7.12.5": version "7.12.5" @@ -100,110 +95,69 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.12.13", "@babel/generator@^7.13.0", "@babel/generator@^7.5.0": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" - integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== +"@babel/generator@^7.23.3", "@babel/generator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.4.tgz#4a41377d8566ec18f807f42962a7f3551de83d1c" + integrity sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ== dependencies: - "@babel/types" "^7.13.0" + "@babel/types" "^7.23.4" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" - source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.22.5" -"@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.22.15" -"@babel/helper-annotate-as-pure@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" - integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== +"@babel/helper-compilation-targets@^7.12.5", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" - integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-compilation-targets@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" - integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== - dependencies: - "@babel/compat-data" "^7.12.5" - "@babel/helper-validator-option" "^7.12.1" - browserslist "^4.14.5" - semver "^5.5.0" - -"@babel/helper-compilation-targets@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.8.tgz#02bdb22783439afb11b2f009814bdd88384bd468" - integrity sha512-pBljUGC1y3xKLn1nrx2eAhurLMA8OqBtBP/JwG4U8skN7kf8/aqwwxpV1N6T0e7r6+7uNitIa/fUxPFagSXp3A== - dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" - integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.12.1" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.10.4" - -"@babel/helper-create-class-features-plugin@^7.13.0": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.8.tgz#0367bd0a7505156ce018ca464f7ac91ba58c1a04" - integrity sha512-qioaRrKHQbn4hkRKDHbnuQ6kAxmmOF+kzKGnIfxPK4j2rckSJCpKzr/SSTlohSCiE3uAQpNDJ9FIh4baeE8W+w== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.13.0" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" - -"@babel/helper-create-regexp-features-plugin@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz#18b1302d4677f9dc4740fe8c9ed96680e29d37e8" - integrity sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - regexpu-core "^4.7.1" - -"@babel/helper-define-map@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" - integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/types" "^7.10.5" - lodash "^4.17.19" - -"@babel/helper-explode-assignable-expression@^7.10.4": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" - integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== - dependencies: - "@babel/types" "^7.12.1" + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.15" + browserslist "^4.21.9" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" + integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== "@babel/helper-function-name@^7.10.4": version "7.10.4" @@ -214,14 +168,13 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" - integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" @@ -230,19 +183,12 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-hoist-variables@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" - integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== - dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.22.5" "@babel/helper-member-expression-to-functions@^7.12.1": version "7.12.1" @@ -251,33 +197,26 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-member-expression-to-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" - integrity sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== +"@babel/helper-member-expression-to-functions@^7.22.15": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: - "@babel/types" "^7.13.0" + "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== dependencies: "@babel/types" "^7.12.5" -"@babel/helper-module-imports@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" - integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== +"@babel/helper-module-imports@^7.12.5", "@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.22.15" "@babel/helper-module-transforms@^7.12.1": version "7.12.1" @@ -294,20 +233,16 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" -"@babel/helper-module-transforms@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" - integrity sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.12.11" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - lodash "^4.17.19" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" "@babel/helper-optimise-call-expression@^7.10.4": version "7.10.4" @@ -316,33 +251,31 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-regex@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" - integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== - dependencies: - lodash "^4.17.19" +"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" - integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-wrap-function" "^7.10.4" - "@babel/types" "^7.12.1" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" "@babel/helper-replace-supers@^7.12.1": version "7.12.5" @@ -354,15 +287,14 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" - integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== +"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.9": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.0" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-simple-access@^7.12.1": version "7.12.1" @@ -371,33 +303,43 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-simple-access@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" - integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.22.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== dependencies: - "@babel/types" "^7.12.1" + "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": +"@babel/helper-split-export-declaration@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== dependencies: "@babel/types" "^7.11.0" -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" @@ -409,25 +351,24 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11", "@babel/helper-validator-option@^7.12.17", "@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== +"@babel/helper-validator-option@^7.12.11", "@babel/helper-validator-option@^7.14.5", "@babel/helper-validator-option@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" + integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== -"@babel/helper-wrap-function@^7.10.4": - version "7.12.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" - integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" "@babel/helpers@^7.12.1": version "7.12.5" @@ -438,23 +379,14 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" -"@babel/helpers@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.0.tgz#7647ae57377b4f0408bf4f8a7af01c42e41badc0" - integrity sha512-aan1MeFPxFacZeSz6Ld7YZo5aPuqnKlD7+HZY75xQsueczFccP9A7V05+oe0XpLwHK3oLorPe9eaAUljL7WEaQ== +"@babel/helpers@^7.23.2": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.4.tgz#7d2cfb969aa43222032193accd7329851facf3c1" + integrity sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw== dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.4" + "@babel/types" "^7.23.4" "@babel/highlight@^7.12.13": version "7.13.8" @@ -465,146 +397,148 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@7.12.16": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.16.tgz#cc31257419d2c3189d394081635703f549fc1ed4" - integrity sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw== +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.4": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.9.tgz#ca34cb95e1c2dd126863a84465ae8ef66114be99" - integrity sha512-nEUfRiARCcaVo3ny3ZQjURjHQZUo/JkEw7rLlSZy/psWGnvwXFtPcr6jb7Yb41DVW5LTe6KRq9LGleRNsg1Frw== +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.1", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5": +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0" integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ== -"@babel/plugin-proposal-async-generator-functions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" - integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.12.1" - "@babel/plugin-syntax-async-generators" "^7.8.0" +"@babel/parser@^7.20.7", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" + integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== -"@babel/plugin-proposal-class-properties@7.12.1", "@babel/plugin-proposal-class-properties@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" - integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== +"@babel/parser@^7.22.15": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" + integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== + +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== +"@babel/plugin-proposal-class-properties@^7.12.1": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-dynamic-import@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" - integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-namespace-from@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" - integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-proposal-json-strings@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" - integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-proposal-logical-assignment-operators@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" - integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" - integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@7.12.7", "@babel/plugin-proposal-numeric-separator@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" - integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== +"@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.0.0": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" - integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== - dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.13.0" - "@babel/plugin-proposal-object-rest-spread@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" - integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" "@babel/plugin-proposal-optional-catch-binding@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" - integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-proposal-optional-chaining@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" - integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" - integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" - integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -620,21 +554,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.0.0": +"@babel/plugin-syntax-class-properties@^7.12.1": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-dynamic-import@^7.8.0": +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -648,13 +582,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz#5df9962503c0a9c918381c929d51d4d6949e7e86" - integrity sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -669,19 +596,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-jsx@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" - integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw== +"@babel/plugin-syntax-jsx@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -704,7 +624,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -725,449 +645,334 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" - integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== +"@babel/plugin-syntax-top-level-await@^7.12.1": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.12.1": +"@babel/plugin-syntax-top-level-await@^7.8.3": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" - integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA== + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== +"@babel/plugin-syntax-typescript@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-arrow-functions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" - integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-async-to-generator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" - integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.12.1" - -"@babel/plugin-transform-block-scoped-functions@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-transform-block-scoped-functions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" - integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-block-scoping@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-block-scoping@^7.12.11": - version "7.12.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" - integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-classes@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" - integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" - globals "^11.1.0" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-classes@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" - integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-define-map" "^7.10.4" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.10.4" + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz#73380c632c095b03e8503c24fd38f95ad41ffacb" + integrity sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-transform-computed-properties@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" - integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-destructuring@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" - integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.15" "@babel/plugin-transform-destructuring@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" - integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" - integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-duplicate-keys@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" - integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-exponentiation-operator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" - integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-flow-strip-types@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz#58177a48c209971e8234e99906cb6bd1122addd3" - integrity sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-flow" "^7.12.13" - -"@babel/plugin-transform-for-of@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-for-of@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" - integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" + integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-function-name@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-function-name@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" - integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-literals@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-literals@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" - integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-member-expression-literals@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" - integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-modules-amd@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" - integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== - dependencies: - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.0.0": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" - integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-modules-commonjs@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" - integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-simple-access" "^7.12.1" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" "@babel/plugin-transform-modules-systemjs@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" - integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: - "@babel/helper-hoist-variables" "^7.10.4" - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-validator-identifier" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" "@babel/plugin-transform-modules-umd@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" - integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" - integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-new-target@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" - integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-object-super@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-object-super@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" - integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" - integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.7": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-parameters@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" - integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-property-literals@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== +"@babel/plugin-transform-react-display-name@^7.14.5": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" + integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-property-literals@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" - integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== +"@babel/plugin-transform-react-jsx-development@^7.14.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz#baa92d15c4570411301a85a74c13534873885b65" - integrity sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ== +"@babel/plugin-transform-react-jsx-self@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" + integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-jsx-development@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz#1a6c73e2f7ed2c42eebc3d2ad60b0c7494fcb9af" - integrity sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ== +"@babel/plugin-transform-react-jsx-source@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz#03527006bdc8775247a78643c51d4e715fe39a3e" + integrity sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g== dependencies: - "@babel/plugin-transform-react-jsx" "^7.14.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz#39749f0ee1efd8a1bd729152cf5f78f1d247a44a" - integrity sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q== +"@babel/plugin-transform-react-jsx@^7.14.5", "@babel/plugin-transform-react-jsx@^7.22.5": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" + integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-jsx" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/types" "^7.23.4" "@babel/plugin-transform-react-pure-annotations@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz#18de612b84021e3a9802cbc212c9d9f46d0d11fc" - integrity sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" + integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-regenerator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" - integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: - regenerator-transform "^0.14.2" + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" "@babel/plugin-transform-reserved-words@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" - integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-shorthand-properties@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-shorthand-properties@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" - integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-spread@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-spread@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" - integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-transform-sticky-regex@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" - integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-template-literals@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-template-literals@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" - integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-typeof-symbol@^7.12.10": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" - integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-typescript@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" - integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw== + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.4.tgz#da12914d17b3c4b307f32c5fd91fbfdf17d56f86" + integrity sha512-39hCCOl+YUAyMOu6B9SmUTiHUU0t/CxJNUmY3qRdJujbqi+lrQcL11ysYUsAvFWPBdhihrv1z0oRG84Yr3dODQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-typescript" "^7.12.1" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.23.3" "@babel/plugin-transform-unicode-escapes@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" - integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-unicode-regex@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" - integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@7.12.11": version "7.12.11" @@ -1242,9 +1047,9 @@ semver "^5.5.0" "@babel/preset-modules@^0.1.3": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + version "0.1.6" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6.tgz#31bcdd8f19538437339d17af00d177d854d9d458" + integrity sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1272,6 +1077,11 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-typescript" "^7.12.1" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/runtime-corejs3@^7.10.2": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz#51b9092befbeeed938335a109dbe0df51451e9dc" @@ -1280,13 +1090,20 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.8.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" + integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.10.4", "@babel/template@^7.3.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" @@ -1296,44 +1113,14 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/template@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0" - integrity sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" - integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.0" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.13.0" - "@babel/types" "^7.13.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" "@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5": version "7.12.5" @@ -1345,36 +1132,28 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-split-export-declaration" "^7.11.0" "@babel/parser" "^7.12.5" - "@babel/types" "^7.12.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/traverse@^7.10.4": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.1.tgz#941395e0c5cc86d5d3e75caa095d3924526f0c1e" - integrity sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.1" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.12.1" - "@babel/types" "^7.12.1" + "@babel/types" "^7.12.5" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/types@7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.13.tgz#8be1aa8f2c876da11a9cf650c0ecf656913ad611" - integrity sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" - to-fast-properties "^2.0.0" +"@babel/traverse@^7.23.3", "@babel/traverse@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.4.tgz#c2790f7edf106d059a0098770fe70801417f3f85" + integrity sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg== + dependencies: + "@babel/code-frame" "^7.23.4" + "@babel/generator" "^7.23.4" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.4" + "@babel/types" "^7.23.4" + debug "^4.1.0" + globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.11", "@babel/types@^7.12.5", "@babel/types@^7.12.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== @@ -1383,21 +1162,22 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.12.13", "@babel/types@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" - integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== +"@babel/types@^7.12.11", "@babel/types@^7.20.7", "@babel/types@^7.22.19", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.4.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.4.tgz#7206a1810fc512a7f7f7d4dace4cb4c1c9dbfb8e" + integrity sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" -"@babel/types@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" - integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== +"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" + integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== dependencies: - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1574,31 +1354,148 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz#eea4635828dde372838b0909693ebd9aafeec22d" - integrity sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA== +"@esbuild/android-arm64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.5.tgz#276c5f99604054d3dbb733577e09adae944baa90" + integrity sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ== + +"@esbuild/android-arm@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.5.tgz#4a3cbf14758166abaae8ba9c01a80e68342a4eec" + integrity sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA== + +"@esbuild/android-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.5.tgz#21a3d11cd4613d2d3c5ccb9e746c254eb9265b0a" + integrity sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA== + +"@esbuild/darwin-arm64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.5.tgz#714cb839f467d6a67b151ee8255886498e2b9bf6" + integrity sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw== + +"@esbuild/darwin-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.5.tgz#2c553e97a6d2b4ae76a884e35e6cbab85a990bbf" + integrity sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA== + +"@esbuild/freebsd-arm64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.5.tgz#d554f556718adb31917a0da24277bf84b6ee87f3" + integrity sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ== + +"@esbuild/freebsd-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.5.tgz#288f7358a3bb15d99e73c65c9adaa3dabb497432" + integrity sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ== + +"@esbuild/linux-arm64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.5.tgz#95933ae86325c93cb6b5e8333d22120ecfdc901b" + integrity sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA== + +"@esbuild/linux-arm@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.5.tgz#0acef93aa3e0579e46d33b666627bddb06636664" + integrity sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ== + +"@esbuild/linux-ia32@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.5.tgz#b6e5c9e80b42131cbd6b1ddaa48c92835f1ed67f" + integrity sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ== + +"@esbuild/linux-loong64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.5.tgz#e5f0cf95a180158b01ff5f417da796a1c09dfbea" + integrity sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw== + +"@esbuild/linux-mips64el@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.5.tgz#ae36fb86c7d5f641f3a0c8472e83dcb6ea36a408" + integrity sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg== + +"@esbuild/linux-ppc64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.5.tgz#7960cb1666f0340ddd9eef7b26dcea3835d472d0" + integrity sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q== + +"@esbuild/linux-riscv64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.5.tgz#32207df26af60a3a9feea1783fc21b9817bade19" + integrity sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag== + +"@esbuild/linux-s390x@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.5.tgz#b38d5681db89a3723862dfa792812397b1510a7d" + integrity sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw== + +"@esbuild/linux-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.5.tgz#46feba2ad041a241379d150f415b472fe3885075" + integrity sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A== + +"@esbuild/netbsd-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.5.tgz#3b5c1fb068f26bfc681d31f682adf1bea4ef0702" + integrity sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g== + +"@esbuild/openbsd-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.5.tgz#ca6830316ca68056c5c88a875f103ad3235e00db" + integrity sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA== + +"@esbuild/sunos-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.5.tgz#9efc4eb9539a7be7d5a05ada52ee43cda0d8e2dd" + integrity sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg== + +"@esbuild/win32-arm64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.5.tgz#29f8184afa7a02a956ebda4ed638099f4b8ff198" + integrity sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg== + +"@esbuild/win32-ia32@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.5.tgz#f3de07afb292ecad651ae4bb8727789de2d95b05" + integrity sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw== + +"@esbuild/win32-x64@0.19.5": + version "0.19.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.5.tgz#faad84c41ba12e3a0acb52571df9bff37bee75f6" + integrity sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: - lodash.get "^4" - make-error "^1" - ts-node "^9" - tslib "^2" + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" - integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== +"@eslint/eslintrc@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" + integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" + integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== + "@fluentui/date-time-utilities@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@fluentui/date-time-utilities/-/date-time-utilities-7.9.0.tgz#4c8570b3af8bc654963ecb034d0fd100010e7d6d" @@ -1666,357 +1563,24 @@ resolved "https://registry.yarnpkg.com/@fullstory/browser/-/browser-1.4.5.tgz#a8f48c65bdd0a0d53cc5b3b678b02c715156fd96" integrity sha512-a1EnuwRMa9p8aNauM8rrjH+lqhX2RCo1bHOG3DGcEHXtzV+r8TDeiO8HB8kU1IjE/EXpzAGtQ2F0JMWZhvoaYg== -"@graphql-codegen/add@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@graphql-codegen/add/-/add-2.0.2.tgz#4acbb95be9ebb859a3cebfe7132fdf49ffe06dd8" - integrity sha512-0X1ofeSvAjCNcLar2ZR1EOmm5dvyKJMFbgM+ySf1PaHyoi3yf/xRI2Du81ONzQ733Lhmn3KTX1VKybm/OB1Qtg== - dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.2" - tslib "~2.0.1" - -"@graphql-codegen/cli@1.21.1": - version "1.21.1" - resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-1.21.1.tgz#fa1666ea5f1751e158d6d200c58f8228ad2f98ed" - integrity sha512-xlOmpKWID2zWOwm9mtjnOCA7qsQ8tJ34RYkKLyGMPoKaTmyWwKeAWpAH1qdukZT5AXDO7G2cZU5AdF1TmYEPUA== - dependencies: - "@graphql-codegen/core" "1.17.9" - "@graphql-codegen/plugin-helpers" "^1.18.2" - "@graphql-tools/apollo-engine-loader" "^6" - "@graphql-tools/code-file-loader" "^6" - "@graphql-tools/git-loader" "^6" - "@graphql-tools/github-loader" "^6" - "@graphql-tools/graphql-file-loader" "^6" - "@graphql-tools/json-file-loader" "^6" - "@graphql-tools/load" "^6" - "@graphql-tools/prisma-loader" "^6" - "@graphql-tools/url-loader" "^6" - "@graphql-tools/utils" "^7.0.0" - ansi-escapes "^4.3.1" - camel-case "^4.1.2" - chalk "^4.1.0" - chokidar "^3.4.3" - common-tags "^1.8.0" - constant-case "^3.0.3" - cosmiconfig "^7.0.0" - debounce "^1.2.0" - dependency-graph "^0.10.0" - detect-indent "^6.0.0" - glob "^7.1.6" - graphql-config "^3.2.0" - indent-string "^4.0.0" - inquirer "^7.3.3" - is-glob "^4.0.1" - json-to-pretty-yaml "^1.2.2" - latest-version "5.1.0" - listr "^0.14.3" - listr-update-renderer "^0.5.0" - log-symbols "^4.0.0" - lower-case "^2.0.1" - minimatch "^3.0.4" - mkdirp "^1.0.4" - pascal-case "^3.1.1" - string-env-interpolation "^1.0.1" - ts-log "^2.2.3" - tslib "~2.1.0" - upper-case "^2.0.2" - valid-url "^1.0.9" - wrap-ansi "^7.0.0" - yaml "^1.10.0" - yargs "^16.1.1" - -"@graphql-codegen/core@1.17.9": - version "1.17.9" - resolved "https://registry.yarnpkg.com/@graphql-codegen/core/-/core-1.17.9.tgz#c03e71018ff04d26f5139a2d90a32b31d3bb2b43" - integrity sha512-7nwy+bMWqb0iYJ2DKxA9UiE16meeJ2Ch2XWS/N/ZnA0snTR+GZ20USI8z6YqP1Fuist7LvGO1MbitO2qBT8raA== - dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.2" - "@graphql-tools/merge" "^6" - "@graphql-tools/utils" "^6" - tslib "~2.0.1" - -"@graphql-codegen/plugin-helpers@^1.18.2": - version "1.18.2" - resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-1.18.2.tgz#57011076cb8b8f5d04d37d226a5eda300c01be94" - integrity sha512-SvX+Ryq2naLcoD6jJNxtzc/moWTgHJ+X0KRfvhGWTa+xtFTS02i+PWOR89YYPcD8+LF6GmyFBjx2FmLCx4JwMg== - dependencies: - "@graphql-tools/utils" "^6" - camel-case "4.1.1" - common-tags "1.8.0" - constant-case "3.0.3" - import-from "3.0.0" - lodash "~4.17.20" - lower-case "2.0.1" - param-case "3.0.3" - pascal-case "3.1.1" - tslib "~2.0.1" - upper-case "2.0.1" - -"@graphql-codegen/typescript-operations@1.17.14": - version "1.17.14" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-1.17.14.tgz#69b4bee4d66f2ea7e288f1be889e08946ef3452a" - integrity sha512-jf1KnkA0i5hQNwc7bdMg5G6305DMSeTGDJSDoFryA2Tt9czWxY78m10/6GueUWo3zP6FIEhW1QRSve8ewTKEMg== - dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.2" - "@graphql-codegen/typescript" "^1.20.1" - "@graphql-codegen/visitor-plugin-common" "^1.18.1" - auto-bind "~4.0.0" - tslib "~2.1.0" - -"@graphql-codegen/typescript@1.21.0", "@graphql-codegen/typescript@^1.20.1": - version "1.21.0" - resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript/-/typescript-1.21.0.tgz#301b1851cd278bedd1f49e1b3d654f4dc0af2943" - integrity sha512-23YttnZ+87dA/3lbCvPKdsrpEOx142dCT9xSh6XkSeyCvn+vUtETN2MhamCYB87G7Nu2EcLDFKDZjgXH73f4fg== - dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.2" - "@graphql-codegen/visitor-plugin-common" "^1.18.3" - auto-bind "~4.0.0" - tslib "~2.1.0" - -"@graphql-codegen/visitor-plugin-common@^1.18.1", "@graphql-codegen/visitor-plugin-common@^1.18.3": - version "1.18.3" - resolved "https://registry.yarnpkg.com/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-1.18.3.tgz#9d2c4449c3bdaffe3e782e2321fe0cb998b8a91d" - integrity sha512-6xJzt8hszCTKt3rTlcCURpuiAFuaiaZgStlVeRE1OrKEDiY1T3vwF3/7TonhfnEjqBWtZdMmXvNx3ArXkRUV4w== - dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.2" - "@graphql-tools/optimize" "^1.0.1" - "@graphql-tools/relay-operation-optimizer" "^6" - array.prototype.flatmap "^1.2.4" - auto-bind "~4.0.0" - dependency-graph "^0.10.0" - graphql-tag "^2.11.0" - parse-filepath "^1.0.2" - pascal-case "^3.1.1" - tslib "~2.1.0" - -"@graphql-tools/apollo-engine-loader@^6": - version "6.2.5" - resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-6.2.5.tgz#b9e65744f522bb9f6ca50651e5622820c4f059a8" - integrity sha512-CE4uef6PyxtSG+7OnLklIr2BZZDgjO89ZXK47EKdY7jQy/BQD/9o+8SxPsgiBc+2NsDJH2I6P/nqoaJMOEat6g== - dependencies: - "@graphql-tools/utils" "^7.0.0" - cross-fetch "3.0.6" - tslib "~2.0.1" - -"@graphql-tools/batch-execute@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-7.0.0.tgz#e79d11bd5b39f29172f6ec2eafa71103c6a6c85b" - integrity sha512-+ywPfK6N2Ddna6oOa5Qb1Mv7EA8LOwRNOAPP9dL37FEhksJM9pYqPSceUcqMqg7S9b0+Cgr78s408rgvurV3/Q== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@graphql-tools/utils" "^7.0.0" - dataloader "2.0.0" - is-promise "4.0.0" - tslib "~2.0.1" + "@humanwhocodes/object-schema" "^2.0.1" + debug "^4.1.1" + minimatch "^3.0.5" -"@graphql-tools/code-file-loader@^6": - version "6.3.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-6.3.1.tgz#42dfd4db5b968acdb453382f172ec684fa0c34ed" - integrity sha512-ZJimcm2ig+avgsEOWWVvAaxZrXXhiiSZyYYOJi0hk9wh5BxZcLUNKkTp6EFnZE/jmGUwuos3pIjUD3Hwi3Bwhg== - dependencies: - "@graphql-tools/graphql-tag-pluck" "^6.5.1" - "@graphql-tools/utils" "^7.0.0" - tslib "~2.1.0" - -"@graphql-tools/delegate@^7.0.1", "@graphql-tools/delegate@^7.0.7": - version "7.0.10" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-7.0.10.tgz#f87ac85a2dbd03b5b3aabf347f4479fabe8ceac3" - integrity sha512-6Di9ia5ohoDvrHuhj2cak1nJGhIefJmUsd3WKZcJ2nu2yZAFawWMxGvQImqv3N7iyaWKiVhrrK8Roi/JrYhdKg== - dependencies: - "@ardatan/aggregate-error" "0.0.6" - "@graphql-tools/batch-execute" "^7.0.0" - "@graphql-tools/schema" "^7.0.0" - "@graphql-tools/utils" "^7.1.6" - dataloader "2.0.0" - is-promise "4.0.0" - tslib "~2.1.0" - -"@graphql-tools/git-loader@^6": - version "6.2.6" - resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-6.2.6.tgz#c2226f4b8f51f1c05c9ab2649ba32d49c68cd077" - integrity sha512-ooQTt2CaG47vEYPP3CPD+nbA0F+FYQXfzrB1Y1ABN9K3d3O2RK3g8qwslzZaI8VJQthvKwt0A95ZeE4XxteYfw== - dependencies: - "@graphql-tools/graphql-tag-pluck" "^6.2.6" - "@graphql-tools/utils" "^7.0.0" - tslib "~2.1.0" - -"@graphql-tools/github-loader@^6": - version "6.2.5" - resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-6.2.5.tgz#460dff6f5bbaa26957a5ea3be4f452b89cc6a44b" - integrity sha512-DLuQmYeNNdPo8oWus8EePxWCfCAyUXPZ/p1PWqjrX/NGPyH2ZObdqtDAfRHztljt0F/qkBHbGHCEk2TKbRZTRw== - dependencies: - "@graphql-tools/graphql-tag-pluck" "^6.2.6" - "@graphql-tools/utils" "^7.0.0" - cross-fetch "3.0.6" - tslib "~2.0.1" - -"@graphql-tools/graphql-file-loader@^6", "@graphql-tools/graphql-file-loader@^6.0.0": - version "6.2.7" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.2.7.tgz#d3720f2c4f4bb90eb2a03a7869a780c61945e143" - integrity sha512-5k2SNz0W87tDcymhEMZMkd6/vs6QawDyjQXWtqkuLTBF3vxjxPD1I4dwHoxgWPIjjANhXybvulD7E+St/7s9TQ== - dependencies: - "@graphql-tools/import" "^6.2.6" - "@graphql-tools/utils" "^7.0.0" - tslib "~2.1.0" - -"@graphql-tools/graphql-tag-pluck@^6.2.6", "@graphql-tools/graphql-tag-pluck@^6.5.1": - version "6.5.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-6.5.1.tgz#5fb227dbb1e19f4b037792b50f646f16a2d4c686" - integrity sha512-7qkm82iFmcpb8M6/yRgzjShtW6Qu2OlCSZp8uatA3J0eMl87TxyJoUmL3M3UMMOSundAK8GmoyNVFUrueueV5Q== - dependencies: - "@babel/parser" "7.12.16" - "@babel/traverse" "7.12.13" - "@babel/types" "7.12.13" - "@graphql-tools/utils" "^7.0.0" - tslib "~2.1.0" - -"@graphql-tools/import@^6.2.6": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.3.0.tgz#171472b425ea7cba4a612ad524b96bd206ae71b6" - integrity sha512-zmaVhJ3UPjzJSb005Pjn2iWvH+9AYRXI4IUiTi14uPupiXppJP3s7S25Si3+DbHpFwurDF2nWRxBLiFPWudCqw== - dependencies: - resolve-from "5.0.0" - tslib "~2.1.0" - -"@graphql-tools/json-file-loader@^6", "@graphql-tools/json-file-loader@^6.0.0": - version "6.2.6" - resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-6.2.6.tgz#830482cfd3721a0799cbf2fe5b09959d9332739a" - integrity sha512-CnfwBSY5926zyb6fkDBHnlTblHnHI4hoBALFYXnrg0Ev4yWU8B04DZl/pBRUc459VNgO2x8/mxGIZj2hPJG1EA== - dependencies: - "@graphql-tools/utils" "^7.0.0" - tslib "~2.0.1" - -"@graphql-tools/load@^6", "@graphql-tools/load@^6.0.0": - version "6.2.7" - resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-6.2.7.tgz#61f7909d37fb1c095e3e8d4f7a6d3b8bb011e26a" - integrity sha512-b1qWjki1y/QvGtoqW3x8bcwget7xmMfLGsvGFWOB6m38tDbzVT3GlJViAC0nGPDks9OCoJzAdi5IYEkBaqH5GQ== - dependencies: - "@graphql-tools/merge" "^6.2.9" - "@graphql-tools/utils" "^7.5.0" - globby "11.0.2" - import-from "3.0.0" - is-glob "4.0.1" - p-limit "3.1.0" - tslib "~2.1.0" - unixify "1.0.0" - valid-url "1.0.9" - -"@graphql-tools/merge@^6", "@graphql-tools/merge@^6.0.0", "@graphql-tools/merge@^6.2.9": - version "6.2.10" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-6.2.10.tgz#cadb37b1bed786cba1b3c6f728c5476a164e153d" - integrity sha512-dM3n37PcslvhOAkCz7Cwk0BfoiSVKXGmCX+VMZkATbXk/0vlxUfNEpVfA5yF4IkP27F04SzFQSaNrbD0W2Rszw== - dependencies: - "@graphql-tools/schema" "^7.0.0" - "@graphql-tools/utils" "^7.5.0" - tslib "~2.1.0" - -"@graphql-tools/optimize@^1.0.1": +"@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/optimize/-/optimize-1.0.1.tgz#9933fffc5a3c63f95102b1cb6076fb16ac7bb22d" - integrity sha512-cRlUNsbErYoBtzzS6zXahXeTBZGPVlPHXCpnEZ0XiK/KY/sQL96cyzak0fM/Gk6qEI9/l32MYEICjasiBQrl5w== - dependencies: - tslib "~2.0.1" - -"@graphql-tools/prisma-loader@^6": - version "6.2.7" - resolved "https://registry.yarnpkg.com/@graphql-tools/prisma-loader/-/prisma-loader-6.2.7.tgz#0a9aa8f40c79a926f2d4f157dc282478bccafaca" - integrity sha512-o0QHl767uaLZVjb9NlupZjCzjfC5Zo79G6QLnK0Rbi0Ldk5Lf05HDZIfMhiyd9tsw73d0GQY7yIPvQJFE2S5Tw== - dependencies: - "@graphql-tools/url-loader" "^6.3.1" - "@graphql-tools/utils" "^7.0.0" - "@types/http-proxy-agent" "^2.0.2" - "@types/js-yaml" "^3.12.5" - "@types/json-stable-stringify" "^1.0.32" - "@types/jsonwebtoken" "^8.5.0" - ajv "^6.12.6" - bluebird "^3.7.2" - chalk "^4.1.0" - debug "^4.2.0" - dotenv "^8.2.0" - graphql-request "^3.3.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - isomorphic-fetch "^3.0.0" - js-yaml "^3.14.0" - json-stable-stringify "^1.0.1" - jsonwebtoken "^8.5.1" - lodash "^4.17.20" - replaceall "^0.1.6" - scuid "^1.1.0" - tslib "~2.0.1" - yaml-ast-parser "^0.0.43" - -"@graphql-tools/relay-operation-optimizer@^6": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.3.0.tgz#f8c7f6c8aa4a9cf50ab151fbc5db4f4282a79532" - integrity sha512-Or3UgRvkY9Fq1AAx7q38oPqFmTepLz7kp6wDHKyR0ceG7AvHv5En22R12mAeISInbhff4Rpwgf6cE8zHRu6bCw== - dependencies: - "@graphql-tools/utils" "^7.1.0" - relay-compiler "10.1.0" - tslib "~2.0.1" - -"@graphql-tools/schema@^7.0.0", "@graphql-tools/schema@^7.1.2": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-7.1.3.tgz#d816400da51fbac1f0086e35540ab63b5e30e858" - integrity sha512-ZY76hmcJlF1iyg3Im0sQ3ASRkiShjgv102vLTVcH22lEGJeCaCyyS/GF1eUHom418S60bS8Th6+autRUxfBiBg== - dependencies: - "@graphql-tools/utils" "^7.1.2" - tslib "~2.1.0" - -"@graphql-tools/url-loader@^6", "@graphql-tools/url-loader@^6.0.0", "@graphql-tools/url-loader@^6.3.1": - version "6.8.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-6.8.1.tgz#cbfbe20f1a1bdeb9a4704e37b8286026d228920b" - integrity sha512-iE/y9IAu0cZYL7o9IIDdGm5WjxacN25nGgVqjZINYlisW/wyuBxng7DMJBAp6yM6gkxkCpMno1ljA/52MXzVPQ== - dependencies: - "@graphql-tools/delegate" "^7.0.1" - "@graphql-tools/utils" "^7.1.5" - "@graphql-tools/wrap" "^7.0.4" - "@types/websocket" "1.0.1" - cross-fetch "3.0.6" - eventsource "1.0.7" - extract-files "9.0.0" - form-data "4.0.0" - graphql-upload "^11.0.0" - graphql-ws "4.1.5" - is-promise "4.0.0" - isomorphic-ws "4.0.1" - sse-z "0.3.0" - sync-fetch "0.3.0" - tslib "~2.1.0" - valid-url "1.0.9" - ws "7.4.3" - -"@graphql-tools/utils@^6", "@graphql-tools/utils@^6.0.0": - version "6.2.4" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.2.4.tgz#38a2314d2e5e229ad4f78cca44e1199e18d55856" - integrity sha512-ybgZ9EIJE3JMOtTrTd2VcIpTXtDrn2q6eiYkeYMKRVh3K41+LZa6YnR2zKERTXqTWqhobROwLt4BZbw2O3Aeeg== - dependencies: - "@ardatan/aggregate-error" "0.0.6" - camel-case "4.1.1" - tslib "~2.0.1" - -"@graphql-tools/utils@^7.0.0", "@graphql-tools/utils@^7.1.0", "@graphql-tools/utils@^7.1.2", "@graphql-tools/utils@^7.1.5", "@graphql-tools/utils@^7.1.6", "@graphql-tools/utils@^7.2.1", "@graphql-tools/utils@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-7.5.0.tgz#8485d42eea0f723748dca4cc09344f032bd1e2fa" - integrity sha512-8f//RSqHmKRdg9A3GHlZdxzlVfF/938ZD9edXLW7EriSABg1BXu3veru9W02VqORypArb2S/Tyeyvsk2gForqA== - dependencies: - "@ardatan/aggregate-error" "0.0.6" - camel-case "4.1.2" - tslib "~2.1.0" - -"@graphql-tools/wrap@^7.0.4": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-7.0.5.tgz#8659a119abef11754f712b0c202e41a484951e0b" - integrity sha512-KCWBXsDfvG46GNUawRltJL4j9BMGoOG7oo3WEyCQP+SByWXiTe5cBF45SLDVQgdjljGNZhZ4Lq/7avIkF7/zDQ== - dependencies: - "@graphql-tools/delegate" "^7.0.7" - "@graphql-tools/schema" "^7.1.2" - "@graphql-tools/utils" "^7.2.1" - is-promise "4.0.0" - tslib "~2.0.1" - -"@iarna/toml@^2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" - integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -2205,11 +1769,48 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@juggle/resize-observer@3.2.0", "@juggle/resize-observer@^3.2.0": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@juggle/resize-observer@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.2.0.tgz#5e0b448d27fe3091bae6216456512c5904d05661" integrity sha512-fsLxt0CHx2HCV9EL8lDoVkwHffsA0snUpddYjdLyXcG5E41xaamn9ZyQqOE9TUJdrRlH8/hjIf+UdOdDeKCUgg== +"@juggle/resize-observer@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" + integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== + "@loaders.gl/core@*", "@loaders.gl/core@^2.3.0": version "2.3.12" resolved "https://registry.yarnpkg.com/@loaders.gl/core/-/core-2.3.12.tgz#452451cb5ac8fe9b8feef9868012f23e964b9e22" @@ -2539,11 +2140,24 @@ "@nodelib/fs.stat" "2.0.3" run-parallel "^1.1.9" +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + "@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": version "2.0.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== +"@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + "@nodelib/fs.walk@^1.2.3": version "1.2.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" @@ -2552,6 +2166,14 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" +"@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + "@plotly/d3-sankey-circular@0.33.1": version "0.33.1" resolved "https://registry.yarnpkg.com/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz#15d1e0337e0e4b1135bdf0e2195c88adacace1a7" @@ -2571,6 +2193,11 @@ d3-collection "1" d3-shape "^1.2.0" +"@plotly/d3@3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@plotly/d3/-/d3-3.8.1.tgz#674bf19809ffcc359e0ab388a1051f2dac5e6877" + integrity sha512-x49ThEu1FRA00kTso4Jdfyf2byaCPLBGmLjAYQz5OzaPyLUhHesX3/Nfv2OHEhynhdy2UB39DLXq6thYe2L2kg== + "@plotly/point-cluster@^3.1.9": version "3.1.9" resolved "https://registry.yarnpkg.com/@plotly/point-cluster/-/point-cluster-3.1.9.tgz#8ffec77fbf5041bf15401079e4fdf298220291c1" @@ -2599,45 +2226,61 @@ dependencies: "@babel/runtime" "^7.0.0" -"@react-spring/animated@9.0.0-rc.3": - version "9.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.0.0-rc.3.tgz#e792cb76aacecfc78db2be6020ac11ce96503eb5" - integrity sha512-dAvgtKhkYpzzr+EkmZ4ZuJ5CujxCW0LaT109DvO/2MQNk3EWIxcgl+ik4tSulSbgau1GN8RlkRKyDp0wISdQ3Q== +"@react-spring/animated@~9.7.3": + version "9.7.3" + resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.7.3.tgz#4211b1a6d48da0ff474a125e93c0f460ff816e0f" + integrity sha512-5CWeNJt9pNgyvuSzQH+uy2pvTg8Y4/OisoscZIR8/ZNLIOI+CatFBhGZpDGTF/OzdNFsAoGk3wiUYTwoJ0YIvw== dependencies: - "@babel/runtime" "^7.3.1" - "@react-spring/shared" "9.0.0-rc.3" - react-layout-effect "^1.0.1" + "@react-spring/shared" "~9.7.3" + "@react-spring/types" "~9.7.3" -"@react-spring/core@9.0.0-rc.3": - version "9.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.0.0-rc.3.tgz#c8e697573936c525bd0f6ca0c0869f75c86e8a83" - integrity sha512-3OzsVFxpfMJNkkQj8TwAH3NhUAX76AXu6WkslQF4EgBeEoG5eY3m+VvM9RsAsGWDuBKpscZ/wBpFt5Ih6KdGHA== +"@react-spring/core@~9.7.3": + version "9.7.3" + resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.7.3.tgz#60056bcb397f2c4f371c6c9a5f882db77ae90095" + integrity sha512-IqFdPVf3ZOC1Cx7+M0cXf4odNLxDC+n7IN3MDcVCTIOSBfqEcBebSv+vlY5AhM0zw05PDbjKrNmBpzv/AqpjnQ== dependencies: - "@babel/runtime" "^7.3.1" - "@react-spring/animated" "9.0.0-rc.3" - "@react-spring/shared" "9.0.0-rc.3" - react-layout-effect "^1.0.1" - use-memo-one "^1.1.0" + "@react-spring/animated" "~9.7.3" + "@react-spring/shared" "~9.7.3" + "@react-spring/types" "~9.7.3" -"@react-spring/shared@9.0.0-rc.3": - version "9.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.0.0-rc.3.tgz#3f4c9d90accc20fef51a283a7806d78390b84161" - integrity sha512-dd50TxwwMWd+dSB0InjndUN9w17cbnMCPy+0sag6zRxxKIo7eOyWSliOtLKxvufgmdC8Prm4M3GT5dmB1yxKEQ== +"@react-spring/shared@~9.7.3": + version "9.7.3" + resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.7.3.tgz#4cf29797847c689912aec4e62e34c99a4d5d9e53" + integrity sha512-NEopD+9S5xYyQ0pGtioacLhL2luflh6HACSSDUZOwLHoxA5eku1UPuqcJqjwSD6luKjjLfiLOspxo43FUHKKSA== dependencies: - "@alloc/types" "^1.2.1" - "@babel/runtime" "^7.3.1" - fluids "^0.1.6" - tslib "^1.11.1" + "@react-spring/types" "~9.7.3" + +"@react-spring/types@~9.7.3": + version "9.7.3" + resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.7.3.tgz#ea78fd447cbc2612c1f5d55852e3c331e8172a0b" + integrity sha512-Kpx/fQ/ZFX31OtlqVEFfgaD1ACzul4NksrvIgYfIFq9JpDHFwQkMVZ10tbo0FU/grje4rcL4EIrjekl3kYwgWw== "@react-spring/web@^9.0.0-rc.3": - version "9.0.0-rc.3" - resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.0.0-rc.3.tgz#da977382f91d9af4c400e4aa7dc37d3db07b87e0" - integrity sha512-rEvipblmihiz8+Eo01zDp5dqWn6XfYk8q2rlN9c18YIOL4o6nuY/VplDoocUMHYfH4liurpO4o1QudKOO1nAiQ== + version "9.7.3" + resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.7.3.tgz#d9f4e17fec259f1d65495a19502ada4f5b57fa3d" + integrity sha512-BXt6BpS9aJL/QdVqEIX9YoUy8CE6TJrU0mNCqSoxdXlIeNcEBWOfIyE6B14ENNsyQKS3wOWkiJfco0tCr/9tUg== dependencies: - "@babel/runtime" "^7.3.1" - "@react-spring/animated" "9.0.0-rc.3" - "@react-spring/core" "9.0.0-rc.3" - "@react-spring/shared" "9.0.0-rc.3" + "@react-spring/animated" "~9.7.3" + "@react-spring/core" "~9.7.3" + "@react-spring/shared" "~9.7.3" + "@react-spring/types" "~9.7.3" + +"@react-three/drei@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@react-three/drei/-/drei-1.5.9.tgz#5e1a9a91d71a57fef89aed43314a59cf5a78e07d" + integrity sha512-qsIHC32L+r/lCsc4bcnji6KZfOeRCmec12zYU0k3GKLSBDqZ1kp/zN0llmdsoQ9Xjvko5rl4at7A8xhV0yTOWA== + dependencies: + "@babel/runtime" "^7.11.2" + "@react-spring/web" "^9.0.0-rc.3" + detect-gpu "^1.3.0" + glsl-noise "^0.0.0" + lodash.omit "^4.5.0" + lodash.pick "^4.4.0" + react-merge-refs "^1.0.0" + stats.js "^0.17.0" + troika-three-text "^0.33.1" + utility-types "^3.10.0" + zustand "^3.0.3" "@reduxjs/toolkit@1.5.0": version "1.5.0" @@ -2649,145 +2292,77 @@ redux-thunk "^2.3.0" reselect "^4.0.0" -"@samverschueren/stream-to-observable@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" - integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== - dependencies: - any-observable "^0.3.0" +"@rollup/plugin-virtual@^3.0.1": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-virtual/-/plugin-virtual-3.0.2.tgz#17e17eeecb4c9fa1c0a6e72c9e5f66382fddbb82" + integrity sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A== -"@sentry/browser@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.2.0.tgz#4113a92bc82f55e63f30cb16a94f717bd0b95817" - integrity sha512-4r3paHcHXLemj471BtNDhUs2kvJxk5XDRplz1dbC/LHXN5PWEXP4anhGILxOlxqi4y33r53PIZu3xXFjznaVZA== - dependencies: - "@sentry/core" "6.2.0" - "@sentry/types" "6.2.0" - "@sentry/utils" "6.2.0" - tslib "^1.9.3" +"@rollup/rollup-android-arm-eabi@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.0.tgz#5984f98288150a2c34928de023bbd122d61ce754" + integrity sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA== -"@sentry/cli@^1.63.1": - version "1.63.2" - resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.63.2.tgz#b0f7fefe3c13efc5c57bb6ec042cc2b693476bd3" - integrity sha512-oG1Cg85BI/sc7MjgmShmCp0feB+LDi7XZKpiUggrOUVUgcWy4o+hkmESAwNCJsIXg0mW8TTCjmRFU8b836c+Mw== - dependencies: - https-proxy-agent "^5.0.0" - mkdirp "^0.5.5" - node-fetch "^2.6.0" - npmlog "^4.1.2" - progress "^2.0.3" - proxy-from-env "^1.1.0" +"@rollup/rollup-android-arm64@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.0.tgz#8456a8c623cca4042ae4bf2ce03d875a02433191" + integrity sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w== -"@sentry/core@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.2.0.tgz#be1c33854fc94e1a4d867f7c2c311cf1cefb8ee9" - integrity sha512-oTr2b25l+0bv/+d6IgMamPuGleWV7OgJb0NFfd+WZhw6UDRgr7CdEJy2gW6tK8SerwXgPHdn4ervxsT3WIBiXw== - dependencies: - "@sentry/hub" "6.2.0" - "@sentry/minimal" "6.2.0" - "@sentry/types" "6.2.0" - "@sentry/utils" "6.2.0" - tslib "^1.9.3" +"@rollup/rollup-darwin-arm64@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.0.tgz#76be6832eee21dabc28f84f9f54fbfcc66615992" + integrity sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w== -"@sentry/fullstory@1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@sentry/fullstory/-/fullstory-1.1.5.tgz#3a34f7cf778824b8465e4debcb6847c07b1a7032" - integrity sha512-BOzHXKmviucc1Sc6j2qPt+/XgoXIIAN2GYey1Eh3zIshKhu3x9aqx72PQ+i3Dxcq5koW9iMBm8dwLIH4SQIEWQ== +"@rollup/rollup-darwin-x64@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.0.tgz#66bd162a3fea48cb1cef50cedccfbeee5685b444" + integrity sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ== -"@sentry/hub@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.2.0.tgz#e7502652bc9608cf8fb63e43cd49df9019a28f29" - integrity sha512-BDTEFK8vlJydWXp/KMX0stvv73V7od224iLi+w3k7BcPwMKXBuURBXPU8d5XIC4G8nwg8X6cnDvwL+zBBlBbkg== - dependencies: - "@sentry/types" "6.2.0" - "@sentry/utils" "6.2.0" - tslib "^1.9.3" +"@rollup/rollup-linux-arm-gnueabihf@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.0.tgz#a0e6b2a1d67a4ba0c2a61985175f65c05abc5f73" + integrity sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg== -"@sentry/hub@6.3.6": - version "6.3.6" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.3.6.tgz#e7bc6960e30d8731e23c6e77f31af0bfb1d5af3c" - integrity sha512-foBZ3ilMnm9Gf9OolrAxYHK8jrA6IF72faDdJ3Al+1H27qcpnBaMdrdEp2/jzwu/dgmwuLmbBaMjEPXaGH/0JQ== - dependencies: - "@sentry/types" "6.3.6" - "@sentry/utils" "6.3.6" - tslib "^1.9.3" +"@rollup/rollup-linux-arm64-gnu@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.0.tgz#5434b844a47ba4e35602ee312de9f39b38b1777b" + integrity sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ== -"@sentry/integrations@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-6.2.0.tgz#f3952cb07fd86aa1ea3923d51049fc4875b634a9" - integrity sha512-gvAhP61qs2fog2xCTDs94ZT8cZbWEjFZmOWfT1VXlZDIVopIporj5Qe6IgrLTiCWL61Yko5h5nFnPZ4mpjf+0w== - dependencies: - "@sentry/types" "6.2.0" - "@sentry/utils" "6.2.0" - localforage "^1.8.1" - tslib "^1.9.3" +"@rollup/rollup-linux-arm64-musl@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.0.tgz#149cab95107821fe4ae46d5f2c0658c5b0e56b9c" + integrity sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA== -"@sentry/minimal@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.2.0.tgz#718b70babb55912eeb38babaf7823d1bcdd77d1e" - integrity sha512-haxsx8/ZafhZUaGeeMtY7bJt9HbDlqeiaXrRMp1CxGtd0ZRQwHt60imEjl6IH1I73SEWxNfqScGsX2s3HzztMg== - dependencies: - "@sentry/hub" "6.2.0" - "@sentry/types" "6.2.0" - tslib "^1.9.3" - -"@sentry/minimal@6.3.6": - version "6.3.6" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.3.6.tgz#aebcebd2ee9007b0ec505b9fcefd10f10fc5d43d" - integrity sha512-uM2/dH0a6zfvI5f+vg+/mST+uTBdN6Jgpm585ipH84ckCYQwIIDRg6daqsen4S1sy/xgg1P1YyC3zdEC4G6b1Q== - dependencies: - "@sentry/hub" "6.3.6" - "@sentry/types" "6.3.6" - tslib "^1.9.3" - -"@sentry/tracing@6.3.6": - version "6.3.6" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.3.6.tgz#dc2aced01cdc401f97d6027113f6313503ee9c91" - integrity sha512-dfyYY2eESJGt5Qbigmfmb2U9ntqbwPhLNAOcjKaVg9WQRV5q2RkHCVctPoYk7TEAvfNeNRXCD8SnuFOZhttt8g== - dependencies: - "@sentry/hub" "6.3.6" - "@sentry/minimal" "6.3.6" - "@sentry/types" "6.3.6" - "@sentry/utils" "6.3.6" - tslib "^1.9.3" - -"@sentry/types@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.2.0.tgz#ca020ff42913c6b9f88a9d0c375b5ee3965a2590" - integrity sha512-vN4P/a+QqAuVfWFB9G3nQ7d6bgnM9jd/RLVi49owMuqvM24pv5mTQHUk2Hk4S3k7ConrHFl69E7xH6Dv5VpQnQ== +"@rollup/rollup-linux-x64-gnu@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.0.tgz#6929bf3013e9d599605953ea1bc51f35376bfff7" + integrity sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q== -"@sentry/types@6.3.6": - version "6.3.6" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.3.6.tgz#aa3687051af1dc04ebc4eaf7f9562872da67aa5c" - integrity sha512-93cFJdJkWyCfyZeWFARSU11qnoHVOS/R2h5WIsEf+jbQmkqG2C+TXVz/19s6nHVsfDrwpvYpwALPv4/nrxfU7g== +"@rollup/rollup-linux-x64-musl@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.0.tgz#a17f5decabf05b74aad684de56cf43a72a289a0b" + integrity sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg== -"@sentry/utils@6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.2.0.tgz#39c81ad5ba92cec54d690e3fa8ea4e777d8e9c2b" - integrity sha512-YToUC7xYf2E/pIluI7upYTlj8fKXOtdwoOBkcQZifHgX/dP+qDaHibbBFe5PyZwdmU2UiLnWFsBr0gjo0QFo1g== - dependencies: - "@sentry/types" "6.2.0" - tslib "^1.9.3" +"@rollup/rollup-win32-arm64-msvc@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.0.tgz#f145f10c33aa187a11fd60933465be46667e6e42" + integrity sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA== -"@sentry/utils@6.3.6": - version "6.3.6" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.3.6.tgz#6f619a525f2a94fa6b160500f63f4bd5bd171055" - integrity sha512-HnYlDBf8Dq8MEv7AulH7B6R1D/2LAooVclGdjg48tSrr9g+31kmtj+SAj2WWVHP9+bp29BWaC7i5nkfKrOibWw== - dependencies: - "@sentry/types" "6.3.6" - tslib "^1.9.3" +"@rollup/rollup-win32-ia32-msvc@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.0.tgz#798614b191f9ce1dc58079d1dfbc234c71df9e0e" + integrity sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA== -"@sentry/webpack-plugin@1.15.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-1.15.0.tgz#c7f9eafbbace1929c3fb81bb720fc0d7e8b4f86d" - integrity sha512-KHVug+xI+KH/xCL7otWcRRszw0rt6i/BCH5F8+6/njz2gCBrYQOzdMvzWm4GeXZUuw5ekgycYaUhDs1/6enjuQ== - dependencies: - "@sentry/cli" "^1.63.1" +"@rollup/rollup-win32-x64-msvc@4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.0.tgz#748970e066839e33ed8c935061e370c4ab050517" + integrity sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w== -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" + integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== + dependencies: + any-observable "^0.3.0" "@sinonjs/commons@^1.7.0": version "1.8.1" @@ -2873,7 +2448,7 @@ dependencies: "@babel/types" "^7.12.6" -"@svgr/plugin-jsx@5.5.0", "@svgr/plugin-jsx@^5.5.0": +"@svgr/plugin-jsx@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== @@ -2883,21 +2458,84 @@ "@svgr/hast-util-to-babel-ast" "^5.5.0" svg-parser "^2.0.2" -"@svgr/plugin-svgo@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" - integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== - dependencies: - cosmiconfig "^7.0.0" - deepmerge "^4.2.2" - svgo "^1.2.2" +"@swc/core-darwin-arm64@1.3.96": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.96.tgz#7c1c4245ce3f160a5b36a48ed071e3061a839e1d" + integrity sha512-8hzgXYVd85hfPh6mJ9yrG26rhgzCmcLO0h1TIl8U31hwmTbfZLzRitFQ/kqMJNbIBCwmNH1RU2QcJnL3d7f69A== + +"@swc/core-darwin-x64@1.3.96": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.96.tgz#4720ff897ca3f22fe77d0be688968161480c80f0" + integrity sha512-mFp9GFfuPg+43vlAdQZl0WZpZSE8sEzqL7sr/7Reul5McUHP0BaLsEzwjvD035ESfkY8GBZdLpMinblIbFNljQ== + +"@swc/core-linux-arm-gnueabihf@1.3.96": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.96.tgz#2c238ae00b13918ac058b132a31dc57dbcf94e39" + integrity sha512-8UEKkYJP4c8YzYIY/LlbSo8z5Obj4hqcv/fUTHiEePiGsOddgGf7AWjh56u7IoN/0uEmEro59nc1ChFXqXSGyg== + +"@swc/core-linux-arm64-gnu@1.3.96": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.96.tgz#be2e84506b9761b561fb9a341e587f8594a8e55d" + integrity sha512-c/IiJ0s1y3Ymm2BTpyC/xr6gOvoqAVETrivVXHq68xgNms95luSpbYQ28rqaZC8bQC8M5zdXpSc0T8DJu8RJGw== + +"@swc/core-linux-arm64-musl@1.3.96": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.96.tgz#22c9ce17bd923ae358760e668ca33c90210c2ae5" + integrity sha512-i5/UTUwmJLri7zhtF6SAo/4QDQJDH2fhYJaBIUhrICmIkRO/ltURmpejqxsM/ye9Jqv5zG7VszMC0v/GYn/7BQ== + +"@swc/core-linux-x64-gnu@1.3.96": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.96.tgz#c17c072e338341c0ac3507a31ab2a36d16d79c98" + integrity sha512-USdaZu8lTIkm4Yf9cogct/j5eqtdZqTgcTib4I+NloUW0E/hySou3eSyp3V2UAA1qyuC72ld1otXuyKBna0YKQ== + +"@swc/core-linux-x64-musl@1.3.96": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.96.tgz#eb74594a48b4e9cabdce7f5525b3b946f8d6dd16" + integrity sha512-QYErutd+G2SNaCinUVobfL7jWWjGTI0QEoQ6hqTp7PxCJS/dmKmj3C5ZkvxRYcq7XcZt7ovrYCTwPTHzt6lZBg== + +"@swc/core-win32-arm64-msvc@1.3.96": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.96.tgz#6f7c0d20d80534b0676dc6761904288c16e93857" + integrity sha512-hjGvvAduA3Un2cZ9iNP4xvTXOO4jL3G9iakhFsgVhpkU73SGmK7+LN8ZVBEu4oq2SUcHO6caWvnZ881cxGuSpg== + +"@swc/core-win32-ia32-msvc@1.3.96": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.96.tgz#47bb24ef2e4c81407a6786649246983cc69e7854" + integrity sha512-Far2hVFiwr+7VPCM2GxSmbh3ikTpM3pDombE+d69hkedvYHYZxtTF+2LTKl/sXtpbUnsoq7yV/32c9R/xaaWfw== + +"@swc/core-win32-x64-msvc@1.3.96": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.96.tgz#c796e3df7afe2875d227c74add16a7d09c77d8bd" + integrity sha512-4VbSAniIu0ikLf5mBX81FsljnfqjoVGleEkCQv4+zRlyZtO3FHoDPkeLVoy6WRlj7tyrRcfUJ4mDdPkbfTO14g== + +"@swc/core@^1.3.10": + version "1.3.96" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.96.tgz#f04d58b227ceed2fee6617ce2cdddf21d0803f96" + integrity sha512-zwE3TLgoZwJfQygdv2SdCK9mRLYluwDOM53I+dT6Z5ZvrgVENmY3txvWDvduzkV+/8IuvrRbVezMpxcojadRdQ== + dependencies: + "@swc/counter" "^0.1.1" + "@swc/types" "^0.1.5" + optionalDependencies: + "@swc/core-darwin-arm64" "1.3.96" + "@swc/core-darwin-x64" "1.3.96" + "@swc/core-linux-arm-gnueabihf" "1.3.96" + "@swc/core-linux-arm64-gnu" "1.3.96" + "@swc/core-linux-arm64-musl" "1.3.96" + "@swc/core-linux-x64-gnu" "1.3.96" + "@swc/core-linux-x64-musl" "1.3.96" + "@swc/core-win32-arm64-msvc" "1.3.96" + "@swc/core-win32-ia32-msvc" "1.3.96" + "@swc/core-win32-x64-msvc" "1.3.96" + +"@swc/counter@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.2.tgz#bf06d0770e47c6f1102270b744e17b934586985e" + integrity sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw== -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" +"@swc/types@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.5.tgz#043b731d4f56a79b4897a3de1af35e75d56bc63a" + integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== "@tanem/svg-injector@^8.1.0": version "8.1.0" @@ -2928,23 +2566,18 @@ "@babel/runtime" "^7.12.5" "@testing-library/dom" "^7.28.1" -"@testing-library/user-event@^14.5.1": - version "14.5.1" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.1.tgz#27337d72046d5236b32fd977edee3f74c71d332f" - integrity sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg== - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@turf/area@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@turf/area/-/area-6.0.1.tgz#50ed63c70ef2bdb72952384f1594319d94f3b051" - integrity sha512-Zv+3N1ep9P5JvR0YOYagLANyapGWQBh8atdeR3bKpWcigVXFsEKNUw03U/5xnh+cKzm7yozHD6MFJkqQv55y0g== +"@turf/area@^6.4.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/area/-/area-6.5.0.tgz#1d0d7aee01d8a4a3d4c91663ed35cc615f36ad56" + integrity sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg== dependencies: - "@turf/helpers" "6.x" - "@turf/meta" "6.x" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" "@turf/bbox@4.7.3": version "4.7.3" @@ -2953,13 +2586,13 @@ dependencies: "@turf/meta" "^4.7.3" -"@turf/bbox@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.0.1.tgz#b966075771475940ee1c16be2a12cf389e6e923a" - integrity sha512-EGgaRLettBG25Iyx7VyUINsPpVj1x3nFQFiGS3ER8KCI1MximzNLsam3eXRabqQDjyAKyAE1bJ4EZEpGvspQxw== +"@turf/bbox@^6.4.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.5.0.tgz#bec30a744019eae420dac9ea46fb75caa44d8dc5" + integrity sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw== dependencies: - "@turf/helpers" "6.x" - "@turf/meta" "6.x" + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" "@turf/centroid@^6.0.2": version "6.0.2" @@ -2979,6 +2612,11 @@ resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.1.4.tgz#d6fd7ebe6782dd9c87dca5559bda5c48ae4c3836" integrity sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g== +"@turf/helpers@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.5.0.tgz#f79af094bd6b8ce7ed2bd3e089a8493ee6cae82e" + integrity sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw== + "@turf/meta@6.x": version "6.0.2" resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.0.2.tgz#eb92951126d24a613ac1b7b99d733fcc20fd30cf" @@ -2991,10 +2629,12 @@ resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-4.7.4.tgz#6de2f1e9890b8f64b669e4b47c09b20893063977" integrity sha1-beLx6YkLj2S2aeS0fAmyCJMGOXc= -"@types/anymatch@*": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" - integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== +"@turf/meta@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.5.0.tgz#b725c3653c9f432133eaa04d3421f7e51e0418ca" + integrity sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA== + dependencies: + "@turf/helpers" "^6.5.0" "@types/aria-query@^4.2.0": version "4.2.0" @@ -3012,6 +2652,17 @@ "@types/babel__template" "*" "@types/babel__traverse" "*" +"@types/babel__core@^7.20.4": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@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.2" resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" @@ -3035,20 +2686,15 @@ "@babel/types" "^7.3.0" "@types/caseless@*": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" - integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w== + version "0.12.5" + resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.5.tgz#db9468cb1b1b5a925b8f34822f1669df0c5472f5" + integrity sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg== "@types/classnames@2.2.11": version "2.2.11" resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.11.tgz#2521cc86f69d15c5b90664e4829d84566052c1cf" integrity sha512-2koNhpWm3DgWRp5tpkiJ8JGc1xTn2q0l+jUNUE7oMKXUf5NpI9AIdC4kbjGNFBdHtcxBD18LAksoudAVhFKCjw== -"@types/d3@^3": - version "3.5.44" - resolved "https://registry.yarnpkg.com/@types/d3/-/d3-3.5.44.tgz#28635f8bb9adf1cef5bbef2b06778174a9d34383" - integrity sha512-hFEcf03YGJ2uQoDYEp3nFD5mXWxly5kf6KOstuOQFEs9sUCN7kNlKhcYkpZ3gK6PiHz4XRLkoHa80NVCJNeLBw== - "@types/dom-mediacapture-record@1.0.7": version "1.0.7" resolved "https://registry.yarnpkg.com/@types/dom-mediacapture-record/-/dom-mediacapture-record-1.0.7.tgz#08bacca4296ef521d59049f43e65cf971bbf6be1" @@ -3082,12 +2728,12 @@ resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad" integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ== -"@types/glob@*", "@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== +"@types/glob@*": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" + integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== dependencies: - "@types/minimatch" "*" + "@types/minimatch" "^5.1.2" "@types/node" "*" "@types/graceful-fs@^4.1.2": @@ -3118,18 +2764,6 @@ "@types/react" "*" csstype "^3.0.2" -"@types/html-minifier-terser@^5.0.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" - integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== - -"@types/http-proxy-agent@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/http-proxy-agent/-/http-proxy-agent-2.0.2.tgz#942c1f35c7e1f0edd1b6ffae5d0f9051cfb32be1" - integrity sha512-2S6IuBRhqUnH1/AUx9k8KWtY3Esg4eqri946MnxTG5HwehF1S5mqLln8fcyMiuQkY72p2gH3W+rIPqp5li0LyQ== - dependencies: - "@types/node" "*" - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -3162,20 +2796,15 @@ resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz#ba05426a43f9e4e30b631941e0aa17bf0c890ed5" integrity sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g== -"@types/js-yaml@^3.12.5": - version "3.12.6" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.6.tgz#7f10c926aa41e189a2755c4c7fcf8e4573bd7ac1" - integrity sha512-cK4XqrLvP17X6c0C8n4iTbT59EixqyXL3Fk8/Rsk4dF3oX4dg70gYUXrXVUUHpnsGMPNlTQMqf+TVmNPX6FmSQ== - -"@types/json-schema@7.0.7", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": +"@types/json-schema@7.0.7": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== -"@types/json-stable-stringify@^1.0.32": - version "1.0.32" - resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.32.tgz#121f6917c4389db3923640b2e68de5fa64dda88e" - integrity sha512-q9Q6+eUEGwQkv4Sbst3J4PNgDOvpuVuKj79Hl/qnmBMEIPzB5QoFRUtjcgcg2xNUZyYUGXBk5wYIBKHt0A+Mxw== +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" @@ -3189,13 +2818,6 @@ dependencies: "@types/node" "*" -"@types/jsonwebtoken@^8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz#2531d5e300803aa63279b232c014acf780c981c5" - integrity sha512-9bVao7LvyorRGZCw0VmH/dr7Og+NdjYSsKAxB43OQoComFbBgsEpoR9JW6+qSq/ogwVBg8GI2MfAlk4SYI4OLg== - dependencies: - "@types/node" "*" - "@types/jszip@3.4.1": version "3.4.1" resolved "https://registry.yarnpkg.com/@types/jszip/-/jszip-3.4.1.tgz#e7a4059486e494c949ef750933d009684227846f" @@ -3239,10 +2861,10 @@ dependencies: "@types/unist" "*" -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== +"@types/minimatch@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/node@*", "@types/node@14.14.7", "@types/node@^14.14.7": version "14.14.7" @@ -3272,11 +2894,9 @@ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/plotly.js@*": - version "1.54.2" - resolved "https://registry.yarnpkg.com/@types/plotly.js/-/plotly.js-1.54.2.tgz#8e5916c83bd07b01fed7f404c3e460ee8197968a" - integrity sha512-p05hxJSlPLYEPsPW1NuQs1v+oM7pit3xMyo/L/iAr+xAH7bc035rTGFheCiYhx/d+kfCp1jrdJe52XPwei1m6g== - dependencies: - "@types/d3" "^3" + version "2.12.30" + resolved "https://registry.yarnpkg.com/@types/plotly.js/-/plotly.js-2.12.30.tgz#e0ce5231189a360b0be29445117789fbd75831fe" + integrity sha512-/yeGIFTrh5e5Q9HUCVZWDwwxqGyWHYsi4IVhG/1YKaOScslMlimLBIoce/F/Tjw7YahRTbh4xHNDfGxvq51w7Q== "@types/prettier@2.2.2": version "2.2.2" @@ -3293,12 +2913,14 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== +"@types/react-dom@*": + version "18.2.16" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.16.tgz#028f44b08f8cc3401c37dde4c2a5e36ddf9cb5b0" + integrity sha512-766c37araZ9vxtYs25gvY2wNdFWsT2ZiUvOd0zMhTaoGj6B911N8CKQWgXXJoPMLF3J82thpRqQA7Rf3rBwyJw== + dependencies: + "@types/react" "*" -"@types/react-dom@*", "@types/react-dom@16.9.9": +"@types/react-dom@16.9.9": version "16.9.9" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.9.tgz#d2d0a6f720a0206369ccbefff752ba37b9583136" integrity sha512-jE16FNWO3Logq/Lf+yvEAjKzhpST/Eac8EMd1i4dgZdMczfgqC8EjpxwNgEe3SExHYLliabXDh9DEhhqnlXJhg== @@ -3353,7 +2975,14 @@ dependencies: "@types/react" "*" -"@types/react-transition-group@*", "@types/react-transition-group@4.4.0", "@types/react-transition-group@^4.2.0": +"@types/react-transition-group@*": + version "4.4.9" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.9.tgz#12a1a1b5b8791067198149867b0823fbace31579" + integrity sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg== + dependencies: + "@types/react" "*" + +"@types/react-transition-group@4.4.0", "@types/react-transition-group@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d" integrity sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w== @@ -3383,9 +3012,9 @@ "@types/request" "*" "@types/request@*": - version "2.48.5" - resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.5.tgz#019b8536b402069f6d11bee1b2c03e7f232937a0" - integrity sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ== + version "2.48.12" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.12.tgz#0f590f615a10f87da18e9790ac94c29ec4c5ef30" + integrity sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw== dependencies: "@types/caseless" "*" "@types/node" "*" @@ -3415,11 +3044,6 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== - "@types/stack-utils@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" @@ -3428,7 +3052,7 @@ "@types/stats@0.16.30": version "0.16.30" resolved "https://registry.yarnpkg.com/@types/stats/-/stats-0.16.30.tgz#deb5fa6e59c6d67bd6e0f61a51ef630a83a84ce9" - integrity sha1-3rX6blnG1nvW4PYaUe9jCoOoTOk= + integrity sha512-ihuaNKhVjTQ8UNLJu7Kx96ywf0bSBday/K//HHvO9LKha07Ezxdm6HkazOKUIdayp0EmGEIPBQSL7eLxm8rX0w== "@types/supercluster@^5.0.1": version "5.0.2" @@ -3437,27 +3061,15 @@ dependencies: "@types/geojson" "*" -"@types/tapable@*", "@types/tapable@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" - integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== - "@types/tinycolor2@^1.4.0": version "1.4.2" resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.2.tgz#721ca5c5d1a2988b4a886e35c2ffc5735b6afbdf" integrity sha512-PeHg/AtdW6aaIO2a+98Xj7rWY4KC1E6yOy7AFknJQ7VXUGNrMlyxDFxJo7HqLtjQms/ZhhQX52mLVW/EX3JGOw== "@types/tough-cookie@*": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.0.tgz#fef1904e4668b6e5ecee60c52cc6a078ffa6697d" - integrity sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A== - -"@types/uglify-js@*": - version "3.11.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.1.tgz#97ff30e61a0aa6876c270b5f538737e2d6ab8ceb" - integrity sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q== - dependencies: - source-map "^0.6.1" + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": version "2.0.3" @@ -3474,34 +3086,6 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.0.tgz#215c231dff736d5ba92410e6d602050cce7e273f" integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== -"@types/webpack-sources@*": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.0.0.tgz#08216ab9be2be2e1499beaebc4d469cec81e82a7" - integrity sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.7.3" - -"@types/webpack@^4.41.8": - version "4.41.25" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.25.tgz#4d3b5aecc4e44117b376280fbfd2dc36697968c4" - integrity sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ== - dependencies: - "@types/anymatch" "*" - "@types/node" "*" - "@types/tapable" "*" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - source-map "^0.6.0" - -"@types/websocket@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.1.tgz#039272c196c2c0e4868a0d8a1a27bbb86e9e9138" - integrity sha512-f5WLMpezwVxCLm1xQe/kdPpQIOmL0TXYx2O15VYfYzc7hTIdxiOoOvez+McSIw3b7z/1zGovew9YSL7+h4h7/Q== - dependencies: - "@types/node" "*" - "@types/yargs-parser@*": version "15.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" @@ -3519,109 +3103,90 @@ resolved "https://registry.yarnpkg.com/@types/yarnpkg__lockfile/-/yarnpkg__lockfile-1.1.7.tgz#afe797c296670ea995ea4beca37c15de4f034a2f" integrity sha512-yfOmuImLIhYVS+Xtwk2OevYLJLN+PRLe36AvtagtsSY3xHuYBTTM3zW6lterq94YTdiRcHEOPeX5h4H8QnynAg== -"@typescript-eslint/eslint-plugin@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.8.1.tgz#b362abe0ee478a6c6d06c14552a6497f0b480769" - integrity sha512-d7LeQ7dbUrIv5YVFNzGgaW3IQKMmnmKFneRWagRlGYOSfLJVaRbj/FrBNOBC1a3tVO+TgNq1GbHvRtg1kwL0FQ== - dependencies: - "@typescript-eslint/experimental-utils" "4.8.1" - "@typescript-eslint/scope-manager" "4.8.1" - debug "^4.1.1" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz#27275c20fa4336df99ebcf6195f7d7aa7aa9f22d" - integrity sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.8.1" - "@typescript-eslint/types" "4.8.1" - "@typescript-eslint/typescript-estree" "4.8.1" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.2.tgz#c804474321ef76a3955aec03664808f0d6e7872e" - integrity sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q== - dependencies: - "@typescript-eslint/scope-manager" "4.15.2" - "@typescript-eslint/types" "4.15.2" - "@typescript-eslint/typescript-estree" "4.15.2" - debug "^4.1.1" - -"@typescript-eslint/scope-manager@4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz#5725bda656995960ae1d004bfd1cd70320f37f4f" - integrity sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ== - dependencies: - "@typescript-eslint/types" "4.15.2" - "@typescript-eslint/visitor-keys" "4.15.2" - -"@typescript-eslint/scope-manager@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz#e343c475f8f1d15801b546cb17d7f309b768fdce" - integrity sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ== - dependencies: - "@typescript-eslint/types" "4.8.1" - "@typescript-eslint/visitor-keys" "4.8.1" - -"@typescript-eslint/types@4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.2.tgz#04acf3a2dc8001a88985291744241e732ef22c60" - integrity sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ== - -"@typescript-eslint/types@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.8.1.tgz#23829c73c5fc6f4fcd5346a7780b274f72fee222" - integrity sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA== - -"@typescript-eslint/typescript-estree@4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz#c2f7a1e94f3428d229d5ecff3ead6581ee9b62fa" - integrity sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw== - dependencies: - "@typescript-eslint/types" "4.15.2" - "@typescript-eslint/visitor-keys" "4.15.2" - debug "^4.1.1" - globby "^11.0.1" - is-glob "^4.0.1" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/typescript-estree@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz#7307e3f2c9e95df7daa8dc0a34b8c43b7ec0dd32" - integrity sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ== - dependencies: - "@typescript-eslint/types" "4.8.1" - "@typescript-eslint/visitor-keys" "4.8.1" - debug "^4.1.1" - globby "^11.0.1" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" +"@typescript-eslint/eslint-plugin@^6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.12.0.tgz#2a647d278bb48bf397fef07ba0507612ff9dd812" + integrity sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.12.0" + "@typescript-eslint/type-utils" "6.12.0" + "@typescript-eslint/utils" "6.12.0" + "@typescript-eslint/visitor-keys" "6.12.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.10.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.12.0.tgz#9fb21ed7d88065a4a2ee21eb80b8578debb8217c" + integrity sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg== + dependencies: + "@typescript-eslint/scope-manager" "6.12.0" + "@typescript-eslint/types" "6.12.0" + "@typescript-eslint/typescript-estree" "6.12.0" + "@typescript-eslint/visitor-keys" "6.12.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.12.0.tgz#5833a16dbe19cfbad639d4d33bcca5e755c7044b" + integrity sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw== + dependencies: + "@typescript-eslint/types" "6.12.0" + "@typescript-eslint/visitor-keys" "6.12.0" + +"@typescript-eslint/type-utils@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.12.0.tgz#968f7c95162808d69950ab5dff710ad730e58287" + integrity sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng== + dependencies: + "@typescript-eslint/typescript-estree" "6.12.0" + "@typescript-eslint/utils" "6.12.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.12.0.tgz#ffc5297bcfe77003c8b7b545b51c2505748314ac" + integrity sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q== + +"@typescript-eslint/typescript-estree@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.12.0.tgz#764ccc32598549e5b48ec99e3b85f89b1385310c" + integrity sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw== + dependencies: + "@typescript-eslint/types" "6.12.0" + "@typescript-eslint/visitor-keys" "6.12.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/visitor-keys@4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz#3d1c7979ce75bf6acf9691109bd0d6b5706192b9" - integrity sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg== +"@typescript-eslint/utils@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.12.0.tgz#c6ce8c06fe9b0212620e5674a2036f6f8f611754" + integrity sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ== dependencies: - "@typescript-eslint/types" "4.15.2" - eslint-visitor-keys "^2.0.0" + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.12.0" + "@typescript-eslint/types" "6.12.0" + "@typescript-eslint/typescript-estree" "6.12.0" + semver "^7.5.4" -"@typescript-eslint/visitor-keys@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz#794f68ee292d1b2e3aa9690ebedfcb3a8c90e3c3" - integrity sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ== +"@typescript-eslint/visitor-keys@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.12.0.tgz#5877950de42a0f3344261b7a1eee15417306d7e9" + integrity sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw== dependencies: - "@typescript-eslint/types" "4.8.1" - eslint-visitor-keys "^2.0.0" + "@typescript-eslint/types" "6.12.0" + eslint-visitor-keys "^3.4.1" "@uifabric/foundation@^7.9.19": version "7.9.19" @@ -3691,6 +3256,22 @@ prop-types "^15.7.2" tslib "^1.10.0" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@vitejs/plugin-react@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.2.0.tgz#d71352b1a443c09c7aae8f278dd071ab3d9d8490" + integrity sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ== + dependencies: + "@babel/core" "^7.23.3" + "@babel/plugin-transform-react-jsx-self" "^7.23.3" + "@babel/plugin-transform-react-jsx-source" "^7.23.3" + "@types/babel__core" "^7.20.4" + react-refresh "^0.14.0" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -3836,13 +3417,6 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" -"@welldone-software/why-did-you-render@6.0.3": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@welldone-software/why-did-you-render/-/why-did-you-render-6.0.3.tgz#99c58ea8e3f2ea8c042fb1d58ebf147d345fff26" - integrity sha512-9HskvqZrCVEnKur2WIZ2Jm36u+1bCbb1c+iHa8QljjHmEVOA2US1qKq3HeUcwsjgKZRo5xucV6td2FeJP8agmQ== - dependencies: - lodash "^4" - "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -3858,15 +3432,6 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -a-big-triangle@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/a-big-triangle/-/a-big-triangle-1.0.3.tgz#eefd30b02a8f525e8b1f72bb6bb1b0c16751c794" - integrity sha1-7v0wsCqPUl6LH3K7a7GwwWdRx5Q= - dependencies: - gl-buffer "^2.1.1" - gl-vao "^1.2.0" - weak-map "^1.0.5" - abab@^2.0.3, abab@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" @@ -3877,14 +3442,6 @@ abs-svg-path@^0.1.1, abs-svg-path@~0.1.1: resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf" integrity sha1-32Acjo0roQ1KdtYl4japo5wnI78= -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -3893,10 +3450,10 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^7.1.1: version "7.2.0" @@ -3908,7 +3465,7 @@ acorn@^6.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -3918,19 +3475,10 @@ acorn@^8.2.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== -add-line-numbers@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/add-line-numbers/-/add-line-numbers-1.0.1.tgz#48dbbdea47dbd234deafeac6c93cea6f70b4b7e3" - integrity sha1-SNu96kfb0jTer+rGyTzqb3C0t+M= - dependencies: - pad-left "^1.0.2" - -affine-hull@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/affine-hull/-/affine-hull-1.0.0.tgz#763ff1d38d063ceb7e272f17ee4d7bbcaf905c5d" - integrity sha1-dj/x040GPOt+Jy8X7k17vK+QXF0= - dependencies: - robust-orientation "^1.1.3" +acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== agent-base@6: version "6.0.2" @@ -3949,24 +3497,14 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.12.6: +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: 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@^8.0.1: - version "8.6.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" - integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" + json-schema-traverse "^0.4.1" uri-js "^4.2.2" almost-equal@^1.1.0: @@ -3974,49 +3512,18 @@ almost-equal@^1.1.0: resolved "https://registry.yarnpkg.com/almost-equal/-/almost-equal-1.1.0.tgz#f851c631138757994276aa2efbe8dfa3066cccdd" integrity sha1-+FHGMROHV5lCdqou++jfowZszN0= -alpha-complex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/alpha-complex/-/alpha-complex-1.0.0.tgz#90865870d6b0542ae73c0c131d4ef989669b72d2" - integrity sha1-kIZYcNawVCrnPAwTHU75iWabctI= - dependencies: - circumradius "^1.0.0" - delaunay-triangulate "^1.1.6" - -alpha-shape@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/alpha-shape/-/alpha-shape-1.0.0.tgz#c83109923ecfda667d2163fe4f26fe24726f64a9" - integrity sha1-yDEJkj7P2mZ9IWP+Tyb+JHJvZKk= - dependencies: - alpha-complex "^1.0.0" - simplicial-complex-boundary "^1.0.0" - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-escapes@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: +ansi-escapes@^4.2.1: version "4.3.1" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: type-fest "^0.11.0" -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -4032,7 +3539,7 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== -ansi-regex@^5.0.0: +ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -4077,7 +3584,15 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== @@ -4087,14 +3602,6 @@ arch@^2.2.0: resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -4140,17 +3647,20 @@ array-bounds@^1.0.0, array-bounds@^1.0.1: resolved "https://registry.yarnpkg.com/array-bounds/-/array-bounds-1.0.1.tgz#da11356b4e18e075a4f0c86e1f179a67b7d7ea31" integrity sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ== -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== +array-find-index@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== -array-includes@^3.1.1, array-includes@^3.1.2: +array-includes@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== @@ -4161,6 +3671,17 @@ array-includes@^3.1.1, array-includes@^3.1.2: get-intrinsic "^1.0.1" is-string "^1.0.5" +array-includes@^3.1.6, array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + array-normalize@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/array-normalize/-/array-normalize-1.1.4.tgz#d75cec57383358af38efdf6a78071aa36ae4174c" @@ -4178,51 +3699,70 @@ array-rearrange@^2.2.2: resolved "https://registry.yarnpkg.com/array-rearrange/-/array-rearrange-2.2.2.tgz#fa1a2acf8d02e88dd0c9602aa0e06a79158b2283" integrity sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w== -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.flat@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" - integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" -array.prototype.flatmap@^1.2.3, array.prototype.flatmap@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" + integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" asn1.js@^5.2.0: version "5.4.1" @@ -4247,45 +3787,35 @@ assert-plus@1.0.0, assert-plus@^1.0.0: integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + version "1.5.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.1.tgz#038ab248e4ff078e7bc2485ba6e6388466c78f76" + integrity sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A== dependencies: - object-assign "^4.1.1" - util "0.10.3" + object.assign "^4.1.4" + util "^0.10.4" assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" + version "1.0.6" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" + integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== async@^3.2.0: version "3.2.4" resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +asynciterator.prototype@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" + integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== + dependencies: + has-symbols "^1.0.3" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -4296,16 +3826,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-1.0.0.tgz#b88dca6006922b962094f7556826bab31c4a296b" - integrity sha1-uI3KYAaSK5YglPdVaCa6sxxKKWs= - -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= - atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -4316,11 +3836,6 @@ attr-accept@^2.2.1: resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-2.2.2.tgz#646613809660110749e92f2c10833b70968d929b" integrity sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg== -auto-bind@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-4.0.0.tgz#e3589fc6c2da8f7ca43ba9f84fa52a744fc997fb" - integrity sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ== - autoprefixer@10.0.2: version "10.0.2" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.0.2.tgz#a79f9a02bfb95c621998776ac0d85f8f855b367e" @@ -4333,6 +3848,11 @@ autoprefixer@10.0.2: num2fraction "^1.2.2" postcss-value-parser "^4.1.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -4426,11 +3946,6 @@ babel-plugin-syntax-jsx@^6.18.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= -babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: - version "7.0.0-beta.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" - integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== - babel-preset-current-node-syntax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" @@ -4449,39 +3964,6 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-fbjs@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" - integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-member-expression-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-property-literals" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" - babel-preset-jest@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" @@ -4508,19 +3990,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -barycentric@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/barycentric/-/barycentric-1.0.1.tgz#f1562bb891b26f4fec463a82eeda3657800ec688" - integrity sha1-8VYruJGyb0/sRjqC7to2V4AOxog= - dependencies: - robust-linear-solve "^1.0.0" - base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -4559,11 +4029,6 @@ bash-path@^1.0.1: arr-union "^3.1.0" is-windows "^1.0.1" -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -4571,15 +4036,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -big-rat@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/big-rat/-/big-rat-1.0.4.tgz#768d093bb57930dd18ed575c7fca27dc5391adea" - integrity sha1-do0JO7V5MN0Y7Vdcf8on3FORreo= - dependencies: - bit-twiddle "^1.0.2" - bn.js "^4.11.6" - double-bits "^1.1.1" - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -4595,12 +4051,7 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== -binary-search-bounds@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/binary-search-bounds/-/binary-search-bounds-1.0.0.tgz#323ca317e3f2a40f4244c7255f5384a5b207bb69" - integrity sha1-MjyjF+PypA9CRMclX1OEpbIHu2k= - -binary-search-bounds@^2.0.3, binary-search-bounds@^2.0.4: +binary-search-bounds@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/binary-search-bounds/-/binary-search-bounds-2.0.4.tgz#eea0e4081da93baa851c7d851a7e636c3d51307f" integrity sha512-2hg5kgdKql5ClF2ErBcSx0U5bnl5hgS4v7wMnLFodyR47yMtj2w+UAZB+0CiqyHct2q543i7Bi4/aMIegorCCg== @@ -4617,11 +4068,6 @@ bit-twiddle@^1.0.0, bit-twiddle@^1.0.2: resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" integrity sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4= -bit-twiddle@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-0.0.2.tgz#c2eaebb952a3b94acc140497e1cdcd2f1a33f58e" - integrity sha1-wurruVKjuUrMFASX4c3NLxoz9Y4= - bitmap-sdf@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/bitmap-sdf/-/bitmap-sdf-1.0.3.tgz#c99913e5729357a6fd350de34158180c013880b2" @@ -4647,69 +4093,21 @@ bluebird@^3.5.5, bluebird@^3.7.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.6, bn.js@^4.11.9: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" - integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -boundary-cells@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/boundary-cells/-/boundary-cells-2.0.1.tgz#e905a8d1419cf47cb36be3dbf525db5e24de0042" - integrity sha1-6QWo0UGc9Hyza+Pb9SXbXiTeAEI= - dependencies: - tape "^4.0.0" +bn.js@^5.0.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== bowser@2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== -box-intersect@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/box-intersect/-/box-intersect-1.0.2.tgz#4693ad63e828868d0654b114e09364d6281f3fbd" - integrity sha512-yJeMwlmFPG1gIa7Rs/cGXeI6iOj6Qz5MG5PE61xLKpElUGzmJ4abm+qsLpzxKJFpsSDq742BQEocr8dI2t8Nxw== - dependencies: - bit-twiddle "^1.0.2" - typedarray-pool "^1.1.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -4744,7 +4142,7 @@ braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browser-process-hrtime@^1.0.0: version "1.0.0" @@ -4782,7 +4180,7 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: +browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== @@ -4791,19 +4189,19 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + version "4.2.2" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" + integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" + bn.js "^5.2.1" + browserify-rsa "^4.1.0" create-hash "^1.2.0" create-hmac "^1.1.7" - elliptic "^6.5.3" + elliptic "^6.5.4" inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" + parse-asn1 "^5.1.6" + readable-stream "^3.6.2" + safe-buffer "^5.2.1" browserify-zlib@^0.2.0: version "0.2.0" @@ -4812,7 +4210,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.14.5, browserslist@^4.14.7, browserslist@^4.15.0: +browserslist@^4.14.7: version "4.21.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== @@ -4822,6 +4220,16 @@ browserslist@^4.14.5, browserslist@^4.14.7, browserslist@^4.15.0: node-releases "^2.0.6" update-browserslist-db "^1.0.9" +browserslist@^4.21.9, browserslist@^4.22.1: + version "4.22.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" + integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== + dependencies: + caniuse-lite "^1.0.30001541" + electron-to-chromium "^1.4.535" + node-releases "^2.0.13" + update-browserslist-db "^1.0.13" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -4841,11 +4249,6 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - buffer-from@1.x: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -4856,15 +4259,10 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer@^4.3.0: version "4.9.2" @@ -4875,35 +4273,10 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -busboy@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b" - integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== - dependencies: - dicer "0.3.0" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== cacache@^12.0.2: version "12.0.4" @@ -4941,19 +4314,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - cachedir@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" @@ -4975,27 +4335,20 @@ call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@4.1.1, camel-case@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" - integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== - dependencies: - pascal-case "^3.1.1" - tslib "^1.10.0" - -camel-case@4.1.2, camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -5011,15 +4364,10 @@ can-use-dom@^0.1.0: resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= -caniuse-lite@^1.0.30001157: - version "1.0.30001237" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz" - integrity sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw== - -caniuse-lite@^1.0.30001400: - version "1.0.30001431" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz#e7c59bd1bc518fae03a4656be442ce6c4887a795" - integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ== +caniuse-lite@^1.0.30001157, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001541, caniuse-lite@^1.0.30001563: + version "1.0.30001563" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz#aa68a64188903e98f36eb9c56e48fba0c1fe2a32" + integrity sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw== canvas-fit@^1.5.0: version "1.5.0" @@ -5040,20 +4388,6 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cdt2d@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cdt2d/-/cdt2d-1.0.0.tgz#4f212434bcd67bdb3d68b8fef4acdc2c54415141" - integrity sha1-TyEkNLzWe9s9aLj+9KzcLFRBUUE= - dependencies: - binary-search-bounds "^2.0.3" - robust-in-sphere "^1.1.3" - robust-orientation "^1.1.3" - -cell-orientation@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cell-orientation/-/cell-orientation-1.0.1.tgz#b504ad96a66ad286d9edd985a2253d03b80d2850" - integrity sha1-tQStlqZq0obZ7dmFoiU9A7gNKFA= - chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -5107,17 +4441,12 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - check-more-types@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= -"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1, chokidar@^3.4.2: +"chokidar@>=2.0.0 <4.0.0": version "3.4.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== @@ -5151,20 +4480,20 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.3: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== +chokidar@^3.4.1, chokidar@^3.4.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" chownr@^1.1.1: version "1.1.4" @@ -5172,11 +4501,9 @@ chownr@^1.1.1: integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== ci-info@^2.0.0: version "2.0.0" @@ -5196,21 +4523,6 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -circumcenter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/circumcenter/-/circumcenter-1.0.0.tgz#20d7aa13b17fbac52f52da4f54c6ac8b906ee529" - integrity sha1-INeqE7F/usUvUtpPVMasi5Bu5Sk= - dependencies: - dup "^1.0.0" - robust-linear-solve "^1.0.0" - -circumradius@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/circumradius/-/circumradius-1.0.0.tgz#706c447e3e55cd1ed3d11bd133e37c252cc305b5" - integrity sha1-cGxEfj5VzR7T0RvRM+N8JSzDBbU= - dependencies: - circumcenter "^1.0.0" - cjs-module-lexer@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" @@ -5236,26 +4548,6 @@ classnames@2.3.1: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== -clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" - -clean-pslg@^1.1.0, clean-pslg@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/clean-pslg/-/clean-pslg-1.1.2.tgz#bd35c7460b7e8ab5a9f761a5ed51796aa3c86c11" - integrity sha1-vTXHRgt+irWp92Gl7VF5aqPIbBE= - dependencies: - big-rat "^1.0.3" - box-intersect "^1.0.1" - nextafter "^1.0.0" - rat-vec "^1.1.1" - robust-segment-intersect "^1.0.1" - union-find "^1.0.2" - uniq "^1.0.1" - cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -5270,13 +4562,6 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - cli-table3@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" @@ -5295,11 +4580,6 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - clipboard-polyfill@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/clipboard-polyfill/-/clipboard-polyfill-3.0.2.tgz#6d45719421395257460e09febb5dffa495a2878b" @@ -5323,41 +4603,21 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clsx@^1.0.4, clsx@^1.1.0: +clsx@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== +clsx@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -5484,14 +4744,7 @@ colorette@^1.2.1, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -colormap@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/colormap/-/colormap-2.3.1.tgz#9f2ab643591c0728d32332d5480b2487a4e0f249" - integrity sha512-TEzNlo/qYp6pBoR2SK9JiV+DG1cmUcVO/+DEJqVPSHIKNlWh5L5L4FYog7b/h0bAnhKhpOAvx/c1dFp2QE9sFw== - dependencies: - lerp "^1.0.3" - -colors@1.4.0, colors@^1.1.2, colors@^1.3.3: +colors@1.4.0, colors@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== @@ -5503,11 +4756,6 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -comlink@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.3.0.tgz#80b3366baccd87897dab3638ebfcfae28b2f87c7" - integrity sha512-mu4KKKNuW8TvkfpW/H88HBPeILubBS6T94BdD1VWBXNXfiyqVtwUCVNO1GeNOBTsIswzsMjWlycYr+77F5b84g== - commander@2, commander@^2.11.0, commander@^2.15.1, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -5523,11 +4771,6 @@ commander@^10.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== -commander@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - commander@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" @@ -5538,7 +4781,7 @@ common-path-prefix@^3.0.0: resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== -common-tags@1.8.0, common-tags@^1.8.0: +common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -5546,68 +4789,13 @@ common-tags@1.8.0, common-tags@^1.8.0: commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compare-angle@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/compare-angle/-/compare-angle-1.0.1.tgz#a4eb63416ea3c747fc6bd6c8b63668b4de4fa129" - integrity sha1-pOtjQW6jx0f8a9bItjZotN5PoSk= - dependencies: - robust-orientation "^1.0.2" - robust-product "^1.0.0" - robust-sum "^1.0.0" - signum "^0.0.0" - two-sum "^1.0.0" - -compare-cell@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/compare-cell/-/compare-cell-1.0.0.tgz#a9eb708f6e0e41aef7aa566b130f1968dc9e1aaa" - integrity sha1-qetwj24OQa73qlZrEw8ZaNyeGqo= - -compare-oriented-cell@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/compare-oriented-cell/-/compare-oriented-cell-1.0.1.tgz#6a149feef9dfc4f8fc62358e51dd42effbbdc39e" - integrity sha1-ahSf7vnfxPj8YjWOUd1C7/u9w54= - dependencies: - cell-orientation "^1.0.1" - compare-cell "^1.0.0" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - 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" - -compute-dims@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/compute-dims/-/compute-dims-1.1.0.tgz#6d5b712929b6c531af3b4d580ed5adacbbd77e0c" - integrity sha512-YHMiIKjH/8Eom8zATk3g8/lH3HxGCZcVQyEfEoVrfWI7od/WRpTgRGShnei3jArYSx77mQqPxZNokjGHCdLfxg== - dependencies: - utils-copy "^1.0.0" - validate.io-array "^1.0.6" - validate.io-matrix-like "^1.0.2" - validate.io-ndarray-like "^1.0.0" - validate.io-positive-integer "^1.0.0" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -5633,75 +4821,15 @@ concat-stream@~2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-clear@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/console-clear/-/console-clear-1.1.1.tgz#995e20cbfbf14dd792b672cde387bd128d674bf7" - integrity sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ== - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -const-max-uint32@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/const-max-uint32/-/const-max-uint32-1.0.2.tgz#f009bb6230e678ed874dd2d6a9cd9e3cbfabb676" - integrity sha1-8Am7YjDmeO2HTdLWqc2ePL+rtnY= - -const-pinf-float64@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/const-pinf-float64/-/const-pinf-float64-1.0.0.tgz#f6efb0d79f9c0986d3e79f2923abf9b70b63d726" - integrity sha1-9u+w15+cCYbT558pI6v5twtj1yY= - -constant-case@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.3.tgz#ac910a99caf3926ac5112f352e3af599d8c5fc0a" - integrity sha512-FXtsSnnrFYpzDmvwDGQW+l8XK3GV1coLyBN0eBz16ZUzGaZcT2ANVCJmLeuw2GQgxKHQIe9e0w2dzkSfaRlUmA== - dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - upper-case "^2.0.1" - -constant-case@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" - integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - upper-case "^2.0.2" - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" @@ -5710,24 +4838,10 @@ convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, dependencies: safe-buffer "~5.1.1" -convex-hull@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/convex-hull/-/convex-hull-1.0.3.tgz#20a3aa6ce87f4adea2ff7d17971c9fc1c67e1fff" - integrity sha1-IKOqbOh/St6i/30XlxyfwcZ+H/8= - dependencies: - affine-hull "^1.0.0" - incremental-convex-hull "^1.0.1" - monotone-convex-hull-2d "^1.0.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== copy-concurrently@^1.0.0: version "1.0.5" @@ -5747,23 +4861,17 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.8.0: - version "3.8.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.1.tgz#8d1ddd341d660ba6194cbe0ce60f4c794c87a36e" - integrity sha512-a16TLmy9NVD1rkjUGbwuyWkiDoN0FDpAwrfLONvHFQx0D9k7J9y0srwMT8QP/Z6HE3MIFaVynEeYwZwPX1o5RQ== + version "3.33.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.3.tgz#ec678b772c5a2d8a7c60a91c3a81869aa704ae01" + integrity sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow== dependencies: - browserslist "^4.15.0" - semver "7.0.0" + browserslist "^4.22.1" core-js-pure@^3.0.0: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== -core-js@3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.7.0.tgz#b0a761a02488577afbf97179e4681bf49568520f" - integrity sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA== - core-js@^2.4.0: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" @@ -5777,16 +4885,9 @@ core-js@^3.6.5: core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig-toml-loader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-toml-loader/-/cosmiconfig-toml-loader-1.0.0.tgz#0681383651cceff918177debe9084c0d3769509b" - integrity sha512-H/2gurFWVi7xXvCyvsWRLCMekl4tITJcX0QEsDMpzxtuxDyM59xLatYNg4s/k9AA/HdtCYfj2su8mgA0GSDLDA== - dependencies: - "@iarna/toml" "^2.2.5" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cosmiconfig@6.0.0, cosmiconfig@^6.0.0: +cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== @@ -5849,20 +4950,13 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-env@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.2.tgz#bd5ed31339a93a3418ac4f3ca9ca3403082ae5f9" - integrity sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw== +cross-env@7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" -cross-fetch@3.0.6, cross-fetch@^3.0.4, cross-fetch@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" - integrity sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ== - dependencies: - node-fetch "2.6.1" - cross-spawn@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" @@ -5917,11 +5011,6 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -css-color-names@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-1.0.1.tgz#6ff7ee81a823ad46e020fa2fd6ab40a887e2ba67" - integrity sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA== - css-font-size-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz#854875ace9aca6a8d2ee0d345a44aae9bb6db6cb" @@ -5962,70 +5051,11 @@ css-global-keywords@^1.0.1: resolved "https://registry.yarnpkg.com/css-global-keywords/-/css-global-keywords-1.0.1.tgz#72a9aea72796d019b1d2a3252de4e5aaa37e4a69" integrity sha1-cqmupyeW0Bmx0qMlLeTlqqN+Smk= -css-loader@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" - integrity sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg== - dependencies: - camelcase "^6.0.0" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^2.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.3" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^2.7.1" - semver "^7.3.2" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - css-system-font-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz#85c6f086aba4eb32c571a3086affc434b84823ed" integrity sha1-hcbwhquk6zLFcaMIav/ENLhII+0= -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0.tgz#21993fa270d742642a90409a2c0cb3ac0298adf6" - integrity sha512-CdVYz/Yuqw0VdKhXPBIgi8DO3NicJVYZNWeX9XcIuSp9ZoFT5IcleVRW07O5rMjdcx1mb+MEJPknTTEW7DdsYw== - dependencies: - mdn-data "2.0.12" - source-map "^0.6.1" - css-vendor@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d" @@ -6034,38 +5064,16 @@ css-vendor@^2.0.8: "@babel/runtime" "^7.8.3" is-in-browser "^1.0.2" -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - csscolorparser@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs= -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - cssfontparser@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3" integrity sha1-9AIvyPlwDGgCnVQghK+69CWj8+M= -csso@^4.0.2: - version "4.1.0" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.1.0.tgz#1d31193efa99b87aa6bad6c0cef155e543d09e8b" - integrity sha512-h+6w/W1WqXaJA4tb1dk7r5tVbOm97MsKxzwnvOR04UQ6GILroryjMWu3pmCCtL2mLaEStQ0fZgeGiy99mo7iyg== - dependencies: - css-tree "^1.0.0" - cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -6093,22 +5101,10 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.5.tgz#7fdec6a28a67ae18647c51668a9ff95bb2fa7bb8" integrity sha512-uVDi8LpBUKQj6sdxNaTetL6FpeCqTjOvAQuQUa/qAqq8oOd4ivkbhgnqayl0dnPal8Tb/yB1tF+gOvCBiicaiQ== -cubic-hermite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cubic-hermite/-/cubic-hermite-1.0.0.tgz#84e3b2f272b31454e8393b99bb6aed45168c14e5" - integrity sha1-hOOy8nKzFFToOTuZu2rtRRaMFOU= - -cwise-compiler@^1.0.0, cwise-compiler@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz#f4d667410e850d3a313a7d2db7b1e505bb034cc5" - integrity sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU= - dependencies: - uniq "^1.0.0" - cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + version "1.0.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.2.tgz#673b5f233bf34d8e602b949429f8171d9121bea3" + integrity sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA== cypress-iframe@1.0.1: version "1.0.1" @@ -6189,11 +5185,6 @@ d3-collection@1, d3-collection@^1.0.4: resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== -d3-color@1, d3-color@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" - integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== - "d3-color@1 - 2", d3-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-2.0.0.tgz#8d625cab42ed9b8f601a1760a389f7ea9189d62e" @@ -6204,6 +5195,11 @@ d3-color@1, d3-color@^1.4.0: resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== +d3-color@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" + integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== + d3-delaunay@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-5.3.0.tgz#b47f05c38f854a4e7b3cea80e0bb12e57398772d" @@ -6273,11 +5269,21 @@ d3-force@^2.1.1: resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== -d3-format@^1.3.2: +d3-format@^1.3.2, d3-format@^1.4.5: version "1.4.5" resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== +d3-geo-projection@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz#826db62f748e8ecd67cd00aced4c26a236ec030c" + integrity sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ== + dependencies: + commander "2" + d3-array "1" + d3-geo "^1.12.0" + resolve "^1.1.10" + d3-geo-projection@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/d3-geo-projection/-/d3-geo-projection-3.0.0.tgz#45ad8ce756cdbfa8340b11b2988644d8e1fa42e4" @@ -6295,6 +5301,13 @@ d3-geo-projection@^3.0.0: dependencies: d3-array ">=2.5" +d3-geo@^1.12.0, d3-geo@^1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.12.1.tgz#7fc2ab7414b72e59fbcbd603e80d9adc029b035f" + integrity sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg== + dependencies: + d3-array "1" + d3-geo@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.0.tgz#74fd54e1f4cebd5185ac2039217a98d39b0a4c0e" @@ -6326,13 +5339,6 @@ d3-hierarchy@^2.0.0: dependencies: d3-color "1 - 3" -d3-interpolate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" - integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== - dependencies: - d3-color "1" - d3-path@1: version "1.0.9" resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" @@ -6422,7 +5428,7 @@ d3-time-format@^2.2.3: dependencies: d3-time "1" -d3-time@1: +d3-time@1, d3-time@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== @@ -6449,11 +5455,6 @@ d3-timer@1: resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-2.0.0.tgz#055edb1d170cfe31ab2da8968deee940b56623e6" integrity sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA== -d3@^3.5.17: - version "3.5.17" - resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" - integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g= - d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -6478,11 +5479,6 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -dataloader@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.0.0.tgz#41eaf123db115987e21ca93c005cd7753c55fe6f" - integrity sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ== - date-fns@2.17.0: version "2.17.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.17.0.tgz#afa55daea539239db0a64e236ce716ef3d681ba1" @@ -6503,28 +5499,28 @@ debounce@^1.2.0: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4: +debug@4, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@4.3.2, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: +debug@4.3.2, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" -debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: +debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -6546,35 +5542,11 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - deep-equal@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= -deep-equal@^1.0.1, deep-equal@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -6595,26 +5567,31 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" +define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -6637,74 +5614,33 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@^1.0.0, defined@~1.0.0: +defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@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" - delaunator@4: version "4.0.1" resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-4.0.1.tgz#3d779687f57919a7a418f8ab947d3bddb6846957" integrity sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag== -delaunay-triangulate@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/delaunay-triangulate/-/delaunay-triangulate-1.1.6.tgz#5bbca21b078198d4bc3c75796a35cbb98c25954c" - integrity sha1-W7yiGweBmNS8PHV5ajXLuYwllUw= - dependencies: - incremental-convex-hull "^1.0.1" - uniq "^1.0.1" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -dependency-graph@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.10.0.tgz#dfebe384f1f36faf7782be203a7a71102a6335a6" - integrity sha512-c9amUgpgxSi1bE5/sbLwcs5diLD0ygCQYmhfM5H1s5VH1mCsYkcmAL3CcNdv4kdSw6JuMoHeDGzLgj/gAXdWVg== - des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" + integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== detect-gpu@^1.3.0: version "1.5.1" @@ -6713,11 +5649,6 @@ detect-gpu@^1.3.0: dependencies: detect-ua "^1.0.2" -detect-indent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" - integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== - detect-kerning@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/detect-kerning/-/detect-kerning-2.1.2.tgz#4ecd548e4a5a3fc880fe2a50609312d000fa9fc2" @@ -6728,23 +5659,11 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detect-node@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== - detect-ua@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/detect-ua/-/detect-ua-1.0.2.tgz#4958d12a6af62adf522a26f0d9dec764ab3938c0" integrity sha512-EsqFycxcggrkzRm3IaHr1nP1pSCDVLHW3haUvaSqws70B277a1SKk5hFtuJo3BKuPwTTRGTGsYYiJwS/97ptEg== -dicer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872" - integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== - dependencies: - streamsearch "0.1.2" - diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" @@ -6771,34 +5690,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" - integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -6818,13 +5709,6 @@ dom-accessibility-api@^0.5.4: resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz#b06d059cdd4a4ad9a79275f9d414a5c126241166" integrity sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ== -dom-converter@^0.2: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - dom-helpers@^5.0.1: version "5.2.0" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.0.tgz#57fd054c5f8f34c52a3eeffdb7e7e93cd357d95b" @@ -6833,14 +5717,6 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58" @@ -6855,11 +5731,6 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domelementtype@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" @@ -6872,13 +5743,6 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - domhandler@^3.0.0, domhandler@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" @@ -6886,22 +5750,6 @@ domhandler@^3.0.0, domhandler@^3.3.0: dependencies: domelementtype "^2.0.1" -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - domutils@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b" @@ -6911,36 +5759,6 @@ domutils@^2.4.2: domelementtype "^2.0.1" domhandler "^3.3.0" -dot-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" - integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== - dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - -dotenv@8.2.0, dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - -dotenv@^16.3.1: - version "16.3.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== - -dotignore@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" - integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== - dependencies: - minimatch "^3.0.4" - -double-bits@^1.1.0, double-bits@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/double-bits/-/double-bits-1.1.1.tgz#58abba45494da4d0fa36b73ad11a286c9184b1c6" - integrity sha1-WKu6RUlNpND6Nrc60RoobJGEscY= - draw-svg-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/draw-svg-path/-/draw-svg-path-1.0.0.tgz#6f116d962dd314b99ea534d6f58dd66cdbd69379" @@ -6949,24 +5767,6 @@ draw-svg-path@^1.0.0: abs-svg-path "~0.1.1" normalize-svg-path "~0.1.0" -drei@1.5.7: - version "1.5.7" - resolved "https://registry.yarnpkg.com/drei/-/drei-1.5.7.tgz#ec6bf88f01d297eec6e09fb75f326b0cc78b9fa7" - integrity sha512-x7PQfvoSI1OqOwghZuZBhrNtaxMHh0bpVBLFYu39qwDghnBYgNIpNhoRtqK5FzRbcS1Rjdq0KWP0leSGKG/rsA== - dependencies: - "@babel/runtime" "^7.11.2" - "@react-spring/web" "^9.0.0-rc.3" - detect-gpu "^1.3.0" - glsl-noise "^0.0.0" - lodash.omit "^4.5.0" - lodash.pick "^4.4.0" - r3f-troika "^0.31.1" - react-merge-refs "^1.0.0" - stats.js "^0.17.0" - troika-three-text "^0.31.0" - utility-types "^3.10.0" - zustand "^3.0.3" - dtype@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dtype/-/dtype-2.0.0.tgz#cd052323ce061444ecd2e8f5748f69a29be28434" @@ -6977,11 +5777,6 @@ dup@^1.0.0: resolved "https://registry.yarnpkg.com/dup/-/dup-1.0.0.tgz#51fc5ac685f8196469df0b905e934b20af5b4029" integrity sha1-UfxaxoX4GWRp3wuQXpNLIK9bQCk= -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - duplexer@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -7015,30 +5810,16 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -edges-to-adjacency-list@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/edges-to-adjacency-list/-/edges-to-adjacency-list-1.0.0.tgz#c146d2e084addfba74a51293c6e0199a49f757f1" - integrity sha1-wUbS4ISt37p0pRKTxuAZmkn3V/E= - dependencies: - uniq "^1.0.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - electron-to-chromium@^1.4.251: version "1.4.284" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== +electron-to-chromium@^1.4.535: + version "1.4.588" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz#d553f3c008e73488fb181fdf2601fdb0b1ffbb78" + integrity sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -7056,7 +5837,7 @@ elementary-circuits-directed-graph@^1.0.4: dependencies: strongly-connected-components "^1.0.1" -elliptic@^6.5.3: +elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -7099,11 +5880,6 @@ empty-module@0.0.2: resolved "https://registry.yarnpkg.com/empty-module/-/empty-module-0.0.2.tgz#13b4dd8d4afeddd35e50c18dcd788c51087f1545" integrity sha1-E7TdjUr+3dNeUMGNzXiMUQh/FUU= -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -7112,26 +5888,14 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: once "^1.4.0" enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" - integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== dependencies: graceful-fs "^4.1.2" memory-fs "^0.5.0" tapable "^1.0.0" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - entities@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" @@ -7143,9 +5907,9 @@ eol@^0.9.1: integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" @@ -7156,7 +5920,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: +es-abstract@^1.17.0-next.1: version "1.17.7" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== @@ -7173,7 +5937,7 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" -es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: +es-abstract@^1.18.0-next.1: version "1.18.0-next.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== @@ -7191,6 +5955,87 @@ es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + 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-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-iterator-helpers@^1.0.12: + version "1.0.15" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" + integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== + dependencies: + asynciterator.prototype "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.1" + es-abstract "^1.22.1" + es-set-tostringtag "^2.0.1" + function-bind "^1.1.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + iterator.prototype "^1.1.2" + safe-array-concat "^1.0.1" + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -7218,11 +6063,6 @@ es6-iterator@^2.0.3, es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - es6-symbol@^3.1.1, es6-symbol@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" @@ -7241,16 +6081,39 @@ es6-weak-map@^2.0.3: es6-iterator "^2.0.3" es6-symbol "^3.1.1" +esbuild@^0.19.3: + version "0.19.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.5.tgz#53a0e19dfbf61ba6c827d51a80813cf071239a8c" + integrity sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ== + optionalDependencies: + "@esbuild/android-arm" "0.19.5" + "@esbuild/android-arm64" "0.19.5" + "@esbuild/android-x64" "0.19.5" + "@esbuild/darwin-arm64" "0.19.5" + "@esbuild/darwin-x64" "0.19.5" + "@esbuild/freebsd-arm64" "0.19.5" + "@esbuild/freebsd-x64" "0.19.5" + "@esbuild/linux-arm" "0.19.5" + "@esbuild/linux-arm64" "0.19.5" + "@esbuild/linux-ia32" "0.19.5" + "@esbuild/linux-loong64" "0.19.5" + "@esbuild/linux-mips64el" "0.19.5" + "@esbuild/linux-ppc64" "0.19.5" + "@esbuild/linux-riscv64" "0.19.5" + "@esbuild/linux-s390x" "0.19.5" + "@esbuild/linux-x64" "0.19.5" + "@esbuild/netbsd-x64" "0.19.5" + "@esbuild/openbsd-x64" "0.19.5" + "@esbuild/sunos-x64" "0.19.5" + "@esbuild/win32-arm64" "0.19.5" + "@esbuild/win32-ia32" "0.19.5" + "@esbuild/win32-x64" "0.19.5" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -7290,67 +6153,76 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-prettier@8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== +eslint-config-prettier@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" + integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== -eslint-import-resolver-node@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: - debug "^2.6.9" - resolve "^1.13.1" + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" -eslint-module-utils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" - integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" + debug "^3.2.7" -eslint-plugin-import@2.22.1: - version "2.22.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" - integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== +eslint-plugin-import@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== dependencies: - array-includes "^3.1.1" - array.prototype.flat "^1.2.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.4" - eslint-module-utils "^2.6.0" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" - tsconfig-paths "^3.9.0" - -eslint-plugin-react-hooks@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" - integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + +eslint-plugin-react-hooks@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@7.22.0: - version "7.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" - integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== +eslint-plugin-react@^7.33.2: + version "7.33.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" + integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== dependencies: - array-includes "^3.1.1" - array.prototype.flatmap "^1.2.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" - has "^1.0.3" + es-iterator-helpers "^1.0.12" + estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" - object.entries "^1.1.2" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.18.1" - string.prototype.matchall "^4.0.2" + 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.4" + semver "^6.3.1" + string.prototype.matchall "^4.0.8" eslint-scope@^4.0.3: version "4.0.3" @@ -7360,94 +6232,81 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.0.0, eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.0.0, eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + estraverse "^5.2.0" -eslint@7.29.0: - version "7.29.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0" - integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.2" - ajv "^6.10.0" +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.53.0: + version "8.54.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.54.0.tgz#588e0dd4388af91a2e8fa37ea64924074c783537" + integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.3" + "@eslint/js" "8.54.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" 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" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" 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" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" 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" + optionator "^0.9.3" + strip-ansi "^6.0.1" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -7468,7 +6327,7 @@ estraverse@^5.1.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -estraverse@^5.2.0: +estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== @@ -7478,11 +6337,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - event-stream@=3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" @@ -7501,32 +6355,15 @@ eventemitter2@^6.4.3: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b" integrity sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw== -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - events@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= events@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" - integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== - -eventsource@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" - integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== - dependencies: - original "^1.0.0" - -eventsource@^1.0.7: - version "1.1.2" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.2.tgz#bc75ae1c60209e7cb1541231980460343eaea7c2" - integrity sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA== + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -7602,7 +6439,7 @@ expand-brackets@^2.1.4: expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== dependencies: homedir-polyfill "^1.0.1" @@ -7618,42 +6455,6 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - ext@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" @@ -7679,16 +6480,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== extglob@^2.0.4: version "2.0.4" @@ -7704,16 +6496,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-files@9.0.0, extract-files@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" - integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== - -extract-frustum-planes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/extract-frustum-planes/-/extract-frustum-planes-1.0.0.tgz#97d5703ff0564c8c3c6838cac45f9e7bc52c9ef5" - integrity sha1-l9VwP/BWTIw8aDjKxF+ee8UsnvU= - extract-zip@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" @@ -7754,17 +6536,16 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.1.1: - version "3.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" - integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== +fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" + micromatch "^4.0.4" fast-glob@^3.3.1: version "3.3.1" @@ -7806,20 +6587,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.1: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== - dependencies: - websocket-driver ">=0.5.1" - fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" @@ -7827,24 +6594,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== - -fbjs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.0.tgz#0907067fb3f57a78f45d95f1eacffcacd623c165" - integrity sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg== - dependencies: - cross-fetch "^3.0.4" - fbjs-css-vars "^1.0.0" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -7872,13 +6621,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -7886,14 +6628,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-loader@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - file-saver@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.2.tgz#06d6e728a9ea2df2cce2f8d9e84dfcdc338ec17a" @@ -7928,27 +6662,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -filtered-vector@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/filtered-vector/-/filtered-vector-1.2.4.tgz#56453c034df4302d293ca8ecdeac3f90abc678d3" - integrity sha1-VkU8A030MC0pPKjs3qw/kKvGeNM= - dependencies: - binary-search-bounds "^1.0.0" - cubic-hermite "^1.0.0" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -7979,13 +6692,6 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -8001,6 +6707,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + find-up@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" @@ -8039,16 +6753,6 @@ flatten-vertex-data@^1.0.2: dependencies: dtype "^2.0.0" -flip-pixels@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/flip-pixels/-/flip-pixels-1.0.2.tgz#aad7b7d9fc65932d5f27e2e4dac4b494140845e4" - integrity sha512-oXbJGbjDnfJRWPC7Va38EFhd+A8JWE5/hCiKcK8qjCdbLj9DTpsq6MEudwpRTH+V4qq+Jw7d3pUgQdSr3x3mTA== - -fluids@^0.1.6: - version "0.1.10" - resolved "https://registry.yarnpkg.com/fluids/-/fluids-0.1.10.tgz#0517e7a53dbce1db011dddec301b75178518ba0e" - integrity sha512-66FLmUJOrkvEHIsRVeM+88MG0bjd2TOBuR0BkM0hzyCb68W9drzqeX/AHDNp3ouZALQN7JvBvmKdVhHI+PZsdg== - flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -8057,11 +6761,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== - font-atlas@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/font-atlas/-/font-atlas-2.1.0.tgz#aa2d6dcf656a6c871d66abbd3dfbea2f77178348" @@ -8076,7 +6775,7 @@ font-measure@^1.2.2: dependencies: css-font "^1.2.0" -for-each@~0.3.3: +for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== @@ -8116,15 +6815,6 @@ fork-ts-checker-webpack-plugin@6.0.3: semver "^7.3.2" tapable "^1.0.0" -form-data@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" @@ -8152,11 +6842,6 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - fp-ts@2.9.5: version "2.9.5" resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.9.5.tgz#6690cd8b76b84214a38fc77cbbbd04a38f86ea90" @@ -8169,11 +6854,6 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - from2@^2.1.0, from2@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -8187,11 +6867,6 @@ from@~0: resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= -fs-capacitor@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/fs-capacitor/-/fs-capacitor-6.2.0.tgz#fa79ac6576629163cb84561995602d8999afb7f5" - integrity sha512-nKcE1UduoSKX27NSZlg879LdQc94OtbOsEmKMN2MBNudXREvijRKx2GEBsTMTfws+BrbkJoEuynbGSVRSpauvw== - fs-extra@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" @@ -8210,17 +6885,7 @@ fs-extra@^7.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -fs-extra@^9.1.0: +fs-extra@^9.0.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -8230,15 +6895,15 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-monkey@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.1.tgz#4a82f36944365e619f4454d9fff106553067b781" - integrity sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA== +fs-monkey@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" + integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -8268,39 +6933,35 @@ fsevents@~2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1, function-bind@~1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -functional-red-black-tree@^1.0.0, functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gamma@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/gamma/-/gamma-0.1.0.tgz#3315643403bf27906ca80ab37c36ece9440ef330" - integrity sha1-MxVkNAO/J5BsqAqzfDbs6UQO8zA= +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= +function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -8312,7 +6973,7 @@ geojson-vt@^3.2.1: resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -8340,25 +7001,43 @@ get-intrinsic@^1.0.1, get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.1" +get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -8378,132 +7057,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -gl-axes3d@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/gl-axes3d/-/gl-axes3d-1.5.3.tgz#47e3dd6c21356a59349910ec01af58e28ea69fe9" - integrity sha512-KRYbguKQcDQ6PcB9g1pgqB8Ly4TY1DQODpPKiDTasyWJ8PxQk0t2Q7XoQQijNqvsguITCpVVCzNb5GVtIWiVlQ== - dependencies: - bit-twiddle "^1.0.2" - dup "^1.0.0" - extract-frustum-planes "^1.0.0" - gl-buffer "^2.1.2" - gl-mat4 "^1.2.0" - gl-shader "^4.2.1" - gl-state "^1.0.0" - gl-vao "^1.3.0" - gl-vec4 "^1.0.1" - glslify "^7.0.0" - robust-orientation "^1.1.3" - split-polygon "^1.0.0" - vectorize-text "^3.2.1" - -gl-buffer@^2.1.1, gl-buffer@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/gl-buffer/-/gl-buffer-2.1.2.tgz#2db8d9c1a5527fba0cdb91289c206e882b889cdb" - integrity sha1-LbjZwaVSf7oM25EonCBuiCuInNs= - dependencies: - ndarray "^1.0.15" - ndarray-ops "^1.1.0" - typedarray-pool "^1.0.0" - -gl-cone3d@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/gl-cone3d/-/gl-cone3d-1.5.2.tgz#66af5c33b7d5174034dfa3654a88e995998d92bc" - integrity sha512-1JNeHH4sUtUmDA4ZK7Om8/kShwb8IZVAsnxaaB7IPRJsNGciLj1sTpODrJGeMl41RNkex5kXD2SQFrzyEAR2Rw== - dependencies: - colormap "^2.3.1" - gl-buffer "^2.1.2" - gl-mat4 "^1.2.0" - gl-shader "^4.2.1" - gl-texture2d "^2.1.0" - gl-vao "^1.3.0" - gl-vec3 "^1.1.3" - glsl-inverse "^1.0.0" - glsl-out-of-range "^1.0.4" - glsl-specular-cook-torrance "^2.0.1" - glslify "^7.0.0" - ndarray "^1.0.18" - -gl-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gl-constants/-/gl-constants-1.0.0.tgz#597a504e364750ff50253aa35f8dea7af4a5d233" - integrity sha1-WXpQTjZHUP9QJTqjX43qevSl0jM= - -gl-contour2d@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/gl-contour2d/-/gl-contour2d-1.1.7.tgz#ca330cf8449673a9ca0b3f6726c83f8d35c7a50c" - integrity sha512-GdebvJ9DtT3pJDpoE+eU2q+Wo9S3MijPpPz5arZbhK85w2bARmpFpVfPaDlZqWkB644W3BlH8TVyvAo1KE4Bhw== - dependencies: - binary-search-bounds "^2.0.4" - cdt2d "^1.0.0" - clean-pslg "^1.1.2" - gl-buffer "^2.1.2" - gl-shader "^4.2.1" - glslify "^7.0.0" - iota-array "^1.0.0" - ndarray "^1.0.18" - surface-nets "^1.0.2" - -gl-error3d@^1.0.16: - version "1.0.16" - resolved "https://registry.yarnpkg.com/gl-error3d/-/gl-error3d-1.0.16.tgz#88a94952f5303d9cf5cb86806789a360777c5446" - integrity sha512-TGJewnKSp7ZnqGgG3XCF9ldrDbxZrO+OWlx6oIet4OdOM//n8xJ5isArnIV/sdPJnFbhfoLxWrW9f5fxHFRQ1A== - dependencies: - gl-buffer "^2.1.2" - gl-shader "^4.2.1" - gl-vao "^1.3.0" - glsl-out-of-range "^1.0.4" - glslify "^7.0.0" - -gl-fbo@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/gl-fbo/-/gl-fbo-2.0.5.tgz#0fa75a497cf787695530691c8f04abb6fb55fa22" - integrity sha1-D6daSXz3h2lVMGkcjwSrtvtV+iI= - dependencies: - gl-texture2d "^2.0.0" - -gl-format-compiler-error@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/gl-format-compiler-error/-/gl-format-compiler-error-1.0.3.tgz#0c79b1751899ce9732e86240f090aa41e98471a8" - integrity sha1-DHmxdRiZzpcy6GJA8JCqQemEcag= - dependencies: - add-line-numbers "^1.0.1" - gl-constants "^1.0.0" - glsl-shader-name "^1.0.0" - sprintf-js "^1.0.3" - -gl-heatmap2d@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/gl-heatmap2d/-/gl-heatmap2d-1.1.0.tgz#01e52a62ae2154e775ab362850235789af44cefe" - integrity sha512-0FLXyxv6UBCzzhi4Q2u+9fUs6BX1+r5ZztFe27VikE9FUVw7hZiuSHmgDng92EpydogcSYHXCIK8+58RagODug== - dependencies: - binary-search-bounds "^2.0.4" - gl-buffer "^2.1.2" - gl-shader "^4.2.1" - glslify "^7.0.0" - iota-array "^1.0.0" - typedarray-pool "^1.2.0" - -gl-line3d@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/gl-line3d/-/gl-line3d-1.2.1.tgz#632fc5b931a84a315995322b271aaf497e292609" - integrity sha512-eeb0+RI2ZBRqMYJK85SgsRiJK7c4aiOjcnirxv0830A3jmOc99snY3AbPcV8KvKmW0Yaf3KA4e+qNCbHiTOTnA== - dependencies: - binary-search-bounds "^2.0.4" - gl-buffer "^2.1.2" - gl-shader "^4.2.1" - gl-texture2d "^2.1.0" - gl-vao "^1.3.0" - glsl-out-of-range "^1.0.4" - glslify "^7.0.0" - ndarray "^1.0.18" - -gl-mat3@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gl-mat3/-/gl-mat3-1.0.0.tgz#89633219ca429379a16b9185d95d41713453b912" - integrity sha1-iWMyGcpCk3mha5GF2V1BcTRTuRI= - -gl-mat4@^1.0.1, gl-mat4@^1.0.2, gl-mat4@^1.0.3, gl-mat4@^1.1.2, gl-mat4@^1.2.0: +gl-mat4@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gl-mat4/-/gl-mat4-1.2.0.tgz#49d8a7636b70aa00819216635f4a3fd3f4669b26" integrity sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA== @@ -8513,187 +7067,10 @@ gl-matrix@^3.0.0, gl-matrix@^3.2.1: resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b" integrity sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA== -gl-mesh3d@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/gl-mesh3d/-/gl-mesh3d-2.3.1.tgz#087a93c5431df923570ca51cfc691bab0d21a6b8" - integrity sha512-pXECamyGgu4/9HeAQSE5OEUuLBGS1aq9V4BCsTcxsND4fNLaajEkYKUz/WY2QSYElqKdsMBVsldGiKRKwlybqA== - dependencies: - barycentric "^1.0.1" - colormap "^2.3.1" - gl-buffer "^2.1.2" - gl-mat4 "^1.2.0" - gl-shader "^4.2.1" - gl-texture2d "^2.1.0" - gl-vao "^1.3.0" - glsl-out-of-range "^1.0.4" - glsl-specular-cook-torrance "^2.0.1" - glslify "^7.0.0" - ndarray "^1.0.18" - normals "^1.1.0" - polytope-closest-point "^1.0.0" - simplicial-complex-contour "^1.0.2" - typedarray-pool "^1.1.0" - -gl-plot2d@^1.4.5: - version "1.4.5" - resolved "https://registry.yarnpkg.com/gl-plot2d/-/gl-plot2d-1.4.5.tgz#6412b8b3f8df3e7d89c5955daac7059e04d657d4" - integrity sha512-6GmCN10SWtV+qHFQ1gjdnVubeHFVsm6P4zmo0HrPIl9TcdePCUHDlBKWAuE6XtFhiMKMj7R8rApOX8O8uXUYog== - dependencies: - binary-search-bounds "^2.0.4" - gl-buffer "^2.1.2" - gl-select-static "^2.0.7" - gl-shader "^4.2.1" - glsl-inverse "^1.0.0" - glslify "^7.0.0" - text-cache "^4.2.2" - -gl-plot3d@^2.4.6: - version "2.4.7" - resolved "https://registry.yarnpkg.com/gl-plot3d/-/gl-plot3d-2.4.7.tgz#b66e18c5affdd664f42c884acf7b82c60b41ee78" - integrity sha512-mLDVWrl4Dj0O0druWyHUK5l7cBQrRIJRn2oROEgrRuOgbbrLAzsREKefwMO0bA0YqkiZMFMnV5VvPA9j57X5Xg== - dependencies: - "3d-view" "^2.0.0" - a-big-triangle "^1.0.3" - gl-axes3d "^1.5.3" - gl-fbo "^2.0.5" - gl-mat4 "^1.2.0" - gl-select-static "^2.0.7" - gl-shader "^4.2.1" - gl-spikes3d "^1.0.10" - glslify "^7.0.0" - has-passive-events "^1.0.0" - is-mobile "^2.2.1" - mouse-change "^1.4.0" - mouse-event-offset "^3.0.2" - mouse-wheel "^1.2.0" - ndarray "^1.0.19" - right-now "^1.0.0" - -gl-pointcloud2d@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/gl-pointcloud2d/-/gl-pointcloud2d-1.0.3.tgz#f37e215f21ccb2e17f0604664e99fc3d6a4e611d" - integrity sha512-OS2e1irvJXVRpg/GziXj10xrFJm9kkRfFoB6BLUvkjCQV7ZRNNcs2CD+YSK1r0gvMwTg2T3lfLM3UPwNtz+4Xw== - dependencies: - gl-buffer "^2.1.2" - gl-shader "^4.2.1" - glslify "^7.0.0" - typedarray-pool "^1.1.0" - -gl-quat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gl-quat/-/gl-quat-1.0.0.tgz#0945ec923386f45329be5dc357b1c8c2d47586c5" - integrity sha1-CUXskjOG9FMpvl3DV7HIwtR1hsU= - dependencies: - gl-mat3 "^1.0.0" - gl-vec3 "^1.0.3" - gl-vec4 "^1.0.0" - -gl-scatter3d@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/gl-scatter3d/-/gl-scatter3d-1.2.3.tgz#83d63700ec2fe4e95b3d1cd613e86de9a6b5f603" - integrity sha512-nXqPlT1w5Qt51dTksj+DUqrZqwWAEWg0PocsKcoDnVNv0X8sGA+LBZ0Y+zrA+KNXUL0PPCX9WR9cF2uJAZl1Sw== - dependencies: - gl-buffer "^2.1.2" - gl-mat4 "^1.2.0" - gl-shader "^4.2.1" - gl-vao "^1.3.0" - glsl-out-of-range "^1.0.4" - glslify "^7.0.0" - is-string-blank "^1.0.1" - typedarray-pool "^1.1.0" - vectorize-text "^3.2.1" - -gl-select-box@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/gl-select-box/-/gl-select-box-1.0.4.tgz#47c11caa2b84f81e8bbfde08c6e39eeebb53d3d8" - integrity sha512-mKsCnglraSKyBbQiGq0Ila0WF+m6Tr+EWT2yfaMn/Sh9aMHq5Wt0F/l6Cf/Ed3CdERq5jHWAY5yxLviZteYu2w== - dependencies: - gl-buffer "^2.1.2" - gl-shader "^4.2.1" - glslify "^7.0.0" - -gl-select-static@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/gl-select-static/-/gl-select-static-2.0.7.tgz#ce7eb05ae0139009c15e2d2d0d731600b3dae5c0" - integrity sha512-OvpYprd+ngl3liEatBTdXhSyNBjwvjMSvV2rN0KHpTU+BTi4viEETXNZXFgGXY37qARs0L28ybk3UQEW6C5Nnw== - dependencies: - bit-twiddle "^1.0.2" - gl-fbo "^2.0.5" - ndarray "^1.0.18" - typedarray-pool "^1.1.0" - -gl-shader@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/gl-shader/-/gl-shader-4.2.1.tgz#bc9b808e9293c51b668e88de615b0c113708dc2f" - integrity sha1-vJuAjpKTxRtmjojeYVsMETcI3C8= - dependencies: - gl-format-compiler-error "^1.0.2" - weakmap-shim "^1.1.0" - -gl-spikes2d@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/gl-spikes2d/-/gl-spikes2d-1.0.2.tgz#ef8dbcff6c7451dec2b751d7a3c593d09ad5457f" - integrity sha512-QVeOZsi9nQuJJl7NB3132CCv5KA10BWxAY2QgJNsKqbLsG53B/TrGJpjIAohnJftdZ4fT6b3ZojWgeaXk8bOOA== - -gl-spikes3d@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/gl-spikes3d/-/gl-spikes3d-1.0.10.tgz#e3b2b677a6f51750f23c064447af4f093da79305" - integrity sha512-lT3xroowOFxMvlhT5Mof76B2TE02l5zt/NIWljhczV2FFHgIVhA4jMrd5dIv1so1RXMBDJIKu0uJI3QKliDVLg== - dependencies: - gl-buffer "^2.1.2" - gl-shader "^4.2.1" - gl-vao "^1.3.0" - glslify "^7.0.0" - -gl-state@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gl-state/-/gl-state-1.0.0.tgz#262faa75835b0b9c532c12f38adc425d1d30cd17" - integrity sha1-Ji+qdYNbC5xTLBLzitxCXR0wzRc= - dependencies: - uniq "^1.0.0" - -gl-streamtube3d@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/gl-streamtube3d/-/gl-streamtube3d-1.4.1.tgz#bd2b725e00aa96989ce34b06ebf66a76f93e35ae" - integrity sha512-rH02v00kgwgdpkXVo7KsSoPp38bIAYR9TE1iONjcQ4cQAlDhrGRauqT/P5sUaOIzs17A2DxWGcXM+EpNQs9pUA== - dependencies: - gl-cone3d "^1.5.2" - gl-vec3 "^1.1.3" - gl-vec4 "^1.0.1" - glsl-inverse "^1.0.0" - glsl-out-of-range "^1.0.4" - glsl-specular-cook-torrance "^2.0.1" - glslify "^7.0.0" - -gl-surface3d@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/gl-surface3d/-/gl-surface3d-1.6.0.tgz#5fc915759a91e9962dcfbf3982296c462a032526" - integrity sha512-x15+u4712ysnB85G55RLJEml6mOB4VaDn0VTlXCc9JcjRl5Es10Tk7lhGGyiPtkCfHwvhnkxzYA1/rHHYN7Y0A== - dependencies: - binary-search-bounds "^2.0.4" - bit-twiddle "^1.0.2" - colormap "^2.3.1" - dup "^1.0.0" - gl-buffer "^2.1.2" - gl-mat4 "^1.2.0" - gl-shader "^4.2.1" - gl-texture2d "^2.1.0" - gl-vao "^1.3.0" - glsl-out-of-range "^1.0.4" - glsl-specular-beckmann "^1.1.2" - glslify "^7.0.0" - ndarray "^1.0.18" - ndarray-gradient "^1.0.0" - ndarray-ops "^1.2.2" - ndarray-pack "^1.2.1" - ndarray-scratch "^1.2.0" - surface-nets "^1.0.2" - typedarray-pool "^1.1.0" - -gl-text@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/gl-text/-/gl-text-1.1.8.tgz#67a19bec72915acc422300aad8f727a09f98b550" - integrity sha512-whnq9DEFYbW92C4ONwk2eT0YkzmVPHoADnEtuzMOmit87XhgAhBrNs3lK9EgGjU/MoWYvlF6RkI8Kl7Yuo1hUw== +gl-text@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/gl-text/-/gl-text-1.3.1.tgz#f36594464101b5b053178d6d219c3d08fb9144c8" + integrity sha512-/f5gcEMiZd+UTBJLTl3D+CkCB/0UFGTx3nflH8ZmyWcLkZhsZ1+Xx5YYkw2rgWAzgPeE35xCqBuHSoMKQVsR+w== dependencies: bit-twiddle "^1.0.2" color-normalize "^1.5.0" @@ -8709,19 +7086,10 @@ gl-text@^1.1.8: parse-rect "^1.2.0" parse-unit "^1.0.1" pick-by-alias "^1.2.0" - regl "^1.3.11" + regl "^2.0.0" to-px "^1.0.1" typedarray-pool "^1.1.0" -gl-texture2d@^2.0.0, gl-texture2d@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/gl-texture2d/-/gl-texture2d-2.1.0.tgz#ff6824e7e7c31a8ba6fdcdbe9e5c695d7e2187c7" - integrity sha1-/2gk5+fDGoum/c2+nlxpXX4hh8c= - dependencies: - ndarray "^1.0.15" - ndarray-ops "^1.2.2" - typedarray-pool "^1.1.0" - gl-util@^3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/gl-util/-/gl-util-3.1.3.tgz#1e9a724f844b802597c6e30565d4c1e928546861" @@ -8735,45 +7103,29 @@ gl-util@^3.1.2: pick-by-alias "^1.2.0" weak-map "^1.0.5" -gl-vao@^1.2.0, gl-vao@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/gl-vao/-/gl-vao-1.3.0.tgz#e9e92aa95588cab9d5c2f04b693440c3df691923" - integrity sha1-6ekqqVWIyrnVwvBLaTRAw99pGSM= - -gl-vec3@^1.0.2, gl-vec3@^1.0.3, gl-vec3@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gl-vec3/-/gl-vec3-1.1.3.tgz#a47c62f918774a06cbed1b65bcd0288ecbb03826" - integrity sha512-jduKUqT0SGH02l8Yl+mV1yVsDfYgQAJyXGxkJQGyxPLHRiW25DwVIRPt6uvhrEMHftJfqhqKthRcyZqNEl9Xdw== - -gl-vec4@^1.0.0, gl-vec4@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gl-vec4/-/gl-vec4-1.0.1.tgz#97d96878281b14b532cbce101785dfd1cb340964" - integrity sha1-l9loeCgbFLUyy84QF4Xf0cs0CWQ= - -glob-all@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.2.1.tgz#082ca81afd2247cbd3ed2149bb2630f4dc877d95" - integrity sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw== - dependencies: - glob "^7.1.2" - yargs "^15.3.1" - glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0: +glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.6: +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -8811,7 +7163,7 @@ global-modules@^2.0.0: global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== dependencies: expand-tilde "^2.0.2" homedir-polyfill "^1.0.1" @@ -8833,48 +7185,32 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0, globals@^13.9.0: - version "13.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" - integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== +globals@^13.19.0: + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== dependencies: type-fest "^0.20.2" -globby@11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" - integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" + define-properties "^1.1.3" -globby@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - glsl-inject-defines@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz#dd1aacc2c17fcb2bd3fc32411c6633d0d7b60fd4" @@ -8884,20 +7220,10 @@ glsl-inject-defines@^1.0.1: glsl-token-string "^1.0.1" glsl-tokenizer "^2.0.2" -glsl-inverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/glsl-inverse/-/glsl-inverse-1.0.0.tgz#12c0b1d065f558444d1e6feaf79b5ddf8a918ae6" - integrity sha1-EsCx0GX1WERNHm/q95td34qRiuY= - glsl-noise@^0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/glsl-noise/-/glsl-noise-0.0.0.tgz#367745f3a33382c0eeec4cb54b7e99cfc1d7670b" - integrity sha1-NndF86MzgsDu7Ey1S36Zz8HXZws= - -glsl-out-of-range@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/glsl-out-of-range/-/glsl-out-of-range-1.0.4.tgz#3d73d083bc9ecc73efd45dfc7063c29e92c9c873" - integrity sha512-fCcDu2LCQ39VBvfe1FbhuazXEf0CqMZI9OYXrYlL6uUARG48CTAbL04+tZBtVM0zo1Ljx4OLu2AxNquq++lxWQ== + integrity sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w== glsl-resolve@0.0.1: version "0.0.1" @@ -8907,26 +7233,6 @@ glsl-resolve@0.0.1: resolve "^0.6.1" xtend "^2.1.2" -glsl-shader-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/glsl-shader-name/-/glsl-shader-name-1.0.0.tgz#a2c30b3ba73499befb0cc7184d7c7733dd4b487d" - integrity sha1-osMLO6c0mb77DMcYTXx3M91LSH0= - dependencies: - atob-lite "^1.0.0" - glsl-tokenizer "^2.0.2" - -glsl-specular-beckmann@^1.1.1, glsl-specular-beckmann@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/glsl-specular-beckmann/-/glsl-specular-beckmann-1.1.2.tgz#fce9056933ecdf2456278376a54d082893e775f1" - integrity sha1-/OkFaTPs3yRWJ4N2pU0IKJPndfE= - -glsl-specular-cook-torrance@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/glsl-specular-cook-torrance/-/glsl-specular-cook-torrance-2.0.1.tgz#a891cc06c8c7b4f4728702b4824fdacbb967d78f" - integrity sha1-qJHMBsjHtPRyhwK0gk/ay7ln148= - dependencies: - glsl-specular-beckmann "^1.1.1" - glsl-token-assignments@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz#a5d82ab78499c2e8a6b83cb69495e6e665ce019f" @@ -9037,24 +7343,19 @@ glslify@^7.0.0, glslify@^7.1.1: through2 "^2.0.1" xtend "^4.0.0" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -9064,60 +7365,12 @@ gradient-path@2.1.0: resolved "https://registry.yarnpkg.com/gradient-path/-/gradient-path-2.1.0.tgz#da9ccdfb19efc7b387ae262bd0bc61a50752d998" integrity sha512-bxd0+5ARF7q7szoJXK0jJH/PRy1Tzu0ala+GIxmirU4qZtnxoHljVrbCIs1sEUi7KgyzBk/cxVZPWZ9t2U2SQQ== dependencies: - tinygradient "^1.0.0" - -graphql-config@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-3.2.0.tgz#3ec3a7e319792086b80e54db4b37372ad4a79a32" - integrity sha512-ygEKDeQNZKpm4137560n2oY3bGM0D5zyRsQVaJntKkufWdgPg6sb9/4J1zJW2y/yC1ortAbhNho09qmeJeLa9g== - dependencies: - "@endemolshinegroup/cosmiconfig-typescript-loader" "3.0.2" - "@graphql-tools/graphql-file-loader" "^6.0.0" - "@graphql-tools/json-file-loader" "^6.0.0" - "@graphql-tools/load" "^6.0.0" - "@graphql-tools/merge" "^6.0.0" - "@graphql-tools/url-loader" "^6.0.0" - "@graphql-tools/utils" "^6.0.0" - cosmiconfig "6.0.0" - cosmiconfig-toml-loader "1.0.0" - minimatch "3.0.4" - string-env-interpolation "1.0.1" - tslib "^2.0.0" - -graphql-request@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-3.4.0.tgz#3a400cd5511eb3c064b1873afb059196bbea9c2b" - integrity sha512-acrTzidSlwAj8wBNO7Q/UQHS8T+z5qRGquCQRv9J1InwR01BBWV9ObnoE+JS5nCCEj8wSGS0yrDXVDoRiKZuOg== - dependencies: - cross-fetch "^3.0.6" - extract-files "^9.0.0" - form-data "^3.0.0" - -graphql-tag@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.11.0.tgz#1deb53a01c46a7eb401d6cb59dec86fa1cccbffd" - integrity sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA== - -graphql-upload@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/graphql-upload/-/graphql-upload-11.0.0.tgz#24b245ff18f353bab6715e8a055db9fd73035e10" - integrity sha512-zsrDtu5gCbQFDWsNa5bMB4nf1LpKX9KDgh+f8oL1288ijV4RxeckhVozAjqjXAfRpxOHD1xOESsh6zq8SjdgjA== - dependencies: - busboy "^0.3.1" - fs-capacitor "^6.1.0" - http-errors "^1.7.3" - isobject "^4.0.0" - object-path "^0.11.4" - -graphql-ws@4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-4.1.5.tgz#03526b29acb54a424a9fbe300a4bd69ff65a50b3" - integrity sha512-yUQ1AjegD1Y9jDS699kyw7Mw+9H+rILm2HoS8N5a5B5YTH93xy3yifFhAJpKGc2wb/8yGdlVy8gTcud0TPqi6Q== + tinygradient "^1.0.0" -graphql@15.5.0: - version "15.5.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.0.tgz#39d19494dbe69d1ea719915b578bf920344a69d5" - integrity sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== grid-index@^1.1.0: version "1.1.0" @@ -9139,11 +7392,6 @@ hamt_plus@1.0.2: resolved "https://registry.yarnpkg.com/hamt_plus/-/hamt_plus-1.0.2.tgz#e21c252968c7e33b20f6a1b094cd85787a265601" integrity sha1-4hwlKWjH4zsg9qGwlM2FeHomVgE= -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -9169,6 +7417,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -9193,15 +7446,34 @@ has-passive-events@^1.0.0: dependencies: is-browser "^2.0.1" +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" has-value@^0.3.1: version "0.3.1" @@ -9234,7 +7506,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.3, has@~1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -9258,15 +7530,17 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -9296,16 +7570,6 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - hsluv@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/hsluv/-/hsluv-0.0.3.tgz#829107dafb4a9f8b52a1809ed02e091eade6754c" @@ -9318,29 +7582,11 @@ html-encoding-sniffer@^2.0.1: dependencies: whatwg-encoding "^1.0.5" -html-entities@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" - integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== - html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-minifier-terser@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== - dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" - he "^1.2.0" - param-case "^3.0.3" - relateurl "^0.2.7" - terser "^4.6.3" - html-tags@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" @@ -9356,33 +7602,6 @@ html-to-react@^1.3.4: lodash.camelcase "^4.3.0" ramda "^0.27.1" -html-webpack-plugin@4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.1.tgz#40aaf1b5cb78f2f23a83333999625c20929cda65" - integrity sha512-yzK7RQZwv9xB+pcdHNTjcqbaaDZ+5L0zJHXfi89iWIZmb/FtzxhLk0635rmJihcQbs3ZUF27Xp4oWGx6EK56zg== - dependencies: - "@types/html-minifier-terser" "^5.0.0" - "@types/tapable" "^1.0.5" - "@types/webpack" "^4.41.8" - html-minifier-terser "^5.0.1" - loader-utils "^1.2.3" - lodash "^4.17.20" - pretty-error "^2.1.1" - tapable "^1.1.3" - util.promisify "1.0.0" - -htmlparser2@^3.3.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - htmlparser2@^5.0: version "5.0.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-5.0.1.tgz#7daa6fc3e35d6107ac95a4fc08781f091664f6e7" @@ -9393,64 +7612,6 @@ htmlparser2@^5.0: domutils "^2.4.2" entities "^2.0.0" -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@^1.7.3: - version "1.8.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" - integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-parser-js@>=0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" - integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== - http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -9460,25 +7621,6 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -9491,7 +7633,7 @@ http-signature@~1.2.0: https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== https-proxy-agent@^5.0.0: version "5.0.1" @@ -9516,7 +7658,7 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== -iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -9530,20 +7672,6 @@ iconv-lite@0.6: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" - idb-keyval@5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-5.0.2.tgz#243cf2b7db1bee2a8a41b78c14a18a85db0e1646" @@ -9556,7 +7684,7 @@ identity-obj-proxy@3.0.0: dependencies: harmony-reflect "^1.4.6" -ieee754@^1.1.12, ieee754@^1.1.13, ieee754@^1.1.4: +ieee754@^1.1.12, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -9564,31 +7692,12 @@ ieee754@^1.1.12, ieee754@^1.1.13, ieee754@^1.1.4: iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -image-palette@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/image-palette/-/image-palette-2.1.0.tgz#d976525a1df75964ca125d2dba2741e92905547f" - integrity sha512-3ImSEWD26+xuQFdP0RWR4WSXadZwvgrFhjGNpMEapTG1tf2XrBFS2dlKK5hNgH4UIaSQlSUFRn1NeA+zULIWbQ== - dependencies: - color-id "^1.1.0" - pxls "^2.0.0" - quantize "^1.0.2" - -image-size@^0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.5.tgz#269f357cf5797cb44683dfa99790e54c705ead04" - integrity sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g== +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== immediate@~3.0.5: version "3.0.6" @@ -9600,12 +7709,7 @@ immer@^8.0.0: resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== -immutable@~3.7.6: - version "3.7.6" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" - integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks= - -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: +import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== @@ -9613,13 +7717,6 @@ import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" - integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== - dependencies: - resolve-from "^5.0.0" - import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -9641,14 +7738,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -incremental-convex-hull@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/incremental-convex-hull/-/incremental-convex-hull-1.0.1.tgz#51428c14cb9d9a6144bfe69b2851fb377334be1e" - integrity sha1-UUKMFMudmmFEv+abKFH7N3M0vh4= - dependencies: - robust-orientation "^1.1.2" - simplicial-complex "^1.0.0" - indefinitely-typed@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/indefinitely-typed/-/indefinitely-typed-1.1.0.tgz#d0acd3645445e89ae1c70129be21609a0aa5a114" @@ -9662,16 +7751,6 @@ indent-string@^3.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - infer-owner@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" @@ -9685,20 +7764,15 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@2.0.0: version "2.0.0" @@ -9706,50 +7780,18 @@ ini@2.0.0: integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== ini@^1.3.4, ini@^1.3.5: - version "1.3.7" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - -ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@^7.3.3: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -internal-slot@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" - integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - es-abstract "^1.17.0-next.1" - has "^1.0.3" - side-channel "^1.0.2" + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" "internmap@1 - 2": version "2.0.3" @@ -9761,51 +7803,6 @@ interpret@^1.0.0, interpret@^1.4.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -interval-tree-1d@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/interval-tree-1d/-/interval-tree-1d-1.0.3.tgz#8fdbde02b6b2c7dbdead636bcbed8e08710d85c1" - integrity sha1-j9veArayx9verWNry+2OCHENhcE= - dependencies: - binary-search-bounds "^1.0.0" - -invert-permutation@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-permutation/-/invert-permutation-1.0.0.tgz#a0a78042eadb36bc17551e787efd1439add54933" - integrity sha1-oKeAQurbNrwXVR54fv0UOa3VSTM= - -iota-array@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/iota-array/-/iota-array-1.0.0.tgz#81ef57fe5d05814cd58c2483632a99c30a0e8087" - integrity sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc= - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -9833,25 +7830,38 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" -is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-base64@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-base64/-/is-base64-0.1.0.tgz#a6f20610c6ef4863a51cba32bc0222544b932622" - integrity sha512-WRRyllsGXJM7ZN7gPTCCQ/6wNPTRDwiWdPK66l5sJzcU/oOzcIcRRf0Rux8bkpox/1yjt0F6VJRsQOIG2qz5sg== +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== dependencies: binary-extensions "^1.0.0" @@ -9862,27 +7872,35 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-blob@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-blob/-/is-blob-2.1.0.tgz#e36cd82c90653f1e1b930f11baf9c64216a05385" - integrity sha512-SZ/fTft5eUhQM6oF/ZaASFDEdbFVe89Imltn9uZr03wdKMcWNVYSMjQPFtg05QuNkt5l5c135ElvXEQG0rk4tw== +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" -is-browser@^2.0.1, is-browser@^2.1.0: +is-browser@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/is-browser/-/is-browser-2.1.0.tgz#fc084d59a5fced307d6708c59356bad7007371a9" integrity sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ== -is-buffer@^1.0.2, is-buffer@^1.1.5: +is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.0, is-buffer@^2.0.3: +is-buffer@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.2: +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-callable@^1.1.4, is-callable@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== @@ -9908,6 +7926,13 @@ is-core-module@^2.0.0, is-core-module@^2.1.0: dependencies: has "^1.0.3" +is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -9927,6 +7952,13 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== +is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + is-decimal@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" @@ -9972,6 +8004,13 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + is-finite@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" @@ -9982,11 +8021,6 @@ is-firefox@^1.0.3: resolved "https://registry.yarnpkg.com/is-firefox/-/is-firefox-1.0.3.tgz#2a2a1567783a417f6e158323108f3861b0918562" integrity sha1-KioVZ3g6QX9uFYMjEI84YbCRhWI= -is-float-array@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-float-array/-/is-float-array-1.0.0.tgz#96d67b1cbadf47ab1e05be208933acd386978a09" - integrity sha512-4ew1Sx6B6kEAl3T3NOM0yB94J3NZnBdNt4paw0e8nY73yHHTeTEhyQ3Lj7EQEnv5LD+GxNTaT4L46jcKjjpLiQ== - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -10009,20 +8043,34 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== dependencies: - is-extglob "^2.1.1" + has-tostringtag "^1.0.0" is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== dependencies: is-extglob "^2.1.0" +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-hexadecimal@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" @@ -10046,16 +8094,33 @@ is-installed-globally@~0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" -is-mobile@^2.2.1, is-mobile@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-mobile/-/is-mobile-2.2.2.tgz#f6c9c5d50ee01254ce05e739bdd835f1ed4e9954" - integrity sha512-wW/SXnYJkTjs++tVK5b6kVITZpAZPtUrt9SF80vvxGiF/Oywal+COk1jlRkiVq15RFNEQKQY31TkV24/1T5cVg== +is-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-mobile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-mobile/-/is-mobile-4.0.0.tgz#bba396eb9656e2739afde3053d7191da310fc758" + integrity sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew== is-negative-zero@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -10080,26 +8145,7 @@ is-observable@^1.1.0: dependencies: symbol-observable "^1.1.0" -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-path-inside@^3.0.2: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -10126,36 +8172,37 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-promise@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - is-promise@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-regex@^1.0.4, is-regex@^1.1.1: +is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== dependencies: has-symbols "^1.0.1" -is-regex@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: - has "^1.0.3" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== +is-set@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: - is-unc-path "^1.0.0" + call-bind "^1.0.2" is-stream@^1.1.0: version "1.1.0" @@ -10177,6 +8224,13 @@ is-string@^1.0.5: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + is-svg-path@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-svg-path/-/is-svg-path-1.0.2.tgz#77ab590c12b3d20348e5c7a13d0040c87784dda0" @@ -10189,23 +8243,50 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" +is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -10214,7 +8295,7 @@ is-windows@^1.0.1, is-windows@^1.0.2: is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== is-wsl@^2.2.0: version "2.2.0" @@ -10233,7 +8314,7 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isarray@^2.0.1: +isarray@^2.0.1, isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== @@ -10255,24 +8336,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - -isomorphic-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - -isomorphic-ws@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -10319,6 +8382,17 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + jest-canvas-mock@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/jest-canvas-mock/-/jest-canvas-mock-2.3.0.tgz#50f4cc178ae52c4c0e2ce4fd3a3ad2a41ad4eb36" @@ -10710,7 +8784,7 @@ js-levenshtein@1.1.6: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1, js-yaml@^3.14.0: +js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -10771,12 +8845,7 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" @@ -10793,11 +8862,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -10808,13 +8872,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - json-stringify-pretty-compact@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz#e77c419f52ff00c45a31f07f4c820c2433143885" @@ -10825,25 +8882,12 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json-to-pretty-yaml@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz#f4cd0bd0a5e8fe1df25aaf5ba118b099fd992d5b" - integrity sha1-9M0L0KXo/h3yWq9boRiwmf2ZLVs= - dependencies: - remedial "^1.0.7" - remove-trailing-spaces "^1.0.6" - -json3@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - -json5@2.x, json5@^2.1.2: +json5@2.x, json5@^2.1.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -json5@^1.0.1: +json5@^1.0.1, json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== @@ -10866,27 +8910,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^5.6.0" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -11000,45 +9023,16 @@ jszip@3.7.0: readable-stream "~2.3.6" set-immediate-shim "~1.0.1" -just-compare@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-1.3.0.tgz#a53c31373f150a5b238555c243af4d8a38d7a0e5" - integrity sha512-i4QNo3mPYubDmAwPbCKQl5C2b5s0yudP5V5GDp6lGR1PM22Em4Idf7mcaIzXYcL6/RLdZtuGrAqkBe9RYM/t4w== - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" +just-compare@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-1.3.0.tgz#a53c31373f150a5b238555c243af4d8a38d7a0e5" + integrity sha512-i4QNo3mPYubDmAwPbCKQl5C2b5s0yudP5V5GDp6lGR1PM22Em4Idf7mcaIzXYcL6/RLdZtuGrAqkBe9RYM/t4w== kdbush@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0" integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -11063,33 +9057,16 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -kleur@^3.0.0, kleur@^3.0.3: +kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -klona@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" - integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== - -latest-version@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= -lerp@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/lerp/-/lerp-1.0.3.tgz#a18c8968f917896de15ccfcc28d55a6b731e776e" - integrity sha1-oYyJaPkXiW3hXM/MKNVaa3Med24= - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -11111,13 +9088,6 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lie@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" - integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4= - dependencies: - immediate "~3.0.5" - lie@^3.0.2, lie@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" @@ -11193,16 +9163,6 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -11227,30 +9187,6 @@ loader-utils@^1.2.3, loader-utils@^1.4.0: emojis-list "^3.0.0" json5 "^1.0.1" -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -localforage@^1.8.1: - version "1.9.0" - resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz#f3e4d32a8300b362b4634cc4e066d9d00d2f09d1" - integrity sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g== - dependencies: - lie "3.1.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -11266,6 +9202,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + locate-path@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" @@ -11283,46 +9226,6 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.get@^4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -11336,9 +9239,9 @@ lodash.merge@^4.6.2: lodash.omit@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" - integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= + integrity sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg== -lodash.once@^4.0.0, lodash.once@^4.1.1: +lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= @@ -11346,19 +9249,14 @@ lodash.once@^4.0.0, lodash.once@^4.1.1: lodash.pick@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== lodash.shuffle@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.shuffle/-/lodash.shuffle-4.2.0.tgz#145b5053cf875f6f5c2a33f48b6e9948c6ec7b4b" integrity sha1-FFtQU8+HX29cKjP0i26ZSMbse0s= -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@4.17.21, "lodash@>=3.5 <5", lodash@^4, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0, lodash@~4.17.20: +lodash@4.17.21, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -11386,42 +9284,13 @@ log-update@^2.3.0: cli-cursor "^2.0.0" wrap-ansi "^3.0.1" -loglevel@^1.6.8: - version "1.7.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" - integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" -lower-case@2.0.1, lower-case@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" - integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== - dependencies: - tslib "^1.10.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -11464,7 +9333,7 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" -make-error@1.x, make-error@^1, make-error@^1.1.1: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -11476,7 +9345,7 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-cache@^0.2.0, map-cache@^0.2.2: +map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= @@ -11558,39 +9427,6 @@ mapbox-gl@1.13.1: tinyqueue "^2.0.3" vt-pbf "^3.1.1" -marching-simplex-table@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/marching-simplex-table/-/marching-simplex-table-1.0.0.tgz#bc16256e0f8f9b558aa9b2872f8832d9433f52ea" - integrity sha1-vBYlbg+Pm1WKqbKHL4gy2UM/Uuo= - dependencies: - convex-hull "^1.0.3" - -mat4-decompose@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mat4-decompose/-/mat4-decompose-1.0.4.tgz#65eb4fe39d70878f7a444eb4624d52f7e7eb2faf" - integrity sha1-ZetP451wh496RE60Yk1S9+frL68= - dependencies: - gl-mat4 "^1.0.1" - gl-vec3 "^1.0.2" - -mat4-interpolate@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mat4-interpolate/-/mat4-interpolate-1.0.4.tgz#55ffe9eb3c35295e2c0d5a9f7725d9068a89ff74" - integrity sha1-Vf/p6zw1KV4sDVqfdyXZBoqJ/3Q= - dependencies: - gl-mat4 "^1.0.1" - gl-vec3 "^1.0.2" - mat4-decompose "^1.0.3" - mat4-recompose "^1.0.3" - quat-slerp "^1.0.0" - -mat4-recompose@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mat4-recompose/-/mat4-recompose-1.0.4.tgz#3953c230ff2473dc772ee014a52c925cf81b0e4d" - integrity sha1-OVPCMP8kc9x3LuAUpSySXPgbDk0= - dependencies: - gl-mat4 "^1.0.1" - math-log2@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/math-log2/-/math-log2-1.0.1.tgz#fb8941be5f5ebe8979e718e6273b178e58694565" @@ -11603,16 +9439,6 @@ math.gl@^3.3.0: dependencies: "@math.gl/core" "3.3.0" -matrix-camera-controller@^2.1.1, matrix-camera-controller@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/matrix-camera-controller/-/matrix-camera-controller-2.1.3.tgz#35e5260cc1cd550962ba799f2d8d4e94b1a39370" - integrity sha1-NeUmDMHNVQliunmfLY1OlLGjk3A= - dependencies: - binary-search-bounds "^1.0.0" - gl-mat4 "^1.1.2" - gl-vec3 "^1.0.3" - mat4-interpolate "^1.0.3" - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -11644,27 +9470,12 @@ mdast-util-to-string@^1.0.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== -mdn-data@2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.12.tgz#bbb658d08b38f574bbb88f7b83703defdcc46844" - integrity sha512-ULbAlgzVb8IqZ0Hsxm6hHSlQl3Jckst2YEQS7fODu9ilNWy2LvcoSY7TRFIktABP2mdppBioc66va90T+NUs8Q== - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - memfs@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.2.0.tgz#f9438e622b5acd1daa8a4ae160c496fdd1325b26" - integrity sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A== + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: - fs-monkey "1.0.1" + fs-monkey "^1.0.4" "memoize-one@>=3.1.1 <6", memoize-one@^5.0.0: version "5.1.1" @@ -11674,7 +9485,7 @@ memfs@^3.1.2: memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -11692,26 +9503,16 @@ memorystream@^0.3.1: resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - micromark@~2.10.0: version "2.10.1" resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.10.1.tgz#cd73f54e0656f10e633073db26b663a221a442a7" @@ -11773,11 +9574,6 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -"mime-db@>= 1.43.0 < 2": - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== - mime-types@^2.1.12: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -11785,23 +9581,13 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@~2.1.19: version "2.1.27" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: mime-db "1.44.0" -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.4.4: - version "2.4.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" - integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== - mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -11812,11 +9598,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -11825,27 +9606,25 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -11878,25 +9657,25 @@ mjolnir.js@^2.3.0: "@babel/runtime" "^7.0.0" hammerjs "^2.0.8" -mkdirp@1.x, mkdirp@^1.0.4: +mkdirp@1.x: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.3: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^0.5.4: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -monaco-editor-webpack-plugin@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-4.0.0.tgz#95be3f48f4220999b909266a9997727f0deab947" - integrity sha512-4BT9XDRQXraMQjxEUjR+uuubRe3RIPkvVoGw8zwWG++s7wq6TAiXaSOMdkdS9TrjCREgSnygCOlVzY6MS8RPuA== - dependencies: - loader-utils "^2.0.0" - monaco-editor@0.25.2: version "0.25.2" resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.25.2.tgz#119e2b15bbd968a1a99c03cac9c329316d7c37e9" @@ -11914,13 +9693,6 @@ monocle-ts@2.3.5: resolved "https://registry.yarnpkg.com/monocle-ts/-/monocle-ts-2.3.5.tgz#1ff90b08616254b887e4c2bc5b2a9764fed16723" integrity sha512-Xm9jdWvqFrlV0k965eY5AlCpWIIUBY2ExzGbEG+byMs+mZI4J7zvaUOLpQ8MTFgkpgyEnu4qUhuZT/Or3QeRiA== -monotone-convex-hull-2d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/monotone-convex-hull-2d/-/monotone-convex-hull-2d-1.0.1.tgz#47f5daeadf3c4afd37764baa1aa8787a40eee08c" - integrity sha1-R/Xa6t88Sv03dkuqGqh4ekDu4Iw= - dependencies: - robust-orientation "^1.1.3" - moo-color@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/moo-color/-/moo-color-1.0.2.tgz#837c40758d2d58763825d1359a84e330531eca64" @@ -11957,7 +9729,7 @@ mouse-wheel@^1.2.0: move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -11971,29 +9743,11 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - ms@2.1.2, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - mumath@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/mumath/-/mumath-3.3.4.tgz#48d4a0f0fd8cad4e7b32096ee89b161a63d30bbf" @@ -12006,21 +9760,21 @@ murmurhash-js@^1.0.0: resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E= -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + version "2.18.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" + integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== nanoid@^3.1.22: version "3.1.22" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== +nanoid@^3.3.6: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -12038,76 +9792,26 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +native-promise-only@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" + integrity sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -ndarray-extract-contour@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ndarray-extract-contour/-/ndarray-extract-contour-1.0.1.tgz#0aee113a3a33b226b90c4888cf877bf4751305e4" - integrity sha1-Cu4ROjozsia5DEiIz4d79HUTBeQ= - dependencies: - typedarray-pool "^1.0.0" - -ndarray-gradient@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ndarray-gradient/-/ndarray-gradient-1.0.0.tgz#b7491a515c6a649f19a62324fff6f27fc8c25393" - integrity sha1-t0kaUVxqZJ8ZpiMk//byf8jCU5M= - dependencies: - cwise-compiler "^1.0.0" - dup "^1.0.0" - -ndarray-linear-interpolate@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ndarray-linear-interpolate/-/ndarray-linear-interpolate-1.0.0.tgz#78bc92b85b9abc15b6e67ee65828f9e2137ae72b" - integrity sha1-eLySuFuavBW25n7mWCj54hN65ys= - -ndarray-ops@^1.1.0, ndarray-ops@^1.2.1, ndarray-ops@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ndarray-ops/-/ndarray-ops-1.2.2.tgz#59e88d2c32a7eebcb1bc690fae141579557a614e" - integrity sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4= - dependencies: - cwise-compiler "^1.0.0" - -ndarray-pack@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ndarray-pack/-/ndarray-pack-1.2.1.tgz#8caebeaaa24d5ecf70ff86020637977da8ee585a" - integrity sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo= - dependencies: - cwise-compiler "^1.1.2" - ndarray "^1.0.13" - -ndarray-scratch@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ndarray-scratch/-/ndarray-scratch-1.2.0.tgz#6304636d62eba93db4727ac13c693341dba50e01" - integrity sha1-YwRjbWLrqT20cnrBPGkzQdulDgE= - dependencies: - ndarray "^1.0.14" - ndarray-ops "^1.2.1" - typedarray-pool "^1.0.2" - -ndarray-sort@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ndarray-sort/-/ndarray-sort-1.0.1.tgz#fea05b4cb834c7f4e0216a354f3ca751300dfd6a" - integrity sha1-/qBbTLg0x/TgIWo1TzynUTAN/Wo= - dependencies: - typedarray-pool "^1.0.0" - -ndarray@^1.0.11, ndarray@^1.0.13, ndarray@^1.0.14, ndarray@^1.0.15, ndarray@^1.0.18, ndarray@^1.0.19: - version "1.0.19" - resolved "https://registry.yarnpkg.com/ndarray/-/ndarray-1.0.19.tgz#6785b5f5dfa58b83e31ae5b2a058cfd1ab3f694e" - integrity sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ== +needle@^2.5.2: + version "2.9.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" + integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== dependencies: - iota-array "^1.0.0" - is-buffer "^1.0.2" + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: +neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -12122,13 +9826,6 @@ next-tick@~1.0.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= -nextafter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nextafter/-/nextafter-1.0.0.tgz#b7d77b535310e3e097e6025abb0a903477ec1a3a" - integrity sha1-t9d7U1MQ4+CX5gJauwqQNHfsGjo= - dependencies: - double-bits "^1.1.0" - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -12141,28 +9838,12 @@ nmtree@^1.0.6: dependencies: commander "^2.11.0" -no-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" - integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== - dependencies: - lower-case "^2.0.1" - tslib "^1.10.0" - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - node-fetch@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-fetch@^2.6.0, node-fetch@^2.6.1: +node-fetch@^2.6.1: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -12176,11 +9857,6 @@ node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -12232,6 +9908,11 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" +node-releases@^2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== + node-releases@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" @@ -12276,16 +9957,6 @@ normalize-svg-path@~0.1.0: resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz#456360e60ece75fbef7b5d7e160480e7ffd16fe5" integrity sha1-RWNg5g7Odfvve11+FgSA5//Rb+U= -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - -normals@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/normals/-/normals-1.1.0.tgz#325b595ed34afe467a6c55a14fd9085787ff59c0" - integrity sha1-MltZXtNK/kZ6bFWhT9kIV4f/WcA= - npm-run-all@4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" @@ -12315,36 +9986,6 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@^1.0.2, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -null-loader@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-4.0.1.tgz#8e63bd3a2dd3c64236a4679428632edd0a6dbc6a" - integrity sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -nullthrows@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" - integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== - num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -12362,11 +10003,6 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -numeric@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/numeric/-/numeric-1.2.6.tgz#765b02bef97988fcf880d4eb3f36b80fa31335aa" - integrity sha1-dlsCvvl5iPz4gNTrPza4D6MTNao= - nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -12391,6 +10027,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + object-inspect@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" @@ -12401,29 +10042,11 @@ object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== -object-inspect@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== - -object-is@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" - integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.0.9, object-keys@^1.1.1: +object-keys@^1.0.12, object-keys@^1.0.6, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-path@^0.11.4: - version "0.11.8" - resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.8.tgz#ed002c02bbdd0070b78a27455e8ae01fc14d4742" - integrity sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA== - object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -12431,7 +10054,17 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2: +object.assign@^4.1.0, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.assign@^4.1.1, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== @@ -12441,42 +10074,41 @@ object.assign@^4.1.0, object.assign@^4.1.1, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" - integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== +object.entries@^1.1.6: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - has "^1.0.3" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" -object.entries@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" - integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== +object.fromentries@^2.0.6, object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" -object.fromentries@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072" - integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== +object.hasown@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" + integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + define-properties "^1.2.0" + es-abstract "^1.22.1" object.pick@^1.3.0: version "1.3.0" @@ -12485,30 +10117,14 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -object.values@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" - integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== +object.values@^1.1.6, object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" office-ui-fabric-react@^7.150.0: version "7.150.0" @@ -12529,18 +10145,6 @@ office-ui-fabric-react@^7.150.0: prop-types "^15.7.2" tslib "^1.10.0" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -12574,13 +10178,6 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -12593,53 +10190,28 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" 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" - -orbit-camera-controller@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/orbit-camera-controller/-/orbit-camera-controller-4.0.0.tgz#6e2b36f0e7878663c330f50da9b7ce686c277005" - integrity sha1-bis28OeHhmPDMPUNqbfOaGwncAU= - dependencies: - filtered-vector "^1.2.1" - gl-mat4 "^1.0.3" - -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" + prelude-ls "^1.2.1" + type-check "^0.4.0" os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== ospath@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - p-each-series@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" @@ -12650,20 +10222,6 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-limit@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -12671,6 +10229,13 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-limit@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" @@ -12678,13 +10243,6 @@ p-limit@^4.0.0: dependencies: yocto-queue "^1.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -12699,6 +10257,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-locate@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" @@ -12711,40 +10276,11 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== - dependencies: - retry "^0.12.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -pad-left@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pad-left/-/pad-left-1.0.2.tgz#19e5735ea98395a26cedc6ab926ead10f3100d4c" - integrity sha1-GeVzXqmDlaJs7carkm6tEPMQDUw= - dependencies: - repeat-string "^1.3.0" - pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" @@ -12764,14 +10300,6 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@3.0.3, param-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" - integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== - dependencies: - dot-case "^3.0.3" - tslib "^1.10.0" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -12784,7 +10312,7 @@ parenthesis@^3.1.5: resolved "https://registry.yarnpkg.com/parenthesis/-/parenthesis-3.1.7.tgz#01c89b603a2a6a262ec47554e74ed154a9be2aa6" integrity sha512-iMtu+HCbLXVrpf6Ys/4YKhcFxbux3xK4ZVB9r+a2kMSqeeQWQoDNYlXIsOjwlT2ldYXZ3k5PVeBnYn7fbAo/Bg== -parse-asn1@^5.0.0, parse-asn1@^5.1.5: +parse-asn1@^5.0.0, parse-asn1@^5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== @@ -12807,15 +10335,6 @@ parse-entities@^2.0.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-filepath@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -12844,7 +10363,7 @@ parse-json@^5.0.0: parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== parse-rect@^1.2.0: version "1.2.0" @@ -12868,27 +10387,6 @@ parse5@6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@3.1.1, pascal-case@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" - integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== - dependencies: - no-case "^3.0.3" - tslib "^1.10.0" - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -12902,7 +10400,7 @@ path-browserify@0.0.1: path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== path-exists@^2.0.0: version "2.1.0" @@ -12931,11 +10429,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -12946,28 +10439,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= - dependencies: - path-root-regex "^0.1.0" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -12977,13 +10453,6 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -13012,9 +10481,9 @@ pbf@^3.0.5, pbf@^3.2.1: resolve-protobuf-schema "^2.1.0" pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -13032,31 +10501,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -permutation-parity@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/permutation-parity/-/permutation-parity-1.0.0.tgz#0174d51fca704b11b9a4b152b23d537fdc6b5ef4" - integrity sha1-AXTVH8pwSxG5pLFSsj1Tf9xrXvQ= - dependencies: - typedarray-pool "^1.0.0" - -permutation-rank@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/permutation-rank/-/permutation-rank-1.0.0.tgz#9fd98bbcecf08fbf5994b5eadc94a62e679483b5" - integrity sha1-n9mLvOzwj79ZlLXq3JSmLmeUg7U= - dependencies: - invert-permutation "^1.0.0" - typedarray-pool "^1.0.0" - pick-by-alias@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pick-by-alias/-/pick-by-alias-1.2.0.tgz#5f7cb2b1f21a6e1e884a0c87855aa4a37361107b" integrity sha1-X3yysfIabh6ISgyHhVqko3NhEHs= -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -13111,13 +10560,6 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -13139,92 +10581,52 @@ pkg-dir@^7.0.0: dependencies: find-up "^6.3.0" -planar-dual@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/planar-dual/-/planar-dual-1.0.2.tgz#b6a4235523b1b0cb79e5f926f8ea335dd982d563" - integrity sha1-tqQjVSOxsMt55fkm+OozXdmC1WM= - dependencies: - compare-angle "^1.0.0" - dup "^1.0.0" - -planar-graph-to-polyline@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/planar-graph-to-polyline/-/planar-graph-to-polyline-1.0.5.tgz#882b8605199ba88bfd464c9553303556c52b988a" - integrity sha1-iCuGBRmbqIv9RkyVUzA1VsUrmIo= - dependencies: - edges-to-adjacency-list "^1.0.0" - planar-dual "^1.0.0" - point-in-big-polygon "^2.0.0" - robust-orientation "^1.0.1" - robust-sum "^1.0.0" - two-product "^1.0.0" - uniq "^1.0.0" - -plotly.js@1.57.1: - version "1.57.1" - resolved "https://registry.yarnpkg.com/plotly.js/-/plotly.js-1.57.1.tgz#95754814ad57bf9b4ddbc9acc58337582e3bdf6a" - integrity sha512-23GlzClmOGT1lE86Ys0DLuxBM/fgRNzJqH9y7ZylO4VPwstPAlQd12DklXsuqOgCNSxnnWUaP+J7BaUOFplsUg== +plotly.js@2.27.1: + version "2.27.1" + resolved "https://registry.yarnpkg.com/plotly.js/-/plotly.js-2.27.1.tgz#064d80d17ad8f9cde400d6f7df45926f520dac06" + integrity sha512-XeE0zTJWTxURYrUJqzf73l8lTb+HnyRvvhHkoSIEvWf58ins4saopo9l25kCm+xHAGz8E/2EOncE4DyXsJ34kA== dependencies: + "@plotly/d3" "3.8.1" "@plotly/d3-sankey" "0.7.2" "@plotly/d3-sankey-circular" "0.33.1" - "@plotly/point-cluster" "^3.1.9" - "@turf/area" "^6.0.1" - "@turf/bbox" "^6.0.1" + "@turf/area" "^6.4.0" + "@turf/bbox" "^6.4.0" "@turf/centroid" "^6.0.2" - alpha-shape "^1.0.0" canvas-fit "^1.5.0" color-alpha "1.0.4" color-normalize "1.5.0" color-parse "1.3.8" color-rgba "2.1.1" - convex-hull "^1.0.3" country-regex "^1.1.0" - d3 "^3.5.17" d3-force "^1.2.1" + d3-format "^1.4.5" + d3-geo "^1.12.1" + d3-geo-projection "^2.9.0" d3-hierarchy "^1.1.9" - d3-interpolate "^1.4.0" + d3-interpolate "^3.0.1" + d3-time "^1.1.0" d3-time-format "^2.2.3" - delaunay-triangulate "^1.1.6" - es6-promise "^4.2.8" fast-isnumeric "^1.1.4" - gl-cone3d "^1.5.2" - gl-contour2d "^1.1.7" - gl-error3d "^1.0.16" - gl-heatmap2d "^1.1.0" - gl-line3d "1.2.1" gl-mat4 "^1.2.0" - gl-mesh3d "^2.3.1" - gl-plot2d "^1.4.5" - gl-plot3d "^2.4.6" - gl-pointcloud2d "^1.0.3" - gl-scatter3d "^1.2.3" - gl-select-box "^1.0.4" - gl-spikes2d "^1.0.2" - gl-streamtube3d "^1.4.1" - gl-surface3d "^1.6.0" - gl-text "^1.1.8" + gl-text "^1.3.1" glslify "^7.1.1" has-hover "^1.0.1" has-passive-events "^1.0.0" - image-size "^0.7.5" - is-mobile "^2.2.2" + is-mobile "^4.0.0" mapbox-gl "1.10.1" - matrix-camera-controller "^2.1.3" mouse-change "^1.4.0" mouse-event-offset "^3.0.2" mouse-wheel "^1.2.0" - ndarray "^1.0.19" - ndarray-linear-interpolate "^1.0.0" + native-promise-only "^0.8.1" parse-svg-path "^0.1.2" + point-in-polygon "^1.1.0" polybooljs "^1.2.0" - regl "^1.6.1" - regl-error2d "^2.0.11" - regl-line2d "^3.0.18" - regl-scatter2d "^3.2.1" - regl-splom "^1.0.12" - right-now "^1.0.0" - robust-orientation "^1.1.3" - sane-topojson "^4.0.0" + probe-image-size "^7.2.3" + regl "npm:@plotly/regl@^2.1.2" + regl-error2d "^2.0.12" + regl-line2d "^3.1.2" + regl-scatter2d "^3.2.9" + regl-splom "^1.0.14" strongly-connected-components "^1.0.1" superscript-text "^1.0.0" svg-path-sdf "^1.1.3" @@ -13234,101 +10636,26 @@ plotly.js@1.57.1: webgl-context "^2.2.0" world-calendars "^1.0.3" -point-in-big-polygon@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/point-in-big-polygon/-/point-in-big-polygon-2.0.0.tgz#39b613ea6cf17d6b43e188f77f34c44c6b33ba55" - integrity sha1-ObYT6mzxfWtD4Yj3fzTETGszulU= - dependencies: - binary-search-bounds "^1.0.0" - interval-tree-1d "^1.0.1" - robust-orientation "^1.1.3" - slab-decomposition "^1.0.1" +point-in-polygon@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/point-in-polygon/-/point-in-polygon-1.1.0.tgz#b0af2616c01bdee341cbf2894df643387ca03357" + integrity sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw== polybooljs@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/polybooljs/-/polybooljs-1.2.0.tgz#b4390c2e079d4c262d3b2504c6288d95ba7a4758" integrity sha1-tDkMLgedTCYtOyUExiiNlbp6R1g= -polytope-closest-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/polytope-closest-point/-/polytope-closest-point-1.0.0.tgz#e6e57f4081ab5e8c778b811ef06e2c48ae338c3f" - integrity sha1-5uV/QIGrXox3i4Ee8G4sSK4zjD8= - dependencies: - numeric "^1.2.6" - popper.js@1.16.1-lts: version "1.16.1-lts" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== -portfinder@^1.0.26: - version "1.0.28" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-loader@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.1.0.tgz#4647a6c8dad3cb6b253fbfaa21d62201086f6e39" - integrity sha512-vbCkP70F3Q9PIk6d47aBwjqAMI4LfkXCoyxj+7NPNuVIwfTGdzv2KVQes59/RuxMniIgsYQCFSY42P3+ykJfaw== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.4" - loader-utils "^2.0.0" - schema-utils "^3.0.0" - semver "^7.3.2" - -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== - dependencies: - postcss "^7.0.5" - -postcss-modules-local-by-default@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== - dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== - dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" - -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - util-deprecate "^1.0.2" - postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" @@ -13343,13 +10670,14 @@ postcss@8.2.13: nanoid "^3.1.22" source-map "^0.6.1" -postcss@^7.0.14, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== +postcss@^8.4.31: + version "8.4.31" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" potpack@^1.0.1: version "1.0.1" @@ -13366,34 +10694,16 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -prettier@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== - -prettier@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" + integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-error@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== - dependencies: - lodash "^4.17.20" - renderkid "^2.0.4" - pretty-format@^26.0.0, pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" @@ -13404,6 +10714,15 @@ pretty-format@^26.0.0, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" +probe-image-size@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/probe-image-size/-/probe-image-size-7.2.3.tgz#d49c64be540ec8edea538f6f585f65a9b3ab4309" + integrity sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w== + dependencies: + lodash.merge "^4.6.2" + needle "^2.5.2" + stream-parser "~0.3.1" + probe.gl@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/probe.gl/-/probe.gl-3.3.0.tgz#a64e2f007d36a6262b12f3b1e99ca5dc3762b3c3" @@ -13420,17 +10739,12 @@ process-nextick-args@~2.0.0: process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0, progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== "promise-worker-transferable@github:hashdeps/promise-worker-transferable": version "1.0.4" @@ -13439,13 +10753,6 @@ promise-inflight@^1.0.1: is-promise "^2.1.0" lie "^3.0.2" -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - prompts@^2.0.1: version "2.4.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" @@ -13463,28 +10770,24 @@ prop-types@15.7.2, prop-types@^15.5.0, prop-types@^15.5.8, prop-types@^15.6.0, p object-assign "^4.1.1" react-is "^16.8.1" +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + protocol-buffers-schema@^3.3.1: version "3.4.0" resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz#2f0ea31ca96627d680bf2fefae7ebfa2b6453eae" integrity sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA== -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== ps-tree@^1.0.1: version "1.2.0" @@ -13548,56 +10851,22 @@ punycode@1.3.2: punycode@^1.2.4: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pxls@^2.0.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/pxls/-/pxls-2.3.2.tgz#79100d2cc95089fc6e00053a9d93c1ddddb2c7b4" - integrity sha512-pQkwgbLqWPcuES5iEmGa10OlCf5xG0blkIF3dg7PpRZShbTYcvAdfFfGL03SMrkaSUaa/V0UpN9HWg40O2AIIw== - dependencies: - arr-flatten "^1.1.0" - compute-dims "^1.1.0" - flip-pixels "^1.0.2" - is-browser "^2.1.0" - is-buffer "^2.0.3" - to-uint8 "^1.4.1" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -quantize@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/quantize/-/quantize-1.0.2.tgz#d25ac200a77b6d70f40127ca171a10e33c8546de" - integrity sha1-0lrCAKd7bXD0ASfKFxoQ4zyFRt4= - -quat-slerp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/quat-slerp/-/quat-slerp-1.0.1.tgz#2baa15ce3a6bbdc3241d972eb17283139ed69f29" - integrity sha1-K6oVzjprvcMkHZcusXKDE57Wnyk= - dependencies: - gl-quat "^1.0.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== querystring@0.2.0: version "0.2.0" @@ -13614,14 +10883,6 @@ quickselect@^2.0.0: resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== -r3f-troika@^0.31.1: - version "0.31.1" - resolved "https://registry.yarnpkg.com/r3f-troika/-/r3f-troika-0.31.1.tgz#456228c63b524a20489a1f4be90015e9b345d3d3" - integrity sha512-d0AI2ZCpU5u9axqJ3I+KI786ltQNOJKimeuq+96Sir/sg0Nl2m5JNA9fBg+YEZ6fOR7+kcbyaycQcTbfTpYDDQ== - dependencies: - troika-three-utils "^0.31.0" - troika-worker-utils "^0.31.0" - raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -13657,46 +10918,6 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -rat-vec@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/rat-vec/-/rat-vec-1.1.1.tgz#0dde2b66b7b34bb1bcd2a23805eac806d87fd17f" - integrity sha1-Dd4rZrezS7G80qI4BerIBth/0X8= - dependencies: - big-rat "^1.0.3" - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-loader@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" - integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-dom@16.14.0: version "16.14.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" @@ -13743,11 +10964,6 @@ react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-i resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-layout-effect@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/react-layout-effect/-/react-layout-effect-1.0.5.tgz#0dc4e24452aee5de66c93c166f0ec512dfb1be80" - integrity sha512-zdRXHuch+OBHU6bvjTelOGUCM+UDr/iCY+c0wXLEAc+G4/FlcJruD/hUOzlKH5XgO90Y/BUJPNhI/g9kl+VAsA== - react-mapbox-gl@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/react-mapbox-gl/-/react-mapbox-gl-5.1.1.tgz#49e1ddf441c3ff9406d10ccd577ac5448d51584c" @@ -13821,6 +11037,11 @@ react-redux@7.2.4: prop-types "^15.7.2" react-is "^16.13.1" +react-refresh@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== + react-select@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/react-select/-/react-select-3.1.0.tgz#ab098720b2e9fe275047c993f0d0caf5ded17c27" @@ -13856,10 +11077,10 @@ react-svg@11.1.1: "@tanem/svg-injector" "^8.1.0" prop-types "^15.7.2" -react-tabs@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.1.2.tgz#9047ad7d8a53d357a67c14ad4c4a64cc16660fa8" - integrity sha512-OKS1l7QzSNcn+L2uFsxyGFHdXp9YsPGf/YOURWcImp7xLN36n0Wz+/j9HwlwGtlXCZexwshScR5BrcFbw/3P9Q== +react-tabs@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-4.3.0.tgz#9f4db0fd209ba4ab2c1e78993ff964435f84af62" + integrity sha512-2GfoG+f41kiBIIyd3gF+/GRCCYtamC8/2zlAcD8cqQmqI9Q+YVz7fJLHMmU9pXDVYYHpJeCgUSBJju85vu5q8Q== dependencies: clsx "^1.1.0" prop-types "^15.5.0" @@ -13932,14 +11153,6 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -13958,15 +11171,6 @@ read-pkg@^1.0.0, read-pkg@^1.1.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -13986,10 +11190,10 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== +"readable-stream@1 || 2", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.3.3, readable-stream@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -14009,7 +11213,20 @@ read-pkg@^5.2.0: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + 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" + +readable-stream@^3.0.2: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -14018,6 +11235,15 @@ readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^3.6.0, readable-stream@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -14034,6 +11260,13 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -14048,15 +11281,6 @@ recoil@0.4.1: dependencies: hamt_plus "1.0.2" -reduce-simplicial-complex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/reduce-simplicial-complex/-/reduce-simplicial-complex-1.0.0.tgz#74d696a2f835f7a6dcd92065fd8c5181f2edf8bc" - integrity sha1-dNaWovg196bc2SBl/YxRgfLt+Lw= - dependencies: - cell-orientation "^1.0.1" - compare-cell "^1.0.0" - compare-oriented-cell "^1.0.1" - redux-thunk@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" @@ -14070,14 +11294,26 @@ redux@*, redux@^4.0.0: loose-envify "^1.4.0" symbol-observable "^1.2.0" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== +reflect.getprototypeof@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" + integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== dependencies: - regenerate "^1.4.0" + regenerate "^1.4.2" -regenerate@^1.4.0: +regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== @@ -14092,10 +11328,15 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" @@ -14107,89 +11348,54 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regex-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regex-regex/-/regex-regex-1.0.0.tgz#9048a1eaeb870f4d480dabc76fc42cdcc0bc3a72" - integrity sha1-kEih6uuHD01IDavHb8Qs3MC8OnI= - -regexp.prototype.flags@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -regexp.prototype.flags@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - -regexpp@^3.0.0, regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + define-properties "^1.2.0" + set-function-name "^2.0.0" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" -regl-error2d@^2.0.11: - version "2.0.11" - resolved "https://registry.yarnpkg.com/regl-error2d/-/regl-error2d-2.0.11.tgz#1de91b6fb02866ecf66e70bbba7419caae1c207b" - integrity sha512-Bv4DbLtDU69GXPSm+NvlVWzT82oQ8M2FK+SxzkyaYMlA9izZRdLmDADqBSyJTnPWiRT4a/2KA+MP+WI0N0yt7Q== +regl-error2d@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/regl-error2d/-/regl-error2d-2.0.12.tgz#3b976e13fe641d5242a154fcacc80aecfa0a9881" + integrity sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA== dependencies: array-bounds "^1.0.1" color-normalize "^1.5.0" flatten-vertex-data "^1.0.2" object-assign "^4.1.1" pick-by-alias "^1.2.0" - to-float32 "^1.0.1" + to-float32 "^1.1.0" update-diff "^1.1.0" -regl-line2d@^3.0.18: - version "3.0.18" - resolved "https://registry.yarnpkg.com/regl-line2d/-/regl-line2d-3.0.18.tgz#84b68dcf4d7f878f97554183de02175627f0c246" - integrity sha512-yX1TlV0SHBdn8EkU+9K+K19qx7WSDOchrKx+h43rE2NCWuPlVj/MPDgrIXnzhnd42XhQtvvnkSc7aCSLjGAhZQ== +regl-line2d@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/regl-line2d/-/regl-line2d-3.1.2.tgz#2bedef7f44c1f7fae75c90f9918258723ca84c1c" + integrity sha512-nmT7WWS/WxmXAQMkgaMKWXaVmwJ65KCrjbqHGOUjjqQi6shfT96YbBOvelXwO9hG7/hjvbzjtQ2UO0L3e7YaXQ== dependencies: array-bounds "^1.0.1" + array-find-index "^1.0.2" array-normalize "^1.1.4" color-normalize "^1.5.0" earcut "^2.1.5" @@ -14199,12 +11405,12 @@ regl-line2d@^3.0.18: object-assign "^4.1.1" parse-rect "^1.2.0" pick-by-alias "^1.2.0" - to-float32 "^1.0.1" + to-float32 "^1.1.0" -regl-scatter2d@^3.1.9, regl-scatter2d@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/regl-scatter2d/-/regl-scatter2d-3.2.1.tgz#2818ba506559e4cd29fb60eacc2d2999be32da8d" - integrity sha512-qxUCK5kXuoVZin2gPLXkgkBfRr3XLobVgEfn5N0fiprsb/ncTCtSNVBqP0EJgNb115R+FXte9LKA9YrFx7uBnA== +regl-scatter2d@^3.2.3, regl-scatter2d@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/regl-scatter2d/-/regl-scatter2d-3.2.9.tgz#cd27b014c355e80d96fb2f273b563fd8f1b094f0" + integrity sha512-PNrXs+xaCClKpiB2b3HZ2j3qXQXhC5kcTh/Nfgx9rLO0EpEhab0BSQDqAsbdbpdf+pSHSJvbgitB7ulbGeQ+Fg== dependencies: "@plotly/point-cluster" "^3.1.9" array-range "^1.0.1" @@ -14215,18 +11421,17 @@ regl-scatter2d@^3.1.9, regl-scatter2d@^3.2.1: color-rgba "^2.1.1" flatten-vertex-data "^1.0.2" glslify "^7.0.0" - image-palette "^2.1.0" is-iexplorer "^1.0.0" object-assign "^4.1.1" parse-rect "^1.2.0" pick-by-alias "^1.2.0" - to-float32 "^1.0.1" + to-float32 "^1.1.0" update-diff "^1.1.0" -regl-splom@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/regl-splom/-/regl-splom-1.0.12.tgz#635e1a238e4d5eb7ba07854e30af79b49313be4e" - integrity sha512-LliMmAQ6wJFuPiLxZgYOFOzjhWcrIWPbS3Vf763Twl6R8eKpuUyRHZ54q+hxWGYwICHoPCBKMs7pVAJi8Iv7/w== +regl-splom@^1.0.14: + version "1.0.14" + resolved "https://registry.yarnpkg.com/regl-splom/-/regl-splom-1.0.14.tgz#58800b7bbd7576aa323499a1966868a6c9ea1456" + integrity sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw== dependencies: array-bounds "^1.0.1" array-range "^1.0.1" @@ -14235,47 +11440,17 @@ regl-splom@^1.0.12: parse-rect "^1.2.0" pick-by-alias "^1.2.0" raf "^3.4.1" - regl-scatter2d "^3.1.9" + regl-scatter2d "^3.2.3" -regl@^1.3.11, regl@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/regl/-/regl-1.7.0.tgz#0d185431044a356bf80e9b775b11b935ef2746d3" - integrity sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w== - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -relay-compiler@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/relay-compiler/-/relay-compiler-10.1.0.tgz#fb4672cdbe9b54869a3a79759edd8c2d91609cbe" - integrity sha512-HPqc3N3tNgEgUH5+lTr5lnLbgnsZMt+MRiyS0uAVNhuPY2It0X1ZJG+9qdA3L9IqKFUNwVn6zTO7RArjMZbARQ== - dependencies: - "@babel/core" "^7.0.0" - "@babel/generator" "^7.5.0" - "@babel/parser" "^7.0.0" - "@babel/runtime" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - babel-preset-fbjs "^3.3.0" - chalk "^4.0.0" - fb-watchman "^2.0.0" - fbjs "^3.0.0" - glob "^7.1.1" - immutable "~3.7.6" - nullthrows "^1.1.1" - relay-runtime "10.1.0" - signedsource "^1.0.0" - yargs "^15.3.1" +regl@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/regl/-/regl-2.1.0.tgz#7dae71e9ff20f29c4f42f510c70cd92ebb6b657c" + integrity sha512-oWUce/aVoEvW5l2V0LK7O5KJMzUSKeiOwFuJehzpSFd43dO5spP9r+sSUfhKtsky4u6MCqWJaRL+abzExynfTg== -relay-runtime@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-10.1.0.tgz#4753bf36e95e8d862cef33608e3d98b4ed730d16" - integrity sha512-bxznLnQ1ST6APN/cFi7l0FpjbZVchWQjjhj9mAuJBuUqNNCh9uV+UTRhpQF7Q8ycsPp19LHTpVyGhYb0ustuRQ== - dependencies: - "@babel/runtime" "^7.0.0" - fbjs "^3.0.0" +"regl@npm:@plotly/regl@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@plotly/regl/-/regl-2.1.2.tgz#fd31e3e820ed8824d59a67ab5e766bb101b810b6" + integrity sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw== remark-parse@^9.0.0: version "9.0.0" @@ -14284,38 +11459,17 @@ remark-parse@^9.0.0: dependencies: mdast-util-from-markdown "^0.8.0" -remedial@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/remedial/-/remedial-1.0.8.tgz#a5e4fd52a0e4956adbaf62da63a5a46a78c578a0" - integrity sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg== - remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= -remove-trailing-spaces@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz#4354d22f3236374702f58ee373168f6d6887ada7" - integrity sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA== - -renderkid@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.4.tgz#d325e532afb28d3f8796ffee306be8ffd6fc864c" - integrity sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g== - dependencies: - css-select "^1.1.0" - dom-converter "^0.2" - htmlparser2 "^3.3.0" - lodash "^4.17.20" - strip-ansi "^3.0.0" - repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.3.0, repeat-string@^1.6.1: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -14325,11 +11479,6 @@ replace-ext@1.0.0: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= -replaceall@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/replaceall/-/replaceall-0.1.6.tgz#81d81ac7aeb72d7f5c4942adf2697a3220688d8e" - integrity sha1-gdgax663LX9cSUKt8ml6MiBojY4= - request-progress@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" @@ -14384,11 +11533,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -14412,7 +11556,7 @@ resize-observer-polyfill@^1.5.1: resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + integrity sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg== dependencies: resolve-from "^3.0.0" @@ -14426,26 +11570,26 @@ resolve-cwd@^3.0.0: resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== dependencies: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@5.0.0, resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-protobuf-schema@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" @@ -14471,7 +11615,7 @@ resolve@^1.0.0, resolve@^1.1.10, resolve@^1.1.5, resolve@^1.1.6, resolve@^1.12.0 is-core-module "^2.0.0" path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2: +resolve@^1.10.0, resolve@^1.18.1, resolve@^1.3.2: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== @@ -14479,19 +11623,23 @@ resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3 is-core-module "^2.1.0" path-parse "^1.0.6" -resolve@~1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== +resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - path-parse "^1.0.6" + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= +resolve@^2.0.0-next.4: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - lowercase-keys "^1.0.0" + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^1.0.1: version "1.0.1" @@ -14509,31 +11657,11 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -resumer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= - dependencies: - through "~2.3.4" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -14566,99 +11694,30 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -robust-compress@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/robust-compress/-/robust-compress-1.0.0.tgz#4cf62c4b318d8308516012bb8c11752f39329b1b" - integrity sha1-TPYsSzGNgwhRYBK7jBF1Lzkymxs= - -robust-determinant@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/robust-determinant/-/robust-determinant-1.1.0.tgz#8ecae79b79caab3e74f6debe2237e5391a27e9c7" - integrity sha1-jsrnm3nKqz509t6+IjflORon6cc= - dependencies: - robust-compress "^1.0.0" - robust-scale "^1.0.0" - robust-sum "^1.0.0" - two-product "^1.0.0" - -robust-dot-product@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/robust-dot-product/-/robust-dot-product-1.0.0.tgz#c9ba0178bd2c304bfd725f58e889f1d946004553" - integrity sha1-yboBeL0sMEv9cl9Y6Inx2UYARVM= - dependencies: - robust-sum "^1.0.0" - two-product "^1.0.0" - -robust-in-sphere@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/robust-in-sphere/-/robust-in-sphere-1.1.3.tgz#1c5883d16a4e923929476ef34819857bf2a9cf75" - integrity sha1-HFiD0WpOkjkpR27zSBmFe/Kpz3U= - dependencies: - robust-scale "^1.0.0" - robust-subtract "^1.0.0" - robust-sum "^1.0.0" - two-product "^1.0.0" - -robust-linear-solve@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/robust-linear-solve/-/robust-linear-solve-1.0.0.tgz#0cd6ac5040691a6f2aa3cd6311d728905ca3a1f1" - integrity sha1-DNasUEBpGm8qo81jEdcokFyjofE= - dependencies: - robust-determinant "^1.1.0" - -robust-orientation@^1.0.1, robust-orientation@^1.0.2, robust-orientation@^1.1.2, robust-orientation@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/robust-orientation/-/robust-orientation-1.1.3.tgz#daff5b00d3be4e60722f0e9c0156ef967f1c2049" - integrity sha1-2v9bANO+TmByLw6cAVbvln8cIEk= - dependencies: - robust-scale "^1.0.2" - robust-subtract "^1.0.0" - robust-sum "^1.0.0" - two-product "^1.0.2" - -robust-product@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/robust-product/-/robust-product-1.0.0.tgz#685250007cdbba7cf1de75bff6d2927011098abe" - integrity sha1-aFJQAHzbunzx3nW/9tKScBEJir4= - dependencies: - robust-scale "^1.0.0" - robust-sum "^1.0.0" - -robust-scale@^1.0.0, robust-scale@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/robust-scale/-/robust-scale-1.0.2.tgz#775132ed09542d028e58b2cc79c06290bcf78c32" - integrity sha1-d1Ey7QlULQKOWLLMecBikLz3jDI= - dependencies: - two-product "^1.0.2" - two-sum "^1.0.0" - -robust-segment-intersect@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/robust-segment-intersect/-/robust-segment-intersect-1.0.1.tgz#3252b6a0fc1ba14ade6915ccbe09cbce9aab1c1c" - integrity sha1-MlK2oPwboUreaRXMvgnLzpqrHBw= - dependencies: - robust-orientation "^1.1.3" - -robust-subtract@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/robust-subtract/-/robust-subtract-1.0.0.tgz#e0b164e1ed8ba4e3a5dda45a12038348dbed3e9a" - integrity sha1-4LFk4e2LpOOl3aRaEgODSNvtPpo= - -robust-sum@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/robust-sum/-/robust-sum-1.0.0.tgz#16646e525292b4d25d82757a286955e0bbfa53d9" - integrity sha1-FmRuUlKStNJdgnV6KGlV4Lv6U9k= +rollup@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.5.0.tgz#358ee6947fe0e4c8bacdae6896539cade3107655" + integrity sha512-41xsWhzxqjMDASCxH5ibw1mXk+3c4TNI2UjKbLxe6iEzrSQnqOzmmK8/3mufCPbzHNJ2e04Fc1ddI35hHy+8zg== + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.5.0" + "@rollup/rollup-android-arm64" "4.5.0" + "@rollup/rollup-darwin-arm64" "4.5.0" + "@rollup/rollup-darwin-x64" "4.5.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.5.0" + "@rollup/rollup-linux-arm64-gnu" "4.5.0" + "@rollup/rollup-linux-arm64-musl" "4.5.0" + "@rollup/rollup-linux-x64-gnu" "4.5.0" + "@rollup/rollup-linux-x64-musl" "4.5.0" + "@rollup/rollup-win32-arm64-msvc" "4.5.0" + "@rollup/rollup-win32-ia32-msvc" "4.5.0" + "@rollup/rollup-win32-x64-msvc" "4.5.0" + fsevents "~2.3.2" rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - run-parallel@^1.1.9: version "1.1.10" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" @@ -14667,7 +11726,7 @@ run-parallel@^1.1.9: run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== dependencies: aproba "^1.1.1" @@ -14676,23 +11735,42 @@ rw@1, rw@^1.3.3: resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= -rxjs@6.6.6, rxjs@^6.3.3, rxjs@^6.6.0: +rxjs@6.6.6, rxjs@^6.3.3: version "6.6.6" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== dependencies: tslib "^1.9.0" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -14705,11 +11783,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane-topojson@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/sane-topojson/-/sane-topojson-4.0.0.tgz#624cdb26fc6d9392c806897bfd1a393f29bb5308" - integrity sha512-bJILrpBboQfabG3BNnHI2hZl52pbt80BE09u4WhnrmzuF2JbMKZdl62G5glXskJ46p+gxE2IzOwGj/awR4g8AA== - sane@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" @@ -14725,17 +11798,6 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sass-loader@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.0.tgz#1727fcc0c32ab3eb197cda61d78adf4e9174a4b3" - integrity sha512-ZCKAlczLBbFd3aGAhowpYEy69Te3Z68cg8bnHHl6WnSCvnKpbM6pQrz957HWMa8LKVuhnD9uMplmMAHwGQtHeg== - dependencies: - klona "^2.0.4" - loader-utils "^2.0.0" - neo-async "^2.6.2" - schema-utils "^3.0.0" - semver "^7.3.2" - sass@1.29.0: version "1.29.0" resolved "https://registry.yarnpkg.com/sass/-/sass-1.29.0.tgz#ec4e1842c146d8ea9258c28c141b8c2b7c6ab7f1" @@ -14743,10 +11805,10 @@ sass@1.29.0: dependencies: chokidar ">=2.0.0 <4.0.0" -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +sax@^1.2.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== saxes@^5.0.1: version "5.0.1" @@ -14781,7 +11843,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.6.5, schema-utils@^2.7.1: +schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -14790,73 +11852,23 @@ schema-utils@^2.6.5, schema-utils@^2.7.1: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== - dependencies: - "@types/json-schema" "^7.0.6" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -scuid@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/scuid/-/scuid-1.1.0.tgz#d3f9f920956e737a60f72d0e4ad280bf324d5dab" - integrity sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg== - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^1.10.7: - version "1.10.8" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" - integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== - dependencies: - node-forge "^0.10.0" - "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5, semver@^7.5.4: +semver@7.x, semver@^7.3.2, semver@^7.3.5, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -14864,34 +11876,30 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - 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" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0, set-function-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + set-immediate-shim@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" @@ -14910,22 +11918,7 @@ set-value@^2.0.0, set-value@^2.0.1: setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" @@ -14992,7 +11985,7 @@ shepherd.js@^8.0.2: deepmerge "^4.2.2" smoothscroll-polyfill "^0.4.4" -side-channel@^1.0.2, side-channel@^1.0.3: +side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== @@ -15006,16 +11999,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -signedsource@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-1.0.0.tgz#1ddace4981798f93bd833973803d80d52e93ad6a" - integrity sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo= - -signum@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/signum/-/signum-0.0.0.tgz#ab551b1003351070a704783f1a09c5e7691f9cf6" - integrity sha1-q1UbEAM1EHCnBHg/GgnF52kfnPY= - signum@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/signum/-/signum-1.0.0.tgz#74a7d2bf2a20b40eba16a92b152124f1d559fa77" @@ -15040,62 +12023,11 @@ simplebar-react@3.0.0-beta.6: prop-types "^15.6.1" simplebar-core "^1.0.3" -simplicial-complex-boundary@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simplicial-complex-boundary/-/simplicial-complex-boundary-1.0.1.tgz#72c9ff1e24deaa374c9bb2fa0cbf0c081ebef815" - integrity sha1-csn/HiTeqjdMm7L6DL8MCB6++BU= - dependencies: - boundary-cells "^2.0.0" - reduce-simplicial-complex "^1.0.0" - -simplicial-complex-contour@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/simplicial-complex-contour/-/simplicial-complex-contour-1.0.2.tgz#890aacac284365340110545cf2629a26e04bf9d1" - integrity sha1-iQqsrChDZTQBEFRc8mKaJuBL+dE= - dependencies: - marching-simplex-table "^1.0.0" - ndarray "^1.0.15" - ndarray-sort "^1.0.0" - typedarray-pool "^1.1.0" - -simplicial-complex@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/simplicial-complex/-/simplicial-complex-0.3.3.tgz#4c30cad57f9e45729dd8f306c8753579f46be99e" - integrity sha1-TDDK1X+eRXKd2PMGyHU1efRr6Z4= - dependencies: - bit-twiddle "~0.0.1" - union-find "~0.0.3" - -simplicial-complex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simplicial-complex/-/simplicial-complex-1.0.0.tgz#6c33a4ed69fcd4d91b7bcadd3b30b63683eae241" - integrity sha1-bDOk7Wn81Nkbe8rdOzC2NoPq4kE= - dependencies: - bit-twiddle "^1.0.0" - union-find "^1.0.0" - -simplify-planar-graph@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/simplify-planar-graph/-/simplify-planar-graph-2.0.1.tgz#bc85893725f32e8fa8ae25681398446d2cbcf766" - integrity sha1-vIWJNyXzLo+oriVoE5hEbSy892Y= - dependencies: - robust-orientation "^1.0.1" - simplicial-complex "^0.3.3" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slab-decomposition@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/slab-decomposition/-/slab-decomposition-1.0.2.tgz#1ded56754d408b10739f145103dfc61807f65134" - integrity sha1-He1WdU1AixBznxRRA9/GGAf2UTQ= - dependencies: - binary-search-bounds "^1.0.0" - functional-red-black-tree "^1.0.0" - robust-orientation "^1.1.3" - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -15106,15 +12038,6 @@ slice-ansi@0.0.4: resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - slugify@1.4.6: version "1.4.6" resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.4.6.tgz#ef288d920a47fb01c2be56b3487b6722f5e34ace" @@ -15155,27 +12078,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sockjs-client@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" - integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== - dependencies: - debug "^3.2.5" - eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" - -sockjs@0.3.20: - version "0.3.20" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" - integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== - dependencies: - faye-websocket "^0.10.0" - uuid "^3.4.0" - websocket-driver "0.6.5" - sort-object-keys@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45" @@ -15186,17 +12088,10 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-loader@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.1.2.tgz#5b782bf08496d3a7f355e1780df0e25190a80991" - integrity sha512-bjf6eSENOYBX4JZDfl9vVLNsGAQ6Uz90fLmOazcmMcyDYOBFsGxPNn83jXezWLY9bJsVAo1ObztxPcV8HAbjVA== - dependencies: - abab "^2.0.5" - iconv-lite "^0.6.2" - loader-utils "^2.0.0" - schema-utils "^3.0.0" - source-map "^0.6.1" - whatwg-mimetype "^2.3.0" +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map-resolve@^0.5.0: version "0.5.3" @@ -15227,7 +12122,7 @@ source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -15263,37 +12158,6 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - 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" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -split-polygon@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/split-polygon/-/split-polygon-1.0.0.tgz#0eacc8a136a76b12a3d95256ea7da45db0c2d247" - integrity sha1-DqzIoTanaxKj2VJW6n2kXbDC0kc= - dependencies: - robust-dot-product "^1.0.0" - robust-sum "^1.0.0" - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -15308,21 +12172,11 @@ split@0.3: dependencies: through "2" -sprintf-js@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sse-z@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/sse-z/-/sse-z-0.3.0.tgz#e215db7c303d6c4a4199d80cb63811cc28fa55b9" - integrity sha512-jfcXynl9oAOS9YJ7iqS2JMUEHOlvrRAD+54CENiWnc4xsuVLQVSgmwf7cwOTcBd/uq3XkQKBGojgvEtVXcJ/8w== - sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" @@ -15345,11 +12199,6 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - stack-trace@0.0.9: version "0.0.9" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" @@ -15377,20 +12226,15 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -stats.js@0.17.0, stats.js@^0.17.0: +stats.js@^0.17.0: version "0.17.0" resolved "https://registry.yarnpkg.com/stats.js/-/stats.js-0.17.0.tgz#b1c3dc46d94498b578b7fd3985b81ace7131cc7d" integrity sha1-scPcRtlEmLV4t/05hbgaznExzH0= -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== stream-browserify@^2.0.1: version "2.0.2" @@ -15426,21 +12270,18 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-parser@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" + integrity sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ== + dependencies: + debug "2" + stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -streamsearch@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" - integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= - -string-env-interpolation@1.0.1, string-env-interpolation@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" - integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== - string-length@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" @@ -15456,14 +12297,6 @@ string-split-by@^1.0.0: dependencies: parenthesis "^3.1.5" -string-to-arraybuffer@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-to-arraybuffer/-/string-to-arraybuffer-1.0.2.tgz#161147fbadea02e28b0935002cec4c40f1ca7f0a" - integrity sha512-DaGZidzi93dwjQen5I2osxR9ERS/R7B1PFyufNMnzhj+fmlDQAc1DSDIJVJhgI8Oq221efIMbABUBdPHDRt43Q== - dependencies: - atob-lite "^2.0.0" - is-base64 "^0.1.0" - string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -15473,7 +12306,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.1: +string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -15499,18 +12332,20 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.matchall@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz#24243399bc31b0a49d19e2b74171a15653ec996a" - integrity sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw== +string.prototype.matchall@^4.0.8: + version "4.0.10" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" + integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has-symbols "^1.0.1" - internal-slot "^1.0.2" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.3" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + regexp.prototype.flags "^1.5.0" + set-function-name "^2.0.0" + side-channel "^1.0.4" string.prototype.padend@^3.0.0: version "3.1.0" @@ -15520,13 +12355,14 @@ string.prototype.padend@^3.0.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -string.prototype.trim@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.2.tgz#f538d0bacd98fc4297f0bef645226d5aaebf59f3" - integrity sha512-b5yrbl3BXIjHau9Prk7U0RRYcUYdN4wGSVaqoBQS50CCE3KBuYU0TYRNPFCP7aVoNMX87HKThdMRVIP3giclKg== +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== dependencies: - define-properties "^1.1.3" - es-abstract "^1.18.0-next.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" string.prototype.trimend@^1.0.1: version "1.0.2" @@ -15536,6 +12372,15 @@ string.prototype.trimend@^1.0.1: define-properties "^1.1.3" es-abstract "^1.18.0-next.1" +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimstart@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz#22d45da81015309cd0cdd79787e8919fc5c613e7" @@ -15544,6 +12389,15 @@ string.prototype.trimstart@^1.0.1: define-properties "^1.1.3" es-abstract "^1.18.0-next.1" +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -15591,6 +12445,13 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -15618,29 +12479,16 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - strongly-connected-components@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz#0920e2b4df67c8eaee96c6b6234fe29e873dba99" integrity sha1-CSDitN9nyOrulsa2I0/inoc9upk= -style-loader@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - supercluster@^7.0.0, supercluster@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.0.tgz#f0a457426ec0ab95d69c5f03b51e049774b94479" @@ -15694,14 +12542,10 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -surface-nets@^1.0.0, surface-nets@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/surface-nets/-/surface-nets-1.0.2.tgz#e433c8cbba94a7274c6f4c99552b461bf1fc7a4b" - integrity sha1-5DPIy7qUpydMb0yZVStGG/H8eks= - dependencies: - ndarray-extract-contour "^1.0.0" - triangulate-hypercube "^1.0.0" - zero-crossings "^1.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-arc-to-cubic-bezier@^3.0.0: version "3.2.0" @@ -15739,25 +12583,6 @@ svg-tags@^1.0.0: resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= -svgo@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -15768,14 +12593,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -sync-fetch@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/sync-fetch/-/sync-fetch-0.3.0.tgz#77246da949389310ad978ab26790bb05f88d1335" - integrity sha512-dJp4qg+x4JwSEW1HibAuMi0IIrBI3wuQr2GimmqB7OXR50wmwzfdusG+p39R9w3R6aFtZ2mzvxvWKQ3Bd/vx3g== - dependencies: - buffer "^5.7.0" - node-fetch "^2.6.1" - synp@^1.9.10: version "1.9.10" resolved "https://registry.yarnpkg.com/synp/-/synp-1.9.10.tgz#53163321a600418c9b06af0db499939ffce12907" @@ -15791,44 +12608,11 @@ synp@^1.9.10: semver "^7.3.5" sort-object-keys "^1.1.3" -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tape@^4.0.0: - version "4.13.3" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.3.tgz#51b3d91c83668c7a45b1a594b607dee0a0b46278" - integrity sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw== - dependencies: - deep-equal "~1.1.1" - defined "~1.0.0" - dotignore "~0.1.2" - for-each "~0.3.3" - function-bind "~1.1.1" - glob "~7.1.6" - has "~1.0.3" - inherits "~2.0.4" - is-regex "~1.0.5" - minimist "~1.2.5" - object-inspect "~1.7.0" - resolve "~1.17.0" - resumer "~0.0.0" - string.prototype.trim "~1.2.1" - through "~2.3.8" - terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -15852,7 +12636,7 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.1.2, terser@^4.6.3: +terser@^4.1.2: version "4.8.1" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== @@ -15870,13 +12654,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-cache@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/text-cache/-/text-cache-4.2.2.tgz#d0d30ba89b7312ea1c1a31cd9a4db56c1cef7fe7" - integrity sha512-zky+UDYiX0a/aPw/YTBD+EzKMlCTu1chFuCMZeAkgoRiceySdROu1V2kJXhCbtEdBhiOviYnAdGiSYl58HW0ZQ== - dependencies: - vectorize-text "^3.2.1" - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -15913,16 +12690,11 @@ through2@^2.0.0, through2@^2.0.1: readable-stream "~2.3.6" xtend "~4.0.1" -through@2, through@^2.3.6, through@~2.3, through@~2.3.1, through@~2.3.4, through@~2.3.8: +through@2, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - time-stamp@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.2.0.tgz#917e0a66905688790ec7bbbde04046259af83f57" @@ -15970,41 +12742,25 @@ tmp@0.2.1, tmp@~0.2.1: dependencies: rimraf "^3.0.0" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmpl@1.0.x: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-array-buffer@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/to-array-buffer/-/to-array-buffer-3.2.0.tgz#cb684dd691a7368c3b249c2348d75227f7d4dbb4" - integrity sha512-zN33mwi0gpL+7xW1ITLfJ48CEj6ZQW0ZAP0MU+2W3kEY0PAIncyuxmD4OqkUVhPAbTP7amq9j/iwvZKYS+lzSQ== - dependencies: - flatten-vertex-data "^1.0.2" - is-blob "^2.0.1" - string-to-arraybuffer "^1.0.0" - to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-float32@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-float32/-/to-float32-1.0.1.tgz#22d5921f38183164b9e7e9876158c0c16cb9753a" - integrity sha512-nOy2WSwae3xhZbc+05xiCuU3ZPPmH0L4Rg4Q1qiOGFSuNSCTB9nVJaGgGl3ZScxAclX/L8hJuDHJGDAzbfuKCQ== +to-float32@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/to-float32/-/to-float32-1.1.0.tgz#39bd3b11eadccd490c08f5f9171da5127b6f3946" + integrity sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg== to-object-path@^0.3.0: version "0.3.0" @@ -16027,11 +12783,6 @@ to-px@^1.0.1: dependencies: parse-unit "^1.0.1" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -16053,25 +12804,9 @@ to-regex@^3.0.1, to-regex@^3.0.2: integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -to-uint8@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/to-uint8/-/to-uint8-1.4.1.tgz#9f45694905b827f247d37bc8ec83b2818d81fac9" - integrity sha512-o+ochsMlTZyucbww8It401FC2Rx+OP2RpDeYbA6h+y9HgedDl1UjdsJ9CmzKEG7AFP9es5PmJ4eDWeeeXihESg== - dependencies: - arr-flatten "^1.1.0" - clamp "^1.0.1" - is-base64 "^0.1.0" - is-float-array "^1.0.0" - to-array-buffer "^3.0.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" topojson-client@^3.1.0: version "3.1.0" @@ -16110,45 +12845,34 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -triangulate-hypercube@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/triangulate-hypercube/-/triangulate-hypercube-1.0.1.tgz#d8071db2ebfcfd51f308d0bcf2a5c48a5b36d137" - integrity sha1-2Acdsuv8/VHzCNC88qXEils20Tc= - dependencies: - gamma "^0.1.0" - permutation-parity "^1.0.0" - permutation-rank "^1.0.0" - -triangulate-polyline@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/triangulate-polyline/-/triangulate-polyline-1.0.3.tgz#bf8ba877a85054103feb9fa5a61b4e8d7017814d" - integrity sha1-v4uod6hQVBA/65+lphtOjXAXgU0= - dependencies: - cdt2d "^1.0.0" - -troika-three-text@^0.31.0: - version "0.31.0" - resolved "https://registry.yarnpkg.com/troika-three-text/-/troika-three-text-0.31.0.tgz#0c4dbd55c2d6d4516d60fc5247031464b056cf3f" - integrity sha512-JpRO+AC9mLZ49IymBwwwFLcasN0xjjQmSkGO9tlzlpeHpexsK4JB80qs6d6vhtt+vmfdJi27/m+WYhaR6+OzaQ== +troika-three-text@^0.33.1: + version "0.33.1" + resolved "https://registry.yarnpkg.com/troika-three-text/-/troika-three-text-0.33.1.tgz#580d73cace99b5944c33faf7a53af295fd75ccba" + integrity sha512-t/73wO62QxkpUWwNOB68+vsCda5S9qLNufplqC2olO1OK4yVIo7Y5fNxtUYX9SelRU5sXiLpmMqVxVfaZQPX9g== dependencies: - troika-three-utils "^0.31.0" - troika-worker-utils "^0.31.0" + troika-three-utils "^0.33.1" + troika-worker-utils "^0.33.0" -troika-three-utils@^0.31.0: - version "0.31.0" - resolved "https://registry.yarnpkg.com/troika-three-utils/-/troika-three-utils-0.31.0.tgz#825d79313d04112fdfc63389ff5531ab8d7ba1a7" - integrity sha512-IUy61i+Kv0EjievWhOmIkqjDa1acIO2J98oO2tZ+PpEfA+Q0syRknH4SN+iiYpa/MNJH1gQz0WfZF4Vk1/pumQ== +troika-three-utils@^0.33.1: + version "0.33.1" + resolved "https://registry.yarnpkg.com/troika-three-utils/-/troika-three-utils-0.33.1.tgz#628f0d69cd5d6b6847c488b1964ad89650332d74" + integrity sha512-cT1k+kSMRFGj4W+xKdvXk8ZNHvalVYN46Ist9Xnt0ZkhwHIjMZ5MD0Jaesq7js9nxiXRxR8HPcbjkwuiL25jMA== -troika-worker-utils@^0.31.0: - version "0.31.0" - resolved "https://registry.yarnpkg.com/troika-worker-utils/-/troika-worker-utils-0.31.0.tgz#3d6783265f74cda1860e9d8369de433d29c70b92" - integrity sha512-WxHhfFmy6dWBMACUnzInBlqlR601Dy3c9hiRp4aAN+ACzSldwsv1SHOqix4X2+6HTz/pBtHtfJVDbwJiO+lbCw== +troika-worker-utils@^0.33.0: + version "0.33.0" + resolved "https://registry.yarnpkg.com/troika-worker-utils/-/troika-worker-utils-0.33.0.tgz#c9685056a709e4800c00f0f929196c1f4a7d24c1" + integrity sha512-S4M7oYhCGGFg2PbwZAFm0EprLcewIrug8E6CNGAF5U5Vq/0YcU1YFYwE30BCbzTk6B1R1gcEuGYaZwxtteGK6w== trough@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + ts-jest@26.4.4: version "26.4.4" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49" @@ -16166,12 +12890,7 @@ ts-jest@26.4.4: semver "7.x" yargs-parser "20.x" -ts-log@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.3.tgz#4da5640fe25a9fb52642cd32391c886721318efb" - integrity sha512-XvB+OdKSJ708Dmf9ore4Uf/q62AYDTzFcAdxc8KNML1mmAWywRFVt/dn1KYJH8Agt5UJNujfM3znU5PxgAzA2w== - -ts-node@9.1.1, ts-node@^9: +ts-node@9.1.1: version "9.1.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== @@ -16183,38 +12902,26 @@ ts-node@9.1.1, ts-node@^9: source-map-support "^0.5.17" yn "3.1.1" -tsconfig-paths@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" - integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.0" + json5 "^1.0.2" + minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2, tslib@^2.0.0, tslib@^2.0.3, tslib@~2.1.0: +tslib@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== -tslib@~2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" - integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== - -tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== - dependencies: - tslib "^1.8.1" - tsx-create-element@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tsx-create-element/-/tsx-create-element-2.2.2.tgz#0feba416a1279a438545de5dc10e5cb34bd4839e" @@ -16226,7 +12933,7 @@ tsx-create-element@^2.1.0: tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== tunnel-agent@^0.6.0: version "0.6.0" @@ -16235,30 +12942,11 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -turntable-camera-controller@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/turntable-camera-controller/-/turntable-camera-controller-3.0.1.tgz#8dbd3fe00550191c65164cb888971049578afd99" - integrity sha1-jb0/4AVQGRxlFky4iJcQSVeK/Zk= - dependencies: - filtered-vector "^1.2.1" - gl-mat4 "^1.0.2" - gl-vec3 "^1.0.2" - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -two-product@^1.0.0, two-product@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/two-product/-/two-product-1.0.2.tgz#67d95d4b257a921e2cb4bd7af9511f9088522eaa" - integrity sha1-Z9ldSyV6kh4stL16+VEfkIhSLqo= - -two-sum@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/two-sum/-/two-sum-1.0.0.tgz#31d3f32239e4f731eca9df9155e2b297f008ab64" - integrity sha1-MdPzIjnk9zHsqd+RVeKyl/AIq2Q= - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -16298,19 +12986,6 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type-name@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" - integrity sha1-7+fUEj2KxSr/9/QMfk3sUmYAj7Q= - type@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" @@ -16321,7 +12996,46 @@ type@^2.0.0: resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== -typedarray-pool@^1.0.0, typedarray-pool@^1.0.2, typedarray-pool@^1.1.0, typedarray-pool@^1.2.0: +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typedarray-pool@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/typedarray-pool/-/typedarray-pool-1.2.0.tgz#e7e90720144ba02b9ed660438af6f3aacfe33ac3" integrity sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ== @@ -16341,43 +13055,48 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@4.1.3, typescript@^4.1.3: +typescript@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== -ua-parser-js@^0.7.18: - version "0.7.24" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.24.tgz#8d3ecea46ed4f1f1d63ec25f17d8568105dc027c" - integrity sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw== +typescript@^4.3.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + 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@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unified@^9.0.0: version "9.2.0" @@ -16391,16 +13110,6 @@ unified@^9.0.0: trough "^1.0.0" vfile "^4.0.0" -union-find@^1.0.0, union-find@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/union-find/-/union-find-1.0.2.tgz#292bac415e6ad3a89535d237010db4a536284e58" - integrity sha1-KSusQV5q06iVNdI3AQ20pTYoTlg= - -union-find@~0.0.3: - version "0.0.4" - resolved "https://registry.yarnpkg.com/union-find/-/union-find-0.0.4.tgz#b854b3301619bdad144b0014c78f96eac0d2f0f6" - integrity sha1-uFSzMBYZva0USwAUx4+W6sDS8PY= - union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -16411,11 +13120,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -uniq@^1.0.0, uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -16474,29 +13178,12 @@ universalify@^0.2.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unixify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090" - integrity sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA= - dependencies: - normalize-path "^2.1.1" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unquote@^1.1.0, unquote@~1.1.1: +unquote@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= @@ -16514,20 +13201,19 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -unused-modules-webpack-plugin@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unused-modules-webpack-plugin/-/unused-modules-webpack-plugin-1.0.1.tgz#a7e56493ee6338c47fe2c314167ceb24e699b9ad" - integrity sha512-AGTAHpozqCx6FqXmh2Q0sRZaYGLBObCIfY/vub2tWRwAhW2KIwAz6i2CS0JuV6gQE0f4RhYnF3DCvFDl8JY0yQ== - dependencies: - colors "^1.3.3" - glob-all "^3.1.0" - util.promisify "^1.0.0" - upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + update-browserslist-db@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" @@ -16541,20 +13227,6 @@ update-diff@^1.1.0: resolved "https://registry.yarnpkg.com/update-diff/-/update-diff-1.1.0.tgz#f510182d81ee819fb82c3a6b22b62bbdeda7808f" integrity sha1-9RAYLYHugZ+4LDprIrYrve2ngI8= -upper-case@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.1.tgz#6214d05e235dc817822464ccbae85822b3d8665f" - integrity sha512-laAsbea9SY5osxrv7S99vH9xAaJKrw5Qpdh4ENRLcaxipjKsiaBwiAsxfa8X5mObKNTQPsupSq0J/VIxsSJe3A== - dependencies: - tslib "^1.10.0" - -upper-case@^2.0.1, upper-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" - integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== - dependencies: - tslib "^2.0.3" - uri-js@^4.2.2: version "4.4.0" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" @@ -16572,23 +13244,7 @@ url-join@4.0.1: resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== -url-loader@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -url-parse@^1.4.3, url-parse@^1.5.3: +url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -16611,45 +13267,22 @@ use-asset@^0.1.1: dependencies: fast-deep-equal "^3.1.3" -use-memo-one@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.1.tgz#39e6f08fe27e422a7d7b234b5f9056af313bd22c" - integrity sha512-oFfsyun+bP7RX8X2AskHNTxu+R3QdE/RC5IefMbqptmACAA/gfol1KDD5KRzPsGMa62sWxGZw+Ui43u6x4ddoQ== - use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util.promisify@^1.0.0, util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= +util@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== dependencies: - inherits "2.0.1" + inherits "2.0.3" util@^0.11.0: version "0.11.1" @@ -16658,66 +13291,17 @@ util@^0.11.0: dependencies: inherits "2.0.3" -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - utility-types@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== -utils-copy-error@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-copy-error/-/utils-copy-error-1.0.1.tgz#791de393c0f09890afd59f3cbea635f079a94fa5" - integrity sha1-eR3jk8DwmJCv1Z88vqY18HmpT6U= - dependencies: - object-keys "^1.0.9" - utils-copy "^1.1.0" - -utils-copy@^1.0.0, utils-copy@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/utils-copy/-/utils-copy-1.1.1.tgz#6e2b97982aa8cd73e1182a3e6f8bec3c0f4058a7" - integrity sha1-biuXmCqozXPhGCo+b4vsPA9AWKc= - dependencies: - const-pinf-float64 "^1.0.0" - object-keys "^1.0.9" - type-name "^2.0.0" - utils-copy-error "^1.0.0" - utils-indexof "^1.0.0" - utils-regex-from-string "^1.0.0" - validate.io-array "^1.0.3" - validate.io-buffer "^1.0.1" - validate.io-nonnegative-integer "^1.0.0" - -utils-indexof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/utils-indexof/-/utils-indexof-1.0.0.tgz#20feabf09ef1018b523643e8380e7bc83ec61b5c" - integrity sha1-IP6r8J7xAYtSNkPoOA57yD7GG1w= - dependencies: - validate.io-array-like "^1.0.1" - validate.io-integer-primitive "^1.0.0" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -utils-regex-from-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/utils-regex-from-string/-/utils-regex-from-string-1.0.0.tgz#fe1a2909f8de0ff0d5182c80fbc654d6a687d189" - integrity sha1-/hopCfjeD/DVGCyA+8ZU1qaH0Yk= - dependencies: - regex-regex "^1.0.0" - validate.io-string-primitive "^1.0.0" - uuid@8.3.1: version "8.3.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== -uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -16727,10 +13311,15 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache@^2.1.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== v8-to-istanbul@^7.0.0: version "7.0.0" @@ -16741,11 +13330,6 @@ v8-to-istanbul@^7.0.0: convert-source-map "^1.6.0" source-map "^0.7.3" -valid-url@1.0.9, valid-url@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" - integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -16754,95 +13338,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate.io-array-like@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/validate.io-array-like/-/validate.io-array-like-1.0.2.tgz#7af9f7eb7b51715beb2215668ec5cce54faddb5a" - integrity sha1-evn363tRcVvrIhVmjsXM5U+t21o= - dependencies: - const-max-uint32 "^1.0.2" - validate.io-integer-primitive "^1.0.0" - -validate.io-array@^1.0.3, validate.io-array@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" - integrity sha1-W1osr9j4uFq7L4hroVPy2Tond00= - -validate.io-buffer@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/validate.io-buffer/-/validate.io-buffer-1.0.2.tgz#852d6734021914d5d13afc32531761e3720ed44e" - integrity sha1-hS1nNAIZFNXROvwyUxdh43IO1E4= - -validate.io-integer-primitive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/validate.io-integer-primitive/-/validate.io-integer-primitive-1.0.0.tgz#a9aa010355fe8681c0fea6c1a74ad2419cadddc6" - integrity sha1-qaoBA1X+hoHA/qbBp0rSQZyt3cY= - dependencies: - validate.io-number-primitive "^1.0.0" - -validate.io-integer@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068" - integrity sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg= - dependencies: - validate.io-number "^1.0.3" - -validate.io-matrix-like@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/validate.io-matrix-like/-/validate.io-matrix-like-1.0.2.tgz#5ec32a75d0889dac736dea68bdd6145b155edfc3" - integrity sha1-XsMqddCInaxzbepovdYUWxVe38M= - -validate.io-ndarray-like@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/validate.io-ndarray-like/-/validate.io-ndarray-like-1.0.0.tgz#d8a3b0ed165bbf1d2fc0d0073270cfa552295919" - integrity sha1-2KOw7RZbvx0vwNAHMnDPpVIpWRk= - -validate.io-nonnegative-integer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/validate.io-nonnegative-integer/-/validate.io-nonnegative-integer-1.0.0.tgz#8069243a08c5f98e95413c929dfd7b18f3f6f29f" - integrity sha1-gGkkOgjF+Y6VQTySnf17GPP28p8= - dependencies: - validate.io-integer "^1.0.5" - -validate.io-number-primitive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/validate.io-number-primitive/-/validate.io-number-primitive-1.0.0.tgz#d2e01f202989369dcf1155449564203afe584e55" - integrity sha1-0uAfICmJNp3PEVVElWQgOv5YTlU= - -validate.io-number@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" - integrity sha1-9j/+2iSL8opnqNSODjtGGhZluvg= - -validate.io-positive-integer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/validate.io-positive-integer/-/validate.io-positive-integer-1.0.0.tgz#7ed2d03b4c27558cc66a00aab0f0e921814a6582" - integrity sha1-ftLQO0wnVYzGagCqsPDpIYFKZYI= - dependencies: - validate.io-integer "^1.0.5" - -validate.io-string-primitive@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/validate.io-string-primitive/-/validate.io-string-primitive-1.0.1.tgz#b8135b9fb1372bde02fdd53ad1d0ccd6de798fee" - integrity sha1-uBNbn7E3K94C/dU60dDM1t55j+4= - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vectorize-text@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/vectorize-text/-/vectorize-text-3.2.1.tgz#85921abd9685af775fd20a01041a2837fe51bdb5" - integrity sha512-rGojF+D9BB96iPZPUitfq5kaiS6eCJmfEel0NXOK/MzZSuXGiwhoop80PtaDas9/Hg/oaox1tI9g3h93qpuspg== - dependencies: - cdt2d "^1.0.0" - clean-pslg "^1.1.0" - ndarray "^1.0.11" - planar-graph-to-polyline "^1.0.0" - simplify-planar-graph "^2.0.1" - surface-nets "^1.0.0" - triangulate-polyline "^1.0.0" - vega-canvas@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/vega-canvas/-/vega-canvas-1.2.6.tgz#55e032ce9a62acd17229f6bac66d99db3d6879cd" @@ -17314,6 +13809,36 @@ vfile@^4.0.0: unist-util-stringify-position "^2.0.0" vfile-message "^2.0.0" +vite-plugin-monaco-editor@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vite-plugin-monaco-editor/-/vite-plugin-monaco-editor-1.1.0.tgz#a6238c2e13d5e98dd54a1bc51f6f189325219de3" + integrity sha512-IvtUqZotrRoVqwT0PBBDIZPNraya3BxN/bfcNfnxZ5rkJiGcNtO5eAOWWSgT7zullIAEqQwxMU83yL9J5k7gww== + +vite-plugin-top-level-await@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/vite-plugin-top-level-await/-/vite-plugin-top-level-await-1.3.1.tgz#7e7293be01489b508692627529c0a3b3218a23a3" + integrity sha512-55M1h4NAwkrpxPNOJIBzKZFihqLUzIgnElLSmPNPMR2Fn9+JHKaNg3sVX1Fq+VgvuBksQYxiD3OnwQAUu7kaPQ== + dependencies: + "@rollup/plugin-virtual" "^3.0.1" + "@swc/core" "^1.3.10" + uuid "^9.0.0" + +vite-plugin-wasm@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/vite-plugin-wasm/-/vite-plugin-wasm-3.2.2.tgz#7a66fef27733a0dea9b2b14f942a6389a2523f7c" + integrity sha512-cdbBUNR850AEoMd5nvLmnyeq63CSfoP1ctD/L2vLk/5+wsgAPlAVAzUK5nGKWO/jtehNlrSSHLteN+gFQw7VOA== + +vite@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.0.tgz#3bfb65acda2a97127e4fa240156664a1f234ce08" + integrity sha512-ESJVM59mdyGpsiNAeHQOR/0fqNoOyWPYesFto8FFZugfmhdHx8Fzd8sF3Q/xkVhZsyOxHfdM7ieiVAorI9RjFw== + dependencies: + esbuild "^0.19.3" + postcss "^8.4.31" + rollup "^4.2.0" + optionalDependencies: + fsevents "~2.3.3" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -17367,23 +13892,11 @@ watchpack@^1.7.4: chokidar "^3.4.1" watchpack-chokidar2 "^2.0.1" -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - weak-map@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.5.tgz#79691584d98607f5070bd3b70a40e6bb22e401eb" integrity sha1-eWkVhNmGB/UHC9O3CkDmuyLkAes= -weakmap-shim@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/weakmap-shim/-/weakmap-shim-1.1.1.tgz#d65afd784109b2166e00ff571c33150ec2a40b49" - integrity sha1-1lr9eEEJshZuAP9XHDMVDsKkC0k= - webgl-context@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/webgl-context/-/webgl-context-2.2.0.tgz#8f37d7257cf6df1cd0a49e6a7b1b721b94cc86a0" @@ -17423,97 +13936,6 @@ webpack-cli@3.3.12: v8-compile-cache "^2.1.1" yargs "^13.3.2" -webpack-dev-middleware@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" - integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" - integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.7" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "0.3.20" - sockjs-client "1.4.0" - spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-format-messages@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/webpack-format-messages/-/webpack-format-messages-2.0.6.tgz#d8bb0d4fb2e9171efc8a252d6294f29c50d7ecd2" - integrity sha512-JOUviZSCupGTf6uJjrxKMEyOawWws566e3phwSyuWBsQxuBU6Gm4QV5wdU8UfkPIhWyhAqSGKeq8fNE9Q4rs9Q== - dependencies: - kleur "^3.0.0" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-manifest-plugin@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" - integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ== - dependencies: - fs-extra "^7.0.0" - lodash ">=3.5 <5" - object.entries "^1.1.0" - tapable "^1.0.0" - -webpack-messages@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/webpack-messages/-/webpack-messages-2.0.4.tgz#96faef65565d8de75f3cf7661c8a45e5ca3741bc" - integrity sha512-flG9VZRIKJd+ibJdtG55cp8+CglmEvGQ6uyLLwAxKudO2ws5czl0Giy8wltRCNIx+qNF76hh9UEQNZzkUHnDKw== - dependencies: - console-clear "^1.0.0" - kleur "^3.0.0" - webpack-format-messages "^2.0.0" - -webpack-retry-chunk-load-plugin@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/webpack-retry-chunk-load-plugin/-/webpack-retry-chunk-load-plugin-1.4.0.tgz#8ec191d9e431efec6ea24cd3251a753e75a56d18" - integrity sha512-R9Esfu/uQ8GX85mxcmfebmCuVjwaVaACQsaJNj3JE0xiYoHqXbubg+kRPnKgfNhYLYn6oHSK1MtH79o24rdYpw== - dependencies: - prettier "^1.19.1" - webpack-sources@^1.4.0, webpack-sources@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" @@ -17551,27 +13973,6 @@ webpack@4.44.2: watchpack "^1.7.4" webpack-sources "^1.4.1" -websocket-driver@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" - integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= - dependencies: - websocket-extensions ">=0.1.1" - -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -17579,11 +13980,6 @@ whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" -whatwg-fetch@^3.4.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== - whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" @@ -17606,11 +14002,61 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0: tr46 "^2.1.0" webidl-conversions "^6.1.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + 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" + +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -17625,14 +14071,7 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -word-wrap@^1.2.3, word-wrap@~1.2.3: +word-wrap@~1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== @@ -17677,15 +14116,6 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -17701,18 +14131,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@7.4.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" - integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== - -ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - ws@^7.4.6: version "7.5.8" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" @@ -17743,11 +14161,6 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== -y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== - yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -17763,11 +14176,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml-ast-parser@^0.0.43: - version "0.0.43" - resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" - integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== - yaml@^1.10.0, yaml@^1.7.2: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" @@ -17794,11 +14202,6 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^20.2.2: - version "20.2.6" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20" - integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA== - yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" @@ -17815,7 +14218,7 @@ yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^15.3.1, yargs@^15.4.1: +yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -17832,19 +14235,6 @@ yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.1.1: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - 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" - yarn-audit-fix@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/yarn-audit-fix/-/yarn-audit-fix-10.0.1.tgz#914b20e91473b2aa3ca969bddce92da2fd2d92d3" @@ -17907,14 +14297,7 @@ yocto-queue@^1.0.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== -zero-crossings@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/zero-crossings/-/zero-crossings-1.0.1.tgz#c562bd3113643f3443a245d12406b88b69b9a9ff" - integrity sha1-xWK9MRNkPzRDokXRJAa4i2m5qf8= - dependencies: - cwise-compiler "^1.0.0" - zustand@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.1.3.tgz#33df7f56ec11b3003458b60606addc94225b282c" - integrity sha512-Otuzh3r0GsatvsUWeXEwdYjZEw1TItWcAXwDGEHdXE4/k6WbAdVDxC21t/Poq4ZMB+2VaQNKICWu7eCBUJ65tQ== + version "3.7.2" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d" + integrity sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==