Skip to content

Instantly share code, notes, and snippets.

@Den1al
Created September 9, 2020 11:41
Show Gist options
  • Save Den1al/d989280aff62888cf996607e3ef1f776 to your computer and use it in GitHub Desktop.
Save Den1al/d989280aff62888cf996607e3ef1f776 to your computer and use it in GitHub Desktop.
New TypeScript Boilerplate Generator
// Author: Daniel Abeles
// Github: https://github.com/Den1al
const fs = require('fs');
const { exec } = require("child_process");
function normalizeSpaces(text) {
let numOfSpaces = text.split(/\n/)
.filter(Boolean)[0]
.search(/\S/);
return text.split(/\n/)
.map(line => line.substr(numOfSpaces, line.length))
.join('\n')
}
async function runInit() {
return new Promise((resolve, reject) => {
exec("npm init -y", err => {
if (err) reject(err)
else resolve(true);
})
})
}
async function modifyPackageJSON() {
const JSON_PATH = 'package.json';
async function getJSON() {
return new Promise((resolve, reject) => {
fs.readFile(JSON_PATH, {
encoding: 'utf-8'
}, (err, data) => {
if (err) reject(err)
else resolve(JSON.parse(data))
})
})
}
async function writeJSON(json) {
return new Promise((resolve, reject) => {
fs.writeFile(JSON_PATH, JSON.stringify(json, null, 4), 'utf-8', err => {
if (err) reject(err)
else resolve(true);
})
})
}
let json = await getJSON();
json['author'] = 'Daniel Abeles (https://github.com/Den1al)';
json['scripts'] = {
'start': 'ts-node src/index.ts'
};
await writeJSON(json);
}
async function createSrcDir() {
return new Promise((resolve, reject) => {
fs.mkdir('src', err => {
if (err) reject(err)
else resolve(true)
})
});
}
async function createIndexFile() {
return new Promise((resolve, reject) => {
const content = `
async function main() {
console.log("hello world!");
}
main();
`;
fs.writeFile('src/index.ts', normalizeSpaces(content), 'utf-8', err => {
if (err) reject(err)
else resolve(true)
})
})
}
async function createTypeScriptConfig() {
return new Promise((resolve, reject) => {
const content = `
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"DOM",
"ES2020"
],
"target": "ES2020"
},
"exclude": [
"node_modules"
]
}
`;
fs.writeFile('tsconfig.json', normalizeSpaces(content), 'utf-8', err => {
if (err) reject(err)
else resolve(true)
})
})
}
async function main() {
await createSrcDir();
await createIndexFile();
await createTypeScriptConfig();
await runInit();
await modifyPackageJSON();
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment