Skip to content

Commit a578896

Browse files
Merge pull request #1517 from markscott-ms/loggers
Fix initialization of loggers that check `process.env.DEBUG`; quiet templating logs
2 parents 73aadef + 450b9e6 commit a578896

File tree

8 files changed

+120
-57
lines changed

8 files changed

+120
-57
lines changed

shared/src/model-visitor/logging-visitor.spec.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { describe, it, expect, vi } from 'vitest';
22
import { LoggingVisitor } from './logging-visitor';
33
import { CalmCore } from '../model/core';
4-
import {CalmCoreSchema} from '../types/core-types';
4+
import { CalmCoreSchema } from '../types/core-types';
55

66
describe('LoggingVisitor', () => {
77

@@ -24,7 +24,7 @@ describe('LoggingVisitor', () => {
2424
}
2525
],
2626
'details': {
27-
'detailed-architecture': 'http://example.com/arch-detail'
27+
'detailed-architecture': 'http://example.com/arch-detail'
2828
}
2929
},
3030
{
@@ -82,11 +82,10 @@ describe('LoggingVisitor', () => {
8282
};
8383

8484
// eslint-disable-next-line @typescript-eslint/no-explicit-any
85-
(LoggingVisitor as any).logger = logger;
8685
const json = JSON.stringify(testArch, null, 2);
8786
const architecture: CalmCoreSchema = JSON.parse(json);
8887
const core = CalmCore.fromSchema(architecture);
89-
const visitor = new LoggingVisitor();
88+
const visitor = new LoggingVisitor((logger as Logger));
9089
await visitor.visit(core);
9190

9291
const logLines = logger.info.mock.calls.map(args => args[0]);

shared/src/model-visitor/logging-visitor.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
1-
import {Resolvable, ResolvableAndAdaptable} from '../model/resolvable';
2-
import {CalmModelVisitor} from './calm-model-visitor';
3-
import { initLogger } from '../logger.js';
1+
import { Resolvable, ResolvableAndAdaptable } from '../model/resolvable';
2+
import { CalmModelVisitor } from './calm-model-visitor';
3+
import { initLogger, Logger } from '../logger.js';
44

55
export class LoggingVisitor implements CalmModelVisitor {
6-
private static logger = initLogger(process.env.DEBUG === 'true', LoggingVisitor.name);
6+
private static _logger: Logger | undefined;
7+
private readonly _loggerInstance?: Logger;
8+
9+
constructor(logger?: Logger) {
10+
this._loggerInstance = logger;
11+
}
12+
13+
private static get logger(): Logger {
14+
if (!this._logger) {
15+
this._logger = initLogger(process.env.DEBUG === 'true', LoggingVisitor.name);
16+
}
17+
return this._logger;
18+
}
719

820
async visit(obj: unknown, path: string[] = []): Promise<void> {
9-
const logger = LoggingVisitor.logger;
21+
const logger = this._loggerInstance ?? LoggingVisitor.logger;
1022
if (!obj || typeof obj !== 'object') return;
1123
const keys = Object.keys(obj);
1224
for (const key of keys) {

shared/src/resolver/calm-reference-resolver.ts

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import fs from 'fs';
2-
import { initLogger } from '../logger.js';
2+
import { initLogger, Logger } from '../logger.js';
33
import axios from 'axios';
44

55
export interface CalmReferenceResolver {
@@ -8,8 +8,14 @@ export interface CalmReferenceResolver {
88
}
99

1010
export class FileReferenceResolver implements CalmReferenceResolver {
11+
private static _logger: Logger | undefined;
1112

12-
private static logger = initLogger(process.env.DEBUG === 'true', FileReferenceResolver.name);
13+
private static get logger(): Logger {
14+
if (!this._logger) {
15+
this._logger = initLogger(process.env.DEBUG === 'true', FileReferenceResolver.name);
16+
}
17+
return this._logger;
18+
}
1319

1420
canResolve(ref: string): boolean {
1521
return fs.existsSync(ref);
@@ -48,7 +54,14 @@ export class InMemoryResolver implements CalmReferenceResolver {
4854

4955

5056
export class HttpReferenceResolver implements CalmReferenceResolver {
51-
private static logger = initLogger(process.env.DEBUG === 'true', HttpReferenceResolver.name);
57+
private static _logger: Logger | undefined;
58+
59+
private static get logger(): Logger {
60+
if (!this._logger) {
61+
this._logger = initLogger(process.env.DEBUG === 'true', HttpReferenceResolver.name);
62+
}
63+
return this._logger;
64+
}
5265

5366
canResolve(ref: string): boolean {
5467
return ref.startsWith('http://') || ref.startsWith('https://');
@@ -70,7 +83,15 @@ export class HttpReferenceResolver implements CalmReferenceResolver {
7083
}
7184

7285
export class CompositeReferenceResolver implements CalmReferenceResolver {
73-
private static logger = initLogger(process.env.DEBUG === 'true', CompositeReferenceResolver.name);
86+
private static _logger: Logger | undefined;
87+
88+
private static get logger(): Logger {
89+
if (!this._logger) {
90+
this._logger = initLogger(process.env.DEBUG === 'true', CompositeReferenceResolver.name);
91+
}
92+
return this._logger;
93+
}
94+
7495
private httpResolver: HttpReferenceResolver;
7596
private fileResolver: FileReferenceResolver;
7697

@@ -107,7 +128,7 @@ export class MappedReferenceResolver implements CalmReferenceResolver {
107128
constructor(
108129
private mapping: Map<string, string>,
109130
private delegate: CalmReferenceResolver
110-
) {}
131+
) { }
111132

112133
canResolve(ref: string): boolean {
113134
const effective = this.getEffectiveRef(ref);

shared/src/template/template-bundle-file-loader.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import fs from 'fs';
22
import path from 'path';
3-
import {IndexFile, TemplateEntry} from './types.js';
4-
import { initLogger } from '../logger.js';
3+
import { IndexFile, TemplateEntry } from './types.js';
4+
import { initLogger, Logger } from '../logger.js';
55

66

77
export interface ITemplateBundleLoader {
@@ -88,7 +88,14 @@ export class TemplateBundleFileLoader implements ITemplateBundleLoader {
8888
private readonly templateBundlePath: string;
8989
private readonly config: IndexFile;
9090
private readonly templateFiles: Record<string, string>;
91-
private static logger = initLogger(process.env.DEBUG === 'true', TemplateBundleFileLoader.name);
91+
private static _logger: Logger | undefined;
92+
93+
private static get logger(): Logger {
94+
if (!this._logger) {
95+
this._logger = initLogger(process.env.DEBUG === 'true', TemplateBundleFileLoader.name);
96+
}
97+
return this._logger;
98+
}
9299

93100
constructor(templateBundlePath: string) {
94101
this.templateBundlePath = templateBundlePath;

shared/src/template/template-engine.spec.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ vi.mock('./template-path-extractor.js');
1414
describe('TemplateEngine', () => {
1515
let mockFileLoader: ReturnType<typeof vi.mocked<TemplateBundleFileLoader>>;
1616
let mockTransformer: ReturnType<typeof vi.mocked<CalmTemplateTransformer>>;
17+
let loggerDebugSpy: ReturnType<typeof vi.spyOn>;
1718
let loggerInfoSpy: ReturnType<typeof vi.spyOn>;
1819
let loggerWarnSpy: ReturnType<typeof vi.spyOn>;
1920
const testOutputDir = './test-output';
@@ -29,6 +30,7 @@ describe('TemplateEngine', () => {
2930
getTransformedModel: vi.fn(),
3031
} as unknown as ReturnType<typeof vi.mocked<CalmTemplateTransformer>>;
3132

33+
loggerDebugSpy = vi.spyOn(TemplateEngine['logger'], 'debug').mockImplementation(vi.fn());
3234
loggerInfoSpy = vi.spyOn(TemplateEngine['logger'], 'info').mockImplementation(vi.fn());
3335
loggerWarnSpy = vi.spyOn(TemplateEngine['logger'], 'warn').mockImplementation(vi.fn());
3436

@@ -119,7 +121,7 @@ describe('TemplateEngine', () => {
119121

120122
vi.spyOn(fs, 'existsSync').mockReturnValue(false);
121123
const mkdirSyncSpy = vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
122-
const writeFileSyncSpy = vi.spyOn(fs, 'writeFileSync').mockImplementation(() => {});
124+
const writeFileSyncSpy = vi.spyOn(fs, 'writeFileSync').mockImplementation(() => { });
123125

124126
const engine = new TemplateEngine(mockFileLoader, mockTransformer);
125127

@@ -156,7 +158,7 @@ describe('TemplateEngine', () => {
156158

157159
vi.spyOn(fs, 'existsSync').mockReturnValue(false);
158160
const mkdirSyncSpy = vi.spyOn(fs, 'mkdirSync').mockImplementation(() => undefined);
159-
const writeFileSyncSpy = vi.spyOn(fs, 'writeFileSync').mockImplementation(() => {});
161+
const writeFileSyncSpy = vi.spyOn(fs, 'writeFileSync').mockImplementation(() => { });
160162

161163
const engine = new TemplateEngine(mockFileLoader, mockTransformer);
162164

@@ -276,7 +278,7 @@ describe('TemplateEngine', () => {
276278
new TemplateEngine(mockFileLoader, mockTransformer);
277279

278280
expect(TemplatePreprocessor.preprocessTemplate).toHaveBeenCalledWith(originalTemplate);
279-
expect(loggerInfoSpy).toHaveBeenCalledWith(preprocessedTemplate);
281+
expect(loggerDebugSpy).toHaveBeenCalledWith(preprocessedTemplate);
280282
});
281283
});
282284

shared/src/template/template-engine.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
22
import Handlebars from 'handlebars';
33
import { IndexFile, TemplateEntry, CalmTemplateTransformer } from './types.js';
4-
import {ITemplateBundleLoader} from './template-bundle-file-loader.js';
5-
import { initLogger } from '../logger.js';
4+
import { ITemplateBundleLoader } from './template-bundle-file-loader.js';
5+
import { initLogger, Logger } from '../logger.js';
66
import fs from 'fs';
77
import path from 'path';
8-
import {TemplatePathExtractor} from './template-path-extractor.js';
9-
import {TemplatePreprocessor} from './template-preprocessor.js';
8+
import { TemplatePathExtractor } from './template-path-extractor.js';
9+
import { TemplatePreprocessor } from './template-preprocessor.js';
1010

1111
export class TemplateEngine {
1212
private readonly templates: Record<string, Handlebars.TemplateDelegate>;
1313
private readonly config: IndexFile;
1414
private transformer: CalmTemplateTransformer;
15-
private static logger = initLogger(process.env.DEBUG === 'true', TemplateEngine.name);
15+
private static _logger: Logger | undefined;
16+
17+
private static get logger(): Logger {
18+
if (!this._logger) {
19+
this._logger = initLogger(process.env.DEBUG === 'true', TemplateEngine.name);
20+
}
21+
return this._logger;
22+
}
1623

1724
constructor(fileLoader: ITemplateBundleLoader, transformer: CalmTemplateTransformer) {
1825
this.config = fileLoader.getConfig();
@@ -27,7 +34,7 @@ export class TemplateEngine {
2734

2835
for (const [fileName, content] of Object.entries(templateFiles)) {
2936
const preprocessed = TemplatePreprocessor.preprocessTemplate(content);
30-
logger.info(preprocessed);
37+
logger.debug(preprocessed);
3138
compiledTemplates[fileName] = Handlebars.compile(preprocessed);
3239
}
3340

0 commit comments

Comments
 (0)