108 lines
2.7 KiB
TypeScript
108 lines
2.7 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>, May 2020
|
|
*/
|
|
|
|
import path from 'path';
|
|
import { Input, Confirm } from 'enquirer';
|
|
import {
|
|
scripts as standard_scripts
|
|
} from '@sapphirecode/standard';
|
|
import { Snippet } from '../../Snippet';
|
|
import { apply_template, modify_json, run_command } from '../../Helper';
|
|
|
|
import {
|
|
eslintrc, gitignore,
|
|
tsconfig, eslintrc_ts, eslintignore
|
|
} from './Assets';
|
|
|
|
/**
|
|
* initialize the package.json
|
|
*
|
|
* @param folder - folder
|
|
* @param use_ts - use typescript
|
|
* @param use_tests - use tests
|
|
*/
|
|
async function init_package (
|
|
folder: string,
|
|
use_ts: boolean,
|
|
use_tests: boolean
|
|
): Promise<void> {
|
|
await modify_json ((obj: Record<string, unknown>) => {
|
|
const scripts
|
|
= {
|
|
lint: standard_scripts.lint,
|
|
test: standard_scripts.test.common,
|
|
compile: standard_scripts.compile.common
|
|
};
|
|
const files = [ 'LICENSE' ];
|
|
|
|
if (use_ts) {
|
|
scripts.compile = standard_scripts.compile.ts;
|
|
scripts.test = standard_scripts.test.ts;
|
|
files.push ('/dist/');
|
|
}
|
|
else {
|
|
files.push ('*.js', '*.d.ts');
|
|
}
|
|
|
|
if (!use_tests)
|
|
scripts.test = standard_scripts.test.no;
|
|
|
|
obj.scripts = scripts;
|
|
obj.files = files;
|
|
return obj;
|
|
}, path.join (folder, 'package.json'));
|
|
}
|
|
|
|
export default class Node implements Snippet {
|
|
public is_active (): boolean {
|
|
return true;
|
|
}
|
|
|
|
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 ();
|
|
|
|
const use_tests = await new Confirm ({
|
|
message: 'use tests?',
|
|
initial: true
|
|
})
|
|
.run ();
|
|
|
|
await apply_template (eslintrc, path.join (folder, '.eslintrc.js'));
|
|
await apply_template (gitignore, path.join (folder, '.gitignore'));
|
|
await apply_template (
|
|
eslintignore,
|
|
path.join (folder, '.eslintignore')
|
|
);
|
|
if (use_ts) {
|
|
await apply_template (tsconfig, path.join (folder, 'tsconfig.json'));
|
|
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 @sapphirecode/eslint-config${use_ts
|
|
? '-ts typescript @ava/typescript'
|
|
: ''} eslint${use_tests ? ' nyc ava' : ''}`,
|
|
folder
|
|
);
|
|
|
|
await init_package (folder, use_ts, use_tests);
|
|
}
|
|
}
|