{
  "name": "@mdn/yari",
  "version": "5.1.2",
  "repository": "https://github.com/mdn/yari",
  "license": "MPL-2.0",
  "author": "MDN Web Docs",
  "type": "module",
  "bin": {
    "rari-build": "bins/build.mjs",
    "rari-server": "bins/server.mjs",
    "rari-tool": "bins/tool.mjs",
    "yari-build": "build/cli.js",
    "yari-build-blog": "build/build-blog.js",
    "yari-filecheck": "filecheck/cli.js",
    "yari-render-html": "build/ssr-cli.js",
    "yari-server": "server/index.js",
    "yari-tool": "tool/cli.js"
  },
  "scripts": {
    "ai-help-macros": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node scripts/ai-help-macros.ts",
    "analyze": "(test -f client/build/stats.json || cross-env ANALYZE_BUNDLE=true yarn build:client) && webpack-bundle-analyzer client/build/stats.json",
    "build": "node bins/build.mjs",
    "build:client": "cd client && cross-env NODE_ENV=production BABEL_ENV=production node scripts/build.js",
    "build:dist": "tsc -p tsconfig.dist.json",
    "build:glean": "cd client && cross-env VIRTUAL_ENV=venv glean translate src/telemetry/metrics.yaml src/telemetry/pings.yaml -f typescript -o src/telemetry/generated",
    "build:legacy": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node build/cli.ts",
    "build:legacy::curriculum": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node build/build-curriculum.ts",
    "build:legacy::docs": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node build/cli.ts -n",
    "build:legacy:blog": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node build/build-blog.ts",
    "build:legacy:prepare": "yarn build:client && yarn build:ssr && yarn tool:legacy popularities && yarn tool:legacy spas && yarn tool:legacy gather-git-history",
    "build:prepare": "yarn build:client && yarn build:ssr",
    "build:ssr": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node ssr/prepare.ts && webpack --mode=production --config=ssr/webpack.config.js",
    "build:sw": "cd client/pwa && yarn && yarn build:prod",
    "build:sw-dev": "cd client/pwa && yarn && yarn build",
    "check:tsc": "find . -name 'tsconfig.json' ! -wholename '**/node_modules/**' ! -wholename '**/cloud-function/src/internal/**' -print0 | xargs -n1 -P 2 -0 sh -c 'cd `dirname $0` && echo \"🔄 $(pwd)\" && npx tsc --noEmit && echo \"☑️  $(pwd)\" || exit 255'",
    "dev": "yarn build:prepare && nf -j Procfile.rari.dev start",
    "dev:legacy": "yarn build:legacy:prepare && nf -j Procfile.dev start",
    "eslint": "eslint .",
    "filecheck": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node filecheck/cli.ts",
    "install:all": "find . -mindepth 2 -name 'yarn.lock' ! -wholename '**/node_modules/**' -print0 | xargs -n1 -0 sh -cx 'yarn --cwd $(dirname $0) install'",
    "install:all:npm": "find . -mindepth 2 -name 'package-lock.json' ! -wholename '**/node_modules/**' -print0 | xargs -n1 -0 sh -cx 'npm --prefix $(dirname $0) install'",
    "jest": "node --experimental-vm-modules --expose-gc ./node_modules/.bin/jest --logHeapUsage",
    "m2h": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node markdown/m2h/cli.ts",
    "prepack": "yarn render:html && yarn build:dist",
    "prepare": "yarn install:all && yarn install:all:npm",
    "prettier-check": "prettier --check .",
    "prettier-format": "prettier --write .",
    "render:html": "cross-env NODE_ENV=production NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node build/ssr-cli.ts",
    "start": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && cross-env RARI=true nf -j Procfile.rari start",
    "start:client": "cd client && cross-env NODE_ENV=development BABEL_ENV=development PORT=3000 node scripts/start.js",
    "start:legacy": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && (test -f popularities.json || yarn tool:legacy popularities) && (test -d client/build/en-us/404 || yarn tool spas) && (test -d client/build/en-us/404/index.html || yarn render:html -s) && nf -j Procfile.start start",
    "start:rari-external": "(test -f client/build/asset-manifest.json || yarn build:client) && (test -f ssr/dist/main.js || yarn build:ssr) && cross-env RARI=true nf -j Procfile.start start",
    "start:rari-server": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node server/cli.ts",
    "start:server": "node-dev --experimental-loader ts-node/esm server/index.ts",
    "start:static-server": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node server/static.ts",
    "stylelint": "stylelint \"**/*.scss\"",
    "test": "yarn prettier-check && yarn test:client && yarn test:kumascript && yarn test:libs && yarn test:content && yarn test:testing",
    "test:client": "cd client && tsc --noEmit && cross-env NODE_ENV=test BABEL_ENV=test node scripts/test.js --env=jsdom",
    "test:content": "yarn jest --rootDir content",
    "test:developing": "cross-env CONTENT_ROOT=mdn/content/files TESTING_DEVELOPING=true playwright test developing",
    "test:headless": "playwright test headless",
    "test:kumascript": "yarn jest --rootDir kumascript --env=node",
    "test:libs": "yarn jest --rootDir libs --env=node",
    "test:prepare": "yarn build:prepare && yarn build && yarn render:html && yarn start:static-server",
    "test:testing": "yarn jest --rootDir testing",
    "tool": "node bins/tool.mjs",
    "tool:legacy": "cross-env NODE_OPTIONS=\"--no-warnings=ExperimentalWarning --loader ts-node/esm\" node ./tool/cli.ts",
    "watch:ssr": "webpack --mode=production --watch --config=ssr/webpack.config.js"
  },
  "resolutions": {
    "http-cache-semantics": ">=4.1.1",
    "lodash": ">=4.17.15",
    "semver-regex": "^3.1.4"
  },
  "dependencies": {
    "@caporal/core": "^2.0.7",
    "@codemirror/lang-css": "^6.3.1",
    "@codemirror/lang-html": "^6.4.9",
    "@codemirror/lang-javascript": "^6.2.4",
    "@codemirror/lang-wast": "^6.0.2",
    "@codemirror/state": "^6.5.2",
    "@codemirror/theme-one-dark": "^6.1.3",
    "@fast-csv/parse": "^5.0.5",
    "@inquirer/prompts": "^7.8.4",
    "@lit/react": "^1.0.8",
    "@lit/task": "^1.0.3",
    "@mdn/bcd-utils-api": "^0.0.8",
    "@mdn/browser-compat-data": "^6.0.28",
    "@mdn/minimalist": "^2.0.4",
    "@mdn/rari": "^0.1.49",
    "@mdn/watify": "^1.1.3",
    "@mozilla/glean": "5.0.5",
    "@sentry/node": "^8.55.0",
    "@stripe/stripe-js": "^7.9.0",
    "@use-it/interval": "^1.0.0",
    "@webref/css": "^6.17.5",
    "accept-language-parser": "^1.5.0",
    "async": "^3.2.6",
    "chalk": "^5.6.0",
    "cheerio": "1.0.0-rc.12",
    "cli-progress": "^3.12.0",
    "codemirror": "^6.0.2",
    "compression": "^1.8.1",
    "compute-baseline": "^0.3.1",
    "concurrently": "^9.2.1",
    "construct-style-sheets-polyfill": "^3.1.0",
    "cookie": "^0.7.2",
    "cookie-parser": "^1.4.7",
    "cross-spawn": "^7.0.6",
    "css-tree": "^2.3.1",
    "dayjs": "^1.11.18",
    "dexie": "^4.2.0",
    "dotenv": "^17.2.2",
    "ejs": "^3.1.10",
    "express": "^4.21.2",
    "fdir": "^6.5.0",
    "feed": "^4.2.2",
    "file-type": "^21.0.0",
    "front-matter": "^4.0.2",
    "fs-extra": "^11.3.0",
    "he": "^1.2.0",
    "http-proxy-middleware": "^2.0.9",
    "image-size": "^1.2.1",
    "image-type": "^4.1.0",
    "imagemin": "^9.0.1",
    "imagemin-gifsicle": "^7.0.0",
    "imagemin-mozjpeg": "^10.0.0",
    "imagemin-pngquant": "^10.0.0",
    "imagemin-svgo": "^11.0.1",
    "is-svg": "^6.1.0",
    "js-yaml": "^4.1.0",
    "lit": "^3.3.1",
    "loglevel": "^1.9.2",
    "lru-cache": "^10.4.3",
    "md5-file": "^5.0.0",
    "mdast-util-from-markdown": "^2.0.2",
    "mdast-util-phrasing": "^4.1.0",
    "mdn-data": "^2.24.0",
    "open": "^10.2.0",
    "open-editor": "^5.1.0",
    "openai": "^5.18.1",
    "pg": "^8.16.3",
    "pgvector": "^0.2.1",
    "prism-svelte": "^0.5.0",
    "prismjs": "^1.30.0",
    "react-markdown": "^10.1.0",
    "react-modal": "^3.16.3",
    "react-router-dom": "^7.8.2",
    "read-chunk": "^5.0.0",
    "rehype-format": "^5.0.1",
    "rehype-parse": "^9.0.1",
    "rehype-raw": "^7.0.0",
    "rehype-remark": "^10.0.1",
    "rehype-sanitize": "^6.0.0",
    "rehype-stringify": "^10.0.1",
    "remark-gfm": "^4.0.1",
    "remark-parse": "^11.0.0",
    "remark-rehype": "^11.1.2",
    "remark-stringify": "^11.0.0",
    "sanitize-filename": "^1.6.3",
    "send": "^1.2.0",
    "source-map-support": "^0.5.21",
    "sse.js": "^2.7.0",
    "swr": "^2.3.6",
    "tempy": "^3.1.0",
    "unified": "^11.0.5",
    "unist-builder": "^4.0.0",
    "unist-util-visit": "^5.0.0",
    "web-features": "^2.40.2",
    "web-specs": "^3.54.0"
  },
  "devDependencies": {
    "@babel/core": "^7.28.4",
    "@babel/eslint-parser": "^7.28.4",
    "@babel/plugin-proposal-private-property-in-object": "^7.21.11",
    "@babel/preset-env": "^7.28.3",
    "@mdn/dinocons": "^0.5.5",
    "@playwright/test": "^1.52.0",
    "@pmmmwh/react-refresh-webpack-plugin": "^0.6.1",
    "@svgr/webpack": "^8.1.0",
    "@swc/core": "^1.13.5",
    "@testing-library/react": "^15.0.7",
    "@types/async": "^3.2.25",
    "@types/cli-progress": "^3.11.6",
    "@types/he": "^1.2.3",
    "@types/imagemin": "^9.0.1",
    "@types/jest": "^29.5.14",
    "@types/js-yaml": "^4.0.9",
    "@types/mdast": "^4.0.4",
    "@types/node": "^22.16.0",
    "@types/prismjs": "^1.26.5",
    "@types/react": "^18.3.13",
    "@types/react-dom": "^18.3.1",
    "@types/react-modal": "^3.16.3",
    "@types/webpack-bundle-analyzer": "^4.7.0",
    "babel-jest": "^30.1.1",
    "babel-loader": "^10.0.0",
    "babel-plugin-named-asset-import": "^0.3.8",
    "babel-preset-react-app": "^10.1.0",
    "braces": "^3.0.3",
    "browserslist": "^4.25.4",
    "camelcase": "^8.0.0",
    "case-sensitive-paths-webpack-plugin": "^2.4.0",
    "cross-env": "^7.0.3",
    "css-loader": "^7.1.2",
    "css-minimizer-webpack-plugin": "^7.0.2",
    "cssnano": "^7.1.1",
    "diff": "^8.0.2",
    "downshift": "^7.6.1",
    "eslint": "^8.57.1",
    "eslint-config-react-app": "^7.0.1",
    "eslint-gitignore": "^0.1.0",
    "eslint-plugin-flowtype": "^8.0.3",
    "eslint-plugin-import": "^2.32.0",
    "eslint-plugin-jest": "^29.0.1",
    "eslint-plugin-jsx-a11y": "^6.10.2",
    "eslint-plugin-lit": "^1.15.0",
    "eslint-plugin-n": "^17.21.0",
    "eslint-plugin-react": "^7.37.5",
    "eslint-plugin-react-hooks": "^5.2.0",
    "eslint-plugin-unicorn": "^56.0.1",
    "eslint-plugin-wc": "^2.2.1",
    "eslint-webpack-plugin": "^4.2.0",
    "extend": "^3.0.2",
    "file-loader": "^6.2.0",
    "foreman": "^3.0.1",
    "fork-ts-checker-webpack-plugin": "^9.1.0",
    "history": "^5.2.0",
    "html-validate": "^8.28.0",
    "html-webpack-plugin": "^5.6.4",
    "ignore-loader": "^0.1.2",
    "jest": "^29.7.0",
    "jest-environment-jsdom": "^30.1.2",
    "jest-junit-reporter": "^1.1.0",
    "jest-resolve": "^30.1.3",
    "jest-watch-typeahead": "^2.2.2",
    "jsdom": "^26.1.0",
    "lefthook": "^1.12.4",
    "mdast-util-to-hast": "^13.2.0",
    "mini-css-extract-plugin": "^2.9.4",
    "node-dev": "^8.0.0",
    "peggy": "^4.2.0",
    "postcss": "^8.5.6",
    "postcss-flexbugs-fixes": "^5.0.2",
    "postcss-loader": "^8.2.0",
    "postcss-normalize": "^13.0.1",
    "postcss-preset-env": "^10.3.1",
    "prettier": "^3.6.2",
    "prettier-plugin-packagejson": "^2.5.19",
    "prompts": "^2.4.2",
    "react": "^18.3.1",
    "react-app-polyfill": "^3.0.0",
    "react-dom": "^18.3.1",
    "react-refresh": "^0.17",
    "react-router": "^7.6.2",
    "remark-prettier": "^2.0.0",
    "resolve": "^1.22.10",
    "resolve-url-loader": "^5.0.0",
    "rough-notation": "^0.5.1",
    "sass": "^1.92.1",
    "sass-loader": "^16.0.5",
    "source-map-loader": "^5.0.0",
    "style-loader": "^4.0.0",
    "stylelint": "^15.11.0",
    "stylelint-a11y": "^1.2.3",
    "stylelint-config-prettier": "^9.0.5",
    "stylelint-config-recommended-scss": "^13.1.0",
    "stylelint-config-sass-guidelines": "^10.0.0",
    "stylelint-order": "^6.0.4",
    "stylelint-prettier": "^4.1.0",
    "stylelint-scss": "^5.3.2",
    "terser-loader": "^2.0.3",
    "terser-webpack-plugin": "^5.3.14",
    "ts-jest": "^29.2.6",
    "ts-lit-plugin": "^2.0.2",
    "ts-loader": "^9.5.4",
    "ts-node": "^10.9.2",
    "typescript": "^5.9.2",
    "typescript-eslint": "^8.41.0",
    "webpack": "^5.101.3",
    "webpack-bundle-analyzer": "^4.10.2",
    "webpack-cli": "^6.0.1",
    "webpack-dev-server": "^5.2.2",
    "webpack-manifest-plugin": "^5.0.1",
    "webpack-node-externals": "^3.0.0"
  },
  "engines": {
    "node": ">=22"
  }
}
