fix(marketplace): close release lifecycle gaps
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user