add a tsconfig.js file

This commit is contained in:
Tobias Koppers 2021-06-14 19:41:39 +02:00
parent e5d7a143db
commit de575f7a80
3 changed files with 60 additions and 20 deletions

View File

@ -50,27 +50,11 @@ function withCommerceConfig(nextConfig = {}) {
// Update paths in `tsconfig.json` to point to the selected provider // Update paths in `tsconfig.json` to point to the selected provider
if (config.commerce.updateTSConfig !== false) { if (config.commerce.updateTSConfig !== false) {
const tsconfigPath = path.join(process.cwd(), 'tsconfig.json') const staticTsconfigPath = path.join(process.cwd(), 'tsconfig.json')
const tsconfig = require(tsconfigPath) const tsconfig = require('../../tsconfig.js')
tsconfig.compilerOptions.paths['@framework'] = [`framework/${name}`]
tsconfig.compilerOptions.paths['@framework/*'] = [`framework/${name}/*`]
// When running for production it may be useful to exclude the other providers
// from TS checking
if (process.env.VERCEL) {
const exclude = tsconfig.exclude.filter(
(item) => !item.startsWith('framework/')
)
tsconfig.exclude = PROVIDERS.reduce((exclude, current) => {
if (current !== name) exclude.push(`framework/${current}`)
return exclude
}, exclude)
}
fs.writeFileSync( fs.writeFileSync(
tsconfigPath, staticTsconfigPath,
prettier.format(JSON.stringify(tsconfig), { parser: 'json' }) prettier.format(JSON.stringify(tsconfig), { parser: 'json' })
) )
} }

56
tsconfig.js Normal file
View File

@ -0,0 +1,56 @@
const PROVIDERS = ['bigcommerce', 'shopify', 'swell', 'vendure']
function getProviderName() {
return (
process.env.COMMERCE_PROVIDER ||
(process.env.BIGCOMMERCE_STOREFRONT_API_URL
? 'bigcommerce'
: process.env.NEXT_PUBLIC_SHOPIFY_STORE_DOMAIN
? 'shopify'
: process.env.NEXT_PUBLIC_SWELL_STORE_ID
? 'swell'
: null)
)
}
const name = getProviderName()
module.exports = {
compilerOptions: {
baseUrl: '.',
target: 'esnext',
lib: ['dom', 'dom.iterable', 'esnext'],
allowJs: true,
skipLibCheck: true,
strict: true,
forceConsistentCasingInFileNames: true,
noEmit: true,
esModuleInterop: true,
module: 'esnext',
moduleResolution: 'node',
resolveJsonModule: true,
isolatedModules: true,
jsx: 'preserve',
paths: {
'@lib/*': ['lib/*'],
'@utils/*': ['utils/*'],
'@config/*': ['config/*'],
'@assets/*': ['assets/*'],
'@components/*': ['components/*'],
'@commerce': ['framework/commerce'],
'@commerce/*': ['framework/commerce/*'],
// Update paths to point to the selected provider
'@framework': [`framework/${name}`],
'@framework/*': [`framework/${name}/*`],
},
},
include: ['next-env.d.ts', '**/*.d.ts', '**/*.ts', '**/*.tsx', '**/*.js'],
exclude: [
'node_modules',
// When running for production it may be useful to exclude the other providers
// from TS checking
...(process.env.VERCEL
? PROVIDERS.filter((p) => p !== name).map((p) => `framework/${p}`)
: []),
],
}

View File

@ -27,5 +27,5 @@
} }
}, },
"include": ["next-env.d.ts", "**/*.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"], "include": ["next-env.d.ts", "**/*.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"],
"exclude": ["node_modules", "framework/swell", "framework/vendure"] "exclude": ["node_modules"]
} }