fix: upgrade error (#1303)

This commit is contained in:
chenos 2022-12-31 10:54:20 +08:00 committed by GitHub
parent 638799fe0e
commit f5c1a07f20
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 23 deletions

View File

@ -43,6 +43,7 @@ export class PluginManager {
this.repository.setPluginManager(this); this.repository.setPluginManager(this);
this.app.resourcer.define(resourceOptions); this.app.resourcer.define(resourceOptions);
this.app.acl.allow('pm', ['enable', 'disable', 'remove'], 'allowConfigure'); this.app.acl.allow('pm', ['enable', 'disable', 'remove'], 'allowConfigure');
this.app.acl.allow('applicationPlugins', 'list', 'allowConfigure');
this.server = net.createServer((socket) => { this.server = net.createServer((socket) => {
socket.on('data', async (data) => { socket.on('data', async (data) => {
const { method, plugins } = JSON.parse(data.toString()); const { method, plugins } = JSON.parse(data.toString());
@ -66,7 +67,9 @@ export class PluginManager {
if (options?.method !== 'install' || options.reload) { if (options?.method !== 'install' || options.reload) {
await this.repository.load(); await this.repository.load();
} }
this.app.acl.allow('applicationPlugins', 'list'); });
this.app.on('beforeUpgrade', async () => {
await this.collection.sync();
}); });
this.addStaticMultiple(options.plugins); this.addStaticMultiple(options.plugins);
} }
@ -209,23 +212,22 @@ export class PluginManager {
transaction, transaction,
filter: { name: plugin }, filter: { name: plugin },
}); });
if (model) { if (!model) {
throw new Error(`${plugin} plugin already exists`); const { enabled, builtIn, installed, ...others } = options;
} model = await this.repository.create({
const { enabled, builtIn, installed, ...others } = options; transaction,
await this.repository.create({ values: {
transaction, name: plugin,
values: { version: packageJson.version,
name: plugin, enabled: !!enabled,
version: packageJson.version, builtIn: !!builtIn,
enabled: !!enabled, installed: !!installed,
builtIn: !!builtIn, options: {
installed: !!installed, ...others,
options: { },
...others,
}, },
}, });
}); }
const file = resolve( const file = resolve(
process.cwd(), process.cwd(),
'packages', 'packages',

View File

@ -1,4 +1,3 @@
import { Database } from '@nocobase/database';
import { Application } from './application'; import { Application } from './application';
import { InstallOptions } from './plugin-manager'; import { InstallOptions } from './plugin-manager';
@ -25,15 +24,17 @@ export type PluginType = typeof Plugin;
export abstract class Plugin<O = any> implements PluginInterface { export abstract class Plugin<O = any> implements PluginInterface {
options: any; options: any;
app: Application; app: Application;
db: Database;
constructor(app: Application, options?: any) { constructor(app: Application, options?: any) {
this.app = app; this.app = app;
this.db = app.db;
this.setOptions(options); this.setOptions(options);
this.afterAdd(); this.afterAdd();
} }
get db() {
return this.app.db;
}
get enabled() { get enabled() {
return this.options.enabled; return this.options.enabled;
} }

View File

@ -13,11 +13,11 @@ import {
beforeCreateForChildrenCollection, beforeCreateForChildrenCollection,
beforeCreateForReverseField, beforeCreateForReverseField,
beforeDestroyForeignKey, beforeDestroyForeignKey,
beforeInitOptions, beforeInitOptions
} from './hooks'; } from './hooks';
import { CollectionModel, FieldModel } from './models';
import { InheritedCollection } from '@nocobase/database'; import { InheritedCollection } from '@nocobase/database';
import { CollectionModel, FieldModel } from './models';
export class CollectionManagerPlugin extends Plugin { export class CollectionManagerPlugin extends Plugin {
async beforeLoad() { async beforeLoad() {

View File

@ -69,7 +69,7 @@ export class PresetNocoBase extends Plugin {
await this.addBuiltInPlugins(); await this.addBuiltInPlugins();
} }
const builtInPlugins = this.getBuiltInPlugins(); const builtInPlugins = this.getBuiltInPlugins();
const plugins = await this.db.getRepository('applicationPlugins').find(); const plugins = await this.app.db.getRepository('applicationPlugins').find();
const pluginNames = plugins.map((p) => p.name); const pluginNames = plugins.map((p) => p.name);
await this.app.pm.add( await this.app.pm.add(
builtInPlugins.filter((plugin) => !pluginNames.includes(plugin)), builtInPlugins.filter((plugin) => !pluginNames.includes(plugin)),