Skip to content

Commit a8a5064

Browse files
committed
feat!: move sqlite, postgres, mysql, clickhouse and mongo connectors out of the project to different packages
BREAKING CHANGE: Now you need to install package with connector for each database you use. For example "@adminforth/connector-sqlite"
1 parent 9e2b046 commit a8a5064

14 files changed

Lines changed: 192 additions & 2925 deletions

File tree

adminforth/commands/createApp/templates/package.json.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"dependencies": {
2727
"@dotenvx/dotenvx": "^1.34.0",
2828
"adminforth": "{{adminforthVersion}}",
29+
"@adminforth/connector-sqlite": "latest",
2930
"express": "latest-4",
3031
"zod": "^4.3.6"
3132
},

adminforth/dataConnectors/clickhouse.ts

Lines changed: 0 additions & 670 deletions
This file was deleted.

adminforth/dataConnectors/mongo.ts

Lines changed: 0 additions & 532 deletions
This file was deleted.

adminforth/dataConnectors/mysql.ts

Lines changed: 0 additions & 568 deletions
This file was deleted.

adminforth/dataConnectors/postgres.ts

Lines changed: 0 additions & 559 deletions
This file was deleted.

adminforth/dataConnectors/sqlite.ts

Lines changed: 0 additions & 548 deletions
This file was deleted.

adminforth/index.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
import AdminForthAuth from './auth.js';
2-
import MongoConnector from './dataConnectors/mongo.js';
3-
import PostgresConnector from './dataConnectors/postgres.js';
4-
import MysqlConnector from './dataConnectors/mysql.js';
5-
import SQLiteConnector from './dataConnectors/sqlite.js';
62
import CodeInjector from './modules/codeInjector.js';
73
import ExpressServer from './servers/express.js';
84
import OpenApiRegistry from './servers/openapi.js';
@@ -40,7 +36,6 @@ import {
4036
import AdminForthPlugin from './basePlugin.js';
4137
import ConfigValidator from './modules/configValidator.js';
4238
import AdminForthRestAPI, { interpretResource } from './modules/restApi.js';
43-
import ClickhouseConnector from './dataConnectors/clickhouse.js';
4439
import QdrantConnector from './dataConnectors/qdrant.js';
4540
import OperationalResource from './modules/operationalResource.js';
4641
import SocketBroker from './modules/socketBroker.js';
@@ -488,9 +483,27 @@ class AdminForth implements IAdminForth {
488483
return null;
489484
}
490485

486+
async tryToImportConnector(connectorName: string) {
487+
try {
488+
const connectorModule = await import(`@adminforth/connector-${connectorName}`);
489+
return connectorModule.default;
490+
} catch (e) {
491+
throw new Error(`____________________
492+
Error while importing ${connectorName} connector: ${e}.
493+
If you want to use ${connectorName} data source, please install @adminforth/connector-${connectorName} package.
494+
____________________
495+
`);
496+
}
497+
}
491498

492499
async discoverDatabases() {
493500
this.statuses.dbDiscover = 'running';
501+
const SQLiteConnector = await this.tryToImportConnector('sqlite');
502+
const PostgresConnector = await this.tryToImportConnector('postgres');
503+
const MongoConnector = await this.tryToImportConnector('mongo');
504+
const ClickhouseConnector = await this.tryToImportConnector('clickhouse');
505+
const MysqlConnector = await this.tryToImportConnector('mysql');
506+
494507
this.connectorClasses = {
495508
'sqlite': SQLiteConnector,
496509
'postgres': PostgresConnector,

adminforth/modules/codeInjector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ class CodeInjector implements ICodeInjector {
158158
}
159159

160160

161-
async doesUserHasPnpmLockFile(dir: string): Promise<boolean> {
161+
public async doesUserHasPnpmLockFile(dir: string): Promise<boolean> {
162162
if (!dir) {
163163
return false;
164164
}

adminforth/package.json

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,16 +85,15 @@
8585
"type": "module",
8686
"dependencies": {
8787
"@babel/parser": "^7.27.5",
88-
"@clickhouse/client": "^1.4.0",
8988
"@faker-js/faker": "^9.0.3",
9089
"@inquirer/prompts": "^7.4.1",
9190
"@qdrant/js-client-rest": "^1.17.0",
9291
"@scalar/express-api-reference": "^0.9.7",
9392
"@types/express": "^4.17.21",
93+
"adminforth": "link:",
9494
"ajv": "^8.18.0",
9595
"arg": "^5.0.2",
9696
"ast-types": "^0.14.2",
97-
"better-sqlite3": "^11.10.0",
9897
"bson": "^7.2.0",
9998
"chalk": "^5.4.1",
10099
"connection-string": "^4.4.0",
@@ -111,11 +110,8 @@
111110
"jiti": "^2.4.2",
112111
"jsonwebtoken": "^9.0.2",
113112
"listr2": "^8.2.5",
114-
"mongodb": "6.6",
115113
"multer": "^2.1.1",
116-
"mysql2": "^3.14.2",
117114
"node-fetch": "^3.3.2",
118-
"pg": "^8.11.5",
119115
"pino": "^10.1.0",
120116
"pino-pretty": "^13.1.3",
121117
"private-ip": "^3.0.2",
@@ -133,5 +129,29 @@
133129
"semantic-release": "^24.2.1",
134130
"semantic-release-slack-bot": "^4.0.2",
135131
"typescript": "^5.4.5"
132+
},
133+
"peerDependencies": {
134+
"@adminforth/connector-clickhouse": "^1.0.1",
135+
"@adminforth/connector-mongo": "^1.0.0",
136+
"@adminforth/connector-mysql": "^1.0.0",
137+
"@adminforth/connector-postgres": "^1.0.0",
138+
"@adminforth/connector-sqlite": "^1.0.0"
139+
},
140+
"peerDependenciesMeta": {
141+
"@adminforth/connector-sqlite": {
142+
"optional": true
143+
},
144+
"@adminforth/connector-postgres": {
145+
"optional": true
146+
},
147+
"@adminforth/connector-mongo": {
148+
"optional": true
149+
},
150+
"@adminforth/connector-mysql": {
151+
"optional": true
152+
},
153+
"@adminforth/connector-clickhouse": {
154+
"optional": true
155+
}
136156
}
137157
}

adminforth/pnpm-lock.yaml

Lines changed: 107 additions & 36 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)