8000 Simplify RESX parse logging. · rbuckton/rushstack@19ff1a4 · GitHub
[go: up one dir, main page]

Skip to content

Commit 19ff1a4

Browse files
committed
Simplify RESX parse logging.
1 parent b365b1f commit 19ff1a4

File tree

9 files changed

+134
-124
lines changed

9 files changed

+134
-124
lines changed

common/reviews/api/localization-plugin.api.md

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
55
```ts
66

7-
import { loader } from 'webpack';
87
import { StringValuesTypingsGenerator } from '@rushstack/typings-generator';
98
import { Terminal } from '@rushstack/node-core-library';
109
import * as Webpack from 'webpack';
@@ -108,22 +107,14 @@ export interface _ILocFile {
108107
[stringName: string]: _ILocalizedString;
109108
}
110109

111-
// @internal (undocumented)
112-
export interface _ILoggerOptions {
113-
// (undocumented)
114-
writeError: (message: string) => void;
115-
// (undocumented)
116-
writeWarning: (message: string) => void;
117-
}
118-
119110
// @internal (undocumented)
120111
export interface _IParseLocFileOptions {
121112
// (undocumented)
122113
content: string;
123114
// (undocumented)
124115
filePath: string;
125116
// (undocumented)
126-
loggerOptions: _ILoggerOptions;
117+
terminal: Terminal;
127118
}
128119

129120
// @public
@@ -204,14 +195,12 @@ export class LocalizationPlugin implements Webpack.Plugin {
204195
export class _LocFileParser {
205196
// (undocumented)
206197
static parseLocFile(options: _IParseLocFileOptions): _ILocFile;
207-
// (undocumented)
208-
static parseLocFileFromLoader(content: string, loaderContext: loader.LoaderContext): _ILocFile;
209198
}
210199

211200
// @public
212201
export class TypingsGenerator extends StringValuesTypingsGenerator {
213202
constructor(options: ITypingsGeneratorOptions);
214-
}
203+
}
215204

216205

217206
// (No @packageDocumentation comment for this package)

webpack/localization-plugin/src/LocFileTypingsGenerator.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
import { Terminal } from '@rushstack/node-core-library';
99

1010
import { ILocalizationFile } from './interfaces';
11-
import { ILoggerOptions } from './utilities/Logging';
1211
import { LocFileParser } from './utilities/LocFileParser';
1312

1413
/**
@@ -28,8 +27,6 @@ export interface ITypingsGeneratorOptions {
2827
* @public
2928
*/
3029
export class LocFileTypingsGenerator extends StringValuesTypingsGenerator {
31-
private _loggingOptions: ILoggerOptions;
32-
3330
public constructor(options: ITypingsGeneratorOptions) {
3431
super({
3532
...options,
@@ -38,7 +35,7 @@ export class LocFileTypingsGenerator extends StringValuesTypingsGenerator {
3835
const locFileData: ILocalizationFile = LocFileParser.parseLocFile({
3936
filePath: filePath,
4037
content: fileContents,
41-
loggerOptions: this._loggingOptions
38+
terminal: this._options.terminal!
4239
});
4340

4441
const typings: IStringValueTyping[] = [];
@@ -53,10 +50,5 @@ export class LocFileTypingsGenerator extends StringValuesTypingsGenerator {
5350
return { typings };
5451
}
5552
});
56-
57-
this._loggingOptions = {
58-
writeError: this._options.terminal!.writeErrorLine.bind(this._options.terminal),
59-
writeWarning: this._options.terminal!.writeWarningLine.bind(this._options.terminal)
60-
};
6153
}
6254
}

webpack/localization-plugin/src/index.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ export {
3131
IParseLocFileOptions as _IParseLocFileOptions
3232
} from './utilities/LocFileParser';
3333

34-
export {
35-
ILoggerOptions as _ILoggerOptions
36-
} from './utilities/Logging';
37-
3834
export {
3935
ILocalizedWebpackChunk
4036
} from './webpackInterfaces';

webpack/localization-plugin/src/loaders/InPlaceLocFileLoader.ts

< F438 button class="Button Button--iconOnly Button--invisible flex-shrink-0 js-expand-all-difflines-button" aria-label="Expand all lines: webpack/localization-plugin/src/loaders/InPlaceLocFileLoader.ts" data-file-path="webpack/localization-plugin/src/loaders/InPlaceLocFileLoader.ts" aria-describedby=":R26qdlab:">
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,19 @@
22
// See LICENSE in the project root for license information.
33

44
import { loader } from 'webpack';
5+
import { Terminal } from '@rushstack/node-core-library';
56

67
import { ILocalizationFile } from '../interfaces';
78
import { LocFileParser } from '../utilities/LocFileParser';
89
import { loaderFactory } from './LoaderFactory';
10+
import { LoaderTerminalProvider } from '../utilities/LoaderTerminalProvider';
911

1012
export default loaderFactory(function (this: loader.LoaderContext, locFilePath: string, content: string) {
11-
const locFileData: ILocalizationFile = LocFileParser.parseLocFileFromLoader(content, this);
13+
const locFileData: ILocalizationFile = LocFileParser.parseLocFile({
14+
content,
15+
filePath: locFilePath,
16+
terminal: new Terminal(LoaderTerminalProvider.getTerminalProviderForLoader(this))
17+
});
1218
const resultObject: { [stringName: string]: string } = {};
1319
for (const stringName in locFileData) { // eslint-disable-line guard-for-in
1420
resultObject[stringName] = locFileData[stringName].value;

webpack/localization-plugin/src/loaders/LocLoader.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// See LICENSE in the project root for license information.
33

44
import { loader } from 'webpack';
5+
import { Terminal } from '@rushstack/node-core-library';
56

67
import { LocalizationPlugin } from '../LocalizationPlugin';
78
import { ILocalizationFile } from '../interfaces';
@@ -11,6 +12,7 @@ import {
1112
IBaseLoaderOptions
1213
} from './LoaderFactory';
1314
import { EntityMarker } from '../utilities/EntityMarker';
15+
import { LoaderTerminalProvider } from '../utilities/LoaderTerminalProvider';
1416

1517
export interface ILocLoaderOptions extends IBaseLoaderOptions {
1618
pluginInstance: LocalizationPlugin;
@@ -24,7 +26,11 @@ export default loaderFactory(
2426
options: ILocLoaderOptions
2527
) {
2628
const { pluginInstance } = options;
27-
const locFileData: ILocalizationFile = LocFileParser.parseLocFileFromLoader(content, this);
29+
const locFileData: ILocalizationFile = LocFileParser.parseLocFile({
30+
content,
31+
filePath: locFilePath,
32+
terminal: new Terminal(LoaderTerminalProvider.getTerminalProviderForLoader(this))
33+
});
2834
pluginInstance.addDefaultLocFile(locFilePath, locFileData);
2935

3036
const resultObject: { [stringName: string]: string } = {};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
2+
// See LICENSE in the project root for license information.
3+
4+
import * as webpack from 'webpack';
5+
import {
6+
ITerminalProvider,
7+
TerminalProviderSeverity
8+
} from '@rushstack/node-core-library';
9+
10+
export class LoaderTerminalProvider {
11+
public static getTerminalProviderForLoader(loaderContext: webpack.loader.LoaderContext): ITerminalProvider {
12+
return {
13+
supportsColor: false,
14+
eolCharacter: '\n',
15+
write: (data: string, severity: TerminalProviderSeverity) => {
16+
switch (severity) {
17+
case TerminalProviderSeverity.error: {
18+
loaderContext.emitError(new Error(data));
19+
break;
20+
}
21+
22+
case TerminalProviderSeverity.warning: {
23+
loaderContext.emitWarning(new Error(data));
24+
break;
25+
}
26+
}
27+
}
28+
};
29+
}
30+
}

webpack/localization-plugin/src/utilities/LocFileParser.ts

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,8 @@
22
// See LICENSE in the project root for license information.
33

44
import * as jju from 'jju';
5-
import { loader } from 'webpack';
5+
import { Terminal } from '@rushstack/node-core-library';
66

7-
import {
8-
Logging,
9-
ILoggerOptions
10-
} from './Logging';
117
import { ILocalizationFile } from '../interfaces';
128
import { ResxReader } from './ResxReader';
139
import { Constants } from './Constants';
@@ -16,7 +12,7 @@ import { Constants } from './Constants';
1612
* @internal
1713
*/
1814
export interface IParseLocFileOptions {
19-
loggerOptions: ILoggerOptions;
15+
terminal: Terminal;
2016
filePath: string;
2117
content: string;
2218
}
@@ -32,17 +28,6 @@ const parseCache: Map<string, IParseCacheEntry> = new Map<string, IParseCacheEnt
3228
* @internal
3329
*/
3430
export class LocFileParser {
35-
public static parseLocFileFromLoader(content: string, loaderContext: loader.LoaderContext): ILocalizationFile {
36-
return LocFileParser.parseLocFile({
37-
filePath: loaderContext.resourcePath,
38-
loggerOptions: {
39 1CF5 -
writeError: (errorMessage) => loaderContext.emitError(new Error(errorMessage)),
40-
writeWarning: (warningMessage) => loaderContext.emitWarning(new Error(warningMessage))
41-
},
42-
content
43-
});
44-
}
45-
4631
public static parseLocFile(options: IParseLocFileOptions): ILocalizationFile {
4732
if (parseCache.has(options.filePath)) {
4833
const entry: IParseCacheEntry = parseCache.get(options.filePath)!;
@@ -56,7 +41,7 @@ export class LocFileParser {
5641
parsedFile = ResxReader.readResxAsLocFile(
5742
options.content,
5843
{
59-
...Logging.getLoggingFunctions(options.loggerOptions),
44+
terminal: options.terminal,
6045
resxFilePath: options.filePath
6146
}
6247
);
@@ -65,7 +50,7 @@ export class LocFileParser {
6550
try {
6651
Constants.LOC_JSON_SCHEMA.validateObject(parsedFile, options.filePath);
6752
} catch (e) {
68-
options.loggerOptions.writeError(`The loc file is invalid. Error: ${e}`);
53+
options.terminal.writeError(`The loc file is invalid. Error: ${e}`);
6954
}
7055
}
7156

webpack/localization-plugin/src/utilities/Logging.ts

Lines changed: 0 additions & 64 deletions
This file was deleted.

0 commit comments

Comments
 (0)
0