Skip to content

Commit 2be28cd

Browse files
committed
refactor: reduce bundle size
1 parent be12656 commit 2be28cd

5 files changed

Lines changed: 37 additions & 33 deletions

File tree

mangle-cache.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"addDep_": "d",
3+
"batching_": "c",
34
"data_": "a",
45
"delete_": "l",
56
"dependents_": "n",
@@ -10,5 +11,6 @@
1011
"onReaction_": "o",
1112
"single_": "s",
1213
"task_": "k",
14+
"tasks_": "t",
1315
"upsert_": "u"
1416
}

src/collections/reactiveMap.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { batchFlush, batchStart, type BatchTask, tasks } from "../batch";
2-
import { type EventObject, on, send, size } from "../event";
2+
import { type EventObject, on, type RemoveListener, send, size } from "../event";
33
import { writable } from "../readable";
4-
import { type Disposer, type OwnedWritable, type Readable } from "../typings";
4+
import { type OwnedWritable, type Readable } from "../typings";
55
import { strictEqual } from "../utils";
66

77
export interface ReactiveMapChanged<K, V> {
@@ -32,7 +32,7 @@ export class OwnedReactiveMap<K, V> extends Map<K, V> {
3232
* @param fn - The function to call when the map is changed.
3333
* @returns A disposer function to unsubscribe from the event.
3434
*/
35-
public onChanged(fn: (changed: ReactiveMapChanged<K, V>) => void): Disposer {
35+
public onChanged(fn: (changed: ReactiveMapChanged<K, V>) => void): RemoveListener {
3636
return on(
3737
(this._onChanged_ ??= {
3838
delete_: new Set<K>(),
@@ -72,7 +72,7 @@ export class OwnedReactiveMap<K, V> extends Map<K, V> {
7272
* @param fn - The function to call when a value is needed to be disposed.
7373
* @returns A disposer function to unsubscribe from the event.
7474
*/
75-
public onDisposeValue(fn: (value: V) => void): Disposer {
75+
public onDisposeValue(fn: (value: V) => void): RemoveListener {
7676
return on(
7777
(this._onDisposeValue_ ??= {
7878
delete_: new Set<V>(),

src/event.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
import { type Disposer } from "./typings";
21
import { invokeEach } from "./utils";
32

4-
export interface Listener<T = any> {
5-
(data: T): void;
6-
}
3+
export type Listener<T = any> = (data: T) => void;
4+
5+
/**
6+
* Unsubscribes the bound listener.
7+
* @returns Returns true if the listener existed and has been removed,
8+
* or false if the listener does not exist.
9+
*/
10+
export type RemoveListener = () => boolean;
711

812
export interface EventObject<T = any> {
913
/** @internal */
@@ -12,23 +16,20 @@ export interface EventObject<T = any> {
1216
single_?: Listener<T> | null;
1317
}
1418

15-
export function send<T = any>(eventObject: EventObject<T>, data: T): void {
19+
export const send = <T = any>(eventObject: EventObject<T>, data: T): void =>
1620
eventObject.multi_ ? invokeEach(eventObject.multi_, data) : eventObject.single_?.(data);
17-
}
1821

19-
export function size(eventObject: EventObject): number {
20-
return eventObject.multi_ ? eventObject.multi_.size : eventObject.single_ ? 1 : 0;
21-
}
22+
export const size = (eventObject: EventObject): number =>
23+
eventObject.multi_ ? eventObject.multi_.size : eventObject.single_ ? 1 : 0;
2224

23-
export function on(eventObject: EventObject, listener: Listener): Disposer {
25+
export const on = (eventObject: EventObject, listener: Listener): RemoveListener => (
2426
eventObject.single_ || eventObject.multi_
2527
? (eventObject.multi_ ??= new Set<Listener>().add(eventObject.single_!)).add(listener)
26-
: (eventObject.single_ = listener);
27-
return off.bind(null, eventObject, listener);
28-
}
28+
: (eventObject.single_ = listener),
29+
off.bind(null, eventObject, listener)
30+
);
2931

30-
export function off(eventObject: EventObject, listener: Listener): void {
32+
export const off = (eventObject: EventObject, listener: Listener): boolean =>
3133
eventObject.multi_
3234
? eventObject.multi_.delete(listener)
33-
: eventObject.single_ === listener && (eventObject.single_ = null);
34-
}
35+
: eventObject.single_ === listener && !(eventObject.single_ = null);

src/index.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
export { batch, batchFlush, batchStart } from "./batch";
2-
3-
export { compute, type ComputeFn } from "./compute";
4-
51
export type {
62
Flatten,
73
Get,
@@ -16,6 +12,12 @@ export type {
1612
Version,
1713
} from "./typings";
1814

15+
export { type Listener, type RemoveListener } from "./event";
16+
17+
export { batch, batchFlush, batchStart } from "./batch";
18+
19+
export { compute, type ComputeFn } from "./compute";
20+
1921
export { readable, writable, toWritable } from "./readable";
2022
export { watch, type WatchEffect } from "./watch";
2123

src/readable.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { batchFlush, batchStart, type BatchTask, tasks } from "./batch";
2-
import { off, on, send, size, type EventObject } from "./event";
32
import {
43
type OwnedReadable,
54
type OwnedWritable,
@@ -11,7 +10,7 @@ import {
1110
type Version,
1211
type Writable,
1312
} from "./typings";
14-
import { BRAND, strictEqual, UNIQUE_VALUE } from "./utils";
13+
import { BRAND, invokeEach, strictEqual, UNIQUE_VALUE } from "./utils";
1514

1615
export type Deps = Map<ReadableImpl, Version>;
1716

@@ -86,7 +85,7 @@ export class ReadableImpl<TValue = any> implements BatchTask {
8685
/**
8786
* @internal
8887
*/
89-
private _subs_?: EventObject<TValue> | null;
88+
private _subs_?: Set<Subscriber<TValue>>;
9089

9190
public get $version(): Version {
9291
this.get();
@@ -154,9 +153,9 @@ export class ReadableImpl<TValue = any> implements BatchTask {
154153

155154
/** @internal */
156155
public task_(): void {
157-
if (this._subs_ && size(this._subs_) && this._lastSubInvokeVersion_ !== this.$version) {
156+
if (this._subs_?.size && this._lastSubInvokeVersion_ !== this.$version) {
158157
this._lastSubInvokeVersion_ = this.$version;
159-
send(this._subs_, this.get());
158+
invokeEach(this._subs_, this.get());
160159
}
161160
}
162161

@@ -262,11 +261,11 @@ export class ReadableImpl<TValue = any> implements BatchTask {
262261

263262
/** @internal */
264263
public onReaction_(subscriber: Subscriber<TValue>): void {
265-
if (!this._subs_ || !size(this._subs_)) {
264+
if (!this._subs_?.size) {
266265
// start tracking last first on first subscription
267266
this._lastSubInvokeVersion_ = this.$version;
268267
}
269-
on((this._subs_ ??= {}), subscriber);
268+
(this._subs_ ??= new Set()).add(subscriber);
270269
}
271270

272271
public reaction(subscriber: Subscriber<TValue>): Disposer {
@@ -315,11 +314,11 @@ export class ReadableImpl<TValue = any> implements BatchTask {
315314
}
316315

317316
public unsubscribe(subscriber: (...args: any[]) => any): void {
318-
this._subs_ && off(this._subs_, subscriber);
317+
this._subs_?.delete(subscriber);
319318
}
320319

321320
public unsubscribeAll(): void {
322-
this._subs_ = null;
321+
this._subs_?.clear();
323322
}
324323

325324
public valueOf(): TValue {

0 commit comments

Comments
 (0)