Skip to content

Commit eb79f0a

Browse files
committed
fix: load seeders classes using typeorm (jorgebodega#324)
1 parent f80e5a4 commit eb79f0a

File tree

6 files changed

+10
-37
lines changed

6 files changed

+10
-37
lines changed

package.json

+2-10
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,10 @@
33
"bin": {
44
"typeorm-seeding": "dist/cli.js"
55
},
6-
"contributors": [
7-
"Jorge Bodega <[email protected]> (https://github.com/jorgebodega)"
8-
],
6+
"contributors": ["Jorge Bodega <[email protected]> (https://github.com/jorgebodega)"],
97
"dependencies": {
108
"chalk": "4.1.2",
119
"commander": "12.1.0",
12-
"glob": "10.4.2",
1310
"ora": "5.4.1",
1411
"tslib": "2.6.3"
1512
},
@@ -32,12 +29,7 @@
3229
"engines": {
3330
"node": ">=18 <19 || >=20"
3431
},
35-
"keywords": [
36-
"typeorm",
37-
"seed",
38-
"seeding",
39-
"orm"
40-
],
32+
"keywords": ["typeorm", "seed", "seeding", "orm"],
4133
"license": "MIT",
4234
"main": "dist/index.js",
4335
"name": "@jorgebodega/typeorm-seeding",

pnpm-lock.yaml

-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/commands/seed.command.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { SeederExecutionError } from "../errors/SeederExecutionError";
88
import { useDataSource, useSeeders } from "../helpers";
99
import type { Seeder } from "../seeder";
1010
import type { Constructable, SeedCommandArguments } from "../types";
11-
import { calculateFilePath, loadDataSource, loadSeeders } from "../utils";
11+
import { loadDataSource, loadSeeders } from "../utils";
1212

1313
async function run(paths: string[]) {
1414
const opts = seedCommand.opts<SeedCommandArguments>();
@@ -32,9 +32,7 @@ async function run(paths: string[]) {
3232
spinner.start("Importing seeders");
3333
let seeders!: Constructable<Seeder>[];
3434
try {
35-
const seederFiles = paths.flatMap(calculateFilePath);
36-
37-
seeders = await loadSeeders(seederFiles);
35+
seeders = await loadSeeders(dataSource, paths);
3836

3937
spinner.succeed("Seeder imported");
4038
} catch (error: unknown) {

src/utils/commandUtils.ts

+6-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { DataSource } from "typeorm";
2+
import { importClassesFromDirectories } from "typeorm/util/DirectoryExportedClassesLoader";
23
import { CommandUtils as TypeormCommandUtils } from "typeorm/commands/CommandUtils";
34
import { Seeder } from "../seeder";
45
import type { Constructable } from "../types";
@@ -7,22 +8,13 @@ export async function loadDataSource(dataSourceFilePath: string): Promise<DataSo
78
return TypeormCommandUtils.loadDataSource(dataSourceFilePath);
89
}
910

10-
export async function loadSeeders(seederPaths: string[]): Promise<Constructable<Seeder>[]> {
11-
const seederFileExports = (await Promise.all(seederPaths.map((seederFile) => import(seederFile))))
12-
.map((seederExport) => seederExport.default?.default ?? seederExport.default)
13-
.filter((seederExport) => Boolean(seederExport));
11+
export async function loadSeeders(dataSource: DataSource, seederPaths: string[]): Promise<Constructable<Seeder>[]> {
12+
const seederFileExports = await importClassesFromDirectories(dataSource.logger, seederPaths);
1413

15-
if (seederFileExports.length === 0) {
16-
throw new Error("No default seeders found");
17-
}
14+
const seeders = seederFileExports.filter((seeder) => seeder.prototype instanceof Seeder) as Constructable<Seeder>[];
1815

19-
const seeders: Constructable<Seeder>[] = [];
20-
for (const fileExport in seederFileExports) {
21-
const seederExport = seederFileExports[fileExport];
22-
const instance = new seederExport();
23-
if (instance instanceof Seeder) {
24-
seeders.push(seederExport);
25-
}
16+
if (seeders.length === 0) {
17+
throw new Error("No default seeders found");
2618
}
2719

2820
return seeders;

src/utils/fileHandling.ts

-5
This file was deleted.

src/utils/index.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
11
export * from "./commandUtils";
2-
export * from "./fileHandling";

0 commit comments

Comments
 (0)