This commit upgrades TypeScript from 5.4 to 5.5 and enables the
`noImplicitAny` option for stricter type checking. It refactors code to
comply with `noImplicitAny` and adapts to new TypeScript features and
limitations.
Key changes:
- Migrate from TypeScript 5.4 to 5.5
- Enable `noImplicitAny` for stricter type checking
- Refactor code to comply with new TypeScript features and limitations
Other supporting changes:
- Refactor progress bar handling for type safety
- Drop 'I' prefix from interfaces to align with new code convention
- Update TypeScript target from `ES2017` and `ES2018`.
This allows named capturing groups. Otherwise, new TypeScript compiler
does not compile the project and shows the following error:
```
...
TimestampedFilenameGenerator.spec.ts:105:23 - error TS1503: Named capturing groups are only available when targeting 'ES2018' or later
const pattern = /^(?<timestamp>\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2})-(?<scriptName>[^.]+?)(?:\.(?<extension>[^.]+))?$/;// timestamp-scriptName.extension
...
```
- Refactor usage of `electron-progressbar` for type safety and
less complexity.
46 lines
2.3 KiB
TypeScript
46 lines
2.3 KiB
TypeScript
import { ScriptFileCodeRunner } from '@/infrastructure/CodeRunner/ScriptFileCodeRunner';
|
|
import type { CodeRunner } from '@/application/CodeRunner/CodeRunner';
|
|
import type { Dialog } from '@/presentation/common/Dialog';
|
|
import { ElectronDialog } from '@/infrastructure/Dialog/Electron/ElectronDialog';
|
|
import type { IpcChannel } from '@/presentation/electron/shared/IpcBridging/IpcChannel';
|
|
import { ScriptEnvironmentDiagnosticsCollector } from '@/infrastructure/ScriptDiagnostics/ScriptEnvironmentDiagnosticsCollector';
|
|
import type { ScriptDiagnosticsCollector } from '@/application/ScriptDiagnostics/ScriptDiagnosticsCollector';
|
|
import { registerIpcChannel } from '../shared/IpcBridging/IpcProxy';
|
|
import { type ChannelDefinitionKey, IpcChannelDefinitions } from '../shared/IpcBridging/IpcChannelDefinitions';
|
|
|
|
export function registerAllIpcChannels(
|
|
registrar: IpcChannelRegistrar = registerIpcChannel,
|
|
createCodeRunner: CodeRunnerFactory = () => new ScriptFileCodeRunner(),
|
|
createDialog: DialogFactory = () => new ElectronDialog(),
|
|
createScriptDiagnosticsCollector
|
|
: ScriptDiagnosticsCollectorFactory = () => new ScriptEnvironmentDiagnosticsCollector(),
|
|
) {
|
|
const ipcInstanceCreators: IpcChannelRegistrars = {
|
|
CodeRunner: () => createCodeRunner(),
|
|
Dialog: () => createDialog(),
|
|
ScriptDiagnosticsCollector: () => createScriptDiagnosticsCollector(),
|
|
};
|
|
Object.entries(ipcInstanceCreators).forEach(([name, instanceFactory]) => {
|
|
try {
|
|
const definitionKey = name as keyof typeof IpcChannelDefinitions;
|
|
const definition = IpcChannelDefinitions[definitionKey] as IpcChannel<unknown>;
|
|
const instance = instanceFactory();
|
|
registrar(definition, instance);
|
|
} catch (err) {
|
|
throw new AggregateError([err], `main: Failed to register IPC channel "${name}":\n${err.message}`);
|
|
}
|
|
});
|
|
}
|
|
|
|
export type IpcChannelRegistrar = typeof registerIpcChannel;
|
|
|
|
export type CodeRunnerFactory = () => CodeRunner;
|
|
export type DialogFactory = () => Dialog;
|
|
export type ScriptDiagnosticsCollectorFactory = () => ScriptDiagnosticsCollector;
|
|
|
|
type RegistrationChannel<T extends ChannelDefinitionKey> = (typeof IpcChannelDefinitions)[T];
|
|
type ExtractChannelServiceType<T> = T extends IpcChannel<infer U> ? U : never;
|
|
type IpcChannelRegistrars = {
|
|
[K in ChannelDefinitionKey]: () => ExtractChannelServiceType<RegistrationChannel<K>>;
|
|
};
|