Files
next.js/test/integration/create-next-app/lib/specification.ts
Arian Tron 61f56f997c
Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
first commit
2026-03-10 19:37:31 +03:30

301 lines
6.0 KiB
TypeScript

import path from 'path'
import {
SRC_DIR_NAMES,
TemplateMode,
TemplateType,
} from '../../../../packages/create-next-app/templates'
export type ProjectSettings = {
files: string[]
deps: string[]
devDeps: string[]
}
export type ProjectSpecification = {
global: ProjectSettings
} & {
[key in TemplateType]: {
[key in TemplateMode]: ProjectSettings
}
}
/**
* Required files for a given project template and mode.
*/
export const projectSpecification: ProjectSpecification = {
global: {
files: [
'package.json',
'eslint.config.mjs',
'node_modules/next',
'.gitignore',
],
deps: [
'next',
'react',
'react-dom',
...(process.env.NEXT_RSPACK ? ['next-rspack'] : []),
],
devDeps: ['eslint', 'eslint-config-next'],
},
default: {
js: {
files: [
'pages/index.js',
'pages/_app.js',
'pages/api/hello.js',
'jsconfig.json',
],
deps: [],
devDeps: [],
},
ts: {
files: [
'pages/index.tsx',
'pages/_app.tsx',
'pages/api/hello.ts',
'tsconfig.json',
'next-env.d.ts',
],
deps: [],
devDeps: [
'@types/node',
'@types/react',
'@types/react-dom',
'typescript',
],
},
},
'default-empty': {
js: {
files: ['pages/index.js', 'pages/_app.js', 'jsconfig.json'],
deps: [],
devDeps: [],
},
ts: {
files: [
'pages/index.tsx',
'pages/_app.tsx',
'tsconfig.json',
'next-env.d.ts',
],
deps: [],
devDeps: [
'@types/node',
'@types/react',
'@types/react-dom',
'typescript',
],
},
},
'default-tw': {
js: {
files: [
'jsconfig.json',
'pages/_app.js',
'pages/api/hello.js',
'pages/index.js',
'postcss.config.mjs',
],
deps: [],
devDeps: ['@tailwindcss/postcss', 'tailwindcss'],
},
ts: {
files: [
'next-env.d.ts',
'pages/_app.tsx',
'pages/api/hello.ts',
'pages/index.tsx',
'postcss.config.mjs',
'tsconfig.json',
],
deps: [],
devDeps: [
'@types/node',
'@types/react-dom',
'@types/react',
'@tailwindcss/postcss',
'tailwindcss',
'typescript',
],
},
},
'default-tw-empty': {
js: {
files: [
'jsconfig.json',
'pages/_app.js',
'pages/index.js',
'postcss.config.mjs',
],
deps: [],
devDeps: ['@tailwindcss/postcss', 'tailwindcss'],
},
ts: {
files: [
'next-env.d.ts',
'pages/_app.tsx',
'pages/index.tsx',
'postcss.config.mjs',
'tsconfig.json',
],
deps: [],
devDeps: [
'@types/node',
'@types/react-dom',
'@types/react',
'@tailwindcss/postcss',
'tailwindcss',
'typescript',
],
},
},
app: {
js: {
deps: [],
devDeps: [],
files: ['app/page.js', 'app/layout.js', 'jsconfig.json'],
},
ts: {
deps: [],
devDeps: [
'@types/node',
'@types/react',
'@types/react-dom',
'typescript',
],
files: [
'app/page.tsx',
'app/layout.tsx',
'tsconfig.json',
'next-env.d.ts',
],
},
},
'app-api': {
js: {
deps: ['next', ...(process.env.NEXT_RSPACK ? ['next-rspack'] : [])],
devDeps: [],
files: ['app/route.js', 'app/[slug]/route.js', 'jsconfig.json'],
},
ts: {
deps: ['next', ...(process.env.NEXT_RSPACK ? ['next-rspack'] : [])],
devDeps: ['@types/node', '@types/react', 'typescript'],
files: [
'app/route.ts',
'app/[slug]/route.ts',
'tsconfig.json',
'next-env.d.ts',
],
},
},
'app-empty': {
js: {
deps: [],
devDeps: [],
files: ['app/page.js', 'app/layout.js', 'jsconfig.json'],
},
ts: {
deps: [],
devDeps: [
'@types/node',
'@types/react',
'@types/react-dom',
'typescript',
],
files: [
'app/page.tsx',
'app/layout.tsx',
'tsconfig.json',
'next-env.d.ts',
],
},
},
'app-tw': {
js: {
deps: [],
devDeps: ['@tailwindcss/postcss', 'tailwindcss'],
files: [
'app/layout.js',
'app/page.js',
'jsconfig.json',
'postcss.config.mjs',
],
},
ts: {
deps: [],
devDeps: [
'@types/node',
'@types/react-dom',
'@types/react',
'@tailwindcss/postcss',
'tailwindcss',
'typescript',
],
files: [
'app/layout.tsx',
'app/page.tsx',
'next-env.d.ts',
'postcss.config.mjs',
'tsconfig.json',
],
},
},
'app-tw-empty': {
js: {
deps: [],
devDeps: ['@tailwindcss/postcss', 'tailwindcss'],
files: [
'app/layout.js',
'app/page.js',
'jsconfig.json',
'postcss.config.mjs',
],
},
ts: {
deps: [],
devDeps: [
'@types/node',
'@types/react-dom',
'@types/react',
'@tailwindcss/postcss',
'tailwindcss',
'typescript',
],
files: [
'app/layout.tsx',
'app/page.tsx',
'next-env.d.ts',
'postcss.config.mjs',
'tsconfig.json',
],
},
},
}
export type GetProjectSettingsArgs = {
template: TemplateType
mode: TemplateMode
setting: keyof ProjectSettings
srcDir?: boolean
}
export const mapSrcFiles = (files: string[], srcDir?: boolean) =>
files.map((file) =>
srcDir && SRC_DIR_NAMES.some((name) => file.startsWith(name))
? path.join('src', file)
: file
)
export const getProjectSetting = ({
template,
mode,
setting,
srcDir,
}: GetProjectSettingsArgs) => {
return [
...projectSpecification.global[setting],
...mapSrcFiles(projectSpecification[template][mode][setting], srcDir),
]
}