feat: add create-plugin command (#423)

* feat: add create-plugin command

* chore(versions): 😊 publish v0.7.0-alpha.79

* chore(versions): 😊 publish v0.7.0-alpha.80

* chore(versions): 😊 publish v0.7.0-alpha.81
This commit is contained in:
chenos 2022-05-25 23:21:19 +08:00 committed by GitHub
parent c071217fff
commit 735581d20d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
45 changed files with 222 additions and 82 deletions

View File

@ -1,5 +1,5 @@
{
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"npmClient": "yarn",
"useWorkspaces": true,
"npmClientArgs": [

View File

@ -1,9 +1,9 @@
{
"name": "@nocobase/app-client",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"license": "MIT",
"devDependencies": {
"@nocobase/client": "0.7.0-alpha.78"
"@nocobase/client": "0.7.0-alpha.81"
},
"repository": {
"type": "git",

View File

@ -1,12 +1,12 @@
{
"name": "@nocobase/app-server",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"description": "",
"license": "MIT",
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
"dependencies": {
"@nocobase/preset-nocobase": "0.7.0-alpha.78"
"@nocobase/preset-nocobase": "0.7.0-alpha.81"
},
"repository": {
"type": "git",

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/acl",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"description": "",
"license": "Apache-2.0",
"licenses": [
@ -12,7 +12,7 @@
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
"dependencies": {
"@nocobase/resourcer": "0.7.0-alpha.78",
"@nocobase/resourcer": "0.7.0-alpha.81",
"json-templates": "^4.2.0"
},
"repository": {

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/actions",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"description": "",
"license": "Apache-2.0",
"licenses": [
@ -12,8 +12,8 @@
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
"dependencies": {
"@nocobase/database": "0.7.0-alpha.78",
"@nocobase/resourcer": "0.7.0-alpha.78"
"@nocobase/database": "0.7.0-alpha.81",
"@nocobase/resourcer": "0.7.0-alpha.81"
},
"repository": {
"type": "git",

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/build",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"description": "Library build tool based on rollup.",
"main": "lib/index.js",
"bin": {

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/cli",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"description": "",
"license": "Apache-2.0",
"licenses": [
@ -23,7 +23,7 @@
"serve": "^13.0.2"
},
"devDependencies": {
"@nocobase/devtools": "0.7.0-alpha.78"
"@nocobase/devtools": "0.7.0-alpha.81"
},
"repository": {
"type": "git",

View File

@ -0,0 +1,24 @@
const { resolve } = require('path');
const { Command } = require('commander');
const { PluginGenerator } = require('../plugin-generator');
/**
*
* @param {Command} cli
*/
module.exports = (cli) => {
cli
.command('create-plugin')
.argument('<name>')
.allowUnknownOption()
.action(async (name, options) => {
const generator = new PluginGenerator({
cwd: resolve(process.cwd(), name),
args: options,
context: {
name,
},
});
await generator.run();
});
};

View File

@ -15,4 +15,5 @@ module.exports = (cli) => {
require('./umi')(cli);
require('./upgrade')(cli);
require('./postinstall')(cli);
require('./create-plugin')(cli);
}

View File

@ -0,0 +1,64 @@
const chalk = require('chalk');
const { existsSync } = require('fs');
const { join, resolve } = require('path');
const { Generator } = require('@umijs/utils');
const { readFile } = require('fs').promises;
function camelize(str) {
return str.trim().replace(/[-_\s]+(.)?/g, (match, c) => c.toUpperCase());
}
function capitalize(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
async function getProjectName() {
const content = await readFile(resolve(process.cwd(), 'package.json'), 'utf-8');
const json = JSON.parse(content);
return json.name;
}
async function getProjectVersion() {
const content = await readFile(resolve(process.cwd(), 'lerna.json'), 'utf-8');
const json = JSON.parse(content);
return json.version || '0.1.0';
}
class PluginGenerator extends Generator {
constructor(options) {
const { context = {}, ...opts } = options;
super(opts);
this.context = context;
}
async getContext() {
const { name } = this.context;
const packageName = await getProjectName();
const packageVersion = await getProjectVersion();
return {
...this.context,
packageName: `@${packageName}/${name}`,
packageVersion: packageVersion,
pascalCaseName: capitalize(camelize(name)),
};
}
async writing() {
const { name } = this.context;
const target = resolve(process.cwd(), 'packages/plugins/', name);
if (existsSync(target)) {
console.log(chalk.red(`[${name}] plugin already exists.`));
return;
}
console.log('Creating plugin');
this.copyDirectory({
target,
context: await this.getContext(),
path: join(__dirname, '../templates/plugin'),
});
console.log('');
console.log(`The plugin folder is in ${chalk.green(`packages/plugins/${name}`)}`);
}
}
exports.PluginGenerator = PluginGenerator;

View File

@ -0,0 +1,10 @@
{
"name": "{{{packageName}}}",
"version": "{{{packageVersion}}}",
"main": "lib/server/index.js",
"dependencies": {},
"peerDependencies": {
"@nocobase/server": "*",
"@nocobase/test": "*"
}
}

View File

@ -0,0 +1 @@
// TODO

View File

@ -0,0 +1 @@
export { default } from './server';

View File

@ -0,0 +1,32 @@
import { InstallOptions, Plugin } from '@nocobase/server';
export class {{{pascalCaseName}}}Plugin extends Plugin {
getName(): string {
return this.getPackageName(__dirname);
}
beforeLoad() {
// TODO
}
async load() {
// TODO
// Visit: http://localhost:13000/api/test{{{pascalCaseName}}}:getInfo
this.app.resource({
name: 'test{{{pascalCaseName}}}',
actions: {
async getInfo(ctx, next) {
ctx.body = `Hello {{{name}}}!`;
next();
},
},
});
this.app.acl.allow('test{{{pascalCaseName}}}', 'getInfo');
}
async install(options: InstallOptions) {
// TODO
}
}
export default {{{pascalCaseName}}}Plugin;

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/client",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"license": "Apache-2.0",
"licenses": [
{
@ -18,7 +18,7 @@
"@formily/antd": "2.0.20",
"@formily/core": "2.0.20",
"@formily/react": "2.0.20",
"@nocobase/utils": "0.7.0-alpha.78",
"@nocobase/utils": "0.7.0-alpha.81",
"ahooks": "^3.0.5",
"antd": "~4.19.5",
"axios": "^0.26.1",

View File

@ -1,6 +1,6 @@
{
"name": "create-nocobase-app",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "src/index.js",
"license": "Apache-2.0",
"licenses": [

View File

@ -1,5 +1,5 @@
{
"version": "independent",
"version": "0.1.0",
"npmClient": "yarn",
"useWorkspaces": true,
"npmClientArgs": [

View File

@ -16,6 +16,13 @@
"experimentalDecorators": true,
"downlevelIteration": true,
"baseUrl": ".",
"paths": {}
"paths": {
"@{{{name}}}/app-*": [
"packages/app/*/src"
],
"@{{{name}}}/*": [
"packages/plugins/*/src"
]
}
}
}

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/database",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"description": "",
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
@ -12,7 +12,7 @@
}
],
"dependencies": {
"@nocobase/utils": "0.7.0-alpha.78",
"@nocobase/utils": "0.7.0-alpha.81",
"async-mutex": "^0.3.2",
"deepmerge": "^4.2.2",
"flat": "^5.0.2",

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/devtools",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"description": "",
"license": "Apache-2.0",
"licenses": [
@ -11,7 +11,7 @@
],
"main": "./src/index.js",
"dependencies": {
"@nocobase/build": "0.7.0-alpha.78",
"@nocobase/build": "0.7.0-alpha.81",
"@testing-library/react": "^12.1.2",
"@types/jest": "^26.0.0",
"@types/koa": "^2.13.4",

View File

@ -1,6 +1,6 @@
{
"name": "dumi-theme-nocobase",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"private": true,
"files": [
"es",

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/resourcer",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"description": "",
"main": "./lib/index.js",
"types": "./lib/index.d.ts",

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/sdk",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"license": "Apache-2.0",
"licenses": [
{

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/server",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"types": "./lib/index.d.ts",
"license": "Apache-2.0",
@ -13,10 +13,10 @@
"dependencies": {
"@koa/cors": "^3.1.0",
"@koa/router": "^9.4.0",
"@nocobase/acl": "0.7.0-alpha.78",
"@nocobase/actions": "0.7.0-alpha.78",
"@nocobase/database": "0.7.0-alpha.78",
"@nocobase/resourcer": "0.7.0-alpha.78",
"@nocobase/acl": "0.7.0-alpha.81",
"@nocobase/actions": "0.7.0-alpha.81",
"@nocobase/database": "0.7.0-alpha.81",
"@nocobase/resourcer": "0.7.0-alpha.81",
"chalk": "^4.1.1",
"commander": "^9.2.0",
"find-package-json": "^1.2.0",

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/test",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"types": "./lib/index.d.ts",
"license": "Apache-2.0",
@ -11,7 +11,7 @@
}
],
"dependencies": {
"@nocobase/server": "0.7.0-alpha.78",
"@nocobase/server": "0.7.0-alpha.81",
"@types/supertest": "^2.0.11",
"mockjs": "^1.1.0",
"mysql2": "^2.3.3",

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/utils",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"types": "./lib/index.d.ts",
"license": "Apache-2.0",

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-acl",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"description": "",
"license": "Apache-2.0",
"licenses": [
@ -12,9 +12,9 @@
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
"dependencies": {
"@nocobase/acl": "0.7.0-alpha.78",
"@nocobase/database": "0.7.0-alpha.78",
"@nocobase/server": "0.7.0-alpha.78"
"@nocobase/acl": "0.7.0-alpha.81",
"@nocobase/database": "0.7.0-alpha.81",
"@nocobase/server": "0.7.0-alpha.81"
},
"repository": {
"type": "git",

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-action-logs",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
"license": "Apache-2.0",
@ -11,7 +11,7 @@
}
],
"devDependencies": {
"@nocobase/test": "0.7.0-alpha.78"
"@nocobase/test": "0.7.0-alpha.81"
},
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
}

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-china-region",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -13,7 +13,7 @@
"china-division": "^2.4.0"
},
"devDependencies": {
"@nocobase/test": "0.7.0-alpha.78"
"@nocobase/test": "0.7.0-alpha.81"
},
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
}

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-client",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -10,10 +10,10 @@
}
],
"dependencies": {
"@nocobase/server": "0.7.0-alpha.78"
"@nocobase/server": "0.7.0-alpha.81"
},
"devDependencies": {
"@nocobase/test": "0.7.0-alpha.78"
"@nocobase/test": "0.7.0-alpha.81"
},
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
}

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-collection-manager",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -10,7 +10,7 @@
}
],
"devDependencies": {
"@nocobase/test": "0.7.0-alpha.78"
"@nocobase/test": "0.7.0-alpha.81"
},
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
}

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-error-handler",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"description": "",
"license": "Apache-2.0",
"licenses": [
@ -13,7 +13,7 @@
"types": "./lib/index.d.ts",
"dependencies": {
"@formily/json-schema": "^2.0.15",
"@nocobase/server": "0.7.0-alpha.78"
"@nocobase/server": "0.7.0-alpha.81"
},
"repository": {
"type": "git",

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-file-manager",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -11,7 +11,7 @@
],
"dependencies": {
"@koa/multer": "^3.0.0",
"@nocobase/server": "0.7.0-alpha.78",
"@nocobase/server": "0.7.0-alpha.81",
"aws-sdk": "^2.2.32",
"koa-static": "^5.0.0",
"mime-match": "^1.0.2",
@ -21,7 +21,7 @@
"multer-s3": "^2.10.0"
},
"devDependencies": {
"@nocobase/test": "0.7.0-alpha.78",
"@nocobase/test": "0.7.0-alpha.81",
"@types/koa-multer": "^1.0.1",
"@types/multer": "^1.4.5"
},

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-multi-app-manager",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -10,7 +10,7 @@
}
],
"dependencies": {
"@nocobase/server": "0.7.0-alpha.78"
"@nocobase/server": "0.7.0-alpha.81"
},
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
}

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-notifications",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -13,7 +13,7 @@
"nodemailer": "^6.6.1"
},
"devDependencies": {
"@nocobase/test": "0.7.0-alpha.78",
"@nocobase/test": "0.7.0-alpha.81",
"@types/nodemailer": "6.4.4",
"nodemailer-mock": "^1.5.11"
},

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-system-settings",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -10,7 +10,7 @@
}
],
"devDependencies": {
"@nocobase/test": "0.7.0-alpha.78"
"@nocobase/test": "0.7.0-alpha.81"
},
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
}

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-ui-routes-storage",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -13,7 +13,7 @@
"flat-to-nested": "^1.1.1"
},
"devDependencies": {
"@nocobase/test": "0.7.0-alpha.78"
"@nocobase/test": "0.7.0-alpha.81"
},
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
}

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-ui-schema-storage",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -11,7 +11,7 @@
],
"devDependencies": {
"@formily/json-schema": "2.0.20",
"@nocobase/test": "0.7.0-alpha.78"
"@nocobase/test": "0.7.0-alpha.81"
},
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
}

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-users",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -13,7 +13,7 @@
"jsonwebtoken": "^8.5.1"
},
"devDependencies": {
"@nocobase/test": "0.7.0-alpha.78",
"@nocobase/test": "0.7.0-alpha.81",
"@types/jsonwebtoken": "^8.5.8"
},
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/plugin-workflow",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"main": "lib/index.js",
"license": "Apache-2.0",
"licenses": [
@ -10,14 +10,14 @@
}
],
"dependencies": {
"@nocobase/actions": "0.7.0-alpha.78",
"@nocobase/database": "0.7.0-alpha.78",
"@nocobase/server": "0.7.0-alpha.78",
"@nocobase/utils": "0.7.0-alpha.78",
"@nocobase/actions": "0.7.0-alpha.81",
"@nocobase/database": "0.7.0-alpha.81",
"@nocobase/server": "0.7.0-alpha.81",
"@nocobase/utils": "0.7.0-alpha.81",
"json-templates": "^4.2.0"
},
"devDependencies": {
"@nocobase/test": "0.7.0-alpha.78"
"@nocobase/test": "0.7.0-alpha.81"
},
"gitHead": "a00b45a2686695c5f4824d074ac5e1aff210793a"
}

View File

@ -1,6 +1,6 @@
{
"name": "@nocobase/preset-nocobase",
"version": "0.7.0-alpha.78",
"version": "0.7.0-alpha.81",
"license": "Apache-2.0",
"licenses": [
{
@ -11,18 +11,18 @@
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
"dependencies": {
"@nocobase/plugin-acl": "0.7.0-alpha.78",
"@nocobase/plugin-china-region": "0.7.0-alpha.78",
"@nocobase/plugin-client": "0.7.0-alpha.78",
"@nocobase/plugin-collection-manager": "0.7.0-alpha.78",
"@nocobase/plugin-error-handler": "0.7.0-alpha.78",
"@nocobase/plugin-file-manager": "0.7.0-alpha.78",
"@nocobase/plugin-system-settings": "0.7.0-alpha.78",
"@nocobase/plugin-ui-routes-storage": "0.7.0-alpha.78",
"@nocobase/plugin-ui-schema-storage": "0.7.0-alpha.78",
"@nocobase/plugin-users": "0.7.0-alpha.78",
"@nocobase/plugin-workflow": "0.7.0-alpha.78",
"@nocobase/server": "0.7.0-alpha.78"
"@nocobase/plugin-acl": "0.7.0-alpha.81",
"@nocobase/plugin-china-region": "0.7.0-alpha.81",
"@nocobase/plugin-client": "0.7.0-alpha.81",
"@nocobase/plugin-collection-manager": "0.7.0-alpha.81",
"@nocobase/plugin-error-handler": "0.7.0-alpha.81",
"@nocobase/plugin-file-manager": "0.7.0-alpha.81",
"@nocobase/plugin-system-settings": "0.7.0-alpha.81",
"@nocobase/plugin-ui-routes-storage": "0.7.0-alpha.81",
"@nocobase/plugin-ui-schema-storage": "0.7.0-alpha.81",
"@nocobase/plugin-users": "0.7.0-alpha.81",
"@nocobase/plugin-workflow": "0.7.0-alpha.81",
"@nocobase/server": "0.7.0-alpha.81"
},
"repository": {
"type": "git",