@d1g1tal/subscribr 3.0.1 → 3.0.2

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.
package/LICENSE CHANGED
@@ -1,21 +1,12 @@
1
- MIT License
1
+ Copyright (c) 2023, Jason DiMeo
2
2
 
3
- Copyright (c) 2022 Jason DiMeo
3
+ Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided
4
+ that the above copyright notice and this permission notice appear in all copies.
4
5
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
6
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
7
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
8
+ FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
9
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
10
+ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
11
11
 
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
12
+ Source: http://opensource.org/licenses/ISC
@@ -0,0 +1,164 @@
1
+ (() => {
2
+ var SetMultiMap = class extends Map {
3
+ /**
4
+ * Adds a new element with a specified key and value to the SetMultiMap.
5
+ * If an element with the same key already exists, the value will be added to the underlying {@link Set}.
6
+ * If the value already exists in the {@link Set}, it will not be added again.
7
+ *
8
+ * @param {K} key The key to set.
9
+ * @param {V} value The value to add to the SetMultiMap
10
+ * @returns {SetMultiMap<K, V>} The SetMultiMap with the updated key and value.
11
+ */
12
+ set(key, value) {
13
+ super.set(key, (super.get(key) ?? /* @__PURE__ */ new Set()).add(value));
14
+ return this;
15
+ }
16
+ /**
17
+ * Checks if a specific key has a specific value.
18
+ *
19
+ * @param {K} key The key to check.
20
+ * @param {V} value The value to check.
21
+ * @returns {boolean} True if the key has the value, false otherwise.
22
+ */
23
+ hasValue(key, value) {
24
+ const values = super.get(key);
25
+ return values ? values.has(value) : false;
26
+ }
27
+ /**
28
+ * Removes a specific value from a specific key.
29
+ *
30
+ * @param {K} key The key to remove the value from.
31
+ * @param {V} value The value to remove.
32
+ * @returns {boolean} True if the value was removed, false otherwise.
33
+ */
34
+ deleteValue(key, value) {
35
+ const values = super.get(key);
36
+ if (values) {
37
+ return values.delete(value);
38
+ }
39
+ return false;
40
+ }
41
+ get [Symbol.toStringTag]() {
42
+ return "SetMultiMap";
43
+ }
44
+ };
45
+ var ContextEventHandler = class {
46
+ #context;
47
+ #eventHandler;
48
+ /**
49
+ * @param {*} context The context to bind to the event handler.
50
+ * @param {function(*): void} eventHandler The event handler to call when the event is published.
51
+ */
52
+ constructor(context, eventHandler) {
53
+ this.#context = context;
54
+ this.#eventHandler = eventHandler;
55
+ }
56
+ /**
57
+ * Call the event handler for the provided event.
58
+ *
59
+ * @param {Event} event The event to handle
60
+ * @param {*} [data] The value to be passed to the event handler as a parameter.
61
+ */
62
+ handle(event, data) {
63
+ this.#eventHandler.call(this.#context, event, data);
64
+ }
65
+ get [Symbol.toStringTag]() {
66
+ return "ContextEventHandler";
67
+ }
68
+ };
69
+ var Subscription = class {
70
+ #eventName;
71
+ #contextEventHandler;
72
+ /**
73
+ * @param {string} eventName The event name.
74
+ * @param {ContextEventHandler} contextEventHandler Then context event handler.
75
+ */
76
+ constructor(eventName, contextEventHandler) {
77
+ this.#eventName = eventName;
78
+ this.#contextEventHandler = contextEventHandler;
79
+ }
80
+ /**
81
+ * Gets the event name for the subscription.
82
+ *
83
+ * @returns {string} The event name.
84
+ */
85
+ get eventName() {
86
+ return this.#eventName;
87
+ }
88
+ /**
89
+ * Gets the context event handler.
90
+ *
91
+ * @returns {ContextEventHandler} The context event handler
92
+ */
93
+ get contextEventHandler() {
94
+ return this.#contextEventHandler;
95
+ }
96
+ get [Symbol.toStringTag]() {
97
+ return "Subscription";
98
+ }
99
+ };
100
+ var Subscribr = class {
101
+ /** @type {SetMultiMap<string, ContextEventHandler>} */
102
+ #subscribers;
103
+ constructor() {
104
+ this.#subscribers = new SetMultiMap();
105
+ }
106
+ /**
107
+ * Subscribe to an event
108
+ *
109
+ * @param {string} eventName The event name to subscribe to.
110
+ * @param {function(Event, *): void} eventHandler The event handler to call when the event is published.
111
+ * @param {*} [context] The context to bind to the event handler.
112
+ * @returns {Subscription} An object used to check if the subscription still exists and to unsubscribe from the event.
113
+ */
114
+ subscribe(eventName, eventHandler, context = eventHandler) {
115
+ const contextEventHandler = new ContextEventHandler(context, eventHandler);
116
+ this.#subscribers.set(eventName, contextEventHandler);
117
+ return new Subscription(eventName, contextEventHandler);
118
+ }
119
+ /**
120
+ * Unsubscribe from the event
121
+ *
122
+ * @param {Subscription} subscription The subscription to unsubscribe.
123
+ * @param {string} subscription.eventName The event name to subscribe to.
124
+ * @param {ContextEventHandler} subscription.contextEventHandler The event handler to call when the event is published.
125
+ * @returns {boolean} true if eventListener has been removed successfully. false if the value is not found or if the value is not an object.
126
+ */
127
+ unsubscribe({ eventName, contextEventHandler }) {
128
+ const contextEventHandlers = this.#subscribers.get(eventName);
129
+ const removed = contextEventHandlers?.delete(contextEventHandler);
130
+ if (removed && contextEventHandlers.size == 0) {
131
+ this.#subscribers.delete(eventName);
132
+ }
133
+ return removed;
134
+ }
135
+ /**
136
+ * Publish an event
137
+ *
138
+ * @param {string} eventName The name of the event.
139
+ * @param {Event} [event=new CustomEvent(eventName)] The event to be handled.
140
+ * @param {*} [data] The value to be passed to the event handler as a parameter.
141
+ */
142
+ publish(eventName, event = new CustomEvent(eventName), data) {
143
+ if (data == null && !(event instanceof Event)) {
144
+ [data, event] = [event, new CustomEvent(eventName)];
145
+ }
146
+ this.#subscribers.get(eventName)?.forEach((contextEventHandler) => contextEventHandler.handle(event, data));
147
+ }
148
+ /**
149
+ * Check if the event and handler are subscribed.
150
+ *
151
+ * @param {Subscription} subscription The subscription object.
152
+ * @param {string} subscription.eventName The name of the event to check.
153
+ * @param {ContextEventHandler} subscription.contextEventHandler The event handler to check.
154
+ * @returns {boolean} true if the event name and handler are subscribed, false otherwise.
155
+ */
156
+ isSubscribed({ eventName, contextEventHandler }) {
157
+ return this.#subscribers.get(eventName)?.has(contextEventHandler);
158
+ }
159
+ get [Symbol.toStringTag]() {
160
+ return "Subscribr";
161
+ }
162
+ };
163
+ globalThis.Subscribr = Subscribr;
164
+ })();
@@ -0,0 +1,2 @@
1
+ (()=>{var n=class extends Map{set(t,e){return super.set(t,(super.get(t)??new Set).add(e)),this}hasValue(t,e){let s=super.get(t);return!!s&&s.has(e)}deleteValue(t,e){let s=super.get(t);return!!s&&s.delete(e)}get[Symbol.toStringTag](){return"SetMultiMap"}},u=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}handle(t,e){this.#e.call(this.#t,t,e)}get[Symbol.toStringTag](){return"ContextEventHandler"}},i=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}get eventName(){return this.#t}get contextEventHandler(){return this.#e}get[Symbol.toStringTag](){return"Subscription"}},l=class{#t;constructor(){this.#t=new n}subscribe(t,e,s=e){let r=new u(s,e);return this.#t.set(t,r),new i(t,r)}unsubscribe({eventName:t,contextEventHandler:e}){let s=this.#t.get(t),r=s?.delete(e);return r&&s.size==0&&this.#t.delete(t),r}publish(t,e=new CustomEvent(t),s){s!=null||e instanceof Event||([s,e]=[e,new CustomEvent(t)]),this.#t.get(t)?.forEach(r=>r.handle(e,s))}isSubscribed({eventName:t,contextEventHandler:e}){return this.#t.get(t)?.has(e)}get[Symbol.toStringTag](){return"Subscribr"}};globalThis.Subscribr=l})();
2
+ //# sourceMappingURL=subscribr.min.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["subscribr.js"],
4
+ "sourcesContent": ["(()=>{var e=class extends Map{set(e,t){return super.set(e,(super.get(e)??new Set).add(t)),this}hasValue(e,t){let s=super.get(e);return!!s&&s.has(t)}deleteValue(e,t){let s=super.get(e);return!!s&&s.delete(t)}get[Symbol.toStringTag](){return\"SetMultiMap\"}},t=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}handle(e,t){this.#t.call(this.#e,e,t)}get[Symbol.toStringTag](){return\"ContextEventHandler\"}},s=class{#s;#r;constructor(e,t){this.#s=e,this.#r=t}get eventName(){return this.#s}get contextEventHandler(){return this.#r}get[Symbol.toStringTag](){return\"Subscription\"}},r=class{#n;constructor(){this.#n=new e}subscribe(e,r,n=r){let u=new t(n,r);return this.#n.set(e,u),new s(e,u)}unsubscribe({eventName:e,contextEventHandler:t}){let s=this.#n.get(e),r=s?.delete(t);return r&&0==s.size&&this.#n.delete(e),r}publish(e,t=new CustomEvent(e),s){null!=s||t instanceof Event||([s,t]=[t,new CustomEvent(e)]),this.#n.get(e)?.forEach(e=>e.handle(t,s))}isSubscribed({eventName:e,contextEventHandler:t}){return this.#n.get(e)?.has(t)}get[Symbol.toStringTag](){return\"Subscribr\"}};globalThis.Subscribr=r})();"],
5
+ "mappings": "CAAC,IAAI,CAAC,IAAIA,EAAE,cAAc,GAAG,CAAC,IAAIA,EAAEC,EAAE,CAAC,OAAO,MAAM,IAAID,GAAG,MAAM,IAAIA,CAAC,GAAG,IAAI,KAAK,IAAIC,CAAC,CAAC,EAAE,IAAI,CAAC,SAASD,EAAEC,EAAE,CAAC,IAAI,EAAE,MAAM,IAAID,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,IAAIC,CAAC,CAAC,CAAC,YAAYD,EAAEC,EAAE,CAAC,IAAI,EAAE,MAAM,IAAID,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,OAAOC,CAAC,CAAC,CAAC,IAAI,OAAO,WAAW,GAAG,CAAC,MAAM,aAAa,CAAC,EAAEA,EAAE,KAAK,CAACC,GAAGC,GAAG,YAAYH,EAAEC,EAAE,CAAC,KAAKC,GAAGF,EAAE,KAAKG,GAAGF,CAAC,CAAC,OAAOD,EAAEC,EAAE,CAAC,KAAKE,GAAG,KAAK,KAAKD,GAAGF,EAAEC,CAAC,CAAC,CAAC,IAAI,OAAO,WAAW,GAAG,CAAC,MAAM,qBAAqB,CAAC,EAAEG,EAAE,KAAK,CAACC,GAAGC,GAAG,YAAYN,EAAEC,EAAE,CAAC,KAAKI,GAAGL,EAAE,KAAKM,GAAGL,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,KAAKI,EAAE,CAAC,IAAI,qBAAqB,CAAC,OAAO,KAAKC,EAAE,CAAC,IAAI,OAAO,WAAW,GAAG,CAAC,MAAM,cAAc,CAAC,EAAEC,EAAE,KAAK,CAACC,GAAG,aAAa,CAAC,KAAKA,GAAG,IAAIR,CAAC,CAAC,UAAUA,EAAEO,EAAEE,EAAEF,EAAE,CAAC,IAAIG,EAAE,IAAIT,EAAEQ,EAAEF,CAAC,EAAE,OAAO,KAAKC,GAAG,IAAIR,EAAEU,CAAC,EAAE,IAAIN,EAAEJ,EAAEU,CAAC,CAAC,CAAC,YAAY,CAAC,UAAUV,EAAE,oBAAoBC,CAAC,EAAE,CAAC,IAAI,EAAE,KAAKO,GAAG,IAAIR,CAAC,EAAE,EAAE,GAAG,OAAOC,CAAC,EAAE,OAAO,GAAM,EAAE,MAAL,GAAW,KAAKO,GAAG,OAAOR,CAAC,EAAE,CAAC,CAAC,QAAQA,EAAEC,EAAE,IAAI,YAAYD,CAAC,EAAE,EAAE,CAAO,GAAN,MAASC,aAAa,QAAQ,CAAC,EAAEA,CAAC,EAAE,CAACA,EAAE,IAAI,YAAYD,CAAC,CAAC,GAAG,KAAKQ,GAAG,IAAIR,CAAC,GAAG,QAAQA,GAAGA,EAAE,OAAOC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,UAAUD,EAAE,oBAAoBC,CAAC,EAAE,CAAC,OAAO,KAAKO,GAAG,IAAIR,CAAC,GAAG,IAAIC,CAAC,CAAC,CAAC,IAAI,OAAO,WAAW,GAAG,CAAC,MAAM,WAAW,CAAC,EAAE,WAAW,UAAUM,CAAC,GAAG",
6
+ "names": ["e", "t", "#e", "#t", "s", "#s", "#r", "r", "#n", "n", "u"]
7
+ }
@@ -1,17 +1,44 @@
1
- // node_modules/@d1g1tal/collections/src/set-multi-map.js
1
+ // node_modules/.pnpm/@d1g1tal+collections@0.2.5/node_modules/@d1g1tal/collections/src/set-multi-map.js
2
2
  var SetMultiMap = class extends Map {
3
3
  /**
4
- * Adds a new element with a specified key and value to the SetMultiMap. If an element with the same key already exists, the value will be added to the underlying {@link Set}.
4
+ * Adds a new element with a specified key and value to the SetMultiMap.
5
+ * If an element with the same key already exists, the value will be added to the underlying {@link Set}.
6
+ * If the value already exists in the {@link Set}, it will not be added again.
5
7
  *
6
- * @param {*} key The key to set.
7
- * @param {*} value The value to add to the SetMultiMap
8
- * @returns {SetMultiMap} The SetMultiMap with the updated key and value.
8
+ * @param {K} key The key to set.
9
+ * @param {V} value The value to add to the SetMultiMap
10
+ * @returns {SetMultiMap<K, V>} The SetMultiMap with the updated key and value.
9
11
  */
10
12
  set(key, value) {
11
13
  super.set(key, (super.get(key) ?? /* @__PURE__ */ new Set()).add(value));
12
14
  return this;
13
15
  }
14
- [Symbol.toStringTag]() {
16
+ /**
17
+ * Checks if a specific key has a specific value.
18
+ *
19
+ * @param {K} key The key to check.
20
+ * @param {V} value The value to check.
21
+ * @returns {boolean} True if the key has the value, false otherwise.
22
+ */
23
+ hasValue(key, value) {
24
+ const values = super.get(key);
25
+ return values ? values.has(value) : false;
26
+ }
27
+ /**
28
+ * Removes a specific value from a specific key.
29
+ *
30
+ * @param {K} key The key to remove the value from.
31
+ * @param {V} value The value to remove.
32
+ * @returns {boolean} True if the value was removed, false otherwise.
33
+ */
34
+ deleteValue(key, value) {
35
+ const values = super.get(key);
36
+ if (values) {
37
+ return values.delete(value);
38
+ }
39
+ return false;
40
+ }
41
+ get [Symbol.toStringTag]() {
15
42
  return "SetMultiMap";
16
43
  }
17
44
  };
@@ -115,7 +142,7 @@ var Subscribr = class {
115
142
  * Publish an event
116
143
  *
117
144
  * @param {string} eventName The name of the event.
118
- * @param {Event} event The event to be handled.
145
+ * @param {Event} [event=new CustomEvent(eventName)] The event to be handled.
119
146
  * @param {*} [data] The value to be passed to the event handler as a parameter.
120
147
  */
121
148
  publish(eventName, event = new CustomEvent(eventName), data) {
@@ -0,0 +1,2 @@
1
+ var n=class extends Map{set(t,e){return super.set(t,(super.get(t)??new Set).add(e)),this}hasValue(t,e){let s=super.get(t);return!!s&&s.has(e)}deleteValue(t,e){let s=super.get(t);return!!s&&s.delete(e)}get[Symbol.toStringTag](){return"SetMultiMap"}},u=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}handle(t,e){this.#e.call(this.#t,t,e)}get[Symbol.toStringTag](){return"ContextEventHandler"}},a=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}get eventName(){return this.#t}get contextEventHandler(){return this.#e}get[Symbol.toStringTag](){return"Subscription"}},l=class{#t;constructor(){this.#t=new n}subscribe(t,e,s=e){let r=new u(s,e);return this.#t.set(t,r),new a(t,r)}unsubscribe({eventName:t,contextEventHandler:e}){let s=this.#t.get(t),r=s?.delete(e);return r&&s.size==0&&this.#t.delete(t),r}publish(t,e=new CustomEvent(t),s){s!=null||e instanceof Event||([s,e]=[e,new CustomEvent(t)]),this.#t.get(t)?.forEach(r=>r.handle(e,s))}isSubscribed({eventName:t,contextEventHandler:e}){return this.#t.get(t)?.has(e)}get[Symbol.toStringTag](){return"Subscribr"}};export{l as default};
2
+ //# sourceMappingURL=subscribr.min.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["subscribr.js"],
4
+ "sourcesContent": ["var e=class extends Map{set(e,t){return super.set(e,(super.get(e)??new Set).add(t)),this}hasValue(e,t){let s=super.get(e);return!!s&&s.has(t)}deleteValue(e,t){let s=super.get(e);return!!s&&s.delete(t)}get[Symbol.toStringTag](){return\"SetMultiMap\"}},t=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}handle(e,t){this.#t.call(this.#e,e,t)}get[Symbol.toStringTag](){return\"ContextEventHandler\"}},s=class{#s;#r;constructor(e,t){this.#s=e,this.#r=t}get eventName(){return this.#s}get contextEventHandler(){return this.#r}get[Symbol.toStringTag](){return\"Subscription\"}},r=class{#n;constructor(){this.#n=new e}subscribe(e,r,n=r){let u=new t(n,r);return this.#n.set(e,u),new s(e,u)}unsubscribe({eventName:e,contextEventHandler:t}){let s=this.#n.get(e),r=s?.delete(t);return r&&0==s.size&&this.#n.delete(e),r}publish(e,t=new CustomEvent(e),s){null!=s||t instanceof Event||([s,t]=[t,new CustomEvent(e)]),this.#n.get(e)?.forEach(e=>e.handle(t,s))}isSubscribed({eventName:e,contextEventHandler:t}){return this.#n.get(e)?.has(t)}get[Symbol.toStringTag](){return\"Subscribr\"}};export{r as default};"],
5
+ "mappings": "AAAA,IAAIA,EAAE,cAAc,GAAG,CAAC,IAAIA,EAAEC,EAAE,CAAC,OAAO,MAAM,IAAID,GAAG,MAAM,IAAIA,CAAC,GAAG,IAAI,KAAK,IAAIC,CAAC,CAAC,EAAE,IAAI,CAAC,SAASD,EAAEC,EAAE,CAAC,IAAI,EAAE,MAAM,IAAID,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,IAAIC,CAAC,CAAC,CAAC,YAAYD,EAAEC,EAAE,CAAC,IAAI,EAAE,MAAM,IAAID,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,OAAOC,CAAC,CAAC,CAAC,IAAI,OAAO,WAAW,GAAG,CAAC,MAAM,aAAa,CAAC,EAAEA,EAAE,KAAK,CAACC,GAAGC,GAAG,YAAYH,EAAEC,EAAE,CAAC,KAAKC,GAAGF,EAAE,KAAKG,GAAGF,CAAC,CAAC,OAAOD,EAAEC,EAAE,CAAC,KAAKE,GAAG,KAAK,KAAKD,GAAGF,EAAEC,CAAC,CAAC,CAAC,IAAI,OAAO,WAAW,GAAG,CAAC,MAAM,qBAAqB,CAAC,EAAEG,EAAE,KAAK,CAACC,GAAGC,GAAG,YAAYN,EAAEC,EAAE,CAAC,KAAKI,GAAGL,EAAE,KAAKM,GAAGL,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,KAAKI,EAAE,CAAC,IAAI,qBAAqB,CAAC,OAAO,KAAKC,EAAE,CAAC,IAAI,OAAO,WAAW,GAAG,CAAC,MAAM,cAAc,CAAC,EAAEC,EAAE,KAAK,CAACC,GAAG,aAAa,CAAC,KAAKA,GAAG,IAAIR,CAAC,CAAC,UAAUA,EAAEO,EAAEE,EAAEF,EAAE,CAAC,IAAIG,EAAE,IAAIT,EAAEQ,EAAEF,CAAC,EAAE,OAAO,KAAKC,GAAG,IAAIR,EAAEU,CAAC,EAAE,IAAIN,EAAEJ,EAAEU,CAAC,CAAC,CAAC,YAAY,CAAC,UAAUV,EAAE,oBAAoBC,CAAC,EAAE,CAAC,IAAI,EAAE,KAAKO,GAAG,IAAIR,CAAC,EAAE,EAAE,GAAG,OAAOC,CAAC,EAAE,OAAO,GAAM,EAAE,MAAL,GAAW,KAAKO,GAAG,OAAOR,CAAC,EAAE,CAAC,CAAC,QAAQA,EAAEC,EAAE,IAAI,YAAYD,CAAC,EAAE,EAAE,CAAO,GAAN,MAASC,aAAa,QAAQ,CAAC,EAAEA,CAAC,EAAE,CAACA,EAAE,IAAI,YAAYD,CAAC,CAAC,GAAG,KAAKQ,GAAG,IAAIR,CAAC,GAAG,QAAQA,GAAGA,EAAE,OAAOC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,UAAUD,EAAE,oBAAoBC,CAAC,EAAE,CAAC,OAAO,KAAKO,GAAG,IAAIR,CAAC,GAAG,IAAIC,CAAC,CAAC,CAAC,IAAI,OAAO,WAAW,GAAG,CAAC,MAAM,WAAW,CAAC,EAAE,OAAOM,KAAK",
6
+ "names": ["e", "t", "#e", "#t", "s", "#s", "#r", "r", "#n", "n", "u"]
7
+ }
package/package.json CHANGED
@@ -1,32 +1,19 @@
1
1
  {
2
2
  "name": "@d1g1tal/subscribr",
3
- "version": "3.0.1",
3
+ "version": "3.0.2",
4
4
  "description": "JavaScript Publish/Subscribe Library",
5
5
  "type": "module",
6
- "types": "index.d.js",
7
6
  "exports": {
8
- ".": {
9
- "import": "./src/subscribr.js",
10
- "default": "./dist/browser/subscribr.min.js"
11
- }
7
+ ".": "./src/subscribr.js",
8
+ "./*.js": "./src/*.js"
12
9
  },
13
10
  "publishConfig": {
14
11
  "access": "public"
15
12
  },
16
13
  "files": [
17
14
  "/src",
18
- "/dist",
19
- "index.js",
20
- "index.d.ts"
15
+ "/dist"
21
16
  ],
22
- "scripts": {
23
- "build": "npm run build:esm && npm run build:browser",
24
- "build:esm": "rimraf dist/esm && esbuild src/subscribr.js --bundle --target=es2022 --format=esm --outfile=dist/esm/subscribr.js && esbuild src/subscribr.js --bundle --sourcemap --minify --target=es2022 --format=esm --outfile=dist/esm/subscribr.min.js",
25
- "build:browser": "rimraf dist/browser && esbuild src/subscribr.js --bundle --target=es2022 --platform=browser --global-name=Subscribr --footer:js='window.Subscribr = Subscribr.default;' --outfile=dist/browser/subscribr.js && esbuild src/subscribr.js --bundle --sourcemap --minify --target=es2022 --platform=browser --global-name=Subscribr --footer:js='window.Subscribr = Subscribr.default;' --outfile=dist/browser/subscribr.min.js",
26
- "lint": "eslint --ext .js --fix --ignore-path .gitignore .",
27
- "d.ts": "tsc --allowJs -declaration --emitDeclarationOnly --skipLibCheck --lib esnext index.js",
28
- "test": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js"
29
- },
30
17
  "repository": {
31
18
  "type": "git",
32
19
  "url": "git+https://github.com/D1g1talEntr0py/subscribr.git"
@@ -37,20 +24,24 @@
37
24
  "Publish/Subscribe"
38
25
  ],
39
26
  "author": "Jason DiMeo",
40
- "license": "MIT",
27
+ "license": "ISC",
41
28
  "bugs": {
42
29
  "url": "https://github.com/D1g1talEntr0py/subscribr/issues"
43
30
  },
44
31
  "homepage": "https://github.com/D1g1talEntr0py/subscribr#readme",
32
+ "packageManager": "pnpm@8.10.2+sha256.487609e857f1c11780cc98dd0bfe4c8a8b11c7f23bc3a4493ac7d263d6fb6c8c",
33
+ "dependencies": {
34
+ "@d1g1tal/collections": "^0.2.5"
35
+ },
45
36
  "devDependencies": {
46
- "@d1g1tal/chrysalis": "^1.2.3",
37
+ "@d1g1tal/chrysalis": "^2.2.0",
47
38
  "@skypack/package-check": "^0.2.2",
48
- "esbuild": "^0.17.18",
49
- "eslint": "^8.39.0",
50
- "eslint-plugin-compat": "^4.1.4",
51
- "eslint-plugin-jsdoc": "^43.1.1",
52
- "jest": "^29.5.0",
53
- "rimraf": "^5.0.0"
39
+ "esbuild": "^0.19.5",
40
+ "esbuild-library": "^1.0.1",
41
+ "eslint": "^8.52.0",
42
+ "eslint-plugin-compat": "^4.2.0",
43
+ "eslint-plugin-jsdoc": "^46.8.2",
44
+ "jest": "^29.7.0"
54
45
  },
55
46
  "jest": {
56
47
  "verbose": true,
@@ -69,7 +60,10 @@
69
60
  "not ios_saf < 15",
70
61
  "not op_mini all"
71
62
  ],
72
- "dependencies": {
73
- "@d1g1tal/collections": "^0.0.4"
63
+ "scripts": {
64
+ "build": "node esbuild.js",
65
+ "lint": "eslint --ext .js --fix --ignore-path .gitignore .",
66
+ "d.ts": "tsc --allowJs -declaration --emitDeclarationOnly --skipLibCheck --lib esnext index.js",
67
+ "test": "node --no-warnings --experimental-vm-modules node_modules/jest/bin/jest.js"
74
68
  }
75
- }
69
+ }
package/src/subscribr.js CHANGED
@@ -48,7 +48,7 @@ export default class Subscribr {
48
48
  * Publish an event
49
49
  *
50
50
  * @param {string} eventName The name of the event.
51
- * @param {Event} event The event to be handled.
51
+ * @param {Event} [event=new CustomEvent(eventName)] The event to be handled.
52
52
  * @param {*} [data] The value to be passed to the event handler as a parameter.
53
53
  */
54
54
  publish(eventName, event = new CustomEvent(eventName), data) {
@@ -1,169 +0,0 @@
1
- var Subscribr = (() => {
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/subscribr.js
21
- var subscribr_exports = {};
22
- __export(subscribr_exports, {
23
- default: () => Subscribr
24
- });
25
-
26
- // node_modules/@d1g1tal/collections/src/set-multi-map.js
27
- var SetMultiMap = class extends Map {
28
- /**
29
- * Adds a new element with a specified key and value to the SetMultiMap. If an element with the same key already exists, the value will be added to the underlying {@link Set}.
30
- *
31
- * @param {*} key The key to set.
32
- * @param {*} value The value to add to the SetMultiMap
33
- * @returns {SetMultiMap} The SetMultiMap with the updated key and value.
34
- */
35
- set(key, value) {
36
- super.set(key, (super.get(key) ?? /* @__PURE__ */ new Set()).add(value));
37
- return this;
38
- }
39
- [Symbol.toStringTag]() {
40
- return "SetMultiMap";
41
- }
42
- };
43
-
44
- // src/context-event-handler.js
45
- var ContextEventHandler = class {
46
- #context;
47
- #eventHandler;
48
- /**
49
- * @param {*} context The context to bind to the event handler.
50
- * @param {function(*): void} eventHandler The event handler to call when the event is published.
51
- */
52
- constructor(context, eventHandler) {
53
- this.#context = context;
54
- this.#eventHandler = eventHandler;
55
- }
56
- /**
57
- * Call the event handler for the provided event.
58
- *
59
- * @param {Event} event The event to handle
60
- * @param {*} [data] The value to be passed to the event handler as a parameter.
61
- */
62
- handle(event, data) {
63
- this.#eventHandler.call(this.#context, event, data);
64
- }
65
- get [Symbol.toStringTag]() {
66
- return "ContextEventHandler";
67
- }
68
- };
69
-
70
- // src/subscription.js
71
- var Subscription = class {
72
- #eventName;
73
- #contextEventHandler;
74
- /**
75
- * @param {string} eventName The event name.
76
- * @param {ContextEventHandler} contextEventHandler Then context event handler.
77
- */
78
- constructor(eventName, contextEventHandler) {
79
- this.#eventName = eventName;
80
- this.#contextEventHandler = contextEventHandler;
81
- }
82
- /**
83
- * Gets the event name for the subscription.
84
- *
85
- * @returns {string} The event name.
86
- */
87
- get eventName() {
88
- return this.#eventName;
89
- }
90
- /**
91
- * Gets the context event handler.
92
- *
93
- * @returns {ContextEventHandler} The context event handler
94
- */
95
- get contextEventHandler() {
96
- return this.#contextEventHandler;
97
- }
98
- get [Symbol.toStringTag]() {
99
- return "Subscription";
100
- }
101
- };
102
-
103
- // src/subscribr.js
104
- var Subscribr = class {
105
- /** @type {SetMultiMap<string, ContextEventHandler>} */
106
- #subscribers;
107
- constructor() {
108
- this.#subscribers = new SetMultiMap();
109
- }
110
- /**
111
- * Subscribe to an event
112
- *
113
- * @param {string} eventName The event name to subscribe to.
114
- * @param {function(Event, *): void} eventHandler The event handler to call when the event is published.
115
- * @param {*} [context] The context to bind to the event handler.
116
- * @returns {Subscription} An object used to check if the subscription still exists and to unsubscribe from the event.
117
- */
118
- subscribe(eventName, eventHandler, context = eventHandler) {
119
- const contextEventHandler = new ContextEventHandler(context, eventHandler);
120
- this.#subscribers.set(eventName, contextEventHandler);
121
- return new Subscription(eventName, contextEventHandler);
122
- }
123
- /**
124
- * Unsubscribe from the event
125
- *
126
- * @param {Subscription} subscription The subscription to unsubscribe.
127
- * @param {string} subscription.eventName The event name to subscribe to.
128
- * @param {ContextEventHandler} subscription.contextEventHandler The event handler to call when the event is published.
129
- * @returns {boolean} true if eventListener has been removed successfully. false if the value is not found or if the value is not an object.
130
- */
131
- unsubscribe({ eventName, contextEventHandler }) {
132
- const contextEventHandlers = this.#subscribers.get(eventName);
133
- const removed = contextEventHandlers?.delete(contextEventHandler);
134
- if (removed && contextEventHandlers.size == 0) {
135
- this.#subscribers.delete(eventName);
136
- }
137
- return removed;
138
- }
139
- /**
140
- * Publish an event
141
- *
142
- * @param {string} eventName The name of the event.
143
- * @param {Event} event The event to be handled.
144
- * @param {*} [data] The value to be passed to the event handler as a parameter.
145
- */
146
- publish(eventName, event = new CustomEvent(eventName), data) {
147
- if (data == null && !(event instanceof Event)) {
148
- [data, event] = [event, new CustomEvent(eventName)];
149
- }
150
- this.#subscribers.get(eventName)?.forEach((contextEventHandler) => contextEventHandler.handle(event, data));
151
- }
152
- /**
153
- * Check if the event and handler are subscribed.
154
- *
155
- * @param {Subscription} subscription The subscription object.
156
- * @param {string} subscription.eventName The name of the event to check.
157
- * @param {ContextEventHandler} subscription.contextEventHandler The event handler to check.
158
- * @returns {boolean} true if the event name and handler are subscribed, false otherwise.
159
- */
160
- isSubscribed({ eventName, contextEventHandler }) {
161
- return this.#subscribers.get(eventName)?.has(contextEventHandler);
162
- }
163
- get [Symbol.toStringTag]() {
164
- return "Subscribr";
165
- }
166
- };
167
- return __toCommonJS(subscribr_exports);
168
- })();
169
- window.Subscribr = Subscribr.default;
@@ -1,3 +0,0 @@
1
- var Subscribr=(()=>{var c=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var d=(s,t)=>{for(var e in t)c(s,e,{get:t[e],enumerable:!0})},b=(s,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of h(t))!g.call(s,r)&&r!==e&&c(s,r,{get:()=>t[r],enumerable:!(n=a(t,r))||n.enumerable});return s};var p=s=>b(c({},"__esModule",{value:!0}),s);var S={};d(S,{default:()=>l});var o=class extends Map{set(t,e){return super.set(t,(super.get(t)??new Set).add(e)),this}[Symbol.toStringTag](){return"SetMultiMap"}};var i=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}handle(t,e){this.#e.call(this.#t,t,e)}get[Symbol.toStringTag](){return"ContextEventHandler"}};var u=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}get eventName(){return this.#t}get contextEventHandler(){return this.#e}get[Symbol.toStringTag](){return"Subscription"}};var l=class{#t;constructor(){this.#t=new o}subscribe(t,e,n=e){let r=new i(n,e);return this.#t.set(t,r),new u(t,r)}unsubscribe({eventName:t,contextEventHandler:e}){let n=this.#t.get(t),r=n?.delete(e);return r&&n.size==0&&this.#t.delete(t),r}publish(t,e=new CustomEvent(t),n){n==null&&!(e instanceof Event)&&([n,e]=[e,new CustomEvent(t)]),this.#t.get(t)?.forEach(r=>r.handle(e,n))}isSubscribed({eventName:t,contextEventHandler:e}){return this.#t.get(t)?.has(e)}get[Symbol.toStringTag](){return"Subscribr"}};return p(S);})();
2
- window.Subscribr = Subscribr.default;
3
- //# sourceMappingURL=subscribr.min.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/subscribr.js", "../../node_modules/@d1g1tal/collections/src/set-multi-map.js", "../../src/context-event-handler.js", "../../src/subscription.js"],
4
- "sourcesContent": ["import SetMultiMap from '@d1g1tal/collections/set-multi-map.js';\nimport ContextEventHandler from './context-event-handler.js';\nimport Subscription from './subscription.js';\n\nexport default class Subscribr {\n\t/** @type {SetMultiMap<string, ContextEventHandler>} */\n\t#subscribers;\n\n\tconstructor() {\n\t\tthis.#subscribers = new SetMultiMap();\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t *\n\t * @param {string} eventName The event name to subscribe to.\n\t * @param {function(Event, *): void} eventHandler The event handler to call when the event is published.\n\t * @param {*} [context] The context to bind to the event handler.\n\t * @returns {Subscription} An object used to check if the subscription still exists and to unsubscribe from the event.\n\t */\n\tsubscribe(eventName, eventHandler, context = eventHandler) {\n\t\tconst contextEventHandler = new ContextEventHandler(context, eventHandler);\n\t\tthis.#subscribers.set(eventName, contextEventHandler);\n\n\t\treturn new Subscription(eventName, contextEventHandler);\n\t}\n\n\t/**\n\t * Unsubscribe from the event\n\t *\n\t * @param {Subscription} subscription The subscription to unsubscribe.\n\t * @param {string} subscription.eventName The event name to subscribe to.\n\t * @param {ContextEventHandler} subscription.contextEventHandler The event handler to call when the event is published.\n\t * @returns {boolean} true if eventListener has been removed successfully. false if the value is not found or if the value is not an object.\n\t */\n\tunsubscribe({ eventName, contextEventHandler }) {\n\t\tconst contextEventHandlers = this.#subscribers.get(eventName);\n\t\tconst removed = contextEventHandlers?.delete(contextEventHandler);\n\n\t\tif (removed && contextEventHandlers.size == 0) {\n\t\t\tthis.#subscribers.delete(eventName);\n\t\t}\n\n\t\treturn removed;\n\t}\n\n\t/**\n\t * Publish an event\n\t *\n\t * @param {string} eventName The name of the event.\n\t * @param {Event} event The event to be handled.\n\t * @param {*} [data] The value to be passed to the event handler as a parameter.\n\t */\n\tpublish(eventName, event = new CustomEvent(eventName), data) {\n\t\tif (data == null && !(event instanceof Event)) {\n\t\t\t// Swap the event and data parameters because only data was passed without an event object\n\t\t\t[data, event] = [event, new CustomEvent(eventName)];\n\t\t}\n\t\tthis.#subscribers.get(eventName)?.forEach((contextEventHandler) => contextEventHandler.handle(event, data));\n\t}\n\n\t/**\n\t * Check if the event and handler are subscribed.\n\t *\n\t * @param {Subscription} subscription The subscription object.\n\t * @param {string} subscription.eventName The name of the event to check.\n\t * @param {ContextEventHandler} subscription.contextEventHandler The event handler to check.\n\t * @returns {boolean} true if the event name and handler are subscribed, false otherwise.\n\t */\n\tisSubscribed({ eventName, contextEventHandler }) {\n\t\treturn this.#subscribers.get(eventName)?.has(contextEventHandler);\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Subscribr';\n\t}\n}", "/**\n *\n * @typedef {Map<*, *>} SetMultiMap\n * @extends Map\n */\nexport default class SetMultiMap extends Map {\n\t/**\n\t * Adds a new element with a specified key and value to the SetMultiMap. If an element with the same key already exists, the value will be added to the underlying {@link Set}.\n\t *\n\t * @param {*} key The key to set.\n\t * @param {*} value The value to add to the SetMultiMap\n\t * @returns {SetMultiMap} The SetMultiMap with the updated key and value.\n\t */\n\tset(key, value) {\n\t\tsuper.set(key, (super.get(key) ?? new Set()).add(value));\n\n\t\treturn this;\n\t}\n\n\t[Symbol.toStringTag]() {\n\t\treturn 'SetMultiMap';\n\t}\n}", "export default class ContextEventHandler {\n\t#context;\n\t#eventHandler;\n\n\t/**\n\t * @param {*} context The context to bind to the event handler.\n\t * @param {function(*): void} eventHandler The event handler to call when the event is published.\n\t */\n\tconstructor(context, eventHandler) {\n\t\tthis.#context = context;\n\t\tthis.#eventHandler = eventHandler;\n\t}\n\n\t/**\n\t * Call the event handler for the provided event.\n\t *\n\t * @param {Event} event The event to handle\n\t * @param {*} [data] The value to be passed to the event handler as a parameter.\n\t */\n\thandle(event, data) {\n\t\tthis.#eventHandler.call(this.#context, event, data);\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'ContextEventHandler';\n\t}\n}", "/** @typedef { import('./context-event-handler.js').default } ContextEventHandler */\n\nexport default class Subscription {\n\t#eventName;\n\t#contextEventHandler;\n\n\t/**\n\t * @param {string} eventName The event name.\n\t * @param {ContextEventHandler} contextEventHandler Then context event handler.\n\t */\n\tconstructor(eventName, contextEventHandler) {\n\t\tthis.#eventName = eventName;\n\t\tthis.#contextEventHandler = contextEventHandler;\n\t}\n\n\t/**\n\t * Gets the event name for the subscription.\n\t *\n\t * @returns {string} The event name.\n\t */\n\tget eventName() {\n\t\treturn this.#eventName;\n\t}\n\n\t/**\n\t * Gets the context event handler.\n\t *\n\t * @returns {ContextEventHandler} The context event handler\n\t */\n\tget contextEventHandler() {\n\t\treturn this.#contextEventHandler;\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Subscription';\n\t}\n}"],
5
- "mappings": "gbAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,ICKA,IAAqBC,EAArB,cAAyC,GAAI,CAQ5C,IAAIC,EAAKC,EAAO,CACf,aAAM,IAAID,GAAM,MAAM,IAAIA,CAAG,GAAK,IAAI,KAAO,IAAIC,CAAK,CAAC,EAEhD,IACR,CAEA,CAAC,OAAO,WAAW,GAAI,CACtB,MAAO,aACR,CACD,ECtBA,IAAqBC,EAArB,KAAyC,CACxCC,GACAC,GAMA,YAAYC,EAASC,EAAc,CAClC,KAAKH,GAAWE,EAChB,KAAKD,GAAgBE,CACtB,CAQA,OAAOC,EAAOC,EAAM,CACnB,KAAKJ,GAAc,KAAK,KAAKD,GAAUI,EAAOC,CAAI,CACnD,CAEA,IAAK,OAAO,WAAW,GAAI,CAC1B,MAAO,qBACR,CACD,ECxBA,IAAqBC,EAArB,KAAkC,CACjCC,GACAC,GAMA,YAAYC,EAAWC,EAAqB,CAC3C,KAAKH,GAAaE,EAClB,KAAKD,GAAuBE,CAC7B,CAOA,IAAI,WAAY,CACf,OAAO,KAAKH,EACb,CAOA,IAAI,qBAAsB,CACzB,OAAO,KAAKC,EACb,CAEA,IAAK,OAAO,WAAW,GAAI,CAC1B,MAAO,cACR,CACD,EHhCA,IAAqBG,EAArB,KAA+B,CAE9BC,GAEA,aAAc,CACb,KAAKA,GAAe,IAAIC,CACzB,CAUA,UAAUC,EAAWC,EAAcC,EAAUD,EAAc,CAC1D,IAAME,EAAsB,IAAIC,EAAoBF,EAASD,CAAY,EACzE,YAAKH,GAAa,IAAIE,EAAWG,CAAmB,EAE7C,IAAIE,EAAaL,EAAWG,CAAmB,CACvD,CAUA,YAAY,CAAE,UAAAH,EAAW,oBAAAG,CAAoB,EAAG,CAC/C,IAAMG,EAAuB,KAAKR,GAAa,IAAIE,CAAS,EACtDO,EAAUD,GAAsB,OAAOH,CAAmB,EAEhE,OAAII,GAAWD,EAAqB,MAAQ,GAC3C,KAAKR,GAAa,OAAOE,CAAS,EAG5BO,CACR,CASA,QAAQP,EAAWQ,EAAQ,IAAI,YAAYR,CAAS,EAAGS,EAAM,CACxDA,GAAQ,MAAQ,EAAED,aAAiB,SAEtC,CAACC,EAAMD,CAAK,EAAI,CAACA,EAAO,IAAI,YAAYR,CAAS,CAAC,GAEnD,KAAKF,GAAa,IAAIE,CAAS,GAAG,QAASG,GAAwBA,EAAoB,OAAOK,EAAOC,CAAI,CAAC,CAC3G,CAUA,aAAa,CAAE,UAAAT,EAAW,oBAAAG,CAAoB,EAAG,CAChD,OAAO,KAAKL,GAAa,IAAIE,CAAS,GAAG,IAAIG,CAAmB,CACjE,CAEA,IAAK,OAAO,WAAW,GAAI,CAC1B,MAAO,WACR,CACD",
6
- "names": ["subscribr_exports", "__export", "Subscribr", "SetMultiMap", "key", "value", "ContextEventHandler", "#context", "#eventHandler", "context", "eventHandler", "event", "data", "Subscription", "#eventName", "#contextEventHandler", "eventName", "contextEventHandler", "Subscribr", "#subscribers", "SetMultiMap", "eventName", "eventHandler", "context", "contextEventHandler", "ContextEventHandler", "Subscription", "contextEventHandlers", "removed", "event", "data"]
7
- }
package/dist/browser.zip DELETED
Binary file
@@ -1,2 +0,0 @@
1
- var n=class extends Map{set(t,e){return super.set(t,(super.get(t)??new Set).add(e)),this}[Symbol.toStringTag](){return"SetMultiMap"}};var o=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}handle(t,e){this.#e.call(this.#t,t,e)}get[Symbol.toStringTag](){return"ContextEventHandler"}};var i=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}get eventName(){return this.#t}get contextEventHandler(){return this.#e}get[Symbol.toStringTag](){return"Subscription"}};var l=class{#t;constructor(){this.#t=new n}subscribe(t,e,r=e){let s=new o(r,e);return this.#t.set(t,s),new i(t,s)}unsubscribe({eventName:t,contextEventHandler:e}){let r=this.#t.get(t),s=r?.delete(e);return s&&r.size==0&&this.#t.delete(t),s}publish(t,e=new CustomEvent(t),r){r==null&&!(e instanceof Event)&&([r,e]=[e,new CustomEvent(t)]),this.#t.get(t)?.forEach(s=>s.handle(e,r))}isSubscribed({eventName:t,contextEventHandler:e}){return this.#t.get(t)?.has(e)}get[Symbol.toStringTag](){return"Subscribr"}};export{l as default};
2
- //# sourceMappingURL=subscribr.min.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../node_modules/@d1g1tal/collections/src/set-multi-map.js", "../../src/context-event-handler.js", "../../src/subscription.js", "../../src/subscribr.js"],
4
- "sourcesContent": ["/**\n *\n * @typedef {Map<*, *>} SetMultiMap\n * @extends Map\n */\nexport default class SetMultiMap extends Map {\n\t/**\n\t * Adds a new element with a specified key and value to the SetMultiMap. If an element with the same key already exists, the value will be added to the underlying {@link Set}.\n\t *\n\t * @param {*} key The key to set.\n\t * @param {*} value The value to add to the SetMultiMap\n\t * @returns {SetMultiMap} The SetMultiMap with the updated key and value.\n\t */\n\tset(key, value) {\n\t\tsuper.set(key, (super.get(key) ?? new Set()).add(value));\n\n\t\treturn this;\n\t}\n\n\t[Symbol.toStringTag]() {\n\t\treturn 'SetMultiMap';\n\t}\n}", "export default class ContextEventHandler {\n\t#context;\n\t#eventHandler;\n\n\t/**\n\t * @param {*} context The context to bind to the event handler.\n\t * @param {function(*): void} eventHandler The event handler to call when the event is published.\n\t */\n\tconstructor(context, eventHandler) {\n\t\tthis.#context = context;\n\t\tthis.#eventHandler = eventHandler;\n\t}\n\n\t/**\n\t * Call the event handler for the provided event.\n\t *\n\t * @param {Event} event The event to handle\n\t * @param {*} [data] The value to be passed to the event handler as a parameter.\n\t */\n\thandle(event, data) {\n\t\tthis.#eventHandler.call(this.#context, event, data);\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'ContextEventHandler';\n\t}\n}", "/** @typedef { import('./context-event-handler.js').default } ContextEventHandler */\n\nexport default class Subscription {\n\t#eventName;\n\t#contextEventHandler;\n\n\t/**\n\t * @param {string} eventName The event name.\n\t * @param {ContextEventHandler} contextEventHandler Then context event handler.\n\t */\n\tconstructor(eventName, contextEventHandler) {\n\t\tthis.#eventName = eventName;\n\t\tthis.#contextEventHandler = contextEventHandler;\n\t}\n\n\t/**\n\t * Gets the event name for the subscription.\n\t *\n\t * @returns {string} The event name.\n\t */\n\tget eventName() {\n\t\treturn this.#eventName;\n\t}\n\n\t/**\n\t * Gets the context event handler.\n\t *\n\t * @returns {ContextEventHandler} The context event handler\n\t */\n\tget contextEventHandler() {\n\t\treturn this.#contextEventHandler;\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Subscription';\n\t}\n}", "import SetMultiMap from '@d1g1tal/collections/set-multi-map.js';\nimport ContextEventHandler from './context-event-handler.js';\nimport Subscription from './subscription.js';\n\nexport default class Subscribr {\n\t/** @type {SetMultiMap<string, ContextEventHandler>} */\n\t#subscribers;\n\n\tconstructor() {\n\t\tthis.#subscribers = new SetMultiMap();\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t *\n\t * @param {string} eventName The event name to subscribe to.\n\t * @param {function(Event, *): void} eventHandler The event handler to call when the event is published.\n\t * @param {*} [context] The context to bind to the event handler.\n\t * @returns {Subscription} An object used to check if the subscription still exists and to unsubscribe from the event.\n\t */\n\tsubscribe(eventName, eventHandler, context = eventHandler) {\n\t\tconst contextEventHandler = new ContextEventHandler(context, eventHandler);\n\t\tthis.#subscribers.set(eventName, contextEventHandler);\n\n\t\treturn new Subscription(eventName, contextEventHandler);\n\t}\n\n\t/**\n\t * Unsubscribe from the event\n\t *\n\t * @param {Subscription} subscription The subscription to unsubscribe.\n\t * @param {string} subscription.eventName The event name to subscribe to.\n\t * @param {ContextEventHandler} subscription.contextEventHandler The event handler to call when the event is published.\n\t * @returns {boolean} true if eventListener has been removed successfully. false if the value is not found or if the value is not an object.\n\t */\n\tunsubscribe({ eventName, contextEventHandler }) {\n\t\tconst contextEventHandlers = this.#subscribers.get(eventName);\n\t\tconst removed = contextEventHandlers?.delete(contextEventHandler);\n\n\t\tif (removed && contextEventHandlers.size == 0) {\n\t\t\tthis.#subscribers.delete(eventName);\n\t\t}\n\n\t\treturn removed;\n\t}\n\n\t/**\n\t * Publish an event\n\t *\n\t * @param {string} eventName The name of the event.\n\t * @param {Event} event The event to be handled.\n\t * @param {*} [data] The value to be passed to the event handler as a parameter.\n\t */\n\tpublish(eventName, event = new CustomEvent(eventName), data) {\n\t\tif (data == null && !(event instanceof Event)) {\n\t\t\t// Swap the event and data parameters because only data was passed without an event object\n\t\t\t[data, event] = [event, new CustomEvent(eventName)];\n\t\t}\n\t\tthis.#subscribers.get(eventName)?.forEach((contextEventHandler) => contextEventHandler.handle(event, data));\n\t}\n\n\t/**\n\t * Check if the event and handler are subscribed.\n\t *\n\t * @param {Subscription} subscription The subscription object.\n\t * @param {string} subscription.eventName The name of the event to check.\n\t * @param {ContextEventHandler} subscription.contextEventHandler The event handler to check.\n\t * @returns {boolean} true if the event name and handler are subscribed, false otherwise.\n\t */\n\tisSubscribed({ eventName, contextEventHandler }) {\n\t\treturn this.#subscribers.get(eventName)?.has(contextEventHandler);\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Subscribr';\n\t}\n}"],
5
- "mappings": "AAKA,IAAqBA,EAArB,cAAyC,GAAI,CAQ5C,IAAIC,EAAKC,EAAO,CACf,aAAM,IAAID,GAAM,MAAM,IAAIA,CAAG,GAAK,IAAI,KAAO,IAAIC,CAAK,CAAC,EAEhD,IACR,CAEA,CAAC,OAAO,WAAW,GAAI,CACtB,MAAO,aACR,CACD,ECtBA,IAAqBC,EAArB,KAAyC,CACxCC,GACAC,GAMA,YAAYC,EAASC,EAAc,CAClC,KAAKH,GAAWE,EAChB,KAAKD,GAAgBE,CACtB,CAQA,OAAOC,EAAOC,EAAM,CACnB,KAAKJ,GAAc,KAAK,KAAKD,GAAUI,EAAOC,CAAI,CACnD,CAEA,IAAK,OAAO,WAAW,GAAI,CAC1B,MAAO,qBACR,CACD,ECxBA,IAAqBC,EAArB,KAAkC,CACjCC,GACAC,GAMA,YAAYC,EAAWC,EAAqB,CAC3C,KAAKH,GAAaE,EAClB,KAAKD,GAAuBE,CAC7B,CAOA,IAAI,WAAY,CACf,OAAO,KAAKH,EACb,CAOA,IAAI,qBAAsB,CACzB,OAAO,KAAKC,EACb,CAEA,IAAK,OAAO,WAAW,GAAI,CAC1B,MAAO,cACR,CACD,EChCA,IAAqBG,EAArB,KAA+B,CAE9BC,GAEA,aAAc,CACb,KAAKA,GAAe,IAAIC,CACzB,CAUA,UAAUC,EAAWC,EAAcC,EAAUD,EAAc,CAC1D,IAAME,EAAsB,IAAIC,EAAoBF,EAASD,CAAY,EACzE,YAAKH,GAAa,IAAIE,EAAWG,CAAmB,EAE7C,IAAIE,EAAaL,EAAWG,CAAmB,CACvD,CAUA,YAAY,CAAE,UAAAH,EAAW,oBAAAG,CAAoB,EAAG,CAC/C,IAAMG,EAAuB,KAAKR,GAAa,IAAIE,CAAS,EACtDO,EAAUD,GAAsB,OAAOH,CAAmB,EAEhE,OAAII,GAAWD,EAAqB,MAAQ,GAC3C,KAAKR,GAAa,OAAOE,CAAS,EAG5BO,CACR,CASA,QAAQP,EAAWQ,EAAQ,IAAI,YAAYR,CAAS,EAAGS,EAAM,CACxDA,GAAQ,MAAQ,EAAED,aAAiB,SAEtC,CAACC,EAAMD,CAAK,EAAI,CAACA,EAAO,IAAI,YAAYR,CAAS,CAAC,GAEnD,KAAKF,GAAa,IAAIE,CAAS,GAAG,QAASG,GAAwBA,EAAoB,OAAOK,EAAOC,CAAI,CAAC,CAC3G,CAUA,aAAa,CAAE,UAAAT,EAAW,oBAAAG,CAAoB,EAAG,CAChD,OAAO,KAAKL,GAAa,IAAIE,CAAS,GAAG,IAAIG,CAAmB,CACjE,CAEA,IAAK,OAAO,WAAW,GAAI,CAC1B,MAAO,WACR,CACD",
6
- "names": ["SetMultiMap", "key", "value", "ContextEventHandler", "#context", "#eventHandler", "context", "eventHandler", "event", "data", "Subscription", "#eventName", "#contextEventHandler", "eventName", "contextEventHandler", "Subscribr", "#subscribers", "SetMultiMap", "eventName", "eventHandler", "context", "contextEventHandler", "ContextEventHandler", "Subscription", "contextEventHandlers", "removed", "event", "data"]
7
- }
package/dist/esm.zip DELETED
Binary file
package/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export { default as ContextEventHandler } from "./src/context-event-handler.js";
2
- export { default as Subscribr } from "./src/subscribr.js";
3
- export { default as Subscription } from "./src/subscription.js";
package/index.js DELETED
@@ -1,3 +0,0 @@
1
- export {default as ContextEventHandler} from './src/context-event-handler.js';
2
- export {default as Subscribr} from './src/subscribr.js';
3
- export {default as Subscription} from './src/subscription.js';
@@ -1,22 +0,0 @@
1
- export default class ContextEventHandler {
2
- /**
3
- * @param {*} context The context to bind to the event handler.
4
- * @param {function(*): void} eventHandler The event handler to call when the event is published.
5
- */
6
- constructor(context: any, eventHandler: (arg0: any) => void);
7
- /**
8
- * Call the event handler for the provided event.
9
- *
10
- * @param {Event} event The event to handle
11
- * @param {*} [data] The value to be passed to the event handler as a parameter.
12
- */
13
- handle(event: Event, data?: any): void;
14
- /**
15
- * Get the event handler
16
- *
17
- * @returns {function(*)} The event handler
18
- */
19
- get eventHandler(): (arg0: any) => any;
20
- get [Symbol.toStringTag](): string;
21
- #private;
22
- }
@@ -1,40 +0,0 @@
1
- export default class Subscribr {
2
- /**
3
- * Subscribe to an event
4
- *
5
- * @param {string} eventName The event name to subscribe to.
6
- * @param {function(Event, *): void} eventHandler The event handler to call when the event is published.
7
- * @param {*} [context] The context to bind to the event handler.
8
- * @returns {Subscription} An object used to check if the subscription still exists and to unsubscribe from the event.
9
- */
10
- subscribe(eventName: string, eventHandler: (arg0: Event, arg1: any) => void, context?: any): Subscription;
11
- /**
12
- * Unsubscribe from the event
13
- *
14
- * @param {Subscription} subscription The subscription to unsubscribe.
15
- * @param {string} subscription.eventName The event name to subscribe to.
16
- * @param {ContextEventHandler} subscription.contextEventHandler The event handler to call when the event is published.
17
- * @returns {boolean} true if eventListener has been removed successfully. false if the value is not found or if the value is not an object.
18
- */
19
- unsubscribe({ eventName, contextEventHandler }: Subscription): boolean;
20
- /**
21
- * Publish an event
22
- *
23
- * @param {string} eventName The name of the event.
24
- * @param {Event} event The event to be handled.
25
- * @param {*} [data] The value to be passed to the event handler as a parameter.
26
- */
27
- publish(eventName: string, event?: Event, data?: any): void;
28
- /**
29
- * Check if the event and handler are subscribed.
30
- *
31
- * @param {Subscription} subscription The subscription object.
32
- * @param {string} subscription.eventName The name of the event to check.
33
- * @param {ContextEventHandler} subscription.contextEventHandler The event handler to check.
34
- * @returns {boolean} true if the event name and handler are subscribed, false otherwise.
35
- */
36
- isSubscribed({ eventName, contextEventHandler }: Subscription): boolean;
37
- get [Symbol.toStringTag](): string;
38
- #private;
39
- }
40
- import Subscription from "./subscription.js";
@@ -1,23 +0,0 @@
1
- /** @typedef {import('./context-event-handler.js').default} ContextEventHandler */
2
- export default class Subscription {
3
- /**
4
- * @param {string} eventName The event name.
5
- * @param {ContextEventHandler} contextEventHandler Then context event handler.
6
- */
7
- constructor(eventName: string, contextEventHandler: ContextEventHandler);
8
- /**
9
- * Gets the event name for the subscription.
10
- *
11
- * @returns {string} The event name.
12
- */
13
- get eventName(): string;
14
- /**
15
- * Gets the context event handler.
16
- *
17
- * @returns {ContextEventHandler} The context event handler
18
- */
19
- get contextEventHandler(): import("./context-event-handler.js").default;
20
- get [Symbol.toStringTag](): string;
21
- #private;
22
- }
23
- export type ContextEventHandler = import('./context-event-handler.js').default;