mirror of
https://github.com/vercel/next.js.git
synced 2026-09-20 02:25:18 +08:00
9e1a290955
Fork PRs run without repository secrets, so deploy tests never run on external contributions. The workaround is to re-push the contributor's commits to a branch in `vercel/next.js` and open a replacement PR from there, which is fiddly by hand and carries a real security risk. This adds a `pr-adopt` PNPM script to encode the procedure. ```bash pnpm pr-adopt <pr-number> # adopt node pr-adopt <pr-number> --dry-run # report without pushing ``` We copy over the title and body as-is and prepend a `Adopts #N. Closes #N.` line so that the underlying PR automatically closes and we create the proper backlinks. Commits are signed The description is copied rather than rewritten for two reasons: it is the contributor's own text, and any `Fixes #123` inside it has to survive, since the original PR closes unmerged and so never fires its own. ### The confirmation gate Adoption runs the contributor's code on a branch where CI has repository secrets, which is exactly what a fork PR is denied. Anything executing during install, build, or test can read and exfiltrate them, so before touching git the script prints the PR link, status, author handle and association, diff size, and every file touched. Confirming requires retyping the author's handle, and a non-interactive stdin is refused rather than silently proceeding. Two details worth a reviewer's attention: - **The file list is deliberately unranked.** An earlier revision flagged "high-risk" paths (`.github/`, `package.json`, lockfiles). That was removed: a payload can sit in any fixture or source file, and printing "no high-risk paths touched" manufactures false assurance. - **The list comes from the paginated REST endpoint.** `gh pr view --json files` silently caps at 100 entries. #96550 has 106 changed files and returns 100, which would present a truncated list as the complete surface. If the count still falls short of `changedFiles` (GitHub stops at 3000), the shortfall is reported rather than hidden. Draft and closed PRs are both adoptable, since a contributor may still be iterating or may have abandoned an unreviewed change; the status is surfaced rather than enforced. Merged PRs are refused because their commits are already in `canary`.
354 lines
16 KiB
JSON
354 lines
16 KiB
JSON
{
|
|
"name": "nextjs-project",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"workspaces": [
|
|
"packages/*"
|
|
],
|
|
"scripts": {
|
|
"new-error": "turbo gen error",
|
|
"new-test": "turbo gen test",
|
|
"pr-adopt": "node scripts/adopt-pr.js",
|
|
"clean": "lerna clean -y && lerna run clean && lerna exec 'node ../../scripts/rm.mjs dist'",
|
|
"build": "turbo run build --remote-cache-timeout 60 --summarize true",
|
|
"build-all": "turbo run build build-native-auto --remote-cache-timeout 60 --summarize true",
|
|
"lerna": "lerna",
|
|
"dev": "turbo run dev --parallel --filter=\"!@next/bundle-analyzer-ui\"",
|
|
"bench:render-pipeline": "tsx bench/render-pipeline/benchmark.ts",
|
|
"bench:render-pipeline:analyze": "tsx bench/render-pipeline/analyze-profiles.ts",
|
|
"bench:render-pipeline:client": "tsx bench/render-pipeline/client-trace.ts",
|
|
"bench:dev-validation": "tsx bench/dev-validation/benchmark.ts",
|
|
"pack-next": "tsx scripts/pack-next.ts",
|
|
"eval": "node run-evals.js",
|
|
"test-types": "tsc",
|
|
"test-unit": "jest test/unit/ packages/next/ packages/font",
|
|
"test-dev": "scripts/run-jest.sh --mode=dev --bundler=webpack --headless --",
|
|
"test-dev-webpack": "scripts/run-jest.sh --mode=dev --bundler=webpack --headless --",
|
|
"test-dev-experimental": "scripts/run-jest.sh --mode=dev --bundler=webpack --experimental --headless --",
|
|
"test-dev-experimental-webpack": "scripts/run-jest.sh --mode=dev --bundler=webpack --experimental --headless --",
|
|
"test-dev-rspack": "scripts/run-jest.sh --mode=dev --bundler=rspack --headless --",
|
|
"test-dev-experimental-rspack": "scripts/run-jest.sh --mode=dev --bundler=rspack --experimental --headless --",
|
|
"test-dev-turbo": "scripts/run-jest.sh --mode=dev --bundler=turbo --headless --",
|
|
"test-dev-experimental-turbo": "scripts/run-jest.sh --mode=dev --bundler=turbo --experimental --headless --",
|
|
"test-start": "scripts/run-jest.sh --mode=start --bundler=webpack --headless --",
|
|
"test-start-webpack": "scripts/run-jest.sh --mode=start --bundler=webpack --headless --",
|
|
"test-start-experimental": "scripts/run-jest.sh --mode=start --bundler=webpack --experimental --headless --",
|
|
"test-start-experimental-webpack": "scripts/run-jest.sh --mode=start --bundler=webpack --experimental --headless --",
|
|
"test-start-rspack": "scripts/run-jest.sh --mode=start --bundler=rspack --headless --",
|
|
"test-start-experimental-rspack": "scripts/run-jest.sh --mode=start --bundler=rspack --experimental --headless --",
|
|
"test-start-turbo": "scripts/run-jest.sh --mode=start --bundler=turbo --headless --",
|
|
"test-start-experimental-turbo": "scripts/run-jest.sh --mode=start --bundler=turbo --experimental --headless --",
|
|
"test-deploy": "scripts/run-jest.sh --mode=deploy --bundler=webpack --headless --",
|
|
"test-deploy-webpack": "scripts/run-jest.sh --mode=deploy --bundler=webpack --headless --",
|
|
"test-deploy-turbo": "scripts/run-jest.sh --mode=deploy --bundler=turbo --headless --",
|
|
"testonly-dev": "scripts/run-jest.sh --mode=dev --bundler=webpack --",
|
|
"testonly-dev-webpack": "scripts/run-jest.sh --mode=dev --bundler=webpack --",
|
|
"testonly-dev-rspack": "scripts/run-jest.sh --mode=dev --bundler=rspack --",
|
|
"testonly-dev-turbo": "scripts/run-jest.sh --mode=dev --bundler=turbo --",
|
|
"testonly-start": "scripts/run-jest.sh --mode=start --bundler=webpack --",
|
|
"testonly-start-webpack": "scripts/run-jest.sh --mode=start --bundler=webpack --",
|
|
"testonly-start-rspack": "scripts/run-jest.sh --mode=start --bundler=rspack --",
|
|
"testonly-start-turbo": "scripts/run-jest.sh --mode=start --bundler=turbo --",
|
|
"testonly-deploy": "scripts/run-jest.sh --mode=deploy --bundler=webpack --",
|
|
"testonly-deploy-webpack": "scripts/run-jest.sh --mode=deploy --bundler=webpack --",
|
|
"testonly-deploy-turbo": "scripts/run-jest.sh --mode=deploy --bundler=turbo --",
|
|
"test": "scripts/run-jest.sh --bundler=webpack --headless --",
|
|
"test-webpack": "scripts/run-jest.sh --bundler=webpack --headless --",
|
|
"test-rspack": "scripts/run-jest.sh --bundler=rspack --headless --",
|
|
"test-turbo": "scripts/run-jest.sh --bundler=turbo --headless --",
|
|
"testonly": "jest --runInBand",
|
|
"testheadless": "scripts/run-jest.sh --headless --",
|
|
"genstats": "cross-env LOCAL_STATS=true node .github/actions/next-stats-action/src/index.js",
|
|
"git-reset": "git reset --hard HEAD",
|
|
"git-clean": "git clean -d -x -e node_modules -e packages -f",
|
|
"typescript": "tsc --noEmit",
|
|
"lint-typescript": "turbo run typescript",
|
|
"lint-eslint": "eslint --config eslint.cli.config.mjs",
|
|
"lint-ast-grep": "ast-grep scan",
|
|
"lint-no-typescript": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" run-p prettier-check \"lint-eslint .\" lint-language",
|
|
"types-and-precompiled": "run-p \"lint-typescript --log-order=stream\" check-compiler-fixtures types:test-lib && pnpm check-precompiled",
|
|
"check-compiler-fixtures": "find crates/next-custom-transforms/tests/fixture -type f -name 'tsconfig.json' -print0 | xargs --null -I'{}' pnpm tsc --noEmit --project '{}'",
|
|
"validate-externals-doc": "node ./scripts/validate-externals-doc.js",
|
|
"check-unused-turbo-tasks": "node scripts/check-unused-turbo-tasks.mjs",
|
|
"generate-browser-variant-aliases": "node scripts/generate-browser-variant-aliases.mjs",
|
|
"lint": "run-p test-types lint-typescript prettier-check \"lint-eslint .\" lint-ast-grep lint-language check-unused-turbo-tasks",
|
|
"lint-fix": "pnpm prettier-fix && pnpm lint-eslint --fix .",
|
|
"lint-language": "alex . --quiet",
|
|
"prettier-check": "prettier --check .",
|
|
"check-examples": "./scripts/check-examples.sh",
|
|
"get-test-timings": "node run-tests.js --timings --write-timings -g 1/1",
|
|
"prettier-fix": "prettier --write .",
|
|
"types": "lerna run types --stream",
|
|
"types:test-lib": "tsc --project test/lib/tsconfig.json",
|
|
"check-precompiled": "./scripts/check-pre-compiled.sh",
|
|
"lint-staged": "lint-staged",
|
|
"next-with-deps": "./scripts/next-with-deps.sh",
|
|
"next": "cross-env NEXT_PRIVATE_LOCAL_DEV=1 NEXT_TELEMETRY_DISABLED=1 NODE_OPTIONS=\"--trace-deprecation --enable-source-maps\" next",
|
|
"next-no-sourcemaps": "echo 'No longer supported. Use `pnpm next --disable-source-maps` instead'; exit 1;",
|
|
"debug": "cross-env NEXT_PRIVATE_LOCAL_DEV=1 NEXT_TELEMETRY_DISABLED=1 node --inspect --trace-deprecation --enable-source-maps packages/next/dist/bin/next",
|
|
"debug-brk": "cross-env NEXT_PRIVATE_LOCAL_DEV=1 NEXT_TELEMETRY_DISABLED=1 node --inspect-brk --trace-deprecation --enable-source-maps packages/next/dist/bin/next",
|
|
"pnpm:devPreinstall": "node scripts/create-next-bin-placeholder.mjs",
|
|
"postinstall": "node scripts/git-configure.mjs && node scripts/install-native.mjs",
|
|
"version": "pnpm install --no-frozen-lockfile && git add .",
|
|
"prepare": "husky",
|
|
"sync-react": "node ./scripts/sync-react.js",
|
|
"update-google-fonts": "node ./scripts/update-google-fonts.js",
|
|
"patch-next": "tsx scripts/patch-next.ts",
|
|
"unpack-next": "tsx scripts/unpack-next.ts",
|
|
"swc-build-native": "tsx scripts/build-native.ts",
|
|
"swc-build-wasm": "tsx scripts/build-wasm.cjs",
|
|
"build-turbopack-cli": "cargo build -p turbopack-cli --release",
|
|
"sweep": "tsx scripts/sweep.cjs",
|
|
"check-error-codes": "node packages/next/check-error-codes.js",
|
|
"update-error-codes": "cd packages/next && pnpm taskr compile check_error_codes",
|
|
"build-error-code-plugin": "crates/next-error-code-swc-plugin/build-and-move.sh",
|
|
"storybook": "turbo run storybook",
|
|
"build-storybook": "turbo run build-storybook",
|
|
"test-storybook": "turbo run test-storybook",
|
|
"with-rspack": "cross-env NEXT_RSPACK=1 NEXT_TEST_USE_RSPACK=1",
|
|
"with-turbo": "cross-env IS_TURBOPACK_TEST=1",
|
|
"with-webpack": "cross-env IS_WEBPACK_TEST=1",
|
|
"with-experimental": "cross-env __NEXT_CACHE_COMPONENTS=true"
|
|
},
|
|
"devDependencies": {
|
|
"@actions/core": "1.10.1",
|
|
"@ast-grep/cli": "0.42.0",
|
|
"@babel/core": "7.26.10",
|
|
"@babel/eslint-parser": "7.24.6",
|
|
"@babel/generator": "7.27.0",
|
|
"@babel/parser": "7.27.0",
|
|
"@babel/plugin-syntax-explicit-resource-management": "7.25.7",
|
|
"@babel/plugin-transform-object-rest-spread": "7.25.9",
|
|
"@babel/preset-react": "7.26.3",
|
|
"@edge-runtime/jest-environment": "4.0.0",
|
|
"@emotion/cache": "11.11.0",
|
|
"@emotion/react": "11.11.1",
|
|
"@eslint/compat": "1.4.0",
|
|
"@eslint/eslintrc": "^3",
|
|
"@eslint/js": "9.37.0",
|
|
"@fullhuman/postcss-purgecss": "1.3.0",
|
|
"@jest/expect-utils": "29.7.0",
|
|
"@mdx-js/loader": "2.2.1",
|
|
"@mdx-js/react": "2.2.1",
|
|
"@next/bundle-analyzer": "workspace:*",
|
|
"@next/env": "workspace:*",
|
|
"@next/eslint-plugin-next": "workspace:*",
|
|
"@next/font": "workspace:*",
|
|
"@next/mdx": "workspace:*",
|
|
"@next/playwright": "workspace:*",
|
|
"@next/plugin-storybook": "workspace:*",
|
|
"@next/polyfill-module": "workspace:*",
|
|
"@next/polyfill-nomodule": "workspace:*",
|
|
"@next/swc": "workspace:*",
|
|
"@next/third-parties": "workspace:*",
|
|
"@opentelemetry/api": "1.4.1",
|
|
"@picocss/pico": "1.5.10",
|
|
"@rspack/core": "1.6.7",
|
|
"@slack/web-api": "7.9.1",
|
|
"@swc/cli": "0.1.55",
|
|
"@swc/core": "1.11.24",
|
|
"@swc/helpers": "0.5.23",
|
|
"@swc/types": "0.1.7",
|
|
"@taskr/esnext": "1.1.0",
|
|
"@testing-library/jest-dom": "6.1.2",
|
|
"@testing-library/react": "^15.0.5",
|
|
"@types/busboy": "1.5.3",
|
|
"@types/cheerio": "0.22.16",
|
|
"@types/cookie": "0.3.3",
|
|
"@types/cross-spawn": "6.0.0",
|
|
"@types/fs-extra": "8.1.0",
|
|
"@types/glob": "7.1.1",
|
|
"@types/html-validator": "5.0.3",
|
|
"@types/http-proxy": "1.17.17",
|
|
"@types/jest": "29.5.5",
|
|
"@types/js-yaml": "4.0.9",
|
|
"@types/node": "20.17.7",
|
|
"@types/node-fetch": "2.6.1",
|
|
"@types/react": "19.2.18",
|
|
"@types/react-dom": "19.2.4",
|
|
"@types/shell-quote": "1.7.1",
|
|
"@types/string-hash": "1.1.1",
|
|
"@types/trusted-types": "2.0.3",
|
|
"@types/yargs": "16.0.11",
|
|
"@vercel/agent-eval": "1.3.0",
|
|
"@vercel/blob": "2.3.2",
|
|
"@vercel/devlow-bench": "workspace:*",
|
|
"@vercel/kv": "3.0.0",
|
|
"@vercel/og": "0.11.1",
|
|
"abort-controller": "3.0.0",
|
|
"alex": "9.1.0",
|
|
"async-sema": "3.0.1",
|
|
"babel-plugin-react-compiler": "0.0.0-experimental-1371fcb-20260227",
|
|
"browserslist": "4.28.1",
|
|
"buffer": "5.6.0",
|
|
"cheerio": "0.22.0",
|
|
"cookie": "0.4.1",
|
|
"cors": "2.8.5",
|
|
"coveralls": "3.0.3",
|
|
"create-next-app": "workspace:*",
|
|
"critters": "0.0.6",
|
|
"cross-env": "6.0.3",
|
|
"cross-spawn": "6.0.5",
|
|
"dd-trace": "4.12.0",
|
|
"es5-ext": "0.10.53",
|
|
"escape-string-regexp": "2.0.0",
|
|
"eslint": "9.37.0",
|
|
"eslint-config-next": "workspace:*",
|
|
"eslint-formatter-codeframe": "7.32.1",
|
|
"eslint-plugin-eslint-plugin": "5.2.1",
|
|
"eslint-plugin-import": "2.31.0",
|
|
"eslint-plugin-jest": "27.6.3",
|
|
"eslint-plugin-jsdoc": "48.0.4",
|
|
"eslint-plugin-mdx": "3.1.5",
|
|
"eslint-plugin-react": "7.37.0",
|
|
"eslint-plugin-react-hooks": "0.0.0-experimental-ab18f33d-20260220",
|
|
"event-stream": "4.0.1",
|
|
"execa": "2.0.3",
|
|
"expect": "29.7.0",
|
|
"expect-type": "0.14.2",
|
|
"express": "4.17.0",
|
|
"faker": "5.5.3",
|
|
"faunadb": "2.6.1",
|
|
"find-up": "4.1.0",
|
|
"firebase": "7.14.5",
|
|
"flat": "5.0.2",
|
|
"fs-extra": "9.0.0",
|
|
"get-port": "5.1.1",
|
|
"get-port-please": "3.1.1",
|
|
"glob": "7.1.6",
|
|
"globals": "16.4.0",
|
|
"gzip-size": "5.1.1",
|
|
"html-validator": "5.1.18",
|
|
"http-proxy": "1.18.1",
|
|
"husky": "9.0.11",
|
|
"image-size": "1.2.1",
|
|
"is-animated": "2.0.2",
|
|
"isomorphic-unfetch": "3.0.0",
|
|
"jest": "29.7.0",
|
|
"jest-diff": "29.7.0",
|
|
"jest-environment-jsdom": "29.7.0",
|
|
"jest-extended": "4.0.2",
|
|
"jest-junit": "16.0.0",
|
|
"jest-snapshot": "30.0.0-alpha.6",
|
|
"js-yaml": "4.2.0",
|
|
"json5": "2.2.3",
|
|
"kleur": "^4.1.0",
|
|
"ky": "0.19.1",
|
|
"ky-universal": "0.6.0",
|
|
"lerna": "9.0.3",
|
|
"lint-staged": "15.2.2",
|
|
"lodash": "4.18.1",
|
|
"lost": "8.3.1",
|
|
"minimatch": "3.0.4",
|
|
"moment": "^2.24.0",
|
|
"nanoid": "3.1.30",
|
|
"next": "workspace:*",
|
|
"node-fetch": "2.6.7",
|
|
"node-plop": "0.31.1",
|
|
"npm-run-all": "4.1.5",
|
|
"nprogress": "0.2.0",
|
|
"octokit": "3.1.0",
|
|
"outdent": "0.8.0",
|
|
"pixrem": "5.0.0",
|
|
"playwright": "1.61.0",
|
|
"playwright-chromium": "1.61.0",
|
|
"postcss": "8.5.23",
|
|
"postcss-nested": "4.2.1",
|
|
"postcss-pseudoelements": "5.0.0",
|
|
"postcss-short-size": "4.0.0",
|
|
"postcss-trolling": "0.1.7",
|
|
"prettier": "3.6.2",
|
|
"pretty-bytes": "5.3.0",
|
|
"pretty-ms": "7.0.0",
|
|
"random-seed": "0.3.0",
|
|
"react": "19.0.0",
|
|
"react-builtin": "npm:react@19.3.0-canary-22e4f993-20260811",
|
|
"react-dom": "19.0.0",
|
|
"react-dom-builtin": "npm:react-dom@19.3.0-canary-22e4f993-20260811",
|
|
"react-dom-experimental-builtin": "npm:react-dom@0.0.0-experimental-22e4f993-20260811",
|
|
"react-experimental-builtin": "npm:react@0.0.0-experimental-22e4f993-20260811",
|
|
"react-is-builtin": "npm:react-is@19.3.0-canary-22e4f993-20260811",
|
|
"react-server-dom-turbopack": "npm:react-server-dom-turbopack@19.3.0-canary-22e4f993-20260811",
|
|
"react-server-dom-turbopack-experimental": "npm:react-server-dom-turbopack@0.0.0-experimental-22e4f993-20260811",
|
|
"react-server-dom-webpack": "npm:react-server-dom-webpack@19.3.0-canary-22e4f993-20260811",
|
|
"react-server-dom-webpack-experimental": "npm:react-server-dom-webpack@0.0.0-experimental-22e4f993-20260811",
|
|
"react-ssr-prepass": "1.0.8",
|
|
"react-virtualized": "9.22.3",
|
|
"request-promise-core": "1.1.2",
|
|
"resolve-from": "5.0.0",
|
|
"sass": "1.54.0",
|
|
"satori": "0.25.0",
|
|
"scheduler-builtin": "npm:scheduler@0.28.0-canary-22e4f993-20260811",
|
|
"scheduler-experimental-builtin": "npm:scheduler@0.0.0-experimental-22e4f993-20260811",
|
|
"seedrandom": "3.0.5",
|
|
"semver": "7.3.7",
|
|
"serve-handler": "6.1.6",
|
|
"shell-quote": "1.7.3",
|
|
"strip-ansi": "6.0.0",
|
|
"styled-jsx": "5.1.6",
|
|
"styled-jsx-plugin-postcss": "3.0.2",
|
|
"swr": "^2.2.4",
|
|
"tailwindcss": "3.2.7",
|
|
"taskr": "1.1.0",
|
|
"tree-kill": "1.2.2",
|
|
"tsec": "0.2.1",
|
|
"tsx": "4.19.2",
|
|
"turbo": "2.9.4",
|
|
"typescript": "6.0.2",
|
|
"typescript-eslint": "8.46.0",
|
|
"unfetch": "4.2.0",
|
|
"wait-port": "0.2.2",
|
|
"webpack": "5.98.0",
|
|
"webpack-bundle-analyzer": "4.7.0",
|
|
"webpack-dev-server": "5.2.0",
|
|
"whatwg-fetch": "3.0.0",
|
|
"ws": "8.2.3",
|
|
"yargs": "16.2.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=20.9.0"
|
|
},
|
|
"packageManager": "pnpm@10.33.0",
|
|
"pnpm": {
|
|
"overrides": {
|
|
"postcss": "8.5.23",
|
|
"webpack": "5.98.0",
|
|
"browserslist": "4.28.1",
|
|
"caniuse-lite": "1.0.30001746",
|
|
"@types/node": "20.17.7",
|
|
"@babel/core": "7.26.10",
|
|
"@babel/parser": "7.27.0",
|
|
"@babel/types": "7.27.0",
|
|
"@babel/traverse": "7.27.0",
|
|
"@types/react": "19.2.18",
|
|
"@types/react-dom": "19.2.4",
|
|
"@types/retry": "0.12.0",
|
|
"jest-snapshot": "30.0.0-alpha.6",
|
|
"react": "npm:react@19.3.0-canary-22e4f993-20260811",
|
|
"react-dom": "npm:react-dom@19.3.0-canary-22e4f993-20260811",
|
|
"react-is": "npm:react-is@19.3.0-canary-22e4f993-20260811",
|
|
"scheduler": "npm:scheduler@0.28.0-canary-22e4f993-20260811"
|
|
},
|
|
"packageExtensions": {
|
|
"eslint-plugin-react-hooks@0.0.0-experimental-6de32a5a-20250822": {
|
|
"dependencies": {
|
|
"@babel/plugin-proposal-private-methods": "^7.18.6"
|
|
}
|
|
}
|
|
},
|
|
"patchedDependencies": {
|
|
"webpack-sources@3.2.3": "patches/webpack-sources@3.2.3.patch",
|
|
"stacktrace-parser@0.1.10": "patches/stacktrace-parser@0.1.10.patch",
|
|
"taskr@1.1.0": "patches/taskr@1.1.0.patch",
|
|
"minizlib@3.1.0": "patches/minizlib@3.1.0.patch",
|
|
"web-vitals@4.2.1": "patches/web-vitals@4.2.1.patch",
|
|
"@rspack/core@1.6.7": "patches/@rspack__core@1.6.7.patch",
|
|
"@modelcontextprotocol/sdk": "patches/@modelcontextprotocol__sdk.patch",
|
|
"@vercel/blob": "patches/@vercel__blob.patch",
|
|
"postcss-scss": "patches/postcss-scss.patch",
|
|
"playwright-core@1.61.0": "patches/playwright-core@1.61.0.patch",
|
|
"@types/node@20.17.7": "patches/@types__node@20.17.7.patch"
|
|
}
|
|
}
|
|
}
|