@gasket/plugin-typescript
Version:
Gasket plugin for TypeScript support
86 lines (74 loc) • 2.43 kB
JavaScript
const path = require('path');
const { devDependencies } = require('../package.json');
module.exports = async function create(gasket, context) {
const generatorDir = path.join(__dirname, '..', 'generator');
const {
pkg,
files,
nextDevProxy,
nextServerType,
apiApp,
gitignore,
readme,
testPlugins,
packageManager
} = context;
const depType = apiApp ? 'devDependencies' : 'dependencies';
let runCmd;
if (packageManager === 'yarn') {
runCmd = 'yarn';
} else if (packageManager === 'pnpm') {
runCmd = 'pnpm';
} else {
runCmd = 'npm run';
}
// Shared dependencies
pkg.add(depType, {
tsx: devDependencies.tsx,
typescript: devDependencies.typescript
});
// Add devDependencies for non-API apps
if (!apiApp) {
pkg.add('devDependencies', {
concurrently: devDependencies.concurrently
});
}
// Shared add TS links
readme
.link('tsx', 'https://tsx.is/')
.link('@gasket/plugin-typescript', 'https://gasket.dev/docs/plugins/plugin-typescript/')
.link('Gasket TypeScript', 'https://gasket.dev/docs/typescript/');
// Scripts & files for API apps
if (apiApp) {
pkg.add('scripts', {
prebuild: 'tsx gasket.ts build',
build: 'tsc',
preview: `${runCmd} build && ${runCmd} start`,
start: 'node dist/server.js',
local: 'tsx watch server.ts'
});
if (testPlugins?.length && testPlugins.includes('@gasket/plugin-jest')) {
context.addJestTSType = true;
}
files.add(`${generatorDir}/api/*`, `${generatorDir}/shared/*`);
gitignore?.add('dist', 'TypeScript build output');
pkg.add('eslintIgnore', ['dist']);
await readme.markdownFile(path.join(generatorDir, 'markdown/README.md'));
}
// Files for Next.js customServer
if (nextServerType === 'customServer') {
files.add(`${generatorDir}/next/*`, `${generatorDir}/shared/*`);
gitignore?.add('dist', 'TypeScript build output');
pkg.add('eslintIgnore', ['dist']);
}
// Files for Next.js default server w/ https proxy
// Also add concurrently for running multiple scripts
if (nextDevProxy) {
files.add(`${generatorDir}/next/*`, `${generatorDir}/shared/*`);
pkg.add('eslintIgnore', ['dist']);
}
// Files for Next.js default server w/o dev proxy
if (nextDevProxy === false && nextServerType !== 'customServer') {
files.add(`${generatorDir}/next/*(tsconfig).json`);
}
};