59 lines
1.5 KiB
JavaScript
59 lines
1.5 KiB
JavaScript
const data = require('./data');
|
|
|
|
for (const item of data) {
|
|
const tpls = [
|
|
"import { IncrementIdEntity } from 'src/common/entity/increment-id.entity';",
|
|
"import { Column, Entity } from 'typeorm';",
|
|
'',
|
|
];
|
|
const [tableAttrs, ...column] = item.trim().replace(/\n+/, '\n').split('\n');
|
|
|
|
const [table, annotate] = handleAttrs(tableAttrs);
|
|
if (annotate) tpls.push('/**', ' * ' + annotate, ' */');
|
|
|
|
tpls.push('@Entity()', `export class ${table} extends IncrementIdEntity {`);
|
|
|
|
for (let i = 0, attrs; (attrs = column[i]); i++) {
|
|
const [key, type, comment] = handleAttrs(attrs);
|
|
const options = [];
|
|
if (/[A-Z]/g.test(key)) options.push(`name: '${handleName(key)}'`);
|
|
if (comment) options.push(`comment: '${comment}'`);
|
|
|
|
if (i) tpls.push('');
|
|
|
|
tpls.push(
|
|
` @Column(${options.length ? `{ ${options.join(', ')} }` : ''})`,
|
|
` ${key}: ${type};`,
|
|
);
|
|
}
|
|
|
|
output(table, tpls.concat('}\n').join('\n'));
|
|
}
|
|
|
|
function handleAttrs(str) {
|
|
return str.trim().split(/\s+/);
|
|
}
|
|
|
|
function output(table, tpl) {
|
|
const fs = require('fs');
|
|
const path = __dirname + '/entity';
|
|
if (!fs.existsSync(path)) fs.mkdirSync(path);
|
|
fs.writeFile(path + `/${handleName(table, '-')}.entity.ts`, tpl, (err) => {
|
|
if (err) {
|
|
console.log(err);
|
|
throw err;
|
|
}
|
|
|
|
console.log('【', table, '】转换成功');
|
|
});
|
|
}
|
|
|
|
function handleName(name, sep = '_') {
|
|
if (!name) return;
|
|
|
|
return (
|
|
name[0].toLowerCase() +
|
|
name.substr(1).replace(/([A-Z])/g, (m, p) => sep + p.toLowerCase())
|
|
);
|
|
}
|