mirror of https://github.com/msgbyte/tailchat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
3.0 KiB
JavaScript
133 lines
3.0 KiB
JavaScript
const path = require('path');
|
|
const _ = require('lodash')
|
|
|
|
function pickPluginName(text) {
|
|
const [_1, _2, ...others] = text.split('.');
|
|
return others.join('-');
|
|
}
|
|
function upperFirst(text) {
|
|
return _.upperFirst(_.camelCase(text));
|
|
}
|
|
|
|
module.exports = function (
|
|
/** @type {import('plop').NodePlopAPI} */
|
|
plop
|
|
) {
|
|
plop.setHelper('pickPluginName', pickPluginName);
|
|
plop.setHelper('pickPluginNameUp', (text) => {
|
|
return upperFirst(pickPluginName(text));
|
|
});
|
|
|
|
const namePrompts = [
|
|
{
|
|
type: 'input',
|
|
name: 'name',
|
|
require: true,
|
|
message: 'Plugin Name',
|
|
}
|
|
]
|
|
|
|
const serverPrompts = [
|
|
{
|
|
type: 'input',
|
|
name: 'id',
|
|
require: true,
|
|
default: 'com.msgbyte.example',
|
|
message: 'Plugin unique id, a unique string in reverse domain name format',
|
|
},
|
|
{
|
|
type: 'input',
|
|
name: 'author',
|
|
message: 'Plugin Author',
|
|
default: 'anonymous',
|
|
},
|
|
{
|
|
type: 'input',
|
|
name: 'desc',
|
|
message: 'Plugin description',
|
|
default: '',
|
|
},
|
|
];
|
|
|
|
// 服务端插件的前端模板代码
|
|
plop.setGenerator('client-plugin', {
|
|
description: 'Pure frontend plugin template',
|
|
prompts: [
|
|
...namePrompts,
|
|
...serverPrompts,
|
|
],
|
|
actions: [
|
|
{
|
|
type: 'addMany',
|
|
destination: path.resolve(process.cwd(), './plugins'),
|
|
base: './client-plugin',
|
|
templateFiles: [
|
|
'./client-plugin/**/*',
|
|
],
|
|
skipIfExists: true,
|
|
globOptions: {},
|
|
},
|
|
],
|
|
});
|
|
|
|
// 服务端插件的前端模板代码
|
|
plop.setGenerator('server-plugin', {
|
|
description: 'Pure backtend plugin template',
|
|
prompts: serverPrompts,
|
|
actions: [
|
|
{
|
|
type: 'addMany',
|
|
destination: path.resolve(process.cwd(), './plugins'),
|
|
base: './server-plugin',
|
|
templateFiles: ['./server-plugin/**/*'],
|
|
skipIfExists: true,
|
|
globOptions: {},
|
|
},
|
|
],
|
|
});
|
|
|
|
// 服务端插件的前端模板代码
|
|
plop.setGenerator('server-plugin-web', {
|
|
description: 'web plugin in backtend plugin template',
|
|
prompts: [
|
|
...namePrompts,
|
|
...serverPrompts,
|
|
],
|
|
actions: [
|
|
{
|
|
type: 'addMany',
|
|
destination: path.resolve(process.cwd(), './plugins'),
|
|
base: './server-plugin-web',
|
|
templateFiles: [
|
|
'./server-plugin-web/**/*',
|
|
'./server-plugin-web/*/.ministarrc.js',
|
|
],
|
|
skipIfExists: true,
|
|
globOptions: {},
|
|
},
|
|
],
|
|
});
|
|
|
|
// 服务端插件的前端模板代码
|
|
plop.setGenerator('server-plugin-full', {
|
|
description: 'Full backend plugin template',
|
|
prompts: [
|
|
...namePrompts,
|
|
...serverPrompts,
|
|
],
|
|
actions: [
|
|
{
|
|
type: 'addMany',
|
|
destination: path.resolve(process.cwd(), './plugins'),
|
|
base: './server-plugin-full',
|
|
templateFiles: [
|
|
'./server-plugin-full/**/*',
|
|
'./server-plugin-full/*/.ministarrc.js',
|
|
],
|
|
skipIfExists: true,
|
|
globOptions: {},
|
|
},
|
|
],
|
|
});
|
|
};
|