Skip to content
This repository was archived by the owner on Mar 18, 2022. It is now read-only.

Commit e12479e

Browse files
aktraorevlapo
authored andcommitted
feat: log files loaded from glob patterns (typeorm#4346)
This new feature logs the files that are loaded using the glob patterns to aid in debugging. Closes: typeorm#4162
1 parent c8dbf09 commit e12479e

5 files changed

+47
-7
lines changed

docs/troubleshooting.md

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Troubleshooting
2+
3+
* [Glob patterns](#glob-patterns)
4+
5+
## Glob Patterns
6+
7+
Glob patterns are used in the TypeOrm to specify the locations of entities, migrations, subscriber and other information. Errors in the patterns can lead to the common `RepositoryNotFoundError` and familiar errors. In order to check if any files were loaded by TypeOrm using the glob patterns, all you need to do is set the logging level to `info` such as explained in the [Logging](./logging.md) section of the documentation. This will allow you to have logs in the console that may look like this:
8+
9+
```bash
10+
# in case of an error
11+
INFO: No classes were found using the provided glob pattern: "dist/**/*.entity{.ts}"
12+
```
13+
```bash
14+
# when files are found
15+
INFO: All classes found using provided glob pattern "dist/**/*.entity{.js,.ts}" : "dist/app/user/user.entity.js | dist/app/common/common.entity.js"
16+
```

docs/zh_CN/troubleshooting.md

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# 故障排除
2+
3+
* [全球模式](#全球模式)
4+
5+
## 全球模式
6+
7+
在类型中使用全局模式来指定实体,迁移,订户和其他信息的位置。模式中的错误可能导致常见的`RepositoryNotFoundError`和熟悉的错误。为了检查TypeOrm是否使用glob模式加载了任何文件,您需要做的就是将日志级别设置为`info`,如文档的[Logging](./logging.md)部分所述。 这将允许您拥有可能如下所示的日志:
8+
9+
```bash
10+
# 如果出错
11+
INFO: No classes were found using the provided glob pattern: "dist/**/*.entity{.ts}"
12+
```
13+
```bash
14+
# 何时找到文件
15+
INFO: All classes found using provided glob pattern "dist/**/*.entity{.js,.ts}" : "dist/app/user/user.entity.js | dist/app/common/common.entity.js"
16+
```

src/connection/ConnectionMetadataBuilder.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export class ConnectionMetadataBuilder {
3131
*/
3232
buildMigrations(migrations: (Function|string)[]): MigrationInterface[] {
3333
const [migrationClasses, migrationDirectories] = OrmUtils.splitClassesAndStrings(migrations);
34-
const allMigrationClasses = [...migrationClasses, ...importClassesFromDirectories(migrationDirectories)];
34+
const allMigrationClasses = [...migrationClasses, ...importClassesFromDirectories(this.connection.logger, migrationDirectories)];
3535
return allMigrationClasses.map(migrationClass => getFromContainer<MigrationInterface>(migrationClass));
3636
}
3737

@@ -40,7 +40,7 @@ export class ConnectionMetadataBuilder {
4040
*/
4141
buildSubscribers(subscribers: (Function|string)[]): EntitySubscriberInterface<any>[] {
4242
const [subscriberClasses, subscriberDirectories] = OrmUtils.splitClassesAndStrings(subscribers || []);
43-
const allSubscriberClasses = [...subscriberClasses, ...importClassesFromDirectories(subscriberDirectories)];
43+
const allSubscriberClasses = [...subscriberClasses, ...importClassesFromDirectories(this.connection.logger, subscriberDirectories)];
4444
return getMetadataArgsStorage()
4545
.filterSubscribers(allSubscriberClasses)
4646
.map(metadata => getFromContainer<EntitySubscriberInterface<any>>(metadata.target));
@@ -56,7 +56,7 @@ export class ConnectionMetadataBuilder {
5656
const entityClasses: Function[] = entityClassesOrSchemas.filter(entityClass => (entityClass instanceof EntitySchema) === false) as any;
5757
const entitySchemas: EntitySchema<any>[] = entityClassesOrSchemas.filter(entityClass => entityClass instanceof EntitySchema) as any;
5858

59-
const allEntityClasses = [...entityClasses, ...importClassesFromDirectories(entityDirectories)];
59+
const allEntityClasses = [...entityClasses, ...importClassesFromDirectories(this.connection.logger, entityDirectories)];
6060
allEntityClasses.forEach(entityClass => { // if we have entity schemas loaded from directories
6161
if (entityClass instanceof EntitySchema) {
6262
entitySchemas.push(entityClass);

src/logger/AdvancedConsoleLogger.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,11 @@ export class AdvancedConsoleLogger implements Logger {
7474
switch (level) {
7575
case "log":
7676
if (this.options === "all" || (this.options instanceof Array && this.options.indexOf("log") !== -1))
77-
console.log(message);
77+
PlatformTools.log(message);
7878
break;
7979
case "info":
8080
if (this.options === "all" || (this.options instanceof Array && this.options.indexOf("info") !== -1))
81-
console.info(message);
81+
PlatformTools.logInfo("INFO:", message);
8282
break;
8383
case "warn":
8484
if (this.options === "all" || (this.options instanceof Array && this.options.indexOf("warn") !== -1))

src/util/DirectoryExportedClassesLoader.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import {PlatformTools} from "../platform/PlatformTools";
22
import {EntitySchema} from "../index";
3-
3+
import {Logger} from "../logger/Logger";
44
/**
55
* Loads all exported classes from the given directory.
66
*/
7-
export function importClassesFromDirectories(directories: string[], formats = [".js", ".ts"]): Function[] {
7+
export function importClassesFromDirectories(logger: Logger, directories: string[], formats = [".js", ".ts"]): Function[] {
88

9+
const logLevel = "info";
10+
const classesNotFoundMessage = "No classes were found using the provided glob pattern: ";
11+
const classesFoundMessage = "All classes found using provided glob pattern";
912
function loadFileClasses(exported: any, allLoaded: Function[]) {
1013
if (typeof exported === "function" || exported instanceof EntitySchema) {
1114
allLoaded.push(exported);
@@ -24,6 +27,11 @@ export function importClassesFromDirectories(directories: string[], formats = ["
2427
return allDirs.concat(PlatformTools.load("glob").sync(PlatformTools.pathNormalize(dir)));
2528
}, [] as string[]);
2629

30+
if (directories.length > 0 && allFiles.length === 0) {
31+
logger.log(logLevel, `${classesNotFoundMessage} "${directories}"`);
32+
} else if (allFiles.length > 0) {
33+
logger.log(logLevel, `${classesFoundMessage} "${directories}" : "${allFiles}"`);
34+
}
2735
const dirs = allFiles
2836
.filter(file => {
2937
const dtsExtension = file.substring(file.length - 5, file.length);

0 commit comments

Comments
 (0)