Skip to content

Commit fc9ab4c

Browse files
chore: enable erasableSyntaxOnly in tsconfig (#1946)
1 parent b8e8351 commit fc9ab4c

35 files changed

Lines changed: 226 additions & 192 deletions

eslint.config.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import eslint from '@eslint/js';
2-
import { defineConfig } from 'eslint/config';
2+
import { defineConfig, globalIgnores } from 'eslint/config';
33
import { importX } from 'eslint-plugin-import-x';
44
import { configs as litConfigs } from 'eslint-plugin-lit';
55
import simpleImportSort from 'eslint-plugin-simple-import-sort';
@@ -20,6 +20,8 @@ export default defineConfig(
2020
{
2121
rules: {
2222
'@typescript-eslint/consistent-type-imports': 'error',
23+
'@typescript-eslint/no-import-type-side-effects': 'error',
24+
2325
'@typescript-eslint/unbound-method': 'off',
2426
'@typescript-eslint/prefer-nullish-coalescing': 'off',
2527

@@ -85,16 +87,14 @@ export default defineConfig(
8587
'@typescript-eslint/no-unsafe-member-access': 'off',
8688
},
8789
},
88-
{
89-
ignores: [
90-
'node_modules',
91-
'packages/*/dist',
92-
'dist',
93-
'.stryker-tmp',
94-
'packages/*/reports',
95-
'test-results',
96-
'playwright-report',
97-
'!.storybook',
98-
],
99-
},
90+
globalIgnores([
91+
'node_modules',
92+
'packages/*/dist',
93+
'dist',
94+
'.stryker-tmp',
95+
'packages/*/reports',
96+
'test-results',
97+
'playwright-report',
98+
'!.storybook',
99+
]),
100100
);

packages/badge-api/badge/Shield.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ export interface Shield {
1111
logoColor: Color;
1212
}
1313

14-
export enum Color {
15-
Grey = 'lightgrey',
16-
Red = 'red',
17-
Orange = 'orange',
18-
Green = 'green',
19-
BrightGreen = 'brightgreen',
20-
WhiteSmoke = 'whitesmoke',
21-
}
14+
export const Color = {
15+
Grey: 'lightgrey',
16+
Red: 'red',
17+
Orange: 'orange',
18+
Green: 'green',
19+
BrightGreen: 'brightgreen',
20+
WhiteSmoke: 'whitesmoke',
21+
} as const;
22+
23+
export type Color = (typeof Color)[keyof typeof Color];

packages/badge-api/badge/ShieldMapper.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@ import type { Shield } from './Shield.js';
44
import { Color } from './Shield.js';
55

66
export class ShieldMapper {
7-
constructor(private readonly reportMapper: MutationTestingReportMapper) {}
7+
readonly #reportMapper: MutationTestingReportMapper;
8+
constructor(reportMapper: MutationTestingReportMapper) {
9+
this.#reportMapper = reportMapper;
10+
}
811

912
public async shieldFor(projectName: string, version: string, moduleName?: string): Promise<Shield> {
10-
const report = await this.reportMapper.findOne({
13+
const report = await this.#reportMapper.findOne({
1114
projectName,
1215
version,
1316
moduleName,

packages/common/src/slug.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ const NR_OF_PROJECT_NAME_PARTS = 3;
88
* Or "github.com/stryker-mutator/stryker/feat/allow/slashes"
99
*/
1010
export class Slug {
11-
constructor(
12-
public readonly project: string,
13-
public readonly version: string,
14-
) {}
11+
public readonly project: string;
12+
public readonly version: string;
13+
14+
constructor(project: string, version: string) {
15+
this.project = project;
16+
this.version = version;
17+
}
1518

1619
/**
1720
* Parses a raw slug into project and version.

packages/data-access/src/mappers/DashboardQuery.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,27 @@ import { encodeKey } from '../utils.js';
55
import type { ModelClass } from './ModelClass.js';
66

77
export class DashboardQuery<TModel, TPartitionKeyFields extends keyof TModel, TRowKeyFields extends keyof TModel> {
8-
private constructor(
9-
protected ModelClass: ModelClass<TModel, TPartitionKeyFields, TRowKeyFields>,
10-
private readonly whereConditions: string[],
11-
) {}
8+
protected ModelClass: ModelClass<TModel, TPartitionKeyFields, TRowKeyFields>;
9+
readonly #whereConditions: string[];
10+
11+
private constructor(ModelClass: ModelClass<TModel, TPartitionKeyFields, TRowKeyFields>, whereConditions: string[]) {
12+
this.ModelClass = ModelClass;
13+
this.#whereConditions = whereConditions;
14+
}
1215

1316
public whereRowKeyNotEquals(
1417
rowKey: Pick<TModel, TRowKeyFields>,
1518
): DashboardQuery<TModel, TPartitionKeyFields, TRowKeyFields> {
1619
const whereCondition: string = odata`RowKey ne ${encodeKey(this.ModelClass.createRowKey(rowKey) || '')}`;
1720

18-
return new DashboardQuery(this.ModelClass, [...this.whereConditions, whereCondition]);
21+
return new DashboardQuery(this.ModelClass, [...this.#whereConditions, whereCondition]);
1922
}
2023

2124
public wherePartitionKeyEquals(
2225
partitionKey: Pick<TModel, TPartitionKeyFields>,
2326
): DashboardQuery<TModel, TPartitionKeyFields, TRowKeyFields> {
2427
const whereCondition: string = odata`PartitionKey eq ${encodeKey(this.ModelClass.createPartitionKey(partitionKey))}`;
25-
return new DashboardQuery(this.ModelClass, [...this.whereConditions, whereCondition]);
28+
return new DashboardQuery(this.ModelClass, [...this.#whereConditions, whereCondition]);
2629
}
2730

2831
public static create<TModel, TPartitionKeyFields extends keyof TModel, TRowKeyFields extends keyof TModel>(
@@ -32,7 +35,7 @@ export class DashboardQuery<TModel, TPartitionKeyFields extends keyof TModel, TR
3235
}
3336

3437
public build(): TableEntityQueryOptions {
35-
return this.whereConditions.reduce<TableEntityQueryOptions>((tableQuery, whereCondition, index) => {
38+
return this.#whereConditions.reduce<TableEntityQueryOptions>((tableQuery, whereCondition, index) => {
3639
if (index === 0) {
3740
return { filter: whereCondition };
3841
} else {

packages/data-access/src/mappers/MutationTestingResultMapper.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ const errCodes = Object.freeze({
1515
* The report json part of a mutation testing report is stored in blob storage
1616
*/
1717
export class MutationTestingResultMapper {
18-
private static readonly CONTAINER_NAME = 'mutation-testing-report';
18+
static readonly #CONTAINER_NAME = 'mutation-testing-report';
1919

2020
#containerClient: ContainerClient;
2121

2222
constructor(blobService: BlobServiceClient = createBlobServiceClient()) {
23-
this.#containerClient = blobService.getContainerClient(MutationTestingResultMapper.CONTAINER_NAME);
23+
this.#containerClient = blobService.getContainerClient(MutationTestingResultMapper.#CONTAINER_NAME);
2424
}
2525

2626
public createStorageIfNotExists(): Promise<ContainerCreateIfNotExistsResponse> {

packages/data-access/src/mappers/TableStorageMapper.ts

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ export default class TableStorageMapper<
1818
TPartitionKeyFields extends keyof TModel,
1919
TRowKeyFields extends keyof TModel,
2020
> implements Mapper<TModel, TPartitionKeyFields, TRowKeyFields> {
21+
readonly #ModelClass: ModelClass<TModel, TPartitionKeyFields, TRowKeyFields>;
2122
readonly #tableClient: TableClient;
2223

2324
constructor(
24-
private readonly ModelClass: ModelClass<TModel, TPartitionKeyFields, TRowKeyFields>,
25+
ModelClass: ModelClass<TModel, TPartitionKeyFields, TRowKeyFields>,
2526
tableClient: TableClient = createTableClient(ModelClass.name),
2627
) {
28+
this.#ModelClass = ModelClass;
2729
this.#tableClient = tableClient;
2830
}
2931

@@ -32,17 +34,17 @@ export default class TableStorageMapper<
3234
}
3335

3436
public async insertOrMerge(model: TModel) {
35-
const entity = this.toEntity(model);
37+
const entity = this.#toEntity(model);
3638
await this.#tableClient.upsertEntity(entity, 'Merge');
3739
}
3840

3941
public async findOne(identity: Pick<TModel, TPartitionKeyFields | TRowKeyFields>): Promise<Result<TModel> | null> {
4042
try {
4143
const result = await this.#tableClient.getEntity<TModel>(
42-
encodeKey(this.ModelClass.createPartitionKey(identity)),
43-
encodeKey(this.ModelClass.createRowKey(identity) || ''),
44+
encodeKey(this.#ModelClass.createPartitionKey(identity)),
45+
encodeKey(this.#ModelClass.createRowKey(identity) || ''),
4446
);
45-
return this.toModel(result);
47+
return this.#toModel(result);
4648
} catch (err) {
4749
if (hasErrorCode(err, errCodes.RESOURCE_NOT_FOUND)) {
4850
return null;
@@ -54,14 +56,14 @@ export default class TableStorageMapper<
5456
}
5557

5658
public async findAll(
57-
query: DashboardQuery<TModel, TPartitionKeyFields, TRowKeyFields> = DashboardQuery.create(this.ModelClass),
59+
query: DashboardQuery<TModel, TPartitionKeyFields, TRowKeyFields> = DashboardQuery.create(this.#ModelClass),
5860
): Promise<Result<TModel>[]> {
5961
const tableQuery = query.build();
6062
const entities = this.#tableClient.listEntities<TModel>({ queryOptions: tableQuery });
6163

6264
const results: Result<TModel>[] = [];
6365
for await (const entity of entities) {
64-
results.push(this.toModel(entity));
66+
results.push(this.#toModel(entity));
6567
}
6668
return results;
6769
}
@@ -73,7 +75,7 @@ export default class TableStorageMapper<
7375
* @throws {OptimisticConcurrencyError}
7476
*/
7577
public async replace(model: TModel, etag: string): Promise<Result<TModel>> {
76-
const entity = this.toEntity(model);
78+
const entity = this.#toEntity(model);
7779
try {
7880
const result = await this.#tableClient.updateEntity(entity, 'Replace', { etag });
7981
return { model, etag: result.etag! };
@@ -89,7 +91,7 @@ export default class TableStorageMapper<
8991
}
9092

9193
public async insert(model: TModel): Promise<Result<TModel>> {
92-
const entity = this.toEntity(model);
94+
const entity = this.#toEntity(model);
9395
try {
9496
const result = await this.#tableClient.createEntity(entity);
9597
return { model, etag: result.etag! };
@@ -107,8 +109,8 @@ export default class TableStorageMapper<
107109
public async delete(identity: Pick<TModel, TPartitionKeyFields | TRowKeyFields>): Promise<void> {
108110
try {
109111
await this.#tableClient.deleteEntity(
110-
encodeKey(this.ModelClass.createPartitionKey(identity)),
111-
encodeKey(this.ModelClass.createRowKey(identity) || ''),
112+
encodeKey(this.#ModelClass.createPartitionKey(identity)),
113+
encodeKey(this.#ModelClass.createRowKey(identity) || ''),
112114
);
113115
} catch (err) {
114116
if (hasErrorCode(err, errCodes.RESOURCE_NOT_FOUND)) {
@@ -119,24 +121,24 @@ export default class TableStorageMapper<
119121
}
120122
}
121123

122-
private toModel(entity: TableEntityResult<TModel>): Result<TModel> {
123-
const value = new this.ModelClass();
124-
this.ModelClass.identify(value, decodeKey(entity.partitionKey!), decodeKey(entity.rowKey!));
125-
this.ModelClass.persistedFields.forEach((field) => (value[field] = entity[field]));
124+
#toModel(entity: TableEntityResult<TModel>): Result<TModel> {
125+
const value = new this.#ModelClass();
126+
this.#ModelClass.identify(value, decodeKey(entity.partitionKey!), decodeKey(entity.rowKey!));
127+
this.#ModelClass.persistedFields.forEach((field) => (value[field] = entity[field]));
126128
return {
127129
etag: entity.etag,
128130
model: value,
129131
};
130132
}
131133

132-
private toEntity(entity: TModel): TableEntity<TModel> {
134+
#toEntity(entity: TModel): TableEntity<TModel> {
133135
// eslint-disable-next-line @typescript-eslint/no-explicit-any
134136
const data: TableEntity<any> = {
135-
partitionKey: encodeKey(this.ModelClass.createPartitionKey(entity)),
136-
rowKey: encodeKey(this.ModelClass.createRowKey(entity) || ''),
137+
partitionKey: encodeKey(this.#ModelClass.createPartitionKey(entity)),
138+
rowKey: encodeKey(this.#ModelClass.createRowKey(entity) || ''),
137139
};
138140
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
139-
this.ModelClass.persistedFields.forEach((field) => (data[field] = entity[field]));
141+
this.#ModelClass.persistedFields.forEach((field) => (data[field] = entity[field]));
140142

141143
return data as TableEntity<TModel>;
142144
}

0 commit comments

Comments
 (0)