fix(marketplace): close release lifecycle gaps

This commit is contained in:
2026-08-30 09:19:39 +08:00
parent 8925f37b16
commit c56ddb9d3b
8 changed files with 382 additions and 22 deletions

View File

@@ -135,7 +135,7 @@ export function createCodingComposition(
clientVersion: options.clientVersion ?? '2.0.0',
});
const activePluginReleaseCounts = new Map<string, number>();
const registerActivePluginReleases = (releaseIds: readonly string[]): (() => void) => {
const registerActivePluginReleases = (releaseIds: readonly string[]): (() => Promise<void>) => {
const uniqueReleaseIds = [...new Set(releaseIds)];
for (const releaseId of uniqueReleaseIds) {
const count = activePluginReleaseCounts.get(releaseId) ?? 0;
@@ -143,18 +143,20 @@ export function createCodingComposition(
activePluginReleaseCounts.set(releaseId, count + 1);
}
let released = false;
return () => {
return async () => {
if (released) return;
released = true;
const cleanup: Array<Promise<void>> = [];
for (const releaseId of uniqueReleaseIds) {
const count = activePluginReleaseCounts.get(releaseId) ?? 0;
if (count <= 1) {
activePluginReleaseCounts.delete(releaseId);
packageStore.releaseActiveWorker(releaseId);
cleanup.push(packageStore.releaseActiveWorker(releaseId));
} else {
activePluginReleaseCounts.set(releaseId, count - 1);
}
}
await Promise.all(cleanup);
};
};
let effectiveResolver: EffectivePluginResolver | undefined;