Created
September 9, 2020 11:41
-
-
Save Den1al/d989280aff62888cf996607e3ef1f776 to your computer and use it in GitHub Desktop.
New TypeScript Boilerplate Generator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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