/* * 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 , April 2020 */ import path from 'path'; import { Input } from 'enquirer'; import { Snippet } from '../../Snippet'; import { apply_template, modify_json, run_command } from '../../Helper'; import { eslintrc, gitignore, index, npmrc, tsconfig } from './Assets'; export default class Node implements Snippet { public async start (): Promise { 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 (index, path.join (folder, 'index.js')); await apply_template (gitignore, path.join (folder, '.gitignore')); if (use_ts) await apply_template (tsconfig, path.join (folder, 'tsconfig.json')); 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) => { obj.scripts = { lint: 'eslint . --ext .js,.jsx,.ts,.tsx,.vue,.mjs', test: 'nyc ava' }; return obj; }, path.join (folder, 'package.json')); } }