{ "name": "mozilla-addons-frontend", "version": "0.35.0", "description": "Universal front-end projects to complement addons-server.", "main": "index.js", "private": true, "engines": { "node": ">=18.18" }, "scripts": { "build": "npm run clean && better-npm-run build", "build:blog-utils": "npm run clean && bin/create-package-json-for-blog-utils && bin/create-readme-for-blog-utils && better-npm-run build:blog-utils", "build:blog-utils-dev": "NODE_ENV=development concurrently 'npm run build:blog-utils -- --watch' 'bin/serve-blog-utils'", "build:blog-utils-prod": "NODE_ENV=production npm run build:blog-utils", "build-check": "bin/build-checks.js", "build-ci": "node --version && npm run build && npm run bundlewatch", "build-locales": "bin/build-locales", "bundlewatch": "bundlewatch", "extract-locales": "better-npm-run extract-locales", "clean": "rimraf -g './dist/*!(.gitkeep)' './webpack-assets.json' './src/locale/**(!.gitkeep)'", "amo:dev": "better-npm-run amo:dev", "amo:dev-https": "better-npm-run amo:dev-https", "amo:olympia": "better-npm-run amo:olympia", "amo:stage": "better-npm-run amo:stage", "amo:ui-tests": "npm run amo:olympia", "eslint": "eslint .", "flow": "flow", "flow:check": "flow check", "flow:dev": "flow stop; flow start; chokidar .flowconfig flow/ stories/ src/ tests/ -i flow/logs/flow.log -c 'flow status' --initial", "stylelint": "stylelint **/*.scss", "lint": "npm run eslint && npm run stylelint", "prettier": "prettier --write '**'", "prettier-ci": "prettier --list-different '**' || (echo '\n\nThis failure means you did not run `yarn prettier-dev` before committing\n\n' && exit 1)", "prettier-dev": "pretty-quick --branch master", "start": "npm run version-check && better-npm-run --silent node bin/server.js | node bin/pino-mozlog.js", "start-func-test-server": "better-npm-run node bin/start-func-test-server.js", "test-ci": "bin/config-check.js && npm run build-locales && better-npm-run test-ci", "test-ci-next": "bin/config-check.js && npm run build-locales && better-npm-run test-ci-next", "test": "bin/config-check.js && better-npm-run jest --watch", "test-debug": "bin/config-check.js && better-npm-run jest-debug --watch", "test-coverage": "bin/config-check.js && better-npm-run jest --coverage --watch", "test-coverage-once": "bin/config-check.js && better-npm-run jest --coverage", "test-once": "bin/config-check.js && better-npm-run jest && npm run lint", "version-check": "bin/version-check.js", "webpack-dev-server": "npm run build-locales && better-npm-run webpack-dev-server", "check-fonts": "./bin/regenerate_font.js src/fonts/woff2/Inter-roman.var.woff2 && ./bin/regenerate_font.js src/fonts/woff2/Inter-roman-subset-en_de_fr_ru_es_pt_pl_it.var.woff2 && git diff --quiet HEAD src/fonts/ || (echo '\n\n Did you manually alter font files that should be generated automatically ? See docs/fonts.md for details. This check found the following differences:\n\n' && git --no-pager diff src/fonts && exit 1)" }, "betterScripts": { "build": { "command": "npm run build-check && npm run version-check && npm run build-locales && webpack --progress --color --config webpack.prod.config.babel.js", "env": { "NODE_ICU_DATA": "./node_modules/full-icu", "NODE_PATH": "./:./src" } }, "build:blog-utils": { "command": "webpack --config webpack.blog-utils.config.babel.js", "env": { "NODE_ICU_DATA": "./node_modules/full-icu", "NODE_PATH": "./:./src", "NODE_CONFIG_ENV": "prod" } }, "amo:olympia": { "command": "better-npm-run start-dev-proxy", "env": { "NODE_APP_INSTANCE": "local", "WEBPACK_SERVER_HOST": "olympia.test" } }, "amo:dev": { "command": "better-npm-run start-dev-proxy", "env": { "PROXY_API_HOST": "https://addons-dev.allizom.org" } }, "amo:dev-https": { "command": "better-npm-run amo:dev", "env": { "API_HOST": "https://example.com:3000", "SERVER_HOST": "example.com", "USE_HTTPS_FOR_DEV": "true", "WEBPACK_SERVER_HOST": "example.com" } }, "amo:stage": { "command": "better-npm-run start-dev-proxy", "env": { "PROXY_API_HOST": "https://addons.allizom.org", "FXA_CONFIG": "local", "CSP": false } }, "extract-locales": { "command": "zx ./bin/extract-locales", "env": { "NODE_ENV": "production", "NODE_ICU_DATA": "./node_modules/full-icu", "NODE_PATH": "./:./src" } }, "start-dev": { "command": "npm run clean && concurrently 'npm run webpack-dev-server' 'nodemon bin/server.js | pino-devtools --mode buffer --tee | pino-pretty'", "env": { "NODE_ENV": "development", "NODE_ICU_DATA": "./node_modules/full-icu", "NODE_PATH": "./:./src" } }, "start-dev-proxy": { "command": "npm run clean && concurrently -c 'dim' 'npm run webpack-dev-server' 'nodemon bin/server.js | pino-devtools --mode buffer --tee | pino-pretty' 'node bin/proxy.js | pino-pretty'", "env": { "NODE_ENV": "development", "NODE_ICU_DATA": "./node_modules/full-icu", "NODE_PATH": "./:./src" } }, "node": { "command": "node", "env": { "NODE_ICU_DATA": "./node_modules/full-icu", "NODE_PATH": "./:./src" } }, "jest": { "command": "jest", "env": { "NODE_ICU_DATA": "./node_modules/full-icu" } }, "jest-debug": { "command": "jest", "env": { "NODE_ICU_DATA": "./node_modules/full-icu", "TEST_DEBUG": "FULL" } }, "test-ci": { "command": "npm run version-check && npm run flow:check && bin/config-check.js && better-npm-run jest --color=false --coverage --maxWorkers=2 --workerIdleMemoryLimit=1G", "env": { "NODE_ICU_DATA": "./node_modules/full-icu", "NODE_PATH": "./:./src", "NODE_ENV": "test", "NO_FLOW": "1", "NO_ESLINT": "1" } }, "test-ci-next": { "command": "npm run version-check && npm run flow:check && bin/config-check.js && better-npm-run jest --color=false --coverage --maxWorkers=2 --workerIdleMemoryLimit=1G", "env": { "NODE_ICU_DATA": "./node_modules/full-icu", "NODE_PATH": "./:./src", "NODE_ENV": "test", "NO_FLOW": "1", "NO_ESLINT": "1" } }, "webpack-dev-server": { "command": "node bin/webpack-dev-server.js", "env": { "NODE_ENV": "development", "NODE_ICU_DATA": "./node_modules/full-icu", "NODE_PATH": "./:./src" } } }, "repository": { "type": "git", "url": "git+https://github.com/mozilla/addons-frontend.git" }, "author": "Mozilla Add-ons Team", "license": "MPL-2.0", "bugs": { "url": "https://github.com/mozilla/addons-frontend/issues" }, "homepage": "https://github.com/mozilla/addons-frontend#readme", "dependencies": { "@mozilla-protocol/tokens": "5.0.5", "@reduxjs/toolkit": "1.9.7", "@willdurand/isomorphic-formdata": "2.2.0", "addons-moz-compare": "1.3.0", "base62": "2.0.2", "better-npm-run": "0.1.1", "chokidar": "3.6.0", "classnames": "2.5.1", "common-tags": "1.8.2", "compression": "1.7.4", "config": "3.3.12", "core-js": "3.37.1", "deep-eql": "4.1.3", "deepcopy": "2.1.0", "dompurify": "3.1.6", "express": "4.21.0", "express-http-context": "1.2.4", "filesize": "10.1.4", "focus-visible": "5.2.0", "fs-extra": "11.2.0", "full-icu": "1.5.0", "helmet": "7.1.0", "history": "4.10.1", "hot-shots": "10.0.0", "invariant": "2.2.4", "isomorphic-fetch": "3.0.0", "jed": "1.1.1", "join-url": "2.0.0", "jsdom": "24.1.0", "localforage": "1.10.0", "lodash.debounce": "4.0.8", "minimist": "1.2.8", "moment": "2.30.1", "nano-time": "1.0.0", "normalize.css": "8.0.1", "photon-colors": "3.3.2", "photoswipe": "4.1.3", "pino": "8.19.0", "pino-syslog": "3.1.0", "prop-types": "15.8.1", "pump": "3.0.0", "qhistory": "1.1.0", "qs": "6.12.3", "rc-tooltip": "5.2.2", "react": "18.3.1", "react-autosuggest": "10.1.0", "react-cookie": "4.1.1", "react-dom": "18.3.1", "react-helmet": "6.1.0", "react-keydown": "1.9.12", "react-nested-status": "0.2.1", "react-onclickoutside": "6.13.1", "react-photoswipe-gallery": "1.3.10", "react-redux": "8.1.3", "react-router": "5.3.4", "react-router-dom": "5.3.4", "react-super-responsive-table": "5.2.3", "react-textarea-autosize": "8.5.3", "react-transition-group": "4.4.5", "readable-stream": "4.5.2", "redux": "4.2.1", "redux-first-history": "5.2.0", "redux-logger": "3.0.6", "redux-saga": "1.3.0", "response-time": "2.3.2", "schema-utils": "4.2.0", "serialize-javascript": "6.0.2", "split2": "4.2.0", "touch": "3.1.1", "ua-parser-js": "1.0.38", "universal-base64url": "1.1.0", "universal-cookie-express": "4.0.3", "url": "0.11.3", "uuid": "9.0.1", "web-vitals": "3.5.2", "webpack-isomorphic-tools": "4.0.0" }, "devDependencies": { "@babel/cli": "^7.23.4", "@babel/core": "^7.24.7", "@babel/eslint-parser": "^7.24.7", "@babel/preset-env": "^7.24.7", "@babel/preset-flow": "^7.24.7", "@babel/preset-react": "^7.24.7", "@babel/register": "^7.24.6", "@emotion/core": "^11.0.0", "@testing-library/jest-dom": "^6.4.6", "@testing-library/react": "^14.2.2", "@testing-library/user-event": "^14.5.2", "autoprefixer": "^10.4.19", "babel-gettext-extractor": "https://github.com/willdurand/babel-gettext-extractor#5.1.0", "babel-loader": "^9.1.3", "babel-plugin-dynamic-import-node": "^2.2.0", "bundlewatch": "^0.3.3", "chalk": "^4.0.0", "characterset": "^2.0.0", "cheerio": "^1.0.0-rc.2", "chokidar-cli": "^3.0.0", "circular-dependency-plugin": "^5.0.0", "concurrently": "^8.2.2", "content-security-policy-parser": "^0.4.0", "cookie": "^0.6.0", "css-loader": "^6.10.0", "css-minimizer-webpack-plugin": "^6.0.0", "eslint": "^8.57.0", "eslint-config-amo": "^5.10.0", "eslint-plugin-amo": "^1.25.2", "eslint-plugin-promise": "^6.2.0", "eslint-plugin-react": "^7.34.3", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-testing-library": "^6.2.2", "file-loader": "^6.0.0", "flow-bin": "^0.187.0", "glob": "^10.4.2", "html-webpack-plugin": "5.6.0", "http-proxy": "^1.16.2", "intl": "^1.2.5", "intl-locales-supported": "^1.0.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "jest-extended": "^4.0.2", "jest-json-schema": "^6.1.0", "jest-watch-typeahead": "^2.2.2", "mini-css-extract-plugin": "^2.9.0", "mock-express-request": "^0.2.0", "mock-express-response": "^0.3.0", "node-fetch": "^3.3.2", "node-sass": "^9.0.0", "nodemon": "^3.1.4", "pino-devtools": "^2.8.0", "pino-pretty": "^11.2.1", "po2json": "mikeedwards/po2json#51e2310485bbe35e9e57f2eee238185459ca0eab", "postcss": "^8.4.39", "postcss-loader": "^8.1.1", "prettier": "2.8.8", "pretty-quick": "3.3.1", "react-hot-loader": "^4.13.1", "redux-saga-tester": "^1.0.372", "rimraf": "^5.0.7", "sass-loader": "^14.2.1", "semver": "^7.6.3", "shelljs": "^0.8.0", "sinon": "^15.1.0", "style-loader": "^3.3.4", "stylelint": "^15.10.3", "stylelint-config-standard-scss": "^11.1.0", "supertest": "^6.3.4", "terser-webpack-plugin": "^5.3.10", "tmp": "^0.2.3", "tosource": "^1.0.0", "url-loader": "^4.1.1", "webpack": "^5.92.1", "webpack-cli": "^4.0.0", "webpack-dev-middleware": "^6.1.2", "webpack-hot-middleware": "^2.26.1", "webpack-subresource-integrity": "5.1.0", "zx": "^8.1.4" }, "bundlewatch": [ { "path": "./dist/static/amo-!(i18n-)*.js", "maxSize": "368 kB" }, { "path": "./dist/static/amo-i18n-*.js", "maxSize": "31 kB" }, { "path": "./dist/static/amo-*.css", "maxSize": "32 kB" } ], "packageManager": "yarn@1.22.19" }