@libp2p/utils 7.4.0-87dca02b0 → 7.4.0-ac7305ccf
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/dist/index.min.js +4 -4
- package/dist/index.min.js.map +3 -3
- package/dist/src/queue/job.d.ts.map +1 -1
- package/dist/src/queue/job.js +26 -2
- package/dist/src/queue/job.js.map +1 -1
- package/package.json +5 -5
- package/src/queue/job.ts +33 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/queue/job.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/queue/job.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AActD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,GAAG,CAAE,UAAU,SAAS,YAAY,GAAG,eAAe,GAAG,YAAY,EAAE,aAAa,GAAG,OAAO;IAClG,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IACnD,OAAO,EAAE,UAAU,CAAA;IACnB,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAA;IAC9C,MAAM,EAAE,SAAS,CAAA;IACxB,SAAgB,QAAQ,EAAE,WAAW,CAAA;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,mBAAmB,CAAS;gBAEvB,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG;IAkB9E,KAAK,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IAIxB,OAAO,IAAK,IAAI;IAYV,IAAI,CAAE,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAS3F,GAAG,IAAK,OAAO,CAAC,IAAI,CAAC;IAiE3B,OAAO,IAAK,IAAI;CAajB"}
|
package/dist/src/queue/job.js
CHANGED
|
@@ -8,6 +8,10 @@ import { JobRecipient } from "./recipient.js";
|
|
|
8
8
|
function randomId() {
|
|
9
9
|
return `${(parseInt(String(Math.random() * 1e9), 10)).toString()}${Date.now()}`;
|
|
10
10
|
}
|
|
11
|
+
// tracks which jobs have forwarded a given progress event - each job forwards
|
|
12
|
+
// an event object at most once, so recipient graphs with shared paths stay
|
|
13
|
+
// linear to dispatch. event objects must not be reused across emissions
|
|
14
|
+
const dispatchedProgressEvents = new WeakMap();
|
|
11
15
|
export class Job {
|
|
12
16
|
id;
|
|
13
17
|
fn;
|
|
@@ -59,11 +63,25 @@ export class Job {
|
|
|
59
63
|
...(this.options ?? {}),
|
|
60
64
|
signal: this.controller.signal,
|
|
61
65
|
onProgress: (evt) => {
|
|
62
|
-
|
|
63
|
-
|
|
66
|
+
if (this.recipients.length === 0) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// re-entry guard - without it a dispatch cycle recurses until the
|
|
70
|
+
// stack overflows, even when a hop wraps the event in a new object
|
|
64
71
|
if (this.dispatchingProgress) {
|
|
65
72
|
return;
|
|
66
73
|
}
|
|
74
|
+
if (typeof evt === 'object' && evt !== null) {
|
|
75
|
+
let jobs = dispatchedProgressEvents.get(evt);
|
|
76
|
+
if (jobs == null) {
|
|
77
|
+
jobs = new WeakSet();
|
|
78
|
+
dispatchedProgressEvents.set(evt, jobs);
|
|
79
|
+
}
|
|
80
|
+
if (jobs.has(this)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
jobs.add(this);
|
|
84
|
+
}
|
|
67
85
|
this.dispatchingProgress = true;
|
|
68
86
|
try {
|
|
69
87
|
this.recipients.forEach(recipient => {
|
|
@@ -93,9 +111,15 @@ export class Job {
|
|
|
93
111
|
}
|
|
94
112
|
cleanup() {
|
|
95
113
|
this.recipients.forEach(recipient => {
|
|
114
|
+
// no-op for recipients settled by run() or their own abort listener -
|
|
115
|
+
// settles any whose abort listener was removed before it could fire
|
|
116
|
+
recipient.deferred.reject(recipient.signal?.reason ?? new AbortError());
|
|
96
117
|
recipient.cleanup();
|
|
97
118
|
recipient.signal?.removeEventListener('abort', this.onAbort);
|
|
98
119
|
});
|
|
120
|
+
// stop forwarding progress events and release the recipients (and the
|
|
121
|
+
// callbacks they hold) for garbage collection
|
|
122
|
+
this.recipients.splice(0, this.recipients.length);
|
|
99
123
|
}
|
|
100
124
|
}
|
|
101
125
|
//# sourceMappingURL=job.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/queue/job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAK7C;;GAEG;AACH,SAAS,QAAQ;IACf,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;AACjF,CAAC;
|
|
1
|
+
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/queue/job.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/utils",
|
|
3
|
-
"version": "7.4.0-
|
|
3
|
+
"version": "7.4.0-ac7305ccf",
|
|
4
4
|
"description": "Package to aggregate shared logic and dependencies for the libp2p ecosystem",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/utils#readme",
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@chainsafe/is-ip": "^2.1.0",
|
|
49
49
|
"@chainsafe/netmask": "^2.0.0",
|
|
50
|
-
"@libp2p/interface": "3.3.0-
|
|
51
|
-
"@libp2p/logger": "6.2.13-
|
|
50
|
+
"@libp2p/interface": "3.3.0-ac7305ccf",
|
|
51
|
+
"@libp2p/logger": "6.2.13-ac7305ccf",
|
|
52
52
|
"@multiformats/multiaddr": "^13.0.3",
|
|
53
53
|
"@multiformats/multiaddr-matcher": "^3.0.2",
|
|
54
54
|
"@sindresorhus/fnv1a": "^3.1.0",
|
|
@@ -72,8 +72,8 @@
|
|
|
72
72
|
"uint8arrays": "^6.1.1"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
|
-
"@libp2p/crypto": "5.1.23-
|
|
76
|
-
"@libp2p/peer-id": "6.0.15-
|
|
75
|
+
"@libp2p/crypto": "5.1.23-ac7305ccf",
|
|
76
|
+
"@libp2p/peer-id": "6.0.15-ac7305ccf",
|
|
77
77
|
"@types/netmask": "^2.0.5",
|
|
78
78
|
"aegir": "^48.1.1",
|
|
79
79
|
"benchmark": "^2.1.4",
|
package/src/queue/job.ts
CHANGED
|
@@ -13,6 +13,11 @@ function randomId (): string {
|
|
|
13
13
|
return `${(parseInt(String(Math.random() * 1e9), 10)).toString()}${Date.now()}`
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
// tracks which jobs have forwarded a given progress event - each job forwards
|
|
17
|
+
// an event object at most once, so recipient graphs with shared paths stay
|
|
18
|
+
// linear to dispatch. event objects must not be reused across emissions
|
|
19
|
+
const dispatchedProgressEvents = new WeakMap<object, WeakSet<object>>()
|
|
20
|
+
|
|
16
21
|
export interface JobTimeline {
|
|
17
22
|
created: number
|
|
18
23
|
started?: number
|
|
@@ -83,12 +88,31 @@ export class Job <JobOptions extends AbortOptions & ProgressOptions = AbortOptio
|
|
|
83
88
|
...(this.options ?? {}),
|
|
84
89
|
signal: this.controller.signal,
|
|
85
90
|
onProgress: (evt: any): void => {
|
|
86
|
-
|
|
87
|
-
|
|
91
|
+
if (this.recipients.length === 0) {
|
|
92
|
+
return
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// re-entry guard - without it a dispatch cycle recurses until the
|
|
96
|
+
// stack overflows, even when a hop wraps the event in a new object
|
|
88
97
|
if (this.dispatchingProgress) {
|
|
89
98
|
return
|
|
90
99
|
}
|
|
91
100
|
|
|
101
|
+
if (typeof evt === 'object' && evt !== null) {
|
|
102
|
+
let jobs = dispatchedProgressEvents.get(evt)
|
|
103
|
+
|
|
104
|
+
if (jobs == null) {
|
|
105
|
+
jobs = new WeakSet()
|
|
106
|
+
dispatchedProgressEvents.set(evt, jobs)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (jobs.has(this)) {
|
|
110
|
+
return
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
jobs.add(this)
|
|
114
|
+
}
|
|
115
|
+
|
|
92
116
|
this.dispatchingProgress = true
|
|
93
117
|
|
|
94
118
|
try {
|
|
@@ -120,8 +144,15 @@ export class Job <JobOptions extends AbortOptions & ProgressOptions = AbortOptio
|
|
|
120
144
|
|
|
121
145
|
cleanup (): void {
|
|
122
146
|
this.recipients.forEach(recipient => {
|
|
147
|
+
// no-op for recipients settled by run() or their own abort listener -
|
|
148
|
+
// settles any whose abort listener was removed before it could fire
|
|
149
|
+
recipient.deferred.reject(recipient.signal?.reason ?? new AbortError())
|
|
123
150
|
recipient.cleanup()
|
|
124
151
|
recipient.signal?.removeEventListener('abort', this.onAbort)
|
|
125
152
|
})
|
|
153
|
+
|
|
154
|
+
// stop forwarding progress events and release the recipients (and the
|
|
155
|
+
// callbacks they hold) for garbage collection
|
|
156
|
+
this.recipients.splice(0, this.recipients.length)
|
|
126
157
|
}
|
|
127
158
|
}
|