From 389ad1349c4ff245a3466a2e361c1cd1dd11d2ba Mon Sep 17 00:00:00 2001 From: "netop://ウィビ" Date: Wed, 21 Oct 2026 16:47:38 -0700 Subject: MAJOR RELEASE - inlined vendored dependencies from npm - makes this module work in Ende --- source/utility/pubsub.ts | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ source/utility/types.ts | 2 +- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 source/utility/pubsub.ts (limited to 'source/utility') diff --git a/source/utility/pubsub.ts b/source/utility/pubsub.ts new file mode 100644 index 0000000..bb8679a --- /dev/null +++ b/source/utility/pubsub.ts @@ -0,0 +1,64 @@ +export class PubSub { + #target = new EventTarget(); + + publish(trigger: string, payload: unknown): Promise { + this.#target.dispatchEvent(new CustomEvent(trigger, { detail: payload })); + return Promise.resolve(); + } + + asyncIterator(triggers: string | string[]): AsyncIterableIterator { + const names = Array.isArray(triggers) ? triggers : [triggers]; + const pulls: Array<(result: IteratorResult) => void> = []; + const pushes: T[] = []; + let done = false; + + const listener = (event: Event) => { + const value = (event as CustomEvent).detail; + const pull = pulls.shift(); + + if (pull) + pull({ done: false, value }); + else + pushes.push(value); + }; + + for (const name of names) + this.#target.addEventListener(name, listener); + + const close = (): Promise> => { + if (!done) { + done = true; + + for (const name of names) + this.#target.removeEventListener(name, listener); + + for (const pull of pulls.splice(0)) + pull({ done: true, value: undefined }); + + pushes.length = 0; + } + + return Promise.resolve({ done: true, value: undefined }); + }; + + return { + next: () => { + if (done) + return Promise.resolve({ done: true, value: undefined }); + + if (pushes.length > 0) + return Promise.resolve({ done: false, value: pushes.shift() as T }); + + return new Promise((resolve) => pulls.push(resolve)); + }, + return: close, + throw: (error: unknown) => { + close(); + return Promise.reject(error); + }, + [Symbol.asyncIterator]() { + return this; + } + }; + } +} diff --git a/source/utility/types.ts b/source/utility/types.ts index 2311c25..771625b 100755 --- a/source/utility/types.ts +++ b/source/utility/types.ts @@ -3,7 +3,7 @@ /*** IMPORT ------------------------------------------- ***/ -import type { GraphQLArgs, GraphQLSchema } from "graphql"; +import type { GraphQLArgs, GraphQLSchema } from "#deps"; /*** UTILITY ------------------------------------------ ***/ -- cgit v1.2.3