Skip to content

Commit

Permalink
fix(typescript): add support to typescript 5.3
Browse files Browse the repository at this point in the history
Replace winston in favour of simple logging implementation

Update some dependencies
  • Loading branch information
uittorio committed Dec 25, 2023
1 parent c6286e0 commit 8913b86
Show file tree
Hide file tree
Showing 117 changed files with 2,743 additions and 1,841 deletions.
3,284 changes: 2,096 additions & 1,188 deletions package-lock.json

Large diffs are not rendered by default.

31 changes: 15 additions & 16 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"ts-check:src": "tsc --noEmit",
"eslint": "eslint ./src/**/*.ts ./test/**/*.ts",
"eslint:fix": "eslint --fix ./src/**/*.ts ./test/**/*.ts",
"prettier": "node node_modules/prettier/bin-prettier.js --check **/*.{ts,json}",
"prettier": "prettier --check **/*.{ts,json}",
"prettier:fix": "npm run prettier -- --write",
"release": "npm run dist:collect && semantic-release",
"postversion": "cp -r package.json ../ && cp -r package-lock.json ../",
Expand Down Expand Up @@ -61,47 +61,46 @@
"@semantic-release/changelog": "6.0.1",
"@semantic-release/git": "10.0.1",
"@semantic-release/github": "8.0.6",
"@types/jasmine": "4.3.0",
"@types/jasmine": "^5.1.4",
"@types/lodash-es": "4.17.7",
"@types/micromatch": "4.0.2",
"@types/node": "16.18.31",
"@typescript-eslint/eslint-plugin": "5.35.1",
"@typescript-eslint/parser": "5.59.6",
"@typescript-eslint/eslint-plugin": "^6.15.0",
"@typescript-eslint/parser": "^6.15.0",
"all-contributors-cli": "6.20.0",
"clean-webpack-plugin": "4.0.0",
"commitizen": "4.2.5",
"conventional-changelog-angular": "5.0.13",
"cross-env": "7.0.3",
"cross-var": "1.1.0",
"cz-customizable": "6.9.2",
"eslint": "8.22.0",
"eslint-config-prettier": "8.8.0",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-prettier": "4.2.1",
"eslint-webpack-plugin": "3.2.0",
"eslint-plugin-prettier": "^5.1.2",
"eslint-webpack-plugin": "^4.0.1",
"git-branch-is": "4.0.0",
"husky": "8.0.1",
"jasmine": "4.3.0",
"jasmine": "^5.1.0",
"jasmine-spec-reporter": "7.0.0",
"no-emit-webpack-plugin": "4.0.1",
"prettier": "2.8.8",
"prettier": "^3.1.1",
"regenerator-runtime": "0.13.11",
"semantic-release": "19.0.5",
"semantic-release-slack-bot": "3.5.3",
"ts-loader": "9.3.1",
"ts-node": "10.9.1",
"ts-patch": "^3.0.0-beta3",
"ts-loader": "^9.5.1",
"ts-node": "^10.9.2",
"ts-patch": "^3.1.1",
"tsconfig-paths": "4.2.0",
"typescript": "^5.0.4",
"typescript": "^5.3.3",
"webpack": "5.76.1",
"webpack-cli": "4.10.0",
"webpack-merge": "5.8.0",
"webpack-node-externals": "3.0.0"
},
"dependencies": {
"lodash-es": "4.17.21",
"micromatch": "4.0.5",
"winston": "3.7.2"
"micromatch": "4.0.5"
},
"peerDependencies": {
"typescript": "^5.0.4"
Expand Down
2 changes: 1 addition & 1 deletion src/create-hydrated-mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { NoTransformerError } from './errors/no-transformer.error';
import { PartialDeep } from './partial/partial';

export function createHydratedMock<T extends object>(
_values?: PartialDeep<T>
_values?: PartialDeep<T>,
): T {
throw new Error(NoTransformerError);
}
2 changes: 1 addition & 1 deletion src/create-mock-list.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export function createMockList<T extends object>(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
quantity: number,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
iterator?: (index: number) => PartialDeep<T>
iterator?: (index: number) => PartialDeep<T>,
): T[] {
throw new Error(NoTransformerError);
}
2 changes: 1 addition & 1 deletion src/extension/extension.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export type Extension<TMock, TRequestedOverriddenMock> = (
mock: TMock
mock: TMock,
) => TRequestedOverriddenMock;
14 changes: 7 additions & 7 deletions src/extension/extensionHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import { isFunction } from './method/function';
type AsMockedPropertyHandler<
TMockedPropertyHandler,
TMock,
TPropName extends keyof TMock
TPropName extends keyof TMock,
> = (
prop: TMock[TPropName],
mock: TMock,
propName: TPropName
propName: TPropName,
) => TMockedPropertyHandler;

export class ExtensionHandler<TMock> {
Expand All @@ -24,10 +24,10 @@ export class ExtensionHandler<TMock> {
TMockedPropertyHandler,
TMock,
TPropName
>
>,
): TMockedPropertyHandler;
public get<TMockedPropertyHandler>(
extension: Extension<TMock, TMockedPropertyHandler>
extension: Extension<TMock, TMockedPropertyHandler>,
): TMockedPropertyHandler;
public get<TPropName extends keyof TMock, TMockedPropertyHandler>(
extensionOrPropertyName:
Expand All @@ -37,7 +37,7 @@ export class ExtensionHandler<TMock> {
TMockedPropertyHandler,
TMock,
TPropName
>
>,
): TMockedPropertyHandler {
if (isFunction(extensionOrPropertyName)) {
return extensionOrPropertyName(this._mock);
Expand All @@ -47,14 +47,14 @@ export class ExtensionHandler<TMock> {
throw new Error(
`It looks like you are trying to get an extension for ${
extensionOrPropertyName as string
} without specifying the handler.`
} without specifying the handler.`,
);
}

return maybePropertyHandler(
this._mock[extensionOrPropertyName],
this._mock,
extensionOrPropertyName
extensionOrPropertyName,
);
}
}
6 changes: 3 additions & 3 deletions src/extension/method/extensionMethod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@ import { isString } from './string';
type FunctionReturn<TR> = () => TR;

export function method<TFunctionReturn, TMock>(
target: keyof TMock
target: keyof TMock,
): Extension<TMock, Method<TFunctionReturn>>;

export function method<TFunctionReturn, TMock>(
cb: (mock: TMock) => FunctionReturn<TFunctionReturn> | Function
cb: (mock: TMock) => FunctionReturn<TFunctionReturn> | Function,
): Extension<TMock, Method<TFunctionReturn>>;

export function method<TFunctionReturn, TMock>(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
cbOrTarget: any
cbOrTarget: any,
): Extension<TMock, Method<TFunctionReturn>> {
if (isString(cbOrTarget)) {
return (mock: TMock): Method<TFunctionReturn> =>
Expand Down
2 changes: 1 addition & 1 deletion src/extension/method/function.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export function isFunction(
functionToCheck: unknown
functionToCheck: unknown,
): functionToCheck is Function {
return (
!!functionToCheck &&
Expand Down
2 changes: 1 addition & 1 deletion src/extension/on/on.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export function On<U extends object>(mock: U): ExtensionHandler<U> {
// @ts-ignore
if (!mock[Marker.instance.get()]) {
throw new Error(
'The provided mock is not valid. Please create a mock first with createMock'
'The provided mock is not valid. Please create a mock first with createMock',
);
}
return new ExtensionHandler(mock);
Expand Down
39 changes: 19 additions & 20 deletions src/logger/consoleLogger.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
import { Format, TransformableInfo } from 'logform';
import * as winston from 'winston';
import { ConsoleTransportInstance } from 'winston/lib/winston/transports';
import { ILogger } from './logger.interface';
import { MessageFormatter } from './logger';

export function ConsoleLogger(): ConsoleTransportInstance {
const customFormat: Format = winston.format.printf(
(info: TransformableInfo) => `${info.level}: ${info.message}`
);

return new winston.transports.Console({
level: 'error',
format: winston.format.combine(
winston.format((info: TransformableInfo) => {
info.level = info.level.toUpperCase();
return info;
})(),
winston.format.colorize(),
winston.format.simple(),
customFormat
),
});
/* eslint-disable no-console */
export function ConsoleLogger(
messageFormatter: MessageFormatter,
service: string,
): ILogger {
return {
info: (message: string): void => {
console.log(messageFormatter(service, 'info', message));
},
warning: (message: string): void => {
console.log(messageFormatter(service, 'warning', message));
},
error: (message: string): void => {
console.log(messageFormatter(service, 'error', message));
},
};
}
/* eslint-enable no-console */
54 changes: 28 additions & 26 deletions src/logger/fileLogger.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
import { TransformableInfo } from 'logform';
import * as winston from 'winston';
import { FileTransportInstance } from 'winston/lib/winston/transports';
import fs from 'fs';
import { ILogger } from './logger.interface';
import { MessageFormatter } from './messageFormatter';

let winstonFileLogger: FileTransportInstance;
export function FileLogger(
messageFormatter: MessageFormatter,
service: string,
): ILogger {
const filePath: string = 'tsAutoMock.log';

export function FileLogger(): FileTransportInstance {
return (
winstonFileLogger ||
(winstonFileLogger = new winston.transports.File({
filename: 'tsAutoMock.log',
options: { flags: 'w' },
level: 'error',
format: winston.format.combine(
winston.format((info: TransformableInfo) => {
info.level = info.level.toUpperCase();
return info;
})(),
winston.format.simple(),
winston.format.timestamp(),
winston.format.printf(
(info: TransformableInfo) =>
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
`${info.timestamp} - ${info.level}: ${info.message}`
)
),
}))
);
const writeData: (data: string) => void = (data: string) => {
fs.writeFileSync(filePath, data, {
flag: 'a',
});
};

return {
info: (message: string): void => {
writeData(messageFormatter(service, 'info', message));
writeData('\n');
},
warning: (message: string): void => {
writeData(messageFormatter(service, 'warning', message));
writeData('\n');
},
error: (message: string): void => {
writeData(messageFormatter(service, 'error', message));
writeData('\n');
},
};
}
64 changes: 20 additions & 44 deletions src/logger/logger.ts
Original file line number Diff line number Diff line change
@@ -1,60 +1,36 @@
import * as winston from 'winston';
import { AbstractConfigSet } from 'winston/lib/winston/config';
import {
GetTsAutoMockDebugOptions,
TsAutoMockDebugOptions,
} from '../options/debug';
import { ConsoleLogger } from './consoleLogger';
import { FileLogger } from './fileLogger';
import { ILogger } from './logger.interface';
import { SilentLogger } from './silentLogger';
import { FileLogger } from './fileLogger';

function LoggerConfig(): AbstractConfigSet {
return {
levels: {
info: 0,
warning: 1,
error: 2,
},
colors: {
info: 'green',
warning: 'yellow',
error: 'red',
},
};
}

export function Logger(service: string): ILogger {
const config: AbstractConfigSet = LoggerConfig();

const winstonLogger: winston.Logger = winston.createLogger({
levels: config.levels,
});
const now: () => string = () => new Date().toISOString();

winston.addColors(config.colors);
export type MessageFormatter = (
service: string,
level: string,
message: string,
) => string;

winstonLogger.silent = true;
const formatter: MessageFormatter = (
service: string,
level: string,
message: string,
) => `${now()}-${level.toUpperCase()}: ${service} - ${message}`;

export function Logger(service: string): ILogger {
const options: TsAutoMockDebugOptions = GetTsAutoMockDebugOptions();

if (options) {
winstonLogger.silent = false;
if (!options) {
return SilentLogger();
}

if (options === 'file') {
winstonLogger.add(FileLogger());
} else {
winstonLogger.add(ConsoleLogger());
}
if (options === 'file') {
return FileLogger(formatter, service);
}

return {
info: (message: string): void => {
winstonLogger.info(`${service} - ${message}`);
},
warning: (message: string): void => {
winstonLogger.warning(`${service} - ${message}`);
},
error: (message: string): void => {
winstonLogger.error(`${service} - ${message}`);
},
};
return ConsoleLogger(formatter, service);
}
5 changes: 5 additions & 0 deletions src/logger/messageFormatter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export type MessageFormatter = (
service: string,
level: string,
message: string,
) => string;
10 changes: 10 additions & 0 deletions src/logger/silentLogger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { ILogger } from './logger.interface';
/* eslint-disable @typescript-eslint/no-empty-function */
export function SilentLogger(): ILogger {
return {
info: (_: string): void => {},
warning: (_: string): void => {},
error: (_: string): void => {},
};
}
/* eslint-enable @typescript-eslint/no-empty-function */
Loading

0 comments on commit 8913b86

Please sign in to comment.