create-hengine-app
Version:
Create a development environment for your `hengine` app.
67 lines (55 loc) • 1.88 kB
JavaScript
// @ts-check
const { get } = require('https'),
{ join } = require('path'),
{ mkdirSync, writeFileSync, readFileSync } = require('fs'),
{ execSync } = require('child_process');
const log = exports.log = content => console.log(`> ${content}`);
exports.getLatestVersion = () => new Promise((resolve, reject) => {
log('Fetching the latest version...');
get('https://unpkg.com/hengine', res => {
const { location } = res.headers,
version = location && location.slice(location.indexOf('@') + 1);
if (version) {
log(`Fetched the latest version: ${version}`);
resolve(version);
} else {
reject('Failed to fetch the latest version.');
}
}).end();
});
const ENCODING = 'utf8';
const generate = (fileName, variables) => {
writeFileSync(
fileName,
Object.entries(variables).reduce(
(content, [key, value]) => content.replace(new RegExp(`\\$${key}\\$`, 'g'), value),
readFileSync(join(__dirname, 'template', fileName), ENCODING)
)
);
};
exports.init = (options) => {
const { dirName } = options;
log('Making directories...');
mkdirSync(dirName);
process.chdir(dirName);
['src', 'test', 'dist'].forEach(dir => mkdirSync(dir));
log('Generating files...');
[
'package.json',
'rollup.config.js',
'tsconfig.json',
'test/index.html',
'test/server.js',
'test/inspector.js',
'src/index.js',
'src/common.js',
'src/menuScene.js',
'dist/index.html',
'dist/index.css',
].forEach(fileName => {
generate(fileName, options);
});
log('Installing dev dependencies...');
execSync('npm i', { stdio: 'inherit' });
log('Done.');
};