{ "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": "^7.0.2", "@emotion/react": "^11.7.1", "@emotion/styled": "^11.6.0", "@mantine/core": "^6.0.13", "@mantine/hooks": "^6.0.13", "@react-oauth/google": "^0.4.0", "@reduxjs/toolkit": "^1.9.3", "@snowplow/browser-tracker": "^3.1.6", "@tippyjs/react": "^4.2.6", "@visx/axis": "1.8.0", "@visx/clip-path": "^2.1.0", "@visx/event": "^2.6.0", "@visx/grid": "1.16.0", "@visx/group": "1.7.0", "@visx/legend": "^2.10.0", "@visx/mock-data": "^2.1.2", "@visx/responsive": "^2.10.0", "@visx/scale": "1.7.0", "@visx/shape": "2.12.2", "@visx/text": "1.7.0", "@visx/tooltip": "^2.10.0", "ace-builds": "^1.4.13", "classlist-polyfill": "^1.2.0", "classnames": "^2.1.3", "color": "^3.0.0", "color-harmony": "^0.3.0", "crc-32": "^1.2.2", "cron-expression-validator": "^1.0.20", "cronstrue": "^2.11.0", "crossfilter": "^1.3.12", "d3": "^3.5.17", "d3-array": "^3.1.1", "d3-scale": "^3.3.0", "d3-shape": "^3.1.0", "d3-time-format": "^4.1.0", "dc": "2.1.9", "diff": "^3.2.0", "formik": "^2.2.9", "history": "3", "html2canvas": "^1.4.1", "humanize-plus": "^1.8.1", "icepick": "2.4.0", "iframe-resizer": "^4.3.2", "inflection": "^1.7.1", "js-cookie": "^2.1.2", "jspdf": "^2.5.1", "jsrsasign": "^10.5.25", "leaflet": "^1.2.0", "leaflet-draw": "^0.4.9", "leaflet.heat": "^0.2.0", "lodash.debounce": "^4.0.8", "moment-timezone": "^0.5.38", "mustache": "^2.3.2", "mysql2": "^3.1.0", "normalizr": "^3.0.2", "number-to-locale-string": "^1.0.1", "password-generator": "^2.0.1", "prop-types": "^15.5.7", "re-reselect": "^4.0.1", "react": "~16.14.0", "react-ace": "^9.5.0", "react-ansi-style": "^1.0.0", "react-beautiful-dnd": "^13.1.1", "react-collapse": "^4.0.3", "react-color": "^2.14.1", "react-copy-to-clipboard": "^5.0.1", "react-dnd": "3", "react-dnd-html5-backend": "3", "react-dom": "~16.14.0", "react-draggable": "^3.3.2", "react-dropzone": "^14.2.3", "react-element-to-jsx-string": "^13.1.0", "react-grid-layout": "^1.2.5", "react-is": "^17.0.2", "react-markdown": "^8.0.4", "react-motion": "0.5.2", "react-redux": "^8.0.5", "react-resizable": "^3.0.5", "react-router": "3", "react-router-redux": "^4.0.8", "react-sortable-hoc": "^1.11.0", "react-textarea-autosize": "^5.2.1", "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": "^1.0.0", "redux-promise": "^0.5.0", "redux-router": "^2.1.2", "regenerator": "^0.14.1", "rehype-external-links": "^2.0.1", "remark-gfm": "1.0.0", "screenfull": "^4.2.1", "server-text-width": "^1.0.2", "simple-statistics": "^3.0.0", "slugg": "^1.2.1", "tether": "^1.2.0", "tippy.js": "^6.3.5", "ttag": "1.7.15", "underscore": "~1.13.3", "yarn.lock": "^0.0.1-security", "yup": "^0.32.11", "z-index": "0.0.1" }, "devDependencies": { "@babel/cli": "^7.14.5", "@babel/core": "^7.14.6", "@babel/node": "^7.14.7", "@babel/preset-env": "^7.14.7", "@babel/preset-react": "^7.14.5", "@babel/preset-typescript": "^7.17.12", "@bahmutov/cypress-esbuild-preprocessor": "^2.2.0", "@cypress/grep": "^3.1.0", "@cypress/skip-test": "^2.6.1", "@deploysentinel/cypress-debugger": "^0.8.1", "@emotion/babel-plugin": "^11.7.2", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "@percy/cli": "^1.23.0", "@percy/cypress": "^3.1.2", "@pmmmwh/react-refresh-webpack-plugin": "0.5.10", "@replayio/cypress": "^1.0.1", "@sinonjs/fake-timers": "^9.1.2", "@storybook/addon-a11y": "^6.5.16", "@storybook/addon-actions": "6.5.15", "@storybook/addon-essentials": "6.5.15", "@storybook/addon-links": "6.5.15", "@storybook/blocks": "^7.0.18", "@storybook/builder-webpack5": "6.5.15", "@storybook/client-api": "6.5.15", "@storybook/manager-webpack5": "6.5.15", "@storybook/react": "6.5.15", "@svgr/webpack": "^8.0.1", "@testing-library/cypress": "^9.0.0", "@testing-library/dom": "^7.29.0", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^11.0.2", "@testing-library/react-hooks": "^8.0.0", "@testing-library/user-event": "^13.1.3", "@types/babel__core": "^7.1.16", "@types/babel__preset-env": "^7.9.2", "@types/color": "^3.0.2", "@types/concurrently": "^6.3.0", "@types/crossfilter": "^0.0.34", "@types/d3": "^3.5.46", "@types/d3-array": "^3.0.3", "@types/d3-scale": "^4.0.2", "@types/d3-shape": "^3.1.0", "@types/d3-time": "^3.0.0", "@types/d3-time-format": "^4.0.0", "@types/dc": "0.0.29", "@types/diff": "^3.5.4", "@types/eslint": "7.29.0", "@types/glob": "^7.1.4", "@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": "^8.0.13", "@types/leaflet": "^1.7.5", "@types/leaflet-draw": "^0.4.14", "@types/leaflet.heat": "^0.2.1", "@types/mockdate": "^3.0.0", "@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": "~16.14.17", "@types/react-beautiful-dnd": "^13.1.3", "@types/react-collapse": "^5.0.1", "@types/react-color": "^2.17.6", "@types/react-copy-to-clipboard": "^5.0.2", "@types/react-dom": "~17.0.9", "@types/react-grid-layout": "^1.1.3", "@types/react-is": "^17.0.3", "@types/react-motion": "0.0.32", "@types/react-redux": "^7.1.24", "@types/react-resizable": "^3.0.4", "@types/react-router": "3.0.28", "@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.2", "@types/redux-auth-wrapper": "^1.0.7", "@types/redux-logger": "^3.0.9", "@types/redux-promise": "^0.5.29", "@types/redux-router": "^1.0.45", "@types/testing-library__jest-dom": "^5.14.5", "@types/tether": "^1.4.6", "@types/underscore": "^1.11.3", "@typescript-eslint/eslint-plugin": "^5.27.0", "@typescript-eslint/parser": "^5.27.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": "^6.3.3", "concurrently": "^7.6.0", "cross-fetch": "^3.1.5", "css-loader": "1.0.1", "cy-verify-downloads": "^0.1.12", "cypress": "^12.8.1", "cypress-real-events": "^1.7.6", "esbuild": "^0.17.9", "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.22.0", "eslint-plugin-jest": "^27.2.0", "eslint-plugin-jest-dom": "^4.0.3", "eslint-plugin-no-only-tests": "^2.4.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", "glob": "^7.1.1", "html-webpack-harddisk-plugin": "^2.0.0", "html-webpack-plugin": "5.5.0", "husky": "^8.0.2", "jest": "^29.5.0", "jest-canvas-mock": "^2.4.0", "jest-environment-jsdom": "^29.5.0", "jest-localstorage-mock": "^2.4.22", "jest-watch-typeahead": "^2.2.1", "jsonwebtoken": "^9.0.0", "knex": "^2.4.2", "lint-staged": "^13.1.2", "markdown-link-check": "^3.10.2", "mini-css-extract-plugin": "2.7.2", "mochawesome": "^7.1.3", "mochawesome-merge": "^4.2.1", "mochawesome-report-generator": "^6.2.0", "mockdate": "^2.0.2", "mutationobserver-shim": "^0.3.7", "node-polyfill-webpack-plugin": "2.0.1", "pg": "^8.8.0", "postcss": "8.4.19", "postcss-color-mod-function": "^3.0.3", "postcss-import": "15.1.0", "postcss-loader": "7.0.2", "postcss-preset-env": "^6.7.0", "postcss-url": "^10.1.3", "prettier": "^2.7.1", "promise-loader": "^1.0.0", "raf": "^3.4.0", "react-refresh": "^0.13.0", "shadow-cljs": "2.24.0", "source-map-loader": "^4.0.1", "style-loader": "3.3.1", "typescript": "^4.7.2", "webpack": "^5.85.0", "webpack-cli": "^5.1.1", "webpack-dev-server": "^4.15.0", "webpack-notifier": "1.15.0", "xlsx": "^0.18.5", "yaml-lint": "~1.6.0" }, "resolutions": { "ansi-regex": "5.0.1", "set-value": "4.0.1", "ansi-html": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", "unset-value": "2.0.1", "nth-check": "2.0.1", "json5": "2.2.2" }, "scripts": { "concurrently": "yarn && concurrently --kill-others -p name", "dev": "yarn && yarn clean:cljs && yarn build:cljs && concurrently -n 'backend,frontend,cljs,static-viz' -c 'blue,green,yellow,magenta,red' 'clojure -M:run' 'yarn build-hot:js' 'yarn build-hot:cljs' 'yarn build-static-viz:watch'", "dev-ee": "yarn && yarn clean:cljs && yarn build: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' 'MB_EDITION=ee yarn build-hot:cljs' 'yarn build-static-viz:watch'", "type-check": "yarn clean:cljs && yarn build:cljs && tsc --noEmit", "remove-webpack-cache": "rm -rf ./node_modules/.cache", "lint": "yarn lint-eslint && yarn lint-prettier && yarn lint-docs-links && yarn lint-yaml && yarn type-check", "lint-eslint": "yarn build:cljs && eslint --ext .js,.jsx,.ts,.tsx --rulesdir frontend/lint/eslint-rules --max-warnings 0 --report-unused-disable-directives enterprise/frontend/src frontend/src frontend/test e2e/test", "lint-prettier": "yarn && prettier -l '{enterprise/,}frontend/**/*.{js,jsx,ts,tsx,css}' || (echo '\nThese files are not formatted correctly. Did you forget to \"yarn prettier\"?' && false)", "lint-docs-links": "yarn && ./bin/verify-doc-links", "lint-yaml": "yamllint **/*.{yaml,yml} --ignore=node_modules/**/*.{yaml,yml}", "test": "yarn test-unit && yarn test-timezones && yarn test-cypress", "test-debug": "yarn build:cljs && node --inspect-brk node_modules/.bin/jest --runInBand --detectOpenHandles --config jest.unit.conf.json", "test-unit": "yarn build:cljs && jest --maxWorkers=2 --config jest.unit.conf.json", "test-unit-keep-cljs": "jest --maxWorkers=2 --config jest.unit.conf.json", "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-timezones-unit": "yarn build:cljs && jest --silent --maxWorkers=2 --config jest.tz.unit.conf.json", "test-timezones": "yarn && ./frontend/test/__runner__/run_timezone_tests", "build:js": "yarn && NODE_OPTIONS=--max-old-space-size=8196 webpack --bail", "build-watch:js": "yarn && NODE_OPTIONS=--max-old-space-size=8196 webpack --watch", "build-hot:js": "yarn && NODE_OPTIONS=--max-old-space-size=8196 WEBPACK_BUNDLE=hot webpack serve --host 0.0.0.0", "build-release:js": "yarn && WEBPACK_BUNDLE=production NODE_OPTIONS=--max-old-space-size=8196 webpack --bail", "build-release:cljs": "yarn && yarn clean-release:cljs && shadow-cljs release app", "build:cljs": "yarn && yarn clean-dev:cljs && shadow-cljs compile app", "build-watch:cljs": "yarn && shadow-cljs watch app", "build-hot:cljs": "yarn && shadow-cljs watch app", "cljs-server-start": "yarn && shadow-cljs start", "cljs-server-stop": "yarn && shadow-cljs stop", "cljs-server-restart": "yarn && shadow-cljs restart", "cljs-nrepl": "yarn && shadow-cljs node-repl -d cider/cider-nrepl:0.30.0 -d cider/piggieback:0.5.3 -d refactor-nrepl/refactor-nrepl:3.6.0", "test-cljs": "yarn && shadow-cljs compile test && node target/node-tests.js", "build": "yarn build:cljs && yarn build:js", "build-watch": "yarn concurrently -n 'cljs,js' 'yarn build-watch:cljs' 'yarn build-watch:js'", "build-hot": "yarn concurrently -n 'cljs,js' 'yarn build-hot:cljs' 'yarn build-hot:js'", "build-release": "yarn build-release:cljs && yarn build-release:js", "build-stats": "yarn && webpack --json > stats.json", "build-shared": "yarn && webpack --config webpack.shared.config.js", "build-static-viz": "yarn && yarn build-release:cljs && webpack --config webpack.static-viz.config.js", "build-static-viz:watch": "webpack --config webpack.static-viz.config.js --watch", "precommit": "lint-staged", "preinstall": "echo $npm_execpath | grep -q yarn || echo '\\033[0;33mSorry, npm is not supported. Please use Yarn (https://yarnpkg.com/).\\033[0m'", "prettier": "prettier --write '{enterprise/,}frontend/**/*.{js,jsx,ts,tsx,css}'", "eslint-fix": "yarn lint-eslint --fix", "ci": "yarn ci-frontend && yarn ci-backend", "ci-frontend": "yarn lint && yarn test", "ci-backend": "clojure -X:dev:ee:ee-dev:drivers:drivers-dev:eastwood && clojure -X:dev:test", "test-cypress-run": "node ./e2e/runner/run_cypress_tests.js", "test-cypress-open": "./bin/build-for-test && 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-open-no-backend": "E2E_HOST='http://localhost:3000' yarn test-cypress-run --e2e --open", "test-cypress": "yarn build && ./bin/build-for-test && yarn test-cypress-run", "test-qa-dbs:up": "docker-compose -f ./e2e/test/scenarios/docker-compose.yml up -d", "test-qa-dbs:down": "docker-compose -f ./e2e/test/scenarios/docker-compose.yml down", "validate-e2e-filenames": "node e2e/validate-e2e-test-files.js", "clean:cljs": "yarn && yarn clean-dev:cljs && yarn clean-release:cljs", "clean-dev:cljs": "rm -rf frontend/src/cljs/*", "clean-release:cljs": "rm -rf frontend/src/cljs_release/*", "clean-cypress-artifacts": "rm -R -f cypress/", "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", "test-visual-run": "percy exec -- yarn test-cypress-run --spec \"./e2e/test/visual/**/*.cy.spec.js\"", "test-visual-open": "percy exec -- yarn test-cypress-open", "test-visual": "yarn build && ./bin/build-for-test && yarn test-visual-run", "prepare": "husky install", "storybook": "yarn build:cljs && start-storybook -p 6006", "build-storybook": "yarn build:cljs && NODE_OPTIONS=--max-old-space-size=8196 build-storybook", "chromatic": "yarn build:cljs && NODE_OPTIONS=--max-old-space-size=8196 chromatic", "docs-lint-links": "find docs -type f -name '*.md' -print0 | xargs -0 markdown-link-check --quiet --config .mlc_config.json" }, "lint-staged": { "+(enterprise|frontend)/**/*.css": [ "prettier --write" ], "+(enterprise|frontend)/**/*.{js,jsx,ts,tsx}": [ "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,!(helpers|shared)/*.js}": [ "eslint --rulesdir frontend/lint/eslint-rules --max-warnings 0 --fix", "node e2e/validate-e2e-test-files.js" ] }, "browserslist": [ "defaults" ] }