59 lines
1.5 KiB
JavaScript
59 lines
1.5 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const readline = require('readline');
|
|
const { padLeft } = require('src/utils/index.js');
|
|
|
|
const schemaDir = path.resolve(__dirname, '..', 'schemas');
|
|
|
|
(async () => {
|
|
const args = process.argv.slice(2);
|
|
let filename = args[0] || '';
|
|
if (args.length === 0) {
|
|
// use readline
|
|
filename = await new Promise(resolve => {
|
|
const rl = readline.createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout,
|
|
});
|
|
|
|
rl.prompt();
|
|
rl.question('schema filename: ', ans => {
|
|
resolve(ans.replace(' ', '_'));
|
|
|
|
rl.close();
|
|
});
|
|
|
|
rl.once('close', resolve);
|
|
});
|
|
}
|
|
|
|
if (filename === '') throw new Error('no schema filename');
|
|
|
|
const schemaFiles = await fs.promises.readdir(schemaDir);
|
|
let version = 0;
|
|
|
|
schemaFiles.forEach(name => {
|
|
if (!name.endsWith('.sql')) return;
|
|
|
|
const strInt = name.split(/_/g)[0];
|
|
const v = parseInt(strInt, 10);
|
|
if (isNaN(v)) return; // eslint-disable-line
|
|
|
|
if (v > version) version = v;
|
|
});
|
|
|
|
// 版本要比最後一筆加一
|
|
version += 1;
|
|
|
|
const schemaName = `${padLeft(`${version}`, 6, '0')}_${filename}.sql`;
|
|
|
|
const schemaText = `-- Created Time ${new Date().toISOString()}`;
|
|
|
|
await fs.promises.writeFile(path.resolve(schemaDir, schemaName), schemaText, 'utf-8');
|
|
|
|
console.info(`File: ${path.resolve(schemaDir, schemaName)} Created!`);
|
|
})().catch(err => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|