ChengLei Shao 6cbc96f1c7
feat: support for static loading logic of plugins (#5466)
* feat: extend database dialect

* chore: error message

* fix: pg version

* chore: error message

* feat: load plugins static import

* chore: static import

* fix: test

* chore: find packages

* fix: findAllPlugins

* feat: appendToBuiltInPlugins

* fix: runPluginStaticImports

* fix: create app

---------

Co-authored-by: chenos <chenlinxh@gmail.com>
2024-10-24 20:21:49 +08:00

53 lines
1.3 KiB
TypeScript

/**
* This file is part of the NocoBase (R) project.
* Copyright (c) 2020-2024 NocoBase Co., Ltd.
* Authors: NocoBase Team.
*
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import { Database, DatabaseOptions } from '../database';
import semver from 'semver';
export interface DialectVersionGuard {
sql: string;
get: (v: string) => string;
version: string;
}
export abstract class BaseDialect {
static dialectName: string;
getSequelizeOptions(options: DatabaseOptions) {
return options;
}
async checkDatabaseVersion(db: Database): Promise<boolean> {
const versionGuard = this.getVersionGuard();
const result = await db.sequelize.query(versionGuard.sql, {
type: 'SELECT',
});
// @ts-ignore
const version = versionGuard.get(result?.[0]?.version);
const versionResult = semver.satisfies(version, versionGuard.version);
if (!versionResult) {
throw new Error(
`to use ${(this.constructor as typeof BaseDialect).dialectName}, please ensure the version is ${
versionGuard.version
}, current version is ${version}`,
);
}
return true;
}
getVersionGuard(): DialectVersionGuard {
throw new Error('not implemented');
}
}