{ "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", "clipboardy": "^4.0.0", "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", "csv-stringify": "^6.5.0", "d3": "^7.9.0", "d3-scale": "^4.0.2", "dayjs": "^1.10.4", "detect-package-manager": "^3.0.2", "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-pro": "^1.5.0", "humanize-plus": "^1.8.1", "icepick": "2.4.0", "iframe-resizer": "^4.3.2", "immer": "^9.0.17", "inflection": "^1.7.1", "inquirer-toggle": "^1.0.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", "ora": "^8.0.1", "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.5.1", "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.24.8", "@babel/preset-react": "^7.23.3", "@babel/preset-typescript": "^7.24.7", "@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", "@inquirer/prompts": "^5.3.8", "@loki/create-async-callback": "^0.35.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.10", "@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-interactions": "^6.5.16", "@storybook/addon-links": "6.5.16", "@storybook/blocks": "^7.0.18", "@storybook/builder-webpack5": "6.5.16", "@storybook/jest": "^0.2.3", "@storybook/manager-webpack5": "6.5.16", "@storybook/react": "6.5.16", "@storybook/testing-library": "^0.2.2", "@svgr/webpack": "^8.0.1", "@swc/core": "^1.7.0", "@swc/plugin-emotion": "^3.0.10", "@testing-library/cypress": "^10.0.2", "@testing-library/jest-dom": "^6.4.8", "@testing-library/react": "^16.0.0", "@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/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/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-loader": "^9.1.2", "babel-plugin-ttag": "^1.7.26", "chalk": "^4", "chromatic": "^10.2.0", "commander": "^12.1.0", "concurrently": "^8.2.2", "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", "cypress-terminal-report": "^6.1.2", "esbuild": "^0.21.1", "eslint": "7.32.0", "eslint-import-resolver-webpack": "^0.8.3", "eslint-plugin-cypress": "^2.12.1", "eslint-plugin-depend": "^0.9.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jest": "^27.2.0", "eslint-plugin-jest-dom": "^5.4.0", "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", "fetch-mock-jest": "^1.5.1", "fork-ts-checker-webpack-plugin": "^9.0.2", "get-nonce": "^1.0.1", "glob": "^7.1.1", "html-webpack-plugin": "5.5.0", "http-server": "^14.1.1", "husky": "^8.0.2", "inquirer-file-selector": "^0.2.1", "jest": "^29.7.0", "jest-canvas-mock": "^2.5.2", "jest-environment-jsdom": "^29.7.0", "jest-junit": "^16.0.0", "jest-localstorage-mock": "^2.4.22", "jest-watch-typeahead": "^2.2.1", "jose": "^5.6.3", "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-styled-syntax": "^0.6.4", "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", "semver": "^7.6.3", "shadow-cljs": "^2.28.12", "source-map-loader": "^4.0.1", "storybook-addon-pseudo-states": "^3.1.1", "stylelint": "^16.2.1", "stylelint-config-css-modules": "^4.4.0", "stylelint-config-standard": "^36.0.0", "swc-loader": "^0.2.6", "terser-webpack-plugin": "^5.3.9", "webpack": "^5.93.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", "yarn-deduplicate": "^6.0.2" }, "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 embedding-sdk:generate-package && yarn build-release:sdk && yarn build-embedding-sdk-cli && 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-embedding-sdk-cli": "webpack --config webpack.embedding-sdk-cli.config.js", "build-embedding-sdk-cli:watch": "yarn build-embedding-sdk-cli --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 clean-release:cljs && shadow-cljs release app", "build-release:js": "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-release:static-viz": "WEBPACK_BUNDLE=production webpack --config webpack.static-viz.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-storybook-embedding-sdk": "NODE_OPTIONS=--max-old-space-size=8196 IS_EMBEDDING_SDK=true build-storybook --quiet", "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-dev: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-dev: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": "yarn yarn-deduplicate --scopes @babel && 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", "storybook-embedding-sdk": "yarn build:cljs && IS_EMBEDDING_SDK=true start-storybook -p 6006", "test": "yarn test-unit && yarn test-timezones && yarn test-cypress", "test-cljs": "yarn && shadow-cljs compile test", "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-open-sdk": "CYPRESS_IS_EMBEDDING_SDK=true yarn test-cypress-open --e2e --open --folder 'embedding-sdk'", "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-approve-diff": "ls .loki/difference | xargs -I _ find .loki/current -name _ | xargs -I _ cp _ .loki/reference/", "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)/**/*.styled.tsx": [ "stylelint --customSyntax postcss-styled-syntax --fix" ], "+(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" ] }