67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C) SapphireCode - All Rights Reserved
 | |
|  * This file is part of Snippeteer which is released under BSD-3-Clause.
 | |
|  * See file 'LICENSE' for full license details.
 | |
|  * Created by Timo Hocker <timo@scode.ovh>, April 2020
 | |
|  */
 | |
| 
 | |
| import path from 'path';
 | |
| import { Input, Confirm } from 'enquirer';
 | |
| import { Snippet } from '../../Snippet';
 | |
| import { apply_template, modify_json, run_command } from '../../Helper';
 | |
| 
 | |
| import {
 | |
|   eslintrc, gitignore, npmrc,
 | |
|   tsconfig, eslintrc_ts, eslintignore_ts
 | |
| } from './Assets';
 | |
| 
 | |
| export default class Node implements Snippet {
 | |
|   public async start (): Promise<void> {
 | |
|     const folder = await new Input (
 | |
|       { message: 'project name (leave empty for current folder):' }
 | |
|     )
 | |
|       .run ();
 | |
| 
 | |
|     const use_ts = await new Confirm ({
 | |
|       message: 'use typescript?',
 | |
|       initial: false
 | |
|     })
 | |
|       .run ();
 | |
| 
 | |
|     await apply_template (eslintrc, path.join (folder, '.eslintrc.js'));
 | |
|     await apply_template (npmrc, path.join (folder, '.npmrc'));
 | |
|     await apply_template (gitignore, path.join (folder, '.gitignore'));
 | |
|     if (use_ts) {
 | |
|       await apply_template (tsconfig, path.join (folder, 'tsconfig.json'));
 | |
|       await apply_template (
 | |
|         eslintignore_ts,
 | |
|         path.join (folder, '.eslintignore')
 | |
|       );
 | |
|       await apply_template (
 | |
|         eslintrc_ts,
 | |
|         path.join (folder, 'lib', '.eslintrc.js')
 | |
|       );
 | |
|     }
 | |
|     run_command ('git init', folder);
 | |
|     run_command ('yarn init -y', folder);
 | |
|     run_command (
 | |
|       `yarn add --dev @scode/eslint-config${use_ts
 | |
|         ? '-ts typescript @ava/typescript'
 | |
|         : ''} eslint nyc ava`,
 | |
|       folder
 | |
|     );
 | |
| 
 | |
|     await modify_json ((obj: Record<string, unknown>) => {
 | |
|       obj.scripts = {
 | |
|         lint: 'eslint . --ext .js,.jsx,.ts,.tsx,.vue,.mjs',
 | |
|         test: 'nyc ava'
 | |
|       };
 | |
|       if (use_ts) {
 | |
|         (obj.scripts as Record<string, unknown>).compile = 'tsc';
 | |
|         (obj.scripts as Record<string, unknown>).test = 'tsc && nyc ava';
 | |
|       }
 | |
|       return obj;
 | |
|     }, path.join (folder, 'package.json'));
 | |
|   }
 | |
| }
 |