Skip to content
This repository was archived by the owner on Sep 4, 2024. It is now read-only.

Commit 18200f8

Browse files
committed
refactor(datasource): add check for supported connectors
1 parent f47382f commit 18200f8

File tree

5 files changed

+59
-8
lines changed

5 files changed

+59
-8
lines changed

package-lock.json

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

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"eslint": "lb-eslint --report-unused-disable-directives .",
2626
"eslint:fix": "npm run eslint -- --fix",
2727
"pretest": "npm run rebuild",
28-
"test": "echo 'No Tests'",
28+
"test": "lb-mocha --allow-console-logs \"dist/__tests__\"",
2929
"posttest": "npm run lint",
3030
"test:dev": "lb-mocha --allow-console-logs dist/__tests__/**/*.js && npm run posttest",
3131
"clean": "lb-clean dist *.tsbuildinfo .eslintcache",
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import {expect} from '@loopback/testlab';
2+
import {SequelizeDataSource} from '../../sequelize';
3+
import {SupportedLoopbackConnectors} from '../../sequelize/connector-mapping';
4+
5+
describe('Sequelize DataSource', () => {
6+
it('throws error when nosql connectors are supplied', () => {
7+
try {
8+
new SequelizeDataSource({
9+
user: 'test',
10+
password: 'secret',
11+
connector: 'memory' as SupportedLoopbackConnectors,
12+
});
13+
} catch (err) {
14+
const result = err.message;
15+
expect(result).which.eql('Specified connector memory is not supported.');
16+
}
17+
});
18+
});

src/sequelize/connector-mapping.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import {Dialect as AllSequelizeDialects} from 'sequelize';
2+
3+
export type SupportedLoopbackConnectors = "mysql" | "postgresql" | "oracle" | "sqlite3" | "db2";
4+
/**
5+
* @key Loopback connectors name supported by this extension
6+
* @value Equivalent Dialect in Sequelize
7+
*/
8+
export const SupportedConnectorMapping: {
9+
[key in SupportedLoopbackConnectors]?: AllSequelizeDialects;
10+
} = {
11+
"mysql": "mysql",
12+
"postgresql": "postgres",
13+
"oracle": "oracle",
14+
"sqlite3" : "sqlite",
15+
"db2": "db2",
16+
};

src/sequelize/sequelize.datasource.base.ts

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,35 @@
11
import {LifeCycleObserver} from '@loopback/core';
22
import {juggler} from '@loopback/repository';
33
import {Options as SequelizeOptions, Sequelize} from 'sequelize';
4+
import {
5+
SupportedConnectorMapping as supportedConnectorMapping,
6+
SupportedLoopbackConnectors,
7+
} from './connector-mapping';
48

59
export class SequelizeDataSource
610
extends juggler.DataSource
711
implements LifeCycleObserver
812
{
9-
constructor(public config: SequelizeOptions & {user?: string}) {
13+
constructor(public config: SequelizeDataSourceConfig) {
1014
super(config);
15+
16+
if (!(this.config.connector in supportedConnectorMapping)) {
17+
throw new Error(
18+
`Specified connector ${
19+
this.config.connector ?? this.config.dialect
20+
} is not supported.`,
21+
);
22+
}
1123
}
24+
1225
sequelize?: Sequelize;
13-
async init(...injectedArgs: unknown[]): Promise<void> {
14-
console.log('injected args', injectedArgs);
15-
console.log('init called');
26+
async init(): Promise<void> {
1627
this.sequelize = new Sequelize({
1728
host: this.config.host,
1829
port: this.config.port,
1930
database: this.config.database,
20-
dialect: 'postgres',
31+
dialect:
32+
supportedConnectorMapping[this.config.connector ?? this.config.dialect],
2133
username: this.config.user ?? this.config.username,
2234
password: this.config.password,
2335
logging: console.log,
@@ -33,3 +45,8 @@ export class SequelizeDataSource
3345
this.sequelize?.close?.().catch(console.log);
3446
}
3547
}
48+
49+
export type SequelizeDataSourceConfig = SequelizeOptions & {
50+
user?: string;
51+
connector: SupportedLoopbackConnectors;
52+
};

0 commit comments

Comments
 (0)