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'));
}
}