bunqueue 2.0.5 → 2.0.7
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/application/operations/pull.d.ts +0 -1
- package/dist/application/operations/pull.d.ts.map +1 -1
- package/dist/application/operations/pull.js +151 -129
- package/dist/application/operations/pull.js.map +1 -1
- package/dist/application/operations/push.d.ts +2 -0
- package/dist/application/operations/push.d.ts.map +1 -1
- package/dist/application/operations/push.js +204 -119
- package/dist/application/operations/push.js.map +1 -1
- package/dist/application/webhookManager.d.ts.map +1 -1
- package/dist/application/webhookManager.js +6 -29
- package/dist/application/webhookManager.js.map +1 -1
- package/dist/client/sandboxed/types.d.ts +2 -2
- package/dist/client/sandboxed/types.d.ts.map +1 -1
- package/dist/client/sandboxed/worker.d.ts +2 -0
- package/dist/client/sandboxed/worker.d.ts.map +1 -1
- package/dist/client/sandboxed/worker.js +112 -62
- package/dist/client/sandboxed/worker.js.map +1 -1
- package/dist/client/sandboxed/wrapper.d.ts.map +1 -1
- package/dist/client/sandboxed/wrapper.js +4 -2
- package/dist/client/sandboxed/wrapper.js.map +1 -1
- package/package.json +1 -1
|
@@ -31,7 +31,6 @@ export interface PullContext {
|
|
|
31
31
|
export declare function pullJob(queue: string, timeoutMs: number, ctx: PullContext): Promise<Job | null>;
|
|
32
32
|
/**
|
|
33
33
|
* Pull multiple jobs from queue
|
|
34
|
-
* Optimized: single lock acquisition for all jobs instead of O(count) locks
|
|
35
34
|
*/
|
|
36
35
|
export declare function pullJobBatch(queue: string, count: number, timeoutMs: number, ctx: PullContext): Promise<Job[]>;
|
|
37
36
|
//# sourceMappingURL=pull.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/application/operations/pull.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../../src/application/operations/pull.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,KAAK,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AA0BhD,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IACpC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClC,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,SAAS,EAAE,CAAC,KAAK,EAAE;QACjB,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,IAAI,CAAC;CACZ;AA0HD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAqBrB;AAqCD;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,GAAG,EAAE,CAAC,CA0BhB"}
|
|
@@ -5,6 +5,117 @@
|
|
|
5
5
|
import { isExpired, isReady } from '../../domain/types/job';
|
|
6
6
|
import { withWriteLock } from '../../shared/lock';
|
|
7
7
|
import { shardIndex, processingShardIndex } from '../../shared/hash';
|
|
8
|
+
const LOG_PREFIX = '[Pull]';
|
|
9
|
+
/** Structured log helper */
|
|
10
|
+
function log(level, message, data) {
|
|
11
|
+
const entry = data ? { message, ...data } : message;
|
|
12
|
+
switch (level) {
|
|
13
|
+
case 'info':
|
|
14
|
+
console.log(LOG_PREFIX, entry);
|
|
15
|
+
break;
|
|
16
|
+
case 'warn':
|
|
17
|
+
console.warn(LOG_PREFIX, entry);
|
|
18
|
+
break;
|
|
19
|
+
case 'error':
|
|
20
|
+
console.error(LOG_PREFIX, entry);
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Try to dequeue next ready job from queue
|
|
26
|
+
* Handles: expired skip, ready check, group blocking, timestamps
|
|
27
|
+
*/
|
|
28
|
+
function tryDequeueNextJob(shard, queue, now, ctx) {
|
|
29
|
+
const q = shard.getQueue(queue);
|
|
30
|
+
const job = q.peek();
|
|
31
|
+
if (!job)
|
|
32
|
+
return { status: 'stop' };
|
|
33
|
+
// Skip expired jobs
|
|
34
|
+
if (isExpired(job, now)) {
|
|
35
|
+
q.pop();
|
|
36
|
+
shard.decrementQueued(job.id);
|
|
37
|
+
ctx.jobIndex.delete(job.id);
|
|
38
|
+
log('warn', 'Skipped expired job', {
|
|
39
|
+
queue,
|
|
40
|
+
jobId: String(job.id),
|
|
41
|
+
ttl: job.ttl,
|
|
42
|
+
});
|
|
43
|
+
return { status: 'skip' };
|
|
44
|
+
}
|
|
45
|
+
// Not ready yet (delayed)
|
|
46
|
+
if (!isReady(job, now))
|
|
47
|
+
return { status: 'stop' };
|
|
48
|
+
// FIFO group blocked
|
|
49
|
+
if (job.groupId && shard.isGroupActive(queue, job.groupId)) {
|
|
50
|
+
return { status: 'stop' };
|
|
51
|
+
}
|
|
52
|
+
// Dequeue and update
|
|
53
|
+
q.pop();
|
|
54
|
+
shard.decrementQueued(job.id);
|
|
55
|
+
if (job.groupId) {
|
|
56
|
+
shard.activateGroup(queue, job.groupId);
|
|
57
|
+
}
|
|
58
|
+
job.startedAt = now;
|
|
59
|
+
job.lastHeartbeat = now;
|
|
60
|
+
return { status: 'job', job };
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Move job to processing shard and broadcast
|
|
64
|
+
*/
|
|
65
|
+
async function moveToProcessing(job, queue, ctx) {
|
|
66
|
+
const procIdx = processingShardIndex(job.id);
|
|
67
|
+
const now = Date.now();
|
|
68
|
+
await withWriteLock(ctx.processingLocks[procIdx], () => {
|
|
69
|
+
ctx.processingShards[procIdx].set(job.id, job);
|
|
70
|
+
});
|
|
71
|
+
ctx.jobIndex.set(job.id, { type: 'processing', shardIdx: procIdx });
|
|
72
|
+
ctx.storage?.markActive(job.id, job.startedAt ?? now);
|
|
73
|
+
ctx.totalPulled.value++;
|
|
74
|
+
ctx.broadcast({
|
|
75
|
+
eventType: 'pulled',
|
|
76
|
+
queue,
|
|
77
|
+
jobId: job.id,
|
|
78
|
+
timestamp: now,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Move multiple jobs to processing shards (optimized: groups by shard)
|
|
83
|
+
*/
|
|
84
|
+
async function moveToProcessingBatch(jobs, queue, ctx) {
|
|
85
|
+
// Group by processing shard for efficiency
|
|
86
|
+
const byProcShard = new Map();
|
|
87
|
+
for (const job of jobs) {
|
|
88
|
+
const procIdx = processingShardIndex(job.id);
|
|
89
|
+
const shardJobs = byProcShard.get(procIdx) ?? [];
|
|
90
|
+
if (shardJobs.length === 0)
|
|
91
|
+
byProcShard.set(procIdx, shardJobs);
|
|
92
|
+
shardJobs.push(job);
|
|
93
|
+
}
|
|
94
|
+
// Add to processing shards in parallel
|
|
95
|
+
const lockPromises = [];
|
|
96
|
+
for (const [procIdx, shardJobs] of byProcShard) {
|
|
97
|
+
lockPromises.push(withWriteLock(ctx.processingLocks[procIdx], () => {
|
|
98
|
+
for (const job of shardJobs) {
|
|
99
|
+
ctx.processingShards[procIdx].set(job.id, job);
|
|
100
|
+
}
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
await Promise.all(lockPromises);
|
|
104
|
+
// Update indexes and broadcast
|
|
105
|
+
const now = Date.now();
|
|
106
|
+
for (const job of jobs) {
|
|
107
|
+
const procIdx = processingShardIndex(job.id);
|
|
108
|
+
ctx.jobIndex.set(job.id, { type: 'processing', shardIdx: procIdx });
|
|
109
|
+
ctx.storage?.markActive(job.id, job.startedAt ?? now);
|
|
110
|
+
ctx.totalPulled.value++;
|
|
111
|
+
ctx.broadcast({
|
|
112
|
+
eventType: 'pulled',
|
|
113
|
+
queue,
|
|
114
|
+
jobId: job.id,
|
|
115
|
+
timestamp: now,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
8
119
|
/**
|
|
9
120
|
* Pull next job from queue
|
|
10
121
|
*/
|
|
@@ -14,30 +125,14 @@ export async function pullJob(queue, timeoutMs, ctx) {
|
|
|
14
125
|
while (true) {
|
|
15
126
|
const job = await tryPullFromShard(queue, idx, ctx);
|
|
16
127
|
if (job) {
|
|
17
|
-
|
|
18
|
-
const procIdx = processingShardIndex(job.id);
|
|
19
|
-
await withWriteLock(ctx.processingLocks[procIdx], () => {
|
|
20
|
-
ctx.processingShards[procIdx].set(job.id, job);
|
|
21
|
-
});
|
|
22
|
-
ctx.jobIndex.set(job.id, { type: 'processing', shardIdx: procIdx });
|
|
23
|
-
// Persist state change
|
|
24
|
-
const startedAt = job.startedAt ?? Date.now();
|
|
25
|
-
ctx.storage?.markActive(job.id, startedAt);
|
|
26
|
-
// Update metrics
|
|
27
|
-
ctx.totalPulled.value++;
|
|
28
|
-
ctx.broadcast({
|
|
29
|
-
eventType: 'pulled',
|
|
30
|
-
queue,
|
|
31
|
-
jobId: job.id,
|
|
32
|
-
timestamp: Date.now(),
|
|
33
|
-
});
|
|
128
|
+
await moveToProcessing(job, queue, ctx);
|
|
34
129
|
return job;
|
|
35
130
|
}
|
|
36
131
|
// No job available, check timeout
|
|
37
132
|
if (deadline === 0 || Date.now() >= deadline) {
|
|
38
133
|
return null;
|
|
39
134
|
}
|
|
40
|
-
// Wait for notification or timeout
|
|
135
|
+
// Wait for notification or timeout
|
|
41
136
|
const remaining = deadline - Date.now();
|
|
42
137
|
await ctx.shards[idx].waitForJob(remaining);
|
|
43
138
|
}
|
|
@@ -49,101 +144,44 @@ async function tryPullFromShard(queue, idx, ctx) {
|
|
|
49
144
|
return await withWriteLock(ctx.shardLocks[idx], () => {
|
|
50
145
|
const shard = ctx.shards[idx];
|
|
51
146
|
const state = shard.getState(queue);
|
|
52
|
-
|
|
53
|
-
|
|
147
|
+
if (state.paused) {
|
|
148
|
+
log('info', 'Queue is paused, skipping pull', { queue });
|
|
54
149
|
return null;
|
|
55
|
-
|
|
56
|
-
if (!shard.tryAcquireRateLimit(queue))
|
|
150
|
+
}
|
|
151
|
+
if (!shard.tryAcquireRateLimit(queue)) {
|
|
152
|
+
log('info', 'Rate limit reached', { queue });
|
|
57
153
|
return null;
|
|
58
|
-
|
|
59
|
-
if (!shard.tryAcquireConcurrency(queue))
|
|
154
|
+
}
|
|
155
|
+
if (!shard.tryAcquireConcurrency(queue)) {
|
|
156
|
+
log('info', 'Concurrency limit reached', { queue });
|
|
60
157
|
return null;
|
|
61
|
-
|
|
158
|
+
}
|
|
62
159
|
const now = Date.now();
|
|
63
|
-
// Find ready job
|
|
64
160
|
while (true) {
|
|
65
|
-
const
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
// Update running counters for O(1) stats
|
|
72
|
-
shard.decrementQueued(job.id);
|
|
73
|
-
ctx.jobIndex.delete(job.id);
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
// Check if ready
|
|
77
|
-
if (!isReady(job, now))
|
|
78
|
-
break;
|
|
79
|
-
// Check FIFO group
|
|
80
|
-
if (job.groupId && shard.isGroupActive(queue, job.groupId)) {
|
|
81
|
-
// Skip, will retry
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
84
|
-
// Dequeue
|
|
85
|
-
q.pop();
|
|
86
|
-
// Update running counters for O(1) stats
|
|
87
|
-
shard.decrementQueued(job.id);
|
|
88
|
-
// Mark group active
|
|
89
|
-
if (job.groupId) {
|
|
90
|
-
shard.activateGroup(queue, job.groupId);
|
|
91
|
-
}
|
|
92
|
-
// Update job
|
|
93
|
-
job.startedAt = now;
|
|
94
|
-
job.lastHeartbeat = now;
|
|
95
|
-
return job;
|
|
161
|
+
const result = tryDequeueNextJob(shard, queue, now, ctx);
|
|
162
|
+
if (result.status === 'job')
|
|
163
|
+
return result.job;
|
|
164
|
+
if (result.status === 'stop')
|
|
165
|
+
return null;
|
|
166
|
+
// status === 'skip': continue loop
|
|
96
167
|
}
|
|
97
|
-
return null;
|
|
98
168
|
});
|
|
99
169
|
}
|
|
100
170
|
/**
|
|
101
171
|
* Pull multiple jobs from queue
|
|
102
|
-
* Optimized: single lock acquisition for all jobs instead of O(count) locks
|
|
103
172
|
*/
|
|
104
173
|
export async function pullJobBatch(queue, count, timeoutMs, ctx) {
|
|
105
174
|
const deadline = timeoutMs > 0 ? Date.now() + timeoutMs : 0;
|
|
106
175
|
const idx = shardIndex(queue);
|
|
107
176
|
while (true) {
|
|
108
|
-
// Try to pull multiple jobs with single lock
|
|
109
177
|
const jobs = await tryPullBatchFromShard(queue, idx, count, ctx);
|
|
110
178
|
if (jobs.length > 0) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
shardJobs = [];
|
|
118
|
-
byProcShard.set(procIdx, shardJobs);
|
|
119
|
-
}
|
|
120
|
-
shardJobs.push(job);
|
|
121
|
-
}
|
|
122
|
-
// Add to processing shards in parallel - avoid Array.from allocation
|
|
123
|
-
const now = Date.now();
|
|
124
|
-
const lockPromises = [];
|
|
125
|
-
for (const [procIdx, shardJobs] of byProcShard) {
|
|
126
|
-
lockPromises.push(withWriteLock(ctx.processingLocks[procIdx], () => {
|
|
127
|
-
for (const job of shardJobs) {
|
|
128
|
-
ctx.processingShards[procIdx].set(job.id, job);
|
|
129
|
-
}
|
|
130
|
-
}));
|
|
131
|
-
}
|
|
132
|
-
await Promise.all(lockPromises);
|
|
133
|
-
// Update indexes and metrics
|
|
134
|
-
for (const job of jobs) {
|
|
135
|
-
const procIdx = processingShardIndex(job.id);
|
|
136
|
-
ctx.jobIndex.set(job.id, { type: 'processing', shardIdx: procIdx });
|
|
137
|
-
const startedAt = job.startedAt ?? now;
|
|
138
|
-
ctx.storage?.markActive(job.id, startedAt);
|
|
139
|
-
ctx.totalPulled.value++;
|
|
140
|
-
ctx.broadcast({
|
|
141
|
-
eventType: 'pulled',
|
|
142
|
-
queue,
|
|
143
|
-
jobId: job.id,
|
|
144
|
-
timestamp: now,
|
|
145
|
-
});
|
|
146
|
-
}
|
|
179
|
+
await moveToProcessingBatch(jobs, queue, ctx);
|
|
180
|
+
log('info', 'Batch pull completed', {
|
|
181
|
+
queue,
|
|
182
|
+
count: jobs.length,
|
|
183
|
+
requested: count,
|
|
184
|
+
});
|
|
147
185
|
return jobs;
|
|
148
186
|
}
|
|
149
187
|
// No jobs available, check timeout
|
|
@@ -156,54 +194,38 @@ export async function pullJobBatch(queue, count, timeoutMs, ctx) {
|
|
|
156
194
|
}
|
|
157
195
|
}
|
|
158
196
|
/**
|
|
159
|
-
* Try to pull multiple jobs from a shard
|
|
197
|
+
* Try to pull multiple jobs from a shard
|
|
160
198
|
*/
|
|
161
199
|
async function tryPullBatchFromShard(queue, idx, count, ctx) {
|
|
162
200
|
return await withWriteLock(ctx.shardLocks[idx], () => {
|
|
163
201
|
const shard = ctx.shards[idx];
|
|
164
202
|
const state = shard.getState(queue);
|
|
165
203
|
const jobs = [];
|
|
166
|
-
// Check if paused
|
|
167
204
|
if (state.paused)
|
|
168
205
|
return jobs;
|
|
169
|
-
const q = shard.getQueue(queue);
|
|
170
206
|
const now = Date.now();
|
|
171
|
-
// Pull up to count jobs
|
|
172
207
|
while (jobs.length < count) {
|
|
173
|
-
// Check
|
|
174
|
-
if (!shard.tryAcquireRateLimit(queue))
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
break;
|
|
179
|
-
const job = q.peek();
|
|
180
|
-
if (!job)
|
|
208
|
+
// Check limits per job
|
|
209
|
+
if (!shard.tryAcquireRateLimit(queue)) {
|
|
210
|
+
if (jobs.length === 0) {
|
|
211
|
+
log('info', 'Rate limit reached', { queue });
|
|
212
|
+
}
|
|
181
213
|
break;
|
|
182
|
-
// Skip expired jobs
|
|
183
|
-
if (isExpired(job, now)) {
|
|
184
|
-
q.pop();
|
|
185
|
-
shard.decrementQueued(job.id);
|
|
186
|
-
ctx.jobIndex.delete(job.id);
|
|
187
|
-
continue;
|
|
188
214
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if (job.groupId && shard.isGroupActive(queue, job.groupId)) {
|
|
215
|
+
if (!shard.tryAcquireConcurrency(queue)) {
|
|
216
|
+
if (jobs.length === 0) {
|
|
217
|
+
log('info', 'Concurrency limit reached', { queue });
|
|
218
|
+
}
|
|
194
219
|
break;
|
|
195
220
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
if (
|
|
201
|
-
|
|
221
|
+
const result = tryDequeueNextJob(shard, queue, now, ctx);
|
|
222
|
+
if (result.status === 'job') {
|
|
223
|
+
jobs.push(result.job);
|
|
224
|
+
}
|
|
225
|
+
else if (result.status === 'stop') {
|
|
226
|
+
break;
|
|
202
227
|
}
|
|
203
|
-
//
|
|
204
|
-
job.startedAt = now;
|
|
205
|
-
job.lastHeartbeat = now;
|
|
206
|
-
jobs.push(job);
|
|
228
|
+
// status === 'skip': continue loop
|
|
207
229
|
}
|
|
208
230
|
return jobs;
|
|
209
231
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/application/operations/pull.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAwB,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAKlF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/application/operations/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,10 +28,12 @@ export interface PushContext {
|
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Push a single job to queue
|
|
31
|
+
* NOTE: customId check happens OUTSIDE lock for performance (unlike batch)
|
|
31
32
|
*/
|
|
32
33
|
export declare function pushJob(queue: string, input: JobInput, ctx: PushContext): Promise<Job>;
|
|
33
34
|
/**
|
|
34
35
|
* Push multiple jobs to queue
|
|
36
|
+
* NOTE: customId check happens INSIDE lock (safer for concurrent batch inserts)
|
|
35
37
|
*/
|
|
36
38
|
export declare function pushJobBatch(queue: string, inputs: JobInput[], ctx: PushContext): Promise<JobId[]>;
|
|
37
39
|
//# sourceMappingURL=push.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/application/operations/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,GAAG,EACR,KAAK,KAAK,EACV,KAAK,QAAQ,EAId,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../../src/application/operations/push.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,GAAG,EACR,KAAK,KAAK,EACV,KAAK,QAAQ,EAId,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAwBzD,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAClC,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,SAAS,EAAE,CAAC,KAAK,EAAE;QACjB,SAAS,EAAE,SAAS,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,KAAK,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,IAAI,CAAC;CACZ;AA0JD;;;GAGG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAkE5F;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,QAAQ,EAAE,EAClB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,KAAK,EAAE,CAAC,CAgDlB"}
|