Skip to content
Snippets Groups Projects
  • Braden Shepherdson's avatar
    21a70290
    Fix `yarn dev-ee` with new CLJS setup (#34319) · 21a70290
    Braden Shepherdson authored
    `yarn dev` had been adjusted to use `build-hot:js-wait` (which waits for the first CLJS compilation to be done), but `yarn dev-ee` had not been changed, so its JS compilation ran too early, failed, and never re-ran.
    
    We actually had this broken behavior (JS build runs too early, CLJS build completes, JS build fails, JS build notices new inputs and re-runs) for a long time. But since it fixed itself when the JS build re-ran, it didn't cause any issues. Now that the JS build no longer watches the CLJS output for changes, the CLJS output needs to be there for the first JS build.
    Fix `yarn dev-ee` with new CLJS setup (#34319)
    Braden Shepherdson authored
    `yarn dev` had been adjusted to use `build-hot:js-wait` (which waits for the first CLJS compilation to be done), but `yarn dev-ee` had not been changed, so its JS compilation ran too early, failed, and never re-ran.
    
    We actually had this broken behavior (JS build runs too early, CLJS build completes, JS build fails, JS build notices new inputs and re-runs) for a long time. But since it fixed itself when the JS build re-ran, it didn't cause any issues. Now that the JS build no longer watches the CLJS output for changes, the CLJS output needs to be there for the first JS build.
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 16.23 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": "^7.0.2",
    "@emotion/cache": "^11.7.1",
    "@emotion/is-prop-valid": "^1.1.1",
    "@emotion/react": "^11.7.1",
    "@emotion/styled": "^11.6.0",
    "@mantine/core": "^6.0.13",
    "@mantine/hooks": "^6.0.13",
    "@react-oauth/google": "^0.11.1",
    "@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",
    "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",
    "immer": "^9.0.17",
    "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-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",
    "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.21",
    "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.8",
    "@emotion/babel-plugin": "^11.7.2",
    "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
    "@percy/cli": "^1.27.2",
    "@percy/cypress": "^3.1.2",
    "@pmmmwh/react-refresh-webpack-plugin": "0.5.10",
    "@replayio/cypress": "^1.0.5",
    "@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/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/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",
    "json-to-pretty-yaml": "^1.2.2",
    "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.25.7",
    "source-map-loader": "^4.0.1",
    "terser-webpack-plugin": "^5.3.9",
    "typescript": "^4.7.2",
    "webpack": "^5.85.0",
    "webpack-cli": "^5.1.1",
    "webpack-dev-server": "^4.15.0",
    "webpack-notifier": "1.15.0",
    "webpack-stats-plugin": "^1.1.3",
    "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",
    "jsdom": "^22.1.0",
    "json5": "2.2.2"
  },
  "scripts": {
    "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'",
    "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",
    "test-unit": "yarn build:cljs && jest --maxWorkers=2",
    "test-unit-keep-cljs": "jest --maxWorkers=2",
    "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-hot:js-wait": "yarn wait:cljs; yarn build-hot:js",
    "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",
    "wait:cljs": "echo Waiting for first CLJS build; until [ -f target/cljs_dev/cljs.core.js ]; do sleep 1; done; echo CLJS build done",
    "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": "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-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_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",
    "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 target/cljs_dev/*",
    "clean-release:cljs": "rm -rf target/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"
  ]
}