@pie-players/pie-context 0.3.47 → 0.3.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,mBAEX,SAAQ,KAAK;IACE,OAAO,CAAI;IACX,aAAa,CAAU;IACvB,QAAQ,CAAkC;IAC1C,SAAS,CAAW;IAEpC,YACC,OAAU,EACV,aAAsB,EACtB,QAAyC,EACzC,SAAmB;QAEnB,KAAK,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,KAAK,CAAC;IACrC,CAAC;CACD;AAED,MAAM,OAAO,oBAEX,SAAQ,KAAK;IACE,OAAO,CAAI;IACX,aAAa,CAAU;IAEvC,YAAmB,OAAU,EAAE,aAAsB;QACpD,KAAK,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,CAAC;CACD","sourcesContent":["import type {\n\tContextCallback,\n\tContextType,\n\tUnknownContext,\n} from \"./types.js\";\n\nexport class ContextRequestEvent<\n\tT extends UnknownContext = UnknownContext,\n> extends Event {\n\tpublic readonly context: T;\n\tpublic readonly contextTarget: Element;\n\tpublic readonly callback: ContextCallback<ContextType<T>>;\n\tpublic readonly subscribe?: boolean;\n\n\tpublic constructor(\n\t\tcontext: T,\n\t\tcontextTarget: Element,\n\t\tcallback: ContextCallback<ContextType<T>>,\n\t\tsubscribe?: boolean,\n\t) {\n\t\tsuper(\"context-request\", { bubbles: true, composed: true });\n\t\tthis.context = context;\n\t\tthis.contextTarget = contextTarget;\n\t\tthis.callback = callback;\n\t\tthis.subscribe = subscribe ?? false;\n\t}\n}\n\nexport class ContextProviderEvent<\n\tT extends UnknownContext = UnknownContext,\n> extends Event {\n\tpublic readonly context: T;\n\tpublic readonly contextTarget: Element;\n\n\tpublic constructor(context: T, contextTarget: Element) {\n\t\tsuper(\"context-provider\", { bubbles: true, composed: true });\n\t\tthis.context = context;\n\t\tthis.contextTarget = contextTarget;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementEventMap {\n\t\t\"context-request\": ContextRequestEvent<UnknownContext>;\n\t\t\"context-provider\": ContextProviderEvent<UnknownContext>;\n\t}\n}\n"]}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAEX,SAAQ,KAAK;IACE,OAAO,CAAI;IACX,aAAa,CAAU;IACvB,QAAQ,CAAkC;IAC1C,SAAS,CAAW;IAEpC,YACC,OAAU,EACV,aAAsB,EACtB,QAAyC,EACzC,SAAmB;QAEnB,KAAK,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,KAAK,CAAC;IACrC,CAAC;CACD;AAED,MAAM,OAAO,oBAEX,SAAQ,KAAK;IACE,OAAO,CAAI;IACX,aAAa,CAAU;IAEvC,YAAmB,OAAU,EAAE,aAAsB;QACpD,KAAK,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACpC,CAAC;CACD","sourcesContent":["import type { ContextCallback, ContextType, UnknownContext } from \"./types.js\";\n\nexport class ContextRequestEvent<\n\tT extends UnknownContext = UnknownContext,\n> extends Event {\n\tpublic readonly context: T;\n\tpublic readonly contextTarget: Element;\n\tpublic readonly callback: ContextCallback<ContextType<T>>;\n\tpublic readonly subscribe?: boolean;\n\n\tpublic constructor(\n\t\tcontext: T,\n\t\tcontextTarget: Element,\n\t\tcallback: ContextCallback<ContextType<T>>,\n\t\tsubscribe?: boolean,\n\t) {\n\t\tsuper(\"context-request\", { bubbles: true, composed: true });\n\t\tthis.context = context;\n\t\tthis.contextTarget = contextTarget;\n\t\tthis.callback = callback;\n\t\tthis.subscribe = subscribe ?? false;\n\t}\n}\n\nexport class ContextProviderEvent<\n\tT extends UnknownContext = UnknownContext,\n> extends Event {\n\tpublic readonly context: T;\n\tpublic readonly contextTarget: Element;\n\n\tpublic constructor(context: T, contextTarget: Element) {\n\t\tsuper(\"context-provider\", { bubbles: true, composed: true });\n\t\tthis.context = context;\n\t\tthis.contextTarget = contextTarget;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementEventMap {\n\t\t\"context-request\": ContextRequestEvent<UnknownContext>;\n\t\t\"context-provider\": ContextProviderEvent<UnknownContext>;\n\t}\n}\n"]}
package/dist/root.js CHANGED
@@ -1,4 +1,4 @@
1
- import { ContextRequestEvent, } from "./events.js";
1
+ import { ContextRequestEvent } from "./events.js";
2
2
  const getLivePending = (pending) => {
3
3
  const requests = [];
4
4
  for (const entry of pending) {
package/dist/root.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"root.js","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype ContextProviderEvent,\n\tContextRequestEvent,\n} from \"./events.js\";\nimport type { UnknownContext } from \"./types.js\";\n\ntype ContextCallback = (value: unknown, unsubscribe?: () => void) => void;\n\ninterface PendingRequest {\n\trequestorRef: WeakRef<Element>;\n\tcallbackRef: WeakRef<ContextCallback>;\n}\n\ninterface PendingContext {\n\tcallbacks: WeakMap<Element, WeakSet<ContextCallback>>;\n\trequests: PendingRequest[];\n}\n\nconst getLivePending = (pending: PendingRequest[]) => {\n\tconst requests: PendingRequest[] = [];\n\tfor (const entry of pending) {\n\t\tif (entry.requestorRef.deref() && entry.callbackRef.deref()) {\n\t\t\trequests.push(entry);\n\t\t}\n\t}\n\treturn requests;\n};\n\nexport class ContextRoot {\n\tprivate readonly host: Element;\n\tprivate readonly pendingByContext = new Map<UnknownContext, PendingContext>();\n\tprivate attached = false;\n\n\tpublic constructor(host: Element) {\n\t\tthis.host = host;\n\t}\n\n\tpublic attach(): void {\n\t\tif (this.attached) return;\n\t\tthis.attached = true;\n\t\tthis.host.addEventListener(\n\t\t\t\"context-request\",\n\t\t\tthis.onContextRequest as EventListener,\n\t\t);\n\t\tthis.host.addEventListener(\n\t\t\t\"context-provider\",\n\t\t\tthis.onContextProvider as EventListener,\n\t\t);\n\t}\n\n\tpublic detach(): void {\n\t\tif (!this.attached) return;\n\t\tthis.attached = false;\n\t\tthis.host.removeEventListener(\n\t\t\t\"context-request\",\n\t\t\tthis.onContextRequest as EventListener,\n\t\t);\n\t\tthis.host.removeEventListener(\n\t\t\t\"context-provider\",\n\t\t\tthis.onContextProvider as EventListener,\n\t\t);\n\t\tthis.pendingByContext.clear();\n\t}\n\n\tprivate readonly onContextRequest = (event: ContextRequestEvent) => {\n\t\tif (!event.subscribe) return;\n\n\t\tlet pending = this.pendingByContext.get(event.context);\n\t\tif (!pending) {\n\t\t\tpending = {\n\t\t\t\tcallbacks: new WeakMap<Element, WeakSet<ContextCallback>>(),\n\t\t\t\trequests: [],\n\t\t\t};\n\t\t\tthis.pendingByContext.set(event.context, pending);\n\t\t}\n\n\t\tconst requestor = event.contextTarget;\n\t\tconst callback = event.callback as ContextCallback;\n\t\tlet seenForRequestor = pending.callbacks.get(requestor);\n\t\tif (!seenForRequestor) {\n\t\t\tseenForRequestor = new WeakSet<ContextCallback>();\n\t\t\tpending.callbacks.set(requestor, seenForRequestor);\n\t\t}\n\t\tif (seenForRequestor.has(callback)) return;\n\n\t\tseenForRequestor.add(callback);\n\t\tpending.requests.push({\n\t\t\trequestorRef: new WeakRef(requestor),\n\t\t\tcallbackRef: new WeakRef(callback),\n\t\t});\n\t\tpending.requests = getLivePending(pending.requests);\n\t};\n\n\tprivate readonly onContextProvider = (event: ContextProviderEvent) => {\n\t\tconst pending = this.pendingByContext.get(event.context);\n\t\tif (!pending || pending.requests.length === 0) return;\n\n\t\tthis.pendingByContext.delete(event.context);\n\t\tfor (const entry of pending.requests) {\n\t\t\tconst requestor = entry.requestorRef.deref();\n\t\t\tconst callback = entry.callbackRef.deref();\n\t\t\tif (!requestor || !callback) continue;\n\t\t\trequestor.dispatchEvent(\n\t\t\t\tnew ContextRequestEvent(event.context, requestor, callback, true),\n\t\t\t);\n\t\t}\n\t};\n}\n"]}
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../src/root.ts"],"names":[],"mappings":"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","sourcesContent":["import { type ContextProviderEvent, ContextRequestEvent } from \"./events.js\";\nimport type { UnknownContext } from \"./types.js\";\n\ntype ContextCallback = (value: unknown, unsubscribe?: () => void) => void;\n\ninterface PendingRequest {\n\trequestorRef: WeakRef<Element>;\n\tcallbackRef: WeakRef<ContextCallback>;\n}\n\ninterface PendingContext {\n\tcallbacks: WeakMap<Element, WeakSet<ContextCallback>>;\n\trequests: PendingRequest[];\n}\n\nconst getLivePending = (pending: PendingRequest[]) => {\n\tconst requests: PendingRequest[] = [];\n\tfor (const entry of pending) {\n\t\tif (entry.requestorRef.deref() && entry.callbackRef.deref()) {\n\t\t\trequests.push(entry);\n\t\t}\n\t}\n\treturn requests;\n};\n\nexport class ContextRoot {\n\tprivate readonly host: Element;\n\tprivate readonly pendingByContext = new Map<UnknownContext, PendingContext>();\n\tprivate attached = false;\n\n\tpublic constructor(host: Element) {\n\t\tthis.host = host;\n\t}\n\n\tpublic attach(): void {\n\t\tif (this.attached) return;\n\t\tthis.attached = true;\n\t\tthis.host.addEventListener(\n\t\t\t\"context-request\",\n\t\t\tthis.onContextRequest as EventListener,\n\t\t);\n\t\tthis.host.addEventListener(\n\t\t\t\"context-provider\",\n\t\t\tthis.onContextProvider as EventListener,\n\t\t);\n\t}\n\n\tpublic detach(): void {\n\t\tif (!this.attached) return;\n\t\tthis.attached = false;\n\t\tthis.host.removeEventListener(\n\t\t\t\"context-request\",\n\t\t\tthis.onContextRequest as EventListener,\n\t\t);\n\t\tthis.host.removeEventListener(\n\t\t\t\"context-provider\",\n\t\t\tthis.onContextProvider as EventListener,\n\t\t);\n\t\tthis.pendingByContext.clear();\n\t}\n\n\tprivate readonly onContextRequest = (event: ContextRequestEvent) => {\n\t\tif (!event.subscribe) return;\n\n\t\tlet pending = this.pendingByContext.get(event.context);\n\t\tif (!pending) {\n\t\t\tpending = {\n\t\t\t\tcallbacks: new WeakMap<Element, WeakSet<ContextCallback>>(),\n\t\t\t\trequests: [],\n\t\t\t};\n\t\t\tthis.pendingByContext.set(event.context, pending);\n\t\t}\n\n\t\tconst requestor = event.contextTarget;\n\t\tconst callback = event.callback as ContextCallback;\n\t\tlet seenForRequestor = pending.callbacks.get(requestor);\n\t\tif (!seenForRequestor) {\n\t\t\tseenForRequestor = new WeakSet<ContextCallback>();\n\t\t\tpending.callbacks.set(requestor, seenForRequestor);\n\t\t}\n\t\tif (seenForRequestor.has(callback)) return;\n\n\t\tseenForRequestor.add(callback);\n\t\tpending.requests.push({\n\t\t\trequestorRef: new WeakRef(requestor),\n\t\t\tcallbackRef: new WeakRef(callback),\n\t\t});\n\t\tpending.requests = getLivePending(pending.requests);\n\t};\n\n\tprivate readonly onContextProvider = (event: ContextProviderEvent) => {\n\t\tconst pending = this.pendingByContext.get(event.context);\n\t\tif (!pending || pending.requests.length === 0) return;\n\n\t\tthis.pendingByContext.delete(event.context);\n\t\tfor (const entry of pending.requests) {\n\t\t\tconst requestor = entry.requestorRef.deref();\n\t\t\tconst callback = entry.callbackRef.deref();\n\t\t\tif (!requestor || !callback) continue;\n\t\t\trequestor.dispatchEvent(\n\t\t\t\tnew ContextRequestEvent(event.context, requestor, callback, true),\n\t\t\t);\n\t\t}\n\t};\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-players/pie-context",
3
- "version": "0.3.47",
3
+ "version": "0.3.49",
4
4
  "type": "module",
5
5
  "description": "Framework-agnostic Context Protocol helpers for PIE web components",
6
6
  "repository": {