refactor: extract main runtime lifecycle helper builders

This commit is contained in:
2026-02-19 19:57:18 -08:00
parent c9605345bb
commit 45c326db6d
17 changed files with 1249 additions and 247 deletions

View File

@@ -0,0 +1,48 @@
import type { Extension } from 'electron';
import type { YomitanExtensionLoaderDeps } from '../../core/services/yomitan-extension-loader';
export function createLoadYomitanExtensionHandler(deps: {
loadYomitanExtensionCore: (options: YomitanExtensionLoaderDeps) => Promise<Extension | null>;
userDataPath: YomitanExtensionLoaderDeps['userDataPath'];
getYomitanParserWindow: YomitanExtensionLoaderDeps['getYomitanParserWindow'];
setYomitanParserWindow: YomitanExtensionLoaderDeps['setYomitanParserWindow'];
setYomitanParserReadyPromise: YomitanExtensionLoaderDeps['setYomitanParserReadyPromise'];
setYomitanParserInitPromise: YomitanExtensionLoaderDeps['setYomitanParserInitPromise'];
setYomitanExtension: YomitanExtensionLoaderDeps['setYomitanExtension'];
}) {
return async (): Promise<Extension | null> => {
return deps.loadYomitanExtensionCore({
userDataPath: deps.userDataPath,
getYomitanParserWindow: deps.getYomitanParserWindow,
setYomitanParserWindow: deps.setYomitanParserWindow,
setYomitanParserReadyPromise: deps.setYomitanParserReadyPromise,
setYomitanParserInitPromise: deps.setYomitanParserInitPromise,
setYomitanExtension: deps.setYomitanExtension,
});
};
}
export function createEnsureYomitanExtensionLoadedHandler(deps: {
getYomitanExtension: () => Extension | null;
getLoadInFlight: () => Promise<Extension | null> | null;
setLoadInFlight: (promise: Promise<Extension | null> | null) => void;
loadYomitanExtension: () => Promise<Extension | null>;
}) {
return async (): Promise<Extension | null> => {
const existing = deps.getYomitanExtension();
if (existing) {
return existing;
}
const inFlight = deps.getLoadInFlight();
if (inFlight) {
return inFlight;
}
const promise = deps.loadYomitanExtension().finally(() => {
deps.setLoadInFlight(null);
});
deps.setLoadInFlight(promise);
return promise;
};
}