Merge remote-tracking branch 'refs/remotes/misskey-original/develop' into develop

# Conflicts:
#	packages/backend/src/core/QueueModule.ts
#	packages/backend/src/core/QueueService.ts
#	packages/backend/src/core/chart/charts/federation.ts
#	packages/backend/src/models/RepositoryModule.ts
#	packages/backend/src/models/_.ts
#	packages/backend/src/queue/types.ts
#	packages/backend/src/server/api/EndpointsModule.ts
#	packages/backend/src/server/api/endpoints.ts
#	packages/backend/src/server/api/endpoints/admin/queue/stats.ts
#	packages/backend/src/server/api/endpoints/users/report-abuse.ts
#	packages/backend/src/server/web/ClientServerService.ts
#	packages/frontend/src/components/MkButton.vue
#	packages/frontend/src/components/MkChannelFollowButton.vue
#	packages/frontend/src/components/MkClickerGame.vue
#	packages/frontend/src/components/MkSwitch.vue
This commit is contained in:
mattyatea 2024-06-12 14:14:45 +09:00
commit 833031ee60
155 changed files with 8161 additions and 773 deletions

View file

@ -7,3 +7,13 @@ export async function tick(): Promise<void> {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
await new Promise((globalThis.requestIdleCallback ?? setTimeout) as never);
}
/**
* @see https://github.com/misskey-dev/misskey/issues/11267
*/
export function semaphore(counter = 0, waiting: (() => void)[] = []) {
return {
acquire: () => ++counter > 1 && new Promise<void>(resolve => waiting.push(resolve)),
release: () => --counter && waiting.pop()?.(),
};
}