{ "private": true, "description": "The Sourcegraph web app", "license": "Apache-2.0", "repository": { "type": "git", "url": "https://github.com/sourcegraph/sourcegraph" }, "engines": { "node": "^v16.7.0", "yarn": "^1.22.4" }, "scripts": { "format": "prettier '**/{*.{js?(on),ts?(x),graphql,md,scss},.*.js?(on)}' --write --list-different --config prettier.config.js", "format:check": "yarn run format --write=false --check --list-different=false --loglevel=warn", "_lint:js": "DOCSITE_LIST=\"$(./dev/docsite.sh -config doc/docsite.json ls)\" NODE_OPTIONS=\"--max_old_space_size=16192\" eslint", "lint:js:changed": "yarn _lint:js $(git diff --diff-filter=d --name-only origin/main... | grep -E '\\.[tj]sx?$' | xargs)", "lint:js:root": "yarn run _lint:js --quiet '*.[tj]s?(x)'", "lint:js:all": "DOCSITE_LIST=\"$(./dev/docsite.sh -config doc/docsite.json ls)\" dev/foreach-ts-project.sh yarn run lint:js --quiet && yarn lint:js:root", "_lint:css": "stylelint --quiet", "lint:css:changed": "yarn _lint:css --allow-empty-input \"*.none\" $(git diff --diff-filter=d --name-only origin/main... | grep -E '.s?css$' | xargs)", "lint:css:all": "yarn _lint:css 'client/*/src/**/*.scss'", "lint:graphql": "graphql-schema-linter", "build-ts": "tsc -b tsconfig.all.json", "build-web": "yarn workspace @sourcegraph/web run build", "watch-web": "yarn workspace @sourcegraph/web run watch", "generate": "gulp generate", "watch-generate": "gulp watchGenerate", "test": "jest --testPathIgnorePatterns end-to-end regression integration storybook \"/out/.*test.js\" \"/out/.*test.d.ts\"", "_test-integration": "TS_NODE_PROJECT=client/web/src/integration/tsconfig.json mocha --parallel=${CI:-\"false\"} --retries=1 --jobs=2", "test-integration": "yarn _test-integration \"./client/web/src/integration/**/*.test.ts\"", "test-integration:debug": "BROWSER=chrome KEEP_BROWSER=true DEVTOOLS=true DISABLE_APP_ASSETS_MOCKING=true WINDOW_WIDTH=1920 WINDOW_HEIGHT=1080 yarn _test-integration --retries=0 --jobs=1", "test-browser-integration": "yarn workspace @sourcegraph/browser run test-integration", "_cover-integration": "nyc --hook-require=false --silent yarn _test-integration", "cover-integration": "nyc --hook-require=false --silent yarn test-integration", "cover-browser-integration": "nyc --hook-require=false --silent yarn workspace @sourcegraph/browser test-integration", "test-lighthouse": "SOURCEGRAPH_API_URL=https://sourcegraph.com lhci collect && lhci open", "test-e2e": "TS_NODE_PROJECT=client/web/src/end-to-end/tsconfig.json mocha ./client/web/src/end-to-end/**/*.test.ts", "cover-e2e": "nyc --hook-require=false --silent yarn test-e2e", "test-regression": "yarn workspace @sourcegraph/web run test:regression", "storybook": "yarn workspace @sourcegraph/storybook run start", "storybook:dll": "yarn workspace @sourcegraph/storybook run start:dll", "storybook:branded": "yarn workspace @sourcegraph/branded run storybook", "storybook:browser": "yarn workspace @sourcegraph/browser run storybook", "storybook:jetbrains": "yarn workspace @sourcegraph/jetbrains run storybook", "storybook:shared": "yarn workspace @sourcegraph/shared run storybook", "storybook:web": "yarn workspace @sourcegraph/web run storybook", "storybook:search-ui": "yarn workspace @sourcegraph/search-ui run storybook", "storybook:wildcard": "yarn workspace @sourcegraph/wildcard run storybook", "storybook:build": "yarn workspace @sourcegraph/storybook run build", "cover-storybook": "nyc --hook-require=false --silent yarn jest client/storybook/src/coverage", "release": "cd dev/release && yarn run release", "docsite:serve": "./dev/docsite.sh -config doc/docsite.json serve -http=localhost:5080", "build-browser-extension": "yarn workspace @sourcegraph/browser run build", "optimize-svg-assets": "svgo --multipass --config=\"./svgo.config.js\"", "build-vsce": "yarn workspace @sourcegraph/vscode run build", "watch-vsce": "yarn workspace @sourcegraph/vscode run watch" }, "nyc": { "extends": "@istanbuljs/nyc-config-typescript", "all": true, "extension": [ ".tsx", ".ts" ], "include": [ "client/*/src/**/*.ts?(x)" ], "exclude": [ "node_modules", "**/*.d.ts", "**/*.@(test|story).ts?(x)", "client/storybook", "client/shared/src/testing" ] }, "jscpd": { "gitignore": true, "ignore": [ "**/__snapshots__", "**/__fixtures__", "**/*.svg", "migrations", "browser/build", "ui", "**/assets" ] }, "workspaces": { "packages": [ "client/*", "dev/release" ] }, "devDependencies": { "@atlassian/aui": "^7.10.3", "@axe-core/puppeteer": "^4.4.2", "@babel/core": "^7.14.2", "@babel/plugin-proposal-decorators": "^7.14.2", "@babel/plugin-transform-typescript": "^7.13.0", "@babel/preset-env": "^7.14.2", "@babel/preset-typescript": "^7.13.0", "@babel/runtime": "^7.14.0", "@gql2ts/from-schema": "^1.10.1", "@gql2ts/language-typescript": "^1.9.0", "@gql2ts/types": "^1.9.0", "@graphql-codegen/cli": "^1.19.4", "@graphql-codegen/typescript": "1.17.9", "@graphql-codegen/typescript-apollo-client-helpers": "^1.1.9", "@graphql-codegen/typescript-operations": "1.17.8", "@istanbuljs/nyc-config-typescript": "^1.0.1", "@jest/types": "^27.5.1", "@lhci/cli": "0.8.1", "@mermaid-js/mermaid-cli": "^8.13.10", "@octokit/rest": "^16.36.0", "@peculiar/webcrypto": "^1.1.7", "@percy/cli": "^1.6.0", "@percy/puppeteer": "^2.0.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.0-rc.1", "@pollyjs/adapter": "^5.0.0", "@pollyjs/core": "^5.1.0", "@pollyjs/persister-fs": "^5.0.0", "@sentry/cli": "^1.74.4", "@sentry/webpack-plugin": "^1.18.9", "@slack/web-api": "^5.15.0", "@sourcegraph/eslint-config": "0.32.0", "@sourcegraph/eslint-plugin-sourcegraph": "^1.0.5", "@sourcegraph/eslint-plugin-wildcard": "1.0.0", "@sourcegraph/extension-api-stubs": "^1.6.1", "@sourcegraph/prettierrc": "^3.0.3", "@sourcegraph/stylelint-config": "^1.4.0", "@sourcegraph/stylelint-plugin-sourcegraph": "^1.0.1", "@sourcegraph/tsconfig": "^4.0.1", "@statoscope/cli": "^5.24.0", "@statoscope/webpack-plugin": "^5.20.1", "@storybook/addon-a11y": "^6.5.9", "@storybook/addon-actions": "^6.5.9", "@storybook/addon-console": "^1.2.3", "@storybook/addon-docs": "^6.5.9", "@storybook/addon-links": "^6.5.9", "@storybook/addon-storyshots": "^6.5.9", "@storybook/addon-storyshots-puppeteer": "^6.5.9", "@storybook/addon-storysource": "^6.5.9", "@storybook/addon-toolbars": "^6.5.9", "@storybook/addons": "^6.5.9", "@storybook/api": "^6.5.9", "@storybook/builder-webpack5": "^6.5.9", "@storybook/client-api": "^6.5.9", "@storybook/components": "^6.5.9", "@storybook/core": "^6.5.9", "@storybook/core-events": "^6.5.9", "@storybook/manager-webpack5": "^6.5.9", "@storybook/react": "^6.5.9", "@storybook/theming": "^6.5.9", "@terminus-term/to-string-loader": "^1.1.7-beta.1", "@testing-library/dom": "^8.13.0", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.1.1", "@testing-library/react-hooks": "^8.0.0", "@testing-library/user-event": "^13.5.0", "@types/babel__core": "7.1.12", "@types/bloomfilter": "0.0.0", "@types/case-sensitive-paths-webpack-plugin": "2.1.5", "@types/chai": "4.2.14", "@types/chai-as-promised": "7.1.3", "@types/chrome": "0.0.127", "@types/classnames": "2.2.10", "@types/command-exists": "1.2.0", "@types/compression": "1.7.2", "@types/compression-webpack-plugin": "9.0.0", "@types/connect-history-api-fallback": "1.3.4", "@types/css-minimizer-webpack-plugin": "3.0.1", "@types/d3-axis": "1.0.12", "@types/d3-format": "2.0.0", "@types/d3-scale": "2.2.0", "@types/d3-selection": "1.4.1", "@types/d3-shape": "1.3.2", "@types/d3-time-format": "3.0.0", "@types/escape-html": "^1.0.1", "@types/expect": "24.3.0", "@types/express": "4.17.11", "@types/fancy-log": "1.3.1", "@types/glob": "7.1.3", "@types/got": "9.6.11", "@types/gulp": "4.0.7", "@types/highlight.js": "9.12.4", "@types/is-absolute-url": "3.0.0", "@types/jest": "27.4.0", "@types/js-base64": "^3.3.1", "@types/js-cookie": "2.2.6", "@types/js-yaml": "4.0.3", "@types/jsdom": "12.2.4", "@types/lodash": "4.14.167", "@types/lru-cache": "^7.6.1", "@types/marked": "4.0.3", "@types/mime-types": "2.1.0", "@types/mini-css-extract-plugin": "2.0.1", "@types/mocha": "8.2.0", "@types/mock-require": "^2.0.1", "@types/mockdate": "2.0.0", "@types/mz": "2.7.3", "@types/node": "13.13.5", "@types/node-fetch": "2.5.10", "@types/pollyjs__core": "4.3.1", "@types/pollyjs__persister-fs": "2.0.1", "@types/puppeteer": "^5.4.5", "@types/react": "18.0.8", "@types/react-calendar": "^3.5.2", "@types/react-circular-progressbar": "1.0.2", "@types/react-dom": "18.0.2", "@types/react-grid-layout": "1.3.0", "@types/react-router": "^5.1.18", "@types/react-router-dom": "^5.3.3", "@types/recharts": "1.8.23", "@types/resize-observer-browser": "0.1.4", "@types/rimraf": "^3.0.2", "@types/sanitize-html": "2.3.0", "@types/sass": "1.16.1", "@types/semver": "7.3.1", "@types/shelljs": "0.8.8", "@types/signale": "1.4.1", "@types/simmerjs": "0.5.1", "@types/sinon": "9.0.4", "@types/socket.io": "^3.0.2", "@types/socket.io-client": "1.4.33", "@types/speed-measure-webpack-plugin": "1.3.4", "@types/svgo": "2.6.0", "@types/terser-webpack-plugin": "5.0.4", "@types/testing-library__jest-dom": "5.9.5", "@types/textarea-caret": "3.0.0", "@types/uuid": "8.0.1", "@types/vscode": "^1.63.1", "@types/webpack-bundle-analyzer": "4.4.1", "@types/webpack-dev-server": "4.0.3", "@types/webpack-manifest-plugin": "3.0.5", "@types/webpack-stats-plugin": "^0.3.2", "@types/yauzl": "^2.9.2", "@vscode/test-electron": "^2.1.3", "abort-controller": "^3.0.0", "autoprefixer": "^10.2.1", "axe-core": "^4.4.1", "babel-jest": "^25.5.1", "babel-loader": "^8.2.2", "babel-plugin-lodash": "^3.3.4", "babel-plugin-webpack-chunkname": "^1.2.0", "babel-preset-react-app": "^10.0.0", "browserslist": "^4.21.3", "buffer": "^6.0.3", "bundlesize2": "^0.0.31", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", "chalk": "^4.1.0", "chokidar-cli": "^2.1.0", "chromatic": "^5.10.2", "chrome-webstore-upload-cli": "^1.2.0", "command-exists": "^1.2.9", "compression": "^1.7.4", "compression-webpack-plugin": "^9.0.0", "connect-history-api-fallback": "^1.6.0", "cross-env": "^7.0.2", "css-loader": "^5.2.6", "css-minimizer-webpack-plugin": "^3.0.2", "elm": "^0.19.1-3", "elm-webpack-loader": "^8.0.0", "enhanced-resolve": "^5.9.3", "envalid": "^7.3.1", "esbuild": "^0.14.54", "esbuild-plugin-elm": "^0.0.11-1", "eslint": "^8.13.0", "eslint-formatter-lsif": "^1.0.3", "eslint-plugin-monorepo": "^0.3.2", "events": "^3.3.0", "execa": "^5.0.0", "express": "^4.17.1", "express-static-gzip": "^2.1.1", "fancy-log": "^1.3.3", "get-port": "^5.1.1", "glob": "^7.1.6", "google-protobuf": "3.17.3", "googleapis": "^47.0.0", "gql2ts": "^1.10.1", "graphql": "^15.4.0", "graphql-schema-linter": "^2.0.1", "gulp": "^4.0.2", "html-webpack-harddisk-plugin": "^2.0.0", "html-webpack-plugin": "^5.3.2", "http-proxy-middleware": "^1.1.2", "identity-obj-proxy": "^3.0.0", "jest": "^27.5.1", "jest-canvas-mock": "^2.3.0", "jest-environment-jsdom": "^27.5.1", "jest-fetch-mock": "^3.0.3", "jest-junit": "^13.0.0", "jest-mock-extended": "^2.0.2-beta2", "jsdom": "^16.7.0", "json-schema-ref-parser": "^9.0.6", "json-schema-to-typescript": "^10.1.3", "latest-version": "^5.1.0", "libhoney": "^3.1.1", "license-checker": "^25.0.1", "message-port-polyfill": "^0.2.0", "mime-types": "^2.1.28", "mini-css-extract-plugin": "^2.1.0", "mocha": "^8.3.2", "mock-require": "^3.0.3", "mockdate": "^3.0.2", "monaco-editor-webpack-plugin": "^3.1.0", "mz": "^2.7.0", "node-fetch": "^2.6.7", "nyc": "^15.1.0", "octokit": "^2.0.7", "open": "^7.0.4", "p-retry": "^4.2.0", "p-timeout": "^4.1.0", "postcss": "^8.4.16", "postcss-custom-media": "^8.0.0", "postcss-focus-visible": "^5.0.0", "postcss-loader": "^6.1.1", "postcss-modules": "^4.2.2", "prettier": "2.2.1", "process": "^0.11.10", "protoc-gen-ts": "0.8.1", "puppeteer": "^13.5.1", "react-refresh": "^0.10.0", "rimraf": "^3.0.2", "sass": "^1.32.4", "sass-loader": "^12.1.0", "shelljs": "^0.8.4", "signale": "^1.4.0", "simmerjs": "^0.5.6", "sinon": "^9.0.2", "socket.io": "^4.5.2", "socket.io-client": "^4.5.2", "speed-measure-webpack-plugin": "^1.5.0", "storybook-addon-designs": "^6.3.1", "storybook-dark-mode": "^1.1.0", "stream-browserify": "^3.0.0", "string-width": "^4.2.0", "style-loader": "^3.1.0", "stylelint": "^14.3.0", "svgo": "^2.7.0", "term-size": "^2.2.0", "terser-webpack-plugin": "^5.1.4", "ts-loader": "^9.3.0", "ts-node": "^10.7.0", "typed-scss-modules": "^4.1.1", "typescript": "^4.7.2", "utc-version": "^2.0.2", "vsce": "^2.7.0", "webpack": "^5.45.1", "webpack-bundle-analyzer": "^4.4.2", "webpack-cli": "^4.7.2", "webpack-dev-server": "^4.0.0", "webpack-manifest-plugin": "^3.1.0", "webpack-stats-plugin": "^1.1.0", "wildcard-mock-link": "^2.0.1", "worker-loader": "^3.0.8", "yauzl": "^2.10.0" }, "dependencies": { "@apollo/client": "^3.5.0", "@codemirror/autocomplete": "^6.1.0", "@codemirror/commands": "^6.0.1", "@codemirror/lang-json": "^6.0.0", "@codemirror/lang-markdown": "^6.0.0", "@codemirror/language": "^6.2.0", "@codemirror/lint": "^6.0.0", "@codemirror/search": "^6.0.1", "@codemirror/state": "^6.1.0", "@codemirror/view": "^6.4.0", "@lezer/highlight": "^1.0.0", "@mdi/js": "^6.7.96", "@microsoft/fetch-event-source": "^2.0.1", "@opentelemetry/api": "^1.1.0", "@opentelemetry/context-zone": "^1.5.0", "@opentelemetry/exporter-trace-otlp-http": "^0.31.0", "@opentelemetry/instrumentation": "^0.31.0", "@opentelemetry/instrumentation-fetch": "^0.31.0", "@opentelemetry/sdk-trace-web": "^1.5.0", "@opentelemetry/semantic-conventions": "^1.5.0", "@reach/accordion": "^0.16.1", "@reach/auto-id": "^0.16.0", "@reach/combobox": "^0.16.5", "@reach/dialog": "^0.16.2", "@reach/menu-button": "^0.16.2", "@reach/tabs": "^0.16.4", "@reach/visually-hidden": "^0.16.0", "@react-aria/live-announcer": "^3.1.0", "@sentry/browser": "^7.8.1", "@sourcegraph/extension-api-classes": "^1.1.0", "@storybook/addon-controls": "^6.5.9", "@storybook/addon-knobs": "^6.4.0", "@types/react-resizable": "^3.0.2", "@visx/annotation": "^2.10.0", "@visx/axis": "^2.11.1", "@visx/glyph": "^2.10.0", "@visx/grid": "^2.10.0", "@visx/group": "^2.10.0", "@visx/responsive": "^2.10.0", "@visx/scale": "^2.2.2", "@visx/voronoi": "^2.10.0", "@vscode/codicons": "^0.0.29", "@vscode/webview-ui-toolkit": "^0.9.0", "ajv": "^8.6.3", "ajv-formats": "^2.1.1", "apollo3-cache-persist": "^0.12.1", "bloomfilter": "^0.0.18", "classnames": "^2.2.6", "comlink": "^4.3.0", "copy-to-clipboard": "^3.3.1", "core-js": "^3.8.2", "cross-fetch": "^3.1.5", "d3-axis": "^1.0.12", "d3-format": "^2.0.0", "d3-scale": "^3.2.1", "d3-selection": "^1.4.1", "d3-shape": "^1.3.7", "d3-time-format": "^3.0.0", "date-fns": "^2.16.1", "delay": "^4.4.1", "downshift": "^3.4.8", "escape-html": "^1.0.3", "eventsource": "1.1.1", "focus-visible": "^5.2.0", "fzy.js": "^0.4.1", "got": "^11.5.2", "graphiql": "^1.8.0", "highlight.js": "^10.5.0", "highlightjs-graphql": "^1.0.2", "http-proxy-agent": "^5.0.0", "http-status-codes": "^2.1.4", "https-browserify": "^1.0.0", "https-proxy-agent": "^5.0.1", "is-absolute-url": "^3.0.3", "iterare": "^1.2.1", "js-base64": "^3.7.2", "js-cookie": "^2.2.1", "js-yaml": "^4.1.0", "jsonc-parser": "^3.0.0", "linguist-languages": "^7.14.0", "lodash": "^4.17.20", "lru-cache": "^7.8.0", "marked": "4.0.16", "mdi-react": "^8.1.0", "minimatch": "^3.0.4", "monaco-editor": "^0.24.0", "monaco-yaml": "^3.2.1", "nice-ticks": "^1.0.1", "open-color": "^1.8.0", "ordinal": "^1.0.3", "path-browserify": "^1.0.1", "postcss-inset": "^1.0.0", "pretty-bytes": "^5.3.0", "prop-types": "^15.7.2", "react": "18.1.0", "react-calendar": "^3.7.0", "react-circular-progressbar": "^2.0.3", "react-dom": "18.1.0", "react-dom-confetti": "^0.1.4", "react-elm-components": "^1.1.0", "react-focus-lock": "^2.7.1", "react-grid-layout": "1.3.0", "react-resizable": "^3.0.4", "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-router-dom-v5-compat": "^6.3.0", "react-select": "^5.2.2", "react-spring": "^9.4.2", "react-sticky-box": "1.0.2", "react-visibility-sensor": "^5.1.1", "recharts": "^1.8.5", "regexpp": "^3.1.0", "rxjs": "^6.6.3", "sanitize-html": "^2.0.0", "semver": "^7.3.2", "stream-http": "^3.2.0", "string-score": "^1.0.1", "tabbable": "^5.1.5", "tagged-template-noop": "^2.1.1", "textarea-caret": "^3.1.0", "ts-key-enum": "^2.0.7", "tslib": "^2.1.0", "use-callback-ref": "^1.2.5", "use-debounce": "^8.0.1", "use-deep-compare-effect": "^1.6.1", "use-resize-observer": "^9.0.2", "utility-types": "^3.10.0", "uuid": "^8.3.0", "webext-domain-permission-toggle": "^1.0.1", "webextension-polyfill": "^0.6.0", "yaml-ast-parser": "^0.0.43", "zustand": "^3.6.9" }, "resolutions": { "history": "4.5.1", "cssnano": "4.1.10", "webpack": "5", "tslib": "2.1.0", "prettier": "2.2.1", "jsprim": "1.4.2" }, "packageManager": "yarn@3.2.3" }