UNPKG

@wuapi/create

Version:
106 lines (92 loc) 2.59 kB
#!/usr/bin/env node 'use strict'; const prompts = require('prompts'); const path = require('path'); const os = require('os'); const fs = require('fs-extra'); const ncp = require('ncp'); const devDep = require('./devDependencies.json') function main() { let questions = [ { type: 'text', name: 'name', message: 'Package name', initial: 'ExampleApi', validate: value => value.match(/^[a-zA-Z][a-zA-Z0-9_]{2,}/) ? true : `Must contains at least 3 letters or numbers or underscore that starts with a lowercase letter!` }, { type: 'text', name: 'version', message: 'Version', initial: '0.0.1', }, { type: 'text', name: 'author', message: 'Author', }, { type: 'text', name: 'license', message: 'License', initial: 'ISC', }, { type: 'text', name: 'package', message: 'Package of the API', initial: 'com.example.api', validate: value => value.match(/^[a-z][a-z0-9\.]+[a-z0-9]$/) ? true : `Must be dot separated letters or numbers!` }, ]; (async () => { const pkg = await prompts(questions) createApp(pkg) })() } function createApp(pkg) { const apiPkg = pkg.package delete pkg.package pkg.scripts = { "build" : "tsc", "run" : "node build/index.js", "serv" : "node build/index.js -w && http-server -p 8082 ./out/web", } //pkg.devDependencies = { // "@types/node" : "^18.14.0", // "@wuapi/generator" : "^1.0.4", // "@wuapi/processor" : "^1.0.8", // "http-server" : "^14.1.1", // "typescript" : "^4.9.5" //} pkg.devDependencies = devDep const root = path.resolve(pkg.name) fs.ensureDirSync(root); fs.writeFileSync( path.join(root, 'package.json'), JSON.stringify(pkg, null, 2) + os.EOL ) ncp(path.join(__dirname, 'template', 'tsconfig.json'), path.join(root, 'tsconfig.json')) ncp(path.join(__dirname, 'template', 'src'), path.join(root, 'src'), function(_){ rewriteFile( path.join(__dirname, 'template', 'src', 'project.ts'), path.join(root, 'src', 'project.ts'), { "{{project_name}}" : pkg.name, "{{project_version}}" : "0.0.1", "{{project_package}}" : apiPkg, } ) }) } function rewriteFile(src, dst, map){ let content = fs.readFileSync(src).toString() for(var key in map){ content = content.replaceAll(key, map[key]) } fs.writeFileSync(dst, content) } main()