|
|
|
const fs = require('fs');
|
|
|
|
const path = require('path');
|
|
|
|
|
|
|
|
function first2UpperCase(str) {
|
|
|
|
return str.toLowerCase().replace(/( |^)[a-z]/g, L => L.toUpperCase());
|
|
|
|
}
|
|
|
|
|
|
|
|
function scanAndCreate(structure, workerName, root = process.env.INIT_CWD) {
|
|
|
|
Object.keys(structure)
|
|
|
|
.forEach(name => {
|
|
|
|
if (typeof structure[name] === 'object') {
|
|
|
|
fs.mkdirSync(path.resolve(root, name));
|
|
|
|
|
|
|
|
scanAndCreate(structure[name], workerName, path.resolve(root, `./${name}`));
|
|
|
|
} else if (structure[name] === '') {
|
|
|
|
fs.appendFileSync(path.resolve(root, name), '');
|
|
|
|
} else if (typeof structure[name] === 'string') {
|
|
|
|
let content = fs.readFileSync(structure[name]).toString();
|
|
|
|
|
|
|
|
content = content
|
|
|
|
.replace(/\${WorkerName}/g, first2UpperCase(workerName))
|
|
|
|
.replace(/\${workerName}/g, workerName);
|
|
|
|
|
|
|
|
fs.appendFileSync(path.resolve(root, name), content);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
exec: async args => {
|
|
|
|
if (!args.init) {
|
|
|
|
throw new Error(`Command init not found in args`);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!args.name) {
|
|
|
|
throw new Error('Command --name=... not found in args');
|
|
|
|
}
|
|
|
|
|
|
|
|
const name = args.name;
|
|
|
|
|
|
|
|
const structure = {
|
|
|
|
[`${name}_worker`]: {
|
|
|
|
'main_thread': {
|
|
|
|
action: {
|
|
|
|
'action.worker_ability_test.ts': path.resolve(__dirname, './template/main_thread/action/action.worker_ability_test.t'),
|
|
|
|
},
|
|
|
|
[`${name}_main_thread.ts`]: path.resolve(__dirname, './template/main_thread/main_thread.t'),
|
|
|
|
},
|
|
|
|
utils: {
|
|
|
|
'action_type.ts': path.resolve(__dirname, './template/utils/action_type.t'),
|
|
|
|
'payload_type.ts': path.resolve(__dirname, './template/utils/payload_type.t'),
|
|
|
|
},
|
|
|
|
'worker_thread': {
|
|
|
|
action: {
|
|
|
|
'action.worker_ability_test.ts': path.resolve(__dirname, './template/worker_thread/action/action.worker_ability_test.t'),
|
|
|
|
},
|
|
|
|
[`${name}_worker_thread.ts`]: path.resolve(__dirname, './template/worker_thread/worker_thread.t'),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
scanAndCreate(structure, name);
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
// 结构
|
|
|
|
// -xxx_worker
|
|
|
|
// -|--main_thread
|
|
|
|
// -|--|--action
|
|
|
|
// -|--|--xxx_main_thread.ts
|
|
|
|
// -|--utils
|
|
|
|
// -|--|--action_type.ts
|
|
|
|
// -|--worker_thread
|
|
|
|
// -|--|--action
|
|
|
|
// -|--|--worker_main_thread.ts
|