Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
This project manages its dependencies using yarn. Learn more
package.json 18.61 KiB
{
  "name": "metabase",
  "private": true,
  "version": "0.0.0",
  "description": "Metabase Analytics Report Server",
  "repository": "https://github.com/metabase/metabase",
  "license": "private",
  "engines": {
    "node": ">=18",
    "yarn": "^1.12.3"
  },
  "dependencies": {
    "@dnd-kit/core": "^6.0.8",
    "@dnd-kit/modifiers": "^6.0.1",
    "@dnd-kit/sortable": "^8.0.0",
    "@emotion/cache": "^11.11.0",
    "@emotion/is-prop-valid": "^1.1.1",
    "@emotion/react": "^11.11.0",
    "@emotion/styled": "^11.11.0",
    "@mantine/core": "^6.0.13",
    "@mantine/dates": "^6.0.13",
    "@mantine/hooks": "^6.0.13",
    "@react-oauth/google": "^0.11.1",
    "@reduxjs/toolkit": "^2.2.5",
    "@snowplow/browser-tracker": "^3.1.6",
    "@tanstack/react-virtual": "^3.1.2",
    "@tippyjs/react": "^4.2.6",
    "@types/react-router": "3.0.27",
    "@types/redux-auth-wrapper": "^2.0.16",
    "@visx/axis": "^3.10.1",
    "@visx/clip-path": "^3.3.0",
    "@visx/grid": "^3.5.0",
    "@visx/group": "^3.3.0",
    "@visx/scale": "^3.5.0",
    "@visx/shape": "^3.5.0",
    "@visx/text": "^3.3.0",
    "ace-builds": "^1.4.14",
    "classnames": "^2.1.3",
    "color": "^4.2.3",
    "crc-32": "^1.2.2",
    "cron-expression-validator": "^1.0.20",
    "cronstrue": "^2.11.0",
    "crossfilter": "^1.3.12",
    "csv-parse": "^5.5.6",
    "d3": "^7.9.0",
    "d3-scale": "^4.0.2",
    "dayjs": "^1.10.4",
    "diff": "^3.2.0",
    "echarts": "^5.5.1-rc.1",
    "fast-text-encoding": "^1.0.6",
    "formik": "^2.4.5",
    "hast-util-from-html": "^2.0.1",
    "hast-util-to-html": "^9.0.0",
    "history": "3",
    "html2canvas": "^1.4.1",
    "humanize-plus": "^1.8.1",
    "icepick": "2.4.0",
    "iframe-resizer": "^4.3.2",
    "immer": "^9.0.17",
    "inflection": "^1.7.1",
    "js-cookie": "^2.1.2",
    "jspdf": "^2.5.1",
    "jsrsasign": "^11.0.0",
    "kbar": "^0.1.0-beta.45",
    "leaflet": "^1.2.0",
    "leaflet-draw": "^0.4.9",
    "leaflet.heat": "^0.2.0",
    "lodash.debounce": "^4.0.8",
    "lodash.orderby": "^4.6.0",
    "moment-timezone": "^0.5.38",
    "mustache": "^2.3.2",
    "normalizr": "^3.0.2",
    "password-generator": "^2.0.1",
    "prop-types": "^15.5.7",
    "re-reselect": "^4.0.1",
    "react": "^18.2.0",
    "react-ace": "^10.1.0",
    "react-ansi-style": "^1.0.0",
    "react-beautiful-dnd": "^13.1.1",
    "react-color": "^2.14.1",
    "react-copy-to-clipboard": "^5.0.1",
    "react-dnd": "4",
    "react-dnd-html5-backend": "4",
    "react-dom": "^18.2.0",
    "react-draggable": "^4.4.5",
    "react-dropzone": "^14.2.3",
    "react-grid-layout": "^1.2.5",
    "react-innertext": "^1.1.5",
    "react-is": "^18.2.0",
    "react-markdown": "^8.0.4",
    "react-redux": "^9.1.2",
    "react-resizable": "^3.0.5",
    "react-router": "3",
    "react-router-redux": "^4.0.8",
    "react-transition-group": "^4.4.5",
    "react-use": "^17.4.0",
    "react-virtualized": "^9.22.3",
    "reduce-reducers": "^1.0.4",
    "redux-actions": "^2.0.1",
    "redux-auth-wrapper": "^2.1.0",
    "redux-promise": "^0.6.0",
    "regenerator-runtime": "^0.14.1",
    "rehype-external-links": "^2.0.1",
    "remark-gfm": "1.0.0",
    "reselect": "^5.1.0",
    "screenfull": "^6.0.2",
    "scroll-into-view-if-needed": "^3.1.0",
    "server-text-width": "^1.0.2",
    "simple-statistics": "^3.0.0",
    "slugg": "^1.2.1",
    "sql-formatter": "^15.1.2",
    "tether": "^1.2.0",
    "tippy.js": "^6.3.5",
    "ts-pattern": "^5.1.2",
    "ttag": "1.7.21",
    "typescript": "^5.4.5",
    "underscore": "~1.13.3",
    "use-debounce": "^10.0.0",
    "yup": "^0.32.11"
  },
  "devDependencies": {
    "@babel/cli": "^7.23.0",
    "@babel/core": "^7.23.3",
    "@babel/node": "^7.22.19",
    "@babel/preset-env": "^7.23.3",
    "@babel/preset-react": "^7.23.3",
    "@babel/preset-typescript": "^7.23.3",
    "@bahmutov/cypress-esbuild-preprocessor": "^2.2.0",
    "@cypress/grep": "^4.0.1",
    "@cypress/skip-test": "^2.6.1",
    "@emotion/babel-plugin": "^11.11.0",
    "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
    "@pmmmwh/react-refresh-webpack-plugin": "0.5.10",
    "@replayio/cypress": "^3.0.0",
    "@sinonjs/fake-timers": "^9.1.2",
    "@storybook/addon-a11y": "^6.5.16",
    "@storybook/addon-actions": "6.5.16",
    "@storybook/addon-essentials": "6.5.16",
    "@storybook/addon-links": "6.5.16",
    "@storybook/blocks": "^7.0.18",
    "@storybook/builder-webpack5": "6.5.16",
    "@storybook/manager-webpack5": "6.5.16",
    "@storybook/react": "6.5.16",
    "@svgr/webpack": "^8.0.1",
    "@swc/core": "^1.3.99",
    "@testing-library/cypress": "^10.0.2",
    "@testing-library/jest-dom": "^6.4.2",
    "@testing-library/react": "^15.0.2",
    "@testing-library/react-hooks": "^8.0.0",
    "@testing-library/user-event": "^14.5.2",
    "@types/babel__core": "^7.20.4",
    "@types/babel__preset-env": "^7.9.5",
    "@types/color": "^3.0.2",
    "@types/concurrently": "^6.3.0",
    "@types/crossfilter": "^0.0.34",
    "@types/d3": "^7.4.3",
    "@types/d3-array": "^3.2.1",
    "@types/d3-scale": "^4.0.8",
    "@types/d3-time": "^3.0.3",
    "@types/d3-time-format": "^4.0.3",
    "@types/dc": "0.0.29",
    "@types/diff": "^3.5.4",
    "@types/eslint": "7.29.0",
    "@types/glob": "^7.1.4",
    "@types/hast": "^3.0.2",
    "@types/history": "3.2.5",
    "@types/humanize-plus": "^1.8.0",
    "@types/icepick": "2.3.0",
    "@types/iframe-resizer": "^3.5.9",
    "@types/inflection": "^1.13.0",
    "@types/jest": "^29.2.3",
    "@types/js-cookie": "^2.2.7",
    "@types/jsonwebtoken": "^9.0.1",
    "@types/jsrsasign": "^10.5.12",
    "@types/leaflet": "^1.7.5",
    "@types/leaflet-draw": "^0.4.14",
    "@types/leaflet.heat": "^0.2.1",
    "@types/lodash.clonedeep": "^4.5.9",
    "@types/lodash.debounce": "^4.0.9",
    "@types/lodash.orderby": "^4.6.9",
    "@types/mustache": "^4.1.2",
    "@types/postcss-import": "^12.0.1",
    "@types/postcss-url": "^8.0.2",
    "@types/prettier": "1.19.1",
    "@types/prop-types": "^15.7.4",
    "@types/raf": "^3.4.0",
    "@types/react": "^18.3.3",
    "@types/react-beautiful-dnd": "^13.1.3",
    "@types/react-color": "^2.17.6",
    "@types/react-copy-to-clipboard": "^5.0.2",
    "@types/react-dom": "^18.2.17",
    "@types/react-grid-layout": "^1.1.3",
    "@types/react-is": "^18.2.4",
    "@types/react-resizable": "^3.0.4",
    "@types/react-router-redux": "^4.0.53",
    "@types/react-textarea-autosize": "^4.3.6",
    "@types/react-transition-group": "^4.4.5",
    "@types/react-virtualized": "^9.21.13",
    "@types/redux-actions": "^2.6.5",
    "@types/redux-promise": "^0.5.32",
    "@types/testing-library__jest-dom": "^5.14.5",
    "@types/tether": "^1.4.6",
    "@types/underscore": "^1.11.3",
    "@typescript-eslint/eslint-plugin": "^6.21.0",
    "@typescript-eslint/parser": "^6.21.0",
    "arg": "^5.0.0",
    "babel-eslint": "10.1.0",
    "babel-jest": "^29.3.1",
    "babel-loader": "^9.1.2",
    "babel-plugin-ttag": "^1.7.26",
    "chromatic": "^10.2.0",
    "concurrently": "^7.6.0",
    "conventional-changelog-cli": "^5.0.0",
    "cross-fetch": "^3.1.5",
    "css-loader": "^6.10.0",
    "cypress": "^13.9.0",
    "cypress-multi-reporters": "^1.6.4",
    "cypress-real-events": "^1.12.0",
    "esbuild": "^0.21.1",
    "eslint": "7.32.0",
    "eslint-import-resolver-webpack": "^0.8.3",
    "eslint-loader": "4.0.2",
    "eslint-plugin-cypress": "^2.12.1",
    "eslint-plugin-import": "^2.29.1",
    "eslint-plugin-jest": "^27.2.0",
    "eslint-plugin-jest-dom": "^4.0.3",
    "eslint-plugin-no-only-tests": "^2.4.0",
    "eslint-plugin-postcss-modules": "^2.0.0",
    "eslint-plugin-react": "^7.32.2",
    "eslint-plugin-react-hooks": "^4.6.0",
    "eslint-plugin-testing-library": "^5.11.0",
    "fetch-mock": "^9.11.0",
    "fork-ts-checker-webpack-plugin": "^9.0.2",
    "glob": "^7.1.1",
    "html-webpack-plugin": "5.5.0",
    "http-server": "^14.1.1",
    "husky": "^8.0.2",
    "jest": "^29.5.0",
    "jest-canvas-mock": "^2.4.0",
    "jest-environment-jsdom": "^29.5.0",
    "jest-junit": "^16.0.0",
    "jest-localstorage-mock": "^2.4.22",
    "jest-watch-typeahead": "^2.2.1",
    "json-to-pretty-yaml": "^1.2.2",
    "jsonwebtoken": "^9.0.0",
    "knex": "^2.4.2",
    "lint-staged": "^13.1.2",
    "loki": "^0.35.0",
    "markdown-link-check": "^3.10.2",
    "mini-css-extract-plugin": "2.7.2",
    "mocha": "^10.2.0",
    "mocha-junit-reporter": "^2.2.1",
    "mochawesome": "^7.1.3",
    "mochawesome-merge": "^4.2.1",
    "mochawesome-report-generator": "^6.2.0",
    "mockdate": "^2.0.2",
    "mutationobserver-shim": "^0.3.7",
    "mysql2": "^3.9.8",
    "node-polyfill-webpack-plugin": "2.0.1",
    "null-loader": "^4.0.1",
    "open-cli": "^8.0.0",
    "patch-package": "^8.0.0",
    "pg": "^8.8.0",
    "postcss": "8.4.19",
    "postcss-discard-comments": "^7.0.1",
    "postcss-import": "15.1.0",
    "postcss-loader": "7.0.2",
    "postcss-preset-env": "^6.7.0",
    "postcss-url": "^10.1.3",
    "postinstall-postinstall": "^2.1.0",
    "prettier": "^2.7.1",
    "promise-loader": "^1.0.0",
    "raf": "^3.4.0",
    "react-docgen-typescript-plugin": "^1.0.6",
    "react-refresh": "^0.13.0",
    "reg-cli": "^0.17.7",
    "shadow-cljs": "2.27.4",
    "source-map-loader": "^4.0.1",
    "stylelint": "^16.2.1",
    "stylelint-config-css-modules": "^4.4.0",
    "stylelint-config-standard": "^36.0.0",
    "terser-webpack-plugin": "^5.3.9",
    "webpack": "^5.85.0",
    "webpack-bundle-analyzer": "^4.10.1",
    "webpack-cli": "^5.1.1",
    "webpack-dev-server": "^4.15.2",
    "webpack-notifier": "1.15.0",
    "webpack-stats-plugin": "^1.1.3",
    "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz",
    "yaml-lint": "~1.6.0"
  },
  "resolutions": {
    "ansi-html": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
    "ansi-regex": "5.0.1",
    "d3-color": "^3.1.0",
    "debug": "^4.3.4",
    "follow-redirects": "^1.15.5",
    "jsdom": "^22.1.0",
    "json5": "2.2.2",
    "nth-check": "2.0.1",
    "@types/react": "^18.2.42",
    "@types/react-dom": "^18.2.17",
    "set-value": "4.0.1",
    "source-map-js": "1.2.0",
    "unset-value": "2.0.1",
    "webpack-dev-middleware": "^5.3.4"
  },
  "scripts": {
    "build": "yarn build:cljs && yarn build:js",
    "build-embedding-sdk": "yarn && yarn build-release:cljs && yarn build-release:sdk && yarn embedding-sdk:fixup-types-imports",
    "build-embedding-sdk:pure": "WEBPACK_BUNDLE=development webpack --config webpack.embedding-sdk.config.js",
    "build-embedding-sdk:watch": "yarn embedding-sdk:generate-package && yarn build-embedding-sdk:pure --watch",
    "build-hot": "rm -f target/cljs_dev/cljs.core.js && yarn concurrently -n 'cljs,js' -c 'yellow,green' 'yarn build-hot:cljs' 'yarn build-hot:js-wait'",
    "build-hot:cljs": "yarn && shadow-cljs watch app",
    "build-hot:js": "yarn && NODE_OPTIONS=--max-old-space-size=8196 WEBPACK_BUNDLE=hot webpack serve --host 0.0.0.0",
    "build-hot:js-wait": "yarn wait:cljs; yarn build-hot:js",
    "build-pure:cljs": "yarn clean-dev:cljs && shadow-cljs compile app",
    "build-release": "yarn build-release:cljs && yarn build-release:js",
    "build-release:cljs": "yarn && yarn clean-release:cljs && shadow-cljs release app",
    "build-release:js": "yarn && WEBPACK_BUNDLE=production NODE_OPTIONS=--max-old-space-size=8196 webpack --bail",
    "build-release:sdk": "WEBPACK_BUNDLE=production webpack --config webpack.embedding-sdk.config.js",
    "build-shared": "yarn && webpack --config webpack.shared.config.js",
    "build-static-viz": "yarn && yarn build-release:cljs && WEBPACK_BUNDLE=production webpack --config webpack.static-viz.config.js",
    "build-static-viz:watch": "webpack --config webpack.static-viz.config.js --watch",
    "build-static-viz:watch-wait": "yarn wait:cljs; yarn build-static-viz:watch",
    "build-stats": "yarn && webpack --json > stats.json",
    "build-storybook": "NODE_ENV=development yarn build:cljs && NODE_OPTIONS=--max-old-space-size=8196 build-storybook",
    "build-watch": "yarn concurrently -n 'cljs,js' 'yarn build-watch:cljs' 'yarn build-watch:js'",
    "build-watch:cljs": "yarn && shadow-cljs watch app",
    "build-watch:js": "yarn && NODE_OPTIONS=--max-old-space-size=8196 webpack --watch",
    "build:cljs": "yarn && yarn build-pure:cljs",
    "build:js": "yarn && NODE_OPTIONS=--max-old-space-size=8196 webpack --bail",
    "chromatic": "yarn build:cljs && NODE_OPTIONS=--max-old-space-size=8196 chromatic",
    "ci": "yarn ci-frontend && yarn ci-backend",
    "ci-backend": "clojure -X:dev:ee:ee-dev:drivers:drivers-dev:eastwood && clojure -X:dev:test",
    "ci-frontend": "yarn lint && yarn test",
    "clean-cypress-artifacts": "rm -R -f cypress/",
    "clean-dev:cljs": "rm -rf target/cljs_dev/*",
    "clean-release:cljs": "rm -rf target/cljs_release/*",
    "clean:cljs": "yarn && yarn clean-dev:cljs && yarn clean-release:cljs",
    "cljs-nrepl": "yarn && shadow-cljs node-repl -d cider/cider-nrepl:0.45.0 -d cider/piggieback:0.5.3 -d refactor-nrepl/refactor-nrepl:3.9.1",
    "cljs-server-restart": "yarn && shadow-cljs restart",
    "cljs-server-start": "yarn && shadow-cljs start",
    "cljs-server-stop": "yarn && shadow-cljs stop",
    "concurrently": "yarn && concurrently --kill-others -p name",
    "dev": "yarn && yarn clean:cljs && concurrently -n 'backend,frontend,cljs,static-viz' -c 'blue,green,yellow,magenta,red' 'clojure -M:run' 'yarn build-hot:js-wait' 'yarn build-hot:cljs' 'yarn build-static-viz:watch-wait'",
    "dev-ee": "yarn && yarn clean:cljs && concurrently -n 'backend,frontend,cljs,static-viz' -c 'blue,green,yellow,magenta,red' 'clojure -M:run:ee' 'MB_EDITION=ee yarn build-hot:js-wait' 'MB_EDITION=ee yarn build-hot:cljs' 'yarn build-static-viz:watch-wait'",
    "docs-lint-links": "find docs -type f -name '*.md' -print0 | xargs -0 markdown-link-check --quiet --config .mlc_config.json",
    "embedding-sdk:fixup-types-imports": "node ./bin/embedding-sdk/fixup-types-after-compilation.js",
    "embedding-sdk:generate-package": "node ./bin/embedding-sdk/generate-sdk-package-files.js",
    "embedding-sdk:generate-changelog": "yarn conventional-changelog -p angular --pkg enterprise/frontend/src/embedding-sdk/package.template.json --config enterprise/frontend/src/embedding-sdk/conventional-changelog-config.js --tagPrefix embedding-sdk-",
    "embedding-sdk:publish": "cd ./resources/embedding-sdk && npm publish",
    "embedding-sdk:test-unit": "yarn test-unit enterprise/frontend/src/embedding-sdk/",
    "eslint-fix": "yarn lint-eslint --fix",
    "generate-cypress-html-report": "mochawesome-merge cypress/reports/mochareports/*.json > cypress/reports/cypress-test-report.json && marge cypress/reports/cypress-test-report.json -o cypress/reports/mochareports --inline",
    "lint": "yarn lint-eslint && yarn lint-prettier && yarn lint-docs-links && yarn lint-yaml && yarn type-check",
    "lint-docs-links": "yarn && ./bin/verify-doc-links",
    "lint-eslint": "yarn build:cljs && yarn lint-eslint-pure",
    "lint-eslint-pure": "eslint --ext .js,.jsx,.ts,.tsx --rulesdir frontend/lint/eslint-rules --max-warnings 0 --report-unused-disable-directives enterprise/frontend frontend e2e",
    "lint-prettier": "yarn && yarn lint-prettier-pure",
    "lint-prettier-pure": "prettier --check '{frontend,enterprise/frontend,e2e}/**/*.{js,jsx,ts,tsx,css}'",
    "lint-yaml": "yamllint **/*.{yaml,yml} --ignore=node_modules/**/*.{yaml,yml}",
    "postinstall": "patch-package",
    "precommit": "lint-staged --shell",
    "preinstall": "echo $npm_execpath | grep -q yarn || echo '\\033[0;33mSorry, npm is not supported. Please use Yarn (https://yarnpkg.com/).\\033[0m'",
    "prepare": "husky install",
    "prettier": "prettier --write '{frontend,enterprise/frontend,e2e}/**/*.{js,jsx,ts,tsx,css}'",
    "remove-webpack-cache": "rm -rf ./node_modules/.cache",
    "storybook": "yarn build:cljs && start-storybook -p 6006",
    "test": "yarn test-unit && yarn test-timezones && yarn test-cypress",
    "test-cljs": "yarn && shadow-cljs compile test && node target/node-tests.js",
    "test-cypress": "yarn build && ./bin/build-for-test && yarn test-cypress-run",
    "test-cypress-open": "./bin/build-for-test && CYPRESS_FE_HEALTHCHECK=false yarn test-cypress-run --e2e --open",
    "test-cypress-open-no-backend": "E2E_HOST='http://localhost:3000' yarn test-cypress-run --e2e --open",
    "test-cypress-open-qa": "yarn test-qa-dbs:up && QA_DB_ENABLED=true TZ='US/Pacific' yarn test-cypress-open",
    "test-cypress-run": "node ./e2e/runner/run_cypress_tests.js",
    "test-debug": "yarn build:cljs && node --inspect-brk node_modules/.bin/jest --runInBand --detectOpenHandles",
    "test-qa-dbs:down": "docker-compose -f ./e2e/test/scenarios/docker-compose.yml down",
    "test-qa-dbs:up": "docker-compose -f ./e2e/test/scenarios/docker-compose.yml up -d",
    "test-timezones": "yarn && ./frontend/test/__runner__/run_timezone_tests",
    "test-timezones-unit": "yarn build:cljs && jest --silent --maxWorkers=4 --config jest.tz.unit.conf.json",
    "test-unit": "yarn build:cljs && jest --maxWorkers=4",
    "test-unit-keep-cljs": "jest --maxWorkers=4",
    "test-unit-watch": "yarn test-unit --watch",
    "test-unit-watch:cljs": "yarn concurrently -n 'cljs,tests' 'yarn build-watch:cljs' 'yarn test-unit-keep-cljs --watch'",
    "test-visual": "yarn build && ./bin/build-for-test && yarn test-visual-run",
    "test-visual:loki": "yarn loki test --chromeFlags='--headless --disable-gpu'",
    "test-visual:loki-update": "yarn loki update --chromeFlags='--headless --disable-gpu'",
    "test-visual:loki-report": "node frontend/test/generate-loki-report-json.js && reg-cli --from .loki/report.json --report .loki/report.html",
    "test-visual:loki-report-open": "yarn test-visual:loki || (echo 'Visual test failed, opening report...' && yarn test-visual:loki-report && open-cli .loki/report.html)",
    "type-check": "yarn clean:cljs && yarn build:cljs && yarn type-check-pure",
    "type-check-pure": "tsc --noEmit",
    "validate-e2e-filenames": "node e2e/validate-e2e-test-files.js",
    "wait:cljs": "echo Waiting for first CLJS build; until [ -f target/cljs_dev/cljs.core.js ]; do sleep 1; done; echo CLJS build done"
  },
  "lint-staged": {
    "+(frontend|enterprise/frontend|e2e)/**/*.css": [
      "stylelint --fix",
      "prettier --write"
    ],
    "+(frontend|enterprise/frontend)/**/*.{js,jsx,ts,tsx}": [
      "LINT_CSS_MODULES=true eslint --rulesdir frontend/lint/eslint-rules --max-warnings 0 --fix",
      "prettier --write",
      "node ./bin/verify-doc-links"
    ],
    "e2e/**/*.{js,jsx,ts,jsx}": [
      "eslint --rulesdir frontend/lint/eslint-rules --max-warnings 0 --fix",
      "prettier --write"
    ],
    "e2e/test/scenarios/*/{*.(js|ts),!(helpers|shared)/*.(js|ts)}": [
      "node e2e/validate-e2e-test-files.js"
    ],
    "**/*.{clj,cljc,cljs,bb}": [
      "clj-kondo --config ./.clj-kondo/config.edn --config-dir ./.clj-kondo --parallel --lint",
      "./bin/whitespace_lint_staged.sh"
    ]
  },
  "browserslist": [
    "defaults"
  ]
}