Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 15 additions & 9 deletions dev/create-sequelize-instance.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
import type { Options as Sequelize6Options } from 'sequelize';
import { Sequelize as Sequelize6 } from 'sequelize';
import type { Options as Sequelize7Options, Sequelize as Sequelize7 } from '@sequelize/core';
import { wrapOptions } from './wrap-options';
import type { Options as Sequelize6Options } from "sequelize";
import { Sequelize as Sequelize6 } from "sequelize";
import type {
Options as Sequelize7Options,
Sequelize as Sequelize7,
} from "@sequelize/core";
import { wrapOptions, wrapOptionsV7 } from "./wrap-options";

export function createSequelize6Instance(options?: Sequelize6Options): Sequelize6 {
export function createSequelize6Instance(
options?: Sequelize6Options
): Sequelize6 {
return new Sequelize6(wrapOptions(options));
}

export function createSequelize7Instance(options?: Sequelize7Options): Sequelize7 {
export function createSequelize7Instance(
options?: Sequelize7Options<any>

Check failure on line 16 in dev/create-sequelize-instance.ts

View workflow job for this annotation

GitHub Actions / sqlite (Node 18)

Type 'Options' is not generic.

Check failure on line 16 in dev/create-sequelize-instance.ts

View workflow job for this annotation

GitHub Actions / sqlite (Node 20)

Type 'Options' is not generic.

Check failure on line 16 in dev/create-sequelize-instance.ts

View workflow job for this annotation

GitHub Actions / sqlite (Node 10)

Type 'Options' is not generic.
): Sequelize7 {
// not compatible with node 10
const { Sequelize: Sequelize7Constructor } = require('@sequelize/core');
// @ts-expect-error -- wrapOptions expect sequelize 6.
return new Sequelize7Constructor(wrapOptions(options));
const { Sequelize: Sequelize7Constructor } = require("@sequelize/core");
return new Sequelize7Constructor(wrapOptionsV7(options));
}
57 changes: 49 additions & 8 deletions dev/wrap-options.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
import defaults from 'lodash/defaults.js';
import { CiDbConfigs } from './ci-db-configs';
import { log } from './logging';
import type { Dialect, Options } from 'sequelize';
import defaults from "lodash/defaults.js";
import { CiDbConfigs } from "./ci-db-configs";
import { log } from "./logging";
import type {
Dialect as Sequelize6Dialect,
Options as Sequelize6Options,
} from "sequelize";
import type {
Options as Sequelize7Options,
Sequelize as Sequelize7,
} from "@sequelize/core";

export function wrapOptions(options: Options = {}) {
export function wrapOptions(options: Sequelize6Options = {}) {
if (!process.env.DIALECT) {
throw new Error('Dialect is not defined! Aborting.');
throw new Error("Dialect is not defined! Aborting.");
}

const isPostgresNative = process.env.DIALECT === 'postgres-native';
const dialect = (isPostgresNative ? 'postgres' : process.env.DIALECT) as Dialect;
const isPostgresNative = process.env.DIALECT === "postgres-native";
const dialect = (
isPostgresNative ? "postgres" : process.env.DIALECT
) as Sequelize6Dialect;

// this fails in the CI due to mismatch between Sequelize 6 & 7. Should be resolved once we drop Sequelize 6.
// eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error
Expand All @@ -31,3 +40,35 @@ export function wrapOptions(options: Options = {}) {

return options;
}

export function wrapOptionsV7(options: Partial<Sequelize7Options<any>> = {}) {
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using 'any' as the generic type parameter reduces type safety. Consider using a more specific type or making it generic to preserve type information.

Suggested change
export function wrapOptionsV7(options: Partial<Sequelize7Options<any>> = {}) {
export function wrapOptionsV7<M extends object = any>(options: Partial<Sequelize7Options<M>> = {}) {

Copilot uses AI. Check for mistakes.
if (!process.env.DIALECT) {
throw new Error("Dialect is not defined! Aborting.");
}

const isPostgresNative = process.env.DIALECT === "postgres-native";
const dialect = isPostgresNative ? "postgres" : process.env.DIALECT;

// Get the CI config for this dialect
const config = CiDbConfigs[dialect as keyof typeof CiDbConfigs] as any;
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using 'as any' type assertion bypasses type safety. Consider properly typing the config transformation or using a type-safe approach to handle the configuration mapping.

Suggested change
const config = CiDbConfigs[dialect as keyof typeof CiDbConfigs] as any;
const config = CiDbConfigs[dialect as keyof typeof CiDbConfigs] as Partial<Sequelize7Options<any>>;

Copilot uses AI. Check for mistakes.

// Transform Sequelize v6-style options to v7-style
const transformedConfig = { ...config };
if (transformedConfig.username) {
transformedConfig.user = transformedConfig.username;
delete transformedConfig.username;
}

const finalOptions = {
dialect: dialect,
logging: log,
...transformedConfig,
...options,
};

if (isPostgresNative) {
finalOptions.native = true;
}

return finalOptions;
}
Loading
Loading