nocobase/packages/core/cli/src/plugin-generator.js
chenos 8217ebfb1b
feat: improve plugin manager process (#3386)
* feat: improve plugin manager process

* fix: skip help error

* fix: ipc check

* fix: improve remove

* fix: refresh

* fix: remove dir

* fix: improve code

* fix: update yarn.lock

* fix: e2e error

* fix: migration

* fix: pm create

* Revert "fix: migration"

This reverts commit 8f8fe04436ac96798259fb6debd88fffcb613560.

* fix: remove sample-hello
2024-01-18 00:33:15 +08:00

72 lines
2.1 KiB
JavaScript

const chalk = require('chalk');
const { existsSync } = require('fs');
const { join, resolve } = require('path');
const { Generator } = require('@umijs/utils');
const { readFile, writeFile } = require('fs').promises;
const { genTsConfigPaths } = require('./util');
const execa = require('execa');
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 { log, context = {}, ...opts } = options;
super(opts);
this.context = context;
this.log = log || console.log;
}
async getContext() {
const { name } = this.context;
const nocobaseVersion = require('@nocobase/server/package.json').version;
const packageVersion = await getProjectVersion();
return {
...this.context,
packageName: name,
packageVersion,
nocobaseVersion,
pascalCaseName: capitalize(camelize(name.split('/').pop())),
};
}
async writing() {
const { name } = this.context;
const target = resolve(process.cwd(), 'packages/plugins/', name);
if (existsSync(target)) {
this.log(chalk.red(`[${name}] plugin already exists.`));
return;
}
this.log('Creating plugin');
this.copyDirectory({
target,
context: await this.getContext(),
path: join(__dirname, '../templates/plugin'),
});
this.log('');
genTsConfigPaths();
execa.sync('yarn', ['postinstall', '--skip-umi'], { shell: true, stdio: 'inherit' });
this.log(`The plugin folder is in ${chalk.green(`packages/plugins/${name}`)}`);
}
}
exports.PluginGenerator = PluginGenerator;