{ "name": "docs.github.com", "private": true, "repository": "https://github.com/github/docs", "license": "(MIT AND CC-BY-4.0)", "author": { "name": "GitHub", "email": "opensource+docs@github.com", "url": "https://github.com/github/docs" }, "type": "module", "imports": { "#src/*": { "default": "./src/*" } }, "exports": "./src/frame/server.js", "scripts": { "analyze-text": "node src/search/scripts/analyze-text.js", "archive-version": "node --max-old-space-size=8192 src/ghes-releases/scripts/archive-version.js", "build": "next build", "check-content-type": "node src/workflows/check-content-type.js", "check-github-github-links": "node src/links/scripts/check-github-github-links.js", "copy-fixture-data": "node src/tests/scripts/copy-fixture-data.js", "debug": "cross-env NODE_ENV=development ENABLED_LANGUAGES=en nodemon --inspect src/frame/server.js", "delete-orphan-translation-files": "tsx src/workflows/delete-orphan-translation-files.ts", "dev": "cross-env npm start", "find-orphaned-assets": "node src/assets/scripts/find-orphaned-assets.js", "find-past-built-pr": "tsx src/workflows/find-past-built-pr.ts", "fixture-dev": "cross-env ROOT=src/fixtures/fixtures npm start", "fixture-test": "cross-env ROOT=src/fixtures/fixtures npm test -- src/fixtures/tests", "index-elasticsearch": "node src/search/scripts/index-elasticsearch.js", "index-test-fixtures": "npm run index-elasticsearch -- -l en -l ja -V ghec -V dotcom --index-prefix tests -- src/search/tests/fixtures/search-indexes", "lint": "eslint '**/*.{js,mjs,ts,tsx}'", "lint-content": "node src/content-linter/scripts/lint-content.js", "lint-translation": "cross-env NODE_OPTIONS=--experimental-vm-modules jest src/content-linter/tests/lint-files.js", "generate-code-scanning-query-list": "tsx src/code-scanning/scripts/generate-code-scanning-query-list.ts", "generate-content-linter-docs": "tsx src/content-linter/scripts/generate-docs.ts", "move-content": "node src/content-render/scripts/move-content.js", "openapi-docs": "node src/rest/docs.js", "playwright-test": "playwright test --config src/fixtures/playwright.config.ts --project=\"Google Chrome\"", "post-lints": "node src/content-linter/scripts/post-lints.js", "postinstall": "cp package-lock.json .installed.package-lock.json && echo \"Updated .installed.package-lock.json\" # see husky/post-checkout and husky/post-merge", "precompute-pageinfo": "tsx src/pageinfo/scripts/precompute-pageinfo.ts", "prepare": "husky src/workflows/husky", "prettier": "prettier -w \"**/*.{ts,tsx,js,mjs,scss,yml,yaml}\"", "prettier-check": "prettier -c \"**/*.{ts,tsx,js,mjs,scss,yml,yaml}\"", "prevent-pushes-to-main": "node src/workflows/prevent-pushes-to-main.js", "release-banner": "node src/ghes-releases/scripts/release-banner.js", "remove-version-markup": "node src/ghes-releases/scripts/remove-version-markup.js", "rendered-content-link-checker-cli": "node src/links/scripts/rendered-content-link-checker-cli.js", "rest-dev": "node src/rest/scripts/update-files.js", "show-action-deps": "echo 'Action Dependencies:' && rg '^[\\s|-]*(uses:.*)$' .github -I -N --no-heading -r '$1$2' | sort | uniq | cut -c 7-", "start": "cross-env NODE_ENV=development ENABLED_LANGUAGES=en nodemon src/frame/server.js", "start-all-languages": "cross-env NODE_ENV=development nodemon src/frame/server.js", "start-for-playwright": "cross-env ROOT=src/fixtures/fixtures TRANSLATIONS_FIXTURE_ROOT=src/fixtures/fixtures/translations ENABLED_LANGUAGES=en,ja NODE_ENV=test node src/frame/server.js", "symlink-from-local-repo": "node src/early-access/scripts/symlink-from-local-repo.js", "sync-rest": "node src/rest/scripts/update-files.js", "sync-search": "cross-env NODE_OPTIONS='--max_old_space_size=8192' start-server-and-test sync-search-server 4002 sync-search-indices", "sync-search-ghes-release": "cross-env GHES_RELEASE=1 start-server-and-test sync-search-server 4002 sync-search-indices", "sync-search-indices": "node src/search/scripts/sync-search-indices.js", "sync-search-server": "cross-env NODE_ENV=production PORT=4002 MINIMAL_RENDER=true CHANGELOG_DISABLED=true node src/frame/server.js", "sync-webhooks": "src/rest/scripts/update-files.js -o webhooks", "test": "cross-env NODE_OPTIONS='--max_old_space_size=4096 --experimental-vm-modules' jest --logHeapUsage", "test-local-dev": "node src/workflows/test-local-dev.js", "test-moved-content": "tsx src/content-render/scripts/test-moved-content.ts", "test-watch": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --watch --notify --notifyMode=change --coverage", "tsc": "tsc --noEmit", "unallowed-contributions": "node src/workflows/unallowed-contributions.js", "update-data-and-image-paths": "node src/early-access/scripts/update-data-and-image-paths.js", "update-internal-links": "node src/links/scripts/update-internal-links.js", "validate-asset-images": "node src/assets/scripts/validate-asset-images.js", "validate-github-github-docs-urls": "tsx src/links/scripts/validate-github-github-docs-urls/index.ts", "warmup-remotejson": "node src/archives/scripts/warmup-remotejson.js" }, "lint-staged": { "*.{js,mjs,ts,tsx}": "eslint --cache --fix", "*.{js,mjs,scss,ts,tsx,yml,yaml}": "prettier --write", "{content,data}/**/*.md": "npm run lint-content -- --precommit --paths" }, "nodemonConfig": { "ext": "js,json,yml,md,html,scss", "ignore": [ "assets", "script", "tests", "content", "translations", "data/reusables", "data/variables", "data/glossaries", "data/product-examples", "data/learning-tracks", "rest-api-description", "semmle-code" ] }, "prettier": { "overrides": [ { "files": [ "**/*.{yml,yaml}" ], "options": { "singleQuote": true } }, { "files": [ "**/*.{ts,tsx,js,mjs}" ], "options": { "printWidth": 100, "semi": false, "singleQuote": true } } ] }, "eslintConfig": { "env": { "browser": true, "commonjs": true, "es2020": true, "node": true }, "parserOptions": { "ecmaVersion": 2022, "requireConfigFile": "false", "sourceType": "module" }, "settings": { "import/resolver": { "typescript": true, "node": true } }, "extends": [ "eslint:recommended", "standard", "plugin:import/errors", "prettier" ], "rules": { "import/no-extraneous-dependencies": [ "error", { "packageDir": "." } ] }, "overrides": [ { "files": [ "**/tests/**/*.js" ], "env": { "jest": true } }, { "files": [ "**/*.tsx", "**/*.ts" ], "parser": "@typescript-eslint/parser", "plugins": [ "@typescript-eslint", "primer-react", "jsx-a11y" ], "extends": [ "plugin:primer-react/recommended", "plugin:jsx-a11y/recommended" ], "rules": { "camelcase": "off", "no-undef": "off", "no-unused-vars": "off", "no-use-before-define": "off", "@typescript-eslint/no-unused-vars": [ "error" ], "jsx-a11y/no-onchange": "off" } } ], "ignorePatterns": [ "tmp/*", "!/.*", "/.next/", "src/bookmarklets/*", "src/open-source/scripts/add-pr-links.js", "src/open-source/scripts/pr-link-source.js", "rest-api-description/" ] }, "jest": { "testTimeout": 30000, "coverageThreshold": { "global": { "branches": 95, "functions": 95, "lines": 95, "statements": -5 } }, "globalSetup": "./src/tests/scripts/start-server-for-jest.js", "globalTeardown": "./src/tests/scripts/kill-server-for-jest.js", "moduleNameMapper": { "@primer/behaviors": "/node_modules/@primer/behaviors/dist/cjs/index.js" }, "preset": "ts-jest", "reporters": [ "default", "github-actions" ], "setupFilesAfterEnv": [ "./src/tests/jest.setup.js", "jest-expect-message" ], "testEnvironment": "node", "testMatch": [ "**/tests/**/*.js" ], "testPathIgnorePatterns": [ "node_modules/", "vendor/", "src/fixtures/fixtures/", "src/tests/helpers/" ] }, "dependencies": { "@elastic/elasticsearch": "8.11.0", "@github/failbot": "0.8.3", "@octokit/plugin-retry": "6.0.1", "@octokit/request-error": "5.0.1", "@primer/behaviors": "^1.3.5", "@primer/css": "^21.0.7", "@primer/octicons": "^19.5.0", "@primer/octicons-react": "^19.5.0", "@primer/react": "36.2.0", "accept-language-parser": "^1.5.0", "ajv": "^8.11.0", "ajv-errors": "^3.0.0", "ajv-formats": "^2.1.1", "bottleneck": "2.19.5", "boxen": "7.1.1", "cheerio": "^1.0.0-rc.11", "cheerio-to-text": "0.2.4", "classnames": "^2.3.1", "connect-datadog": "0.0.9", "cookie-parser": "^1.4.6", "dayjs": "^1.11.3", "dotenv": "^16.0.1", "escape-string-regexp": "5.0.0", "express": "4.19.2", "express-rate-limit": "7.2.0", "express-timeout-handler": "^2.2.2", "fastest-levenshtein": "1.0.16", "file-type": "19.0.0", "flat": "^6.0.1", "github-slugger": "^2.0.0", "glob": "10.0.0", "got": "^13.0.0", "gray-matter": "^4.0.3", "hast-util-from-parse5": "^8.0.1", "hast-util-to-string": "^2.0.0", "hastscript": "^9.0.0", "helmet": "^7.0.0", "highlight.js": "11.9.0", "highlightjs-curl": "^1.3.0", "hot-shots": "^10.0.0", "html-entities": "^2.4.0", "http-proxy-middleware": "2.0.6", "imurmurhash": "^0.1.4", "is-svg": "5.0.0", "javascript-stringify": "^2.1.0", "js-cookie": "^3.0.1", "js-yaml": "^4.1.0", "liquidjs": "^10.7.0", "lodash": "^4.17.21", "lodash-es": "^4.17.21", "lowdb": "7.0.1", "lowlight": "3.1.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-hast": "^13.0.1", "mdast-util-to-markdown": "2.0.0", "mdast-util-to-string": "^4.0.0", "morgan": "^1.10.0", "next": "14.1.4", "ora": "^8.0.1", "parse5": "7.1.2", "port-used": "^2.0.8", "quick-lru": "7.0.0", "react": "18.2.0", "react-dom": "18.2.0", "rehype-highlight": "^7.0.0", "rehype-raw": "^7.0.0", "rehype-slug": "^6.0.0", "rehype-stringify": "^10.0.0", "remark-gemoji-to-emoji": "^1.1.0", "remark-gfm": "^4.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "rss-parser": "^3.13.0", "scroll-anchoring": "^0.1.0", "semver": "^7.5.4", "sharp": "0.33.1", "slash": "^5.0.0", "strip-ansi": "7.1.0", "strip-html-comments": "^1.0.0", "styled-components": "^5.3.5", "swr": "^2.2.4", "unified": "^11.0.3", "unist-util-visit": "^5.0.0", "url-template": "^3.0.0", "walk-sync": "^3.0.0" }, "devDependencies": { "@actions/core": "^1.10.0", "@actions/github": "^6.0.0", "@axe-core/playwright": "^4.8.5", "@github/markdownlint-github": "^0.4.1", "@graphql-inspector/core": "^5.0.0", "@graphql-tools/load": "^8.0.0", "@jest/globals": "29.7.0", "@octokit/rest": "^20.0.2", "@playwright/test": "1.42.1", "@types/imurmurhash": "^0.1.4", "@types/js-cookie": "^3.0.6", "@types/lodash": "^4.14.202", "@types/react": "18.2.46", "@types/react-dom": "^18.2.18", "@typescript-eslint/eslint-plugin": "6.17.0", "@typescript-eslint/parser": "6.17.0", "chalk": "^5.0.1", "change-case": "^5.0.2", "commander": "^12.0.0", "cross-env": "^7.0.3", "csp-parse": "0.0.2", "dedent": "^1.0.1", "eslint": "8.56.0", "eslint-config-prettier": "9.1.0", "eslint-config-standard": "17.1.0", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "2.29.1", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-n": "16.6.1", "eslint-plugin-primer-react": "4.0.3", "eslint-plugin-promise": "6.1.1", "event-to-promise": "^0.8.0", "graphql": "^16.8.1", "http-status-code": "^2.1.0", "husky": "^9.0.8", "jest": "29.7.0", "jest-expect-message": "1.1.3", "jest-fail-on-console": "^3.1.1", "jest-slow-test-reporter": "^1.0.0", "json-schema-merge-allof": "^0.8.1", "kill-port": "2.0.1", "lint-staged": "^15.0.1", "markdownlint": "^0.28.2", "markdownlint-rule-helpers": "^0.19.0", "markdownlint-rule-search-replace": "^1.2.0", "mdast-util-gfm-table": "^2.0.0", "micromark-extension-gfm-table": "^2.0.0", "mkdirp": "^3.0.0", "mockdate": "^3.0.5", "nock": "^13.5.0", "nodemon": "3.1.0", "npm-merge-driver-install": "^3.0.0", "nth-check": "2.1.1", "prettier": "^3.2.5", "rimraf": "^5.0.0", "robots-parser": "^3.0.0", "sass": "^1.52.3", "start-server-and-test": "^2.0.3", "ts-jest": "29.1.1", "tsx": "4.7.1", "typescript": "^5.4.2", "unist-util-remove": "^4.0.0", "unist-util-visit-parents": "6.0.1", "website-scraper": "^5.3.1" }, "overrides": { "ts-jest@29.1.1": { "@babel/core": "7.23.3" } }, "optionalDependencies": { "esm": "^3.2.25" }, "engines": { "node": "^18 || ^20" }, "cacheDirectories": [ "node_modules", ".next/cache" ] }