@shivaedev/jobs 0.35.1 → 0.37.0
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/CHANGELOG.md +20 -0
- package/README.md +5 -85
- package/dist/server/adapters/inspectionChanges.d.ts.map +1 -1
- package/dist/server/adapters/inspectionChanges.js +17 -2
- package/dist/server/adapters/inspectionChanges.js.map +1 -1
- package/dist/server/adapters/listJobs.d.ts.map +1 -1
- package/dist/server/adapters/listJobs.js +17 -7
- package/dist/server/adapters/listJobs.js.map +1 -1
- package/dist/server/adapters/localInspectionChanges.d.ts +3 -0
- package/dist/server/adapters/localInspectionChanges.d.ts.map +1 -0
- package/dist/server/adapters/localInspectionChanges.js +2 -0
- package/dist/server/adapters/localInspectionChanges.js.map +1 -0
- package/dist/server/adapters/settleDeferral.d.ts.map +1 -1
- package/dist/server/adapters/settleDeferral.js +4 -2
- package/dist/server/adapters/settleDeferral.js.map +1 -1
- package/dist/server/error.d.ts +1 -20
- package/dist/server/error.d.ts.map +1 -1
- package/dist/server/error.js +1 -8
- package/dist/server/error.js.map +1 -1
- package/dist/server/internal/engine.d.ts +3 -7
- package/dist/server/internal/engine.d.ts.map +1 -1
- package/dist/server/internal/engine.js +0 -2
- package/dist/server/internal/engine.js.map +1 -1
- package/dist/server/internal/jobListings.d.ts.map +1 -1
- package/dist/server/internal/jobListings.js +13 -7
- package/dist/server/internal/jobListings.js.map +1 -1
- package/package.json +13 -10
- package/src/server/adapters/inspectionChanges.ts +17 -2
- package/src/server/adapters/listJobs.ts +18 -10
- package/src/server/adapters/localInspectionChanges.ts +3 -0
- package/src/server/adapters/settleDeferral.ts +4 -2
- package/src/server/error.ts +1 -17
- package/src/server/internal/engine.ts +3 -14
- package/src/server/internal/jobListings.ts +20 -9
- package/dist/server/adapters/expireAttempt.d.ts +0 -4
- package/dist/server/adapters/expireAttempt.d.ts.map +0 -1
- package/dist/server/adapters/expireAttempt.js +0 -17
- package/dist/server/adapters/expireAttempt.js.map +0 -1
- package/dist/server/adapters/testingClient.d.ts +0 -13
- package/dist/server/adapters/testingClient.d.ts.map +0 -1
- package/dist/server/adapters/testingClient.js +0 -101
- package/dist/server/adapters/testingClient.js.map +0 -1
- package/dist/server/adapters/testingController.d.ts +0 -80
- package/dist/server/adapters/testingController.d.ts.map +0 -1
- package/dist/server/adapters/testingController.js +0 -120
- package/dist/server/adapters/testingController.js.map +0 -1
- package/dist/server/adapters/testingDueNow.d.ts +0 -7
- package/dist/server/adapters/testingDueNow.d.ts.map +0 -1
- package/dist/server/adapters/testingDueNow.js +0 -26
- package/dist/server/adapters/testingDueNow.js.map +0 -1
- package/dist/server/adapters/testingEngine.d.ts +0 -5
- package/dist/server/adapters/testingEngine.d.ts.map +0 -1
- package/dist/server/adapters/testingEngine.js +0 -12
- package/dist/server/adapters/testingEngine.js.map +0 -1
- package/dist/server/adapters/testingExpirations.d.ts +0 -8
- package/dist/server/adapters/testingExpirations.d.ts.map +0 -1
- package/dist/server/adapters/testingExpirations.js +0 -27
- package/dist/server/adapters/testingExpirations.js.map +0 -1
- package/dist/server/adapters/testingInspectionClient.d.ts +0 -5
- package/dist/server/adapters/testingInspectionClient.d.ts.map +0 -1
- package/dist/server/adapters/testingInspectionClient.js +0 -52
- package/dist/server/adapters/testingInspectionClient.js.map +0 -1
- package/dist/server/adapters/testingTime.d.ts +0 -10
- package/dist/server/adapters/testingTime.d.ts.map +0 -1
- package/dist/server/adapters/testingTime.js +0 -18
- package/dist/server/adapters/testingTime.js.map +0 -1
- package/dist/server/internal/adapters/deferralChanges.d.ts +0 -3
- package/dist/server/internal/adapters/deferralChanges.d.ts.map +0 -1
- package/dist/server/internal/adapters/deferralChanges.js +0 -2
- package/dist/server/internal/adapters/deferralChanges.js.map +0 -1
- package/dist/server/internal/adapters/testingFetches.d.ts +0 -7
- package/dist/server/internal/adapters/testingFetches.d.ts.map +0 -1
- package/dist/server/internal/adapters/testingFetches.js +0 -30
- package/dist/server/internal/adapters/testingFetches.js.map +0 -1
- package/dist/server/internal/testingIdle.d.ts +0 -17
- package/dist/server/internal/testingIdle.d.ts.map +0 -1
- package/dist/server/internal/testingIdle.js +0 -18
- package/dist/server/internal/testingIdle.js.map +0 -1
- package/dist/server/internal/testingOperation.d.ts +0 -5
- package/dist/server/internal/testingOperation.d.ts.map +0 -1
- package/dist/server/internal/testingOperation.js +0 -12
- package/dist/server/internal/testingOperation.js.map +0 -1
- package/dist/server/internal/testingSchedules.d.ts +0 -14
- package/dist/server/internal/testingSchedules.d.ts.map +0 -1
- package/dist/server/internal/testingSchedules.js +0 -20
- package/dist/server/internal/testingSchedules.js.map +0 -1
- package/dist/server/internal/testingWaits.d.ts +0 -20
- package/dist/server/internal/testingWaits.d.ts.map +0 -1
- package/dist/server/internal/testingWaits.js +0 -53
- package/dist/server/internal/testingWaits.js.map +0 -1
- package/dist/server/testing.d.ts +0 -89
- package/dist/server/testing.d.ts.map +0 -1
- package/dist/server/testing.js +0 -12
- package/dist/server/testing.js.map +0 -1
- package/src/server/adapters/expireAttempt.ts +0 -22
- package/src/server/adapters/testingClient.ts +0 -123
- package/src/server/adapters/testingController.ts +0 -137
- package/src/server/adapters/testingDueNow.ts +0 -32
- package/src/server/adapters/testingEngine.ts +0 -15
- package/src/server/adapters/testingExpirations.ts +0 -33
- package/src/server/adapters/testingInspectionClient.ts +0 -70
- package/src/server/adapters/testingTime.ts +0 -25
- package/src/server/internal/adapters/deferralChanges.ts +0 -3
- package/src/server/internal/adapters/testingFetches.ts +0 -36
- package/src/server/internal/testingIdle.ts +0 -36
- package/src/server/internal/testingOperation.ts +0 -18
- package/src/server/internal/testingSchedules.ts +0 -35
- package/src/server/internal/testingWaits.ts +0 -94
- package/src/server/testing.ts +0 -31
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { Duration, Effect, Option, Redacted, type Schema } from "effect";
|
|
2
|
-
import type { JobPayloadSchema, QueueDefinition } from "#server/definition.ts";
|
|
3
|
-
import { type PgBossPayloadError, PgBossTestingError, PgBossWaitError } from "#server/error.ts";
|
|
4
|
-
import type { PgBossInspectionService } from "#server/inspection.ts";
|
|
5
|
-
import type { TestingFetches } from "#server/internal/adapters/testingFetches.ts";
|
|
6
|
-
import { testingInspection } from "#server/internal/testingOperation.ts";
|
|
7
|
-
import type { Job, JobState } from "#server/job.ts";
|
|
8
|
-
import type { PgBossTestingWaitOptions } from "#server/testing.ts";
|
|
9
|
-
|
|
10
|
-
interface Reading<A> {
|
|
11
|
-
readonly arrived: Option.Option<A>;
|
|
12
|
-
readonly seen: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
interface Signal {
|
|
16
|
-
readonly revision: Effect.Effect<number>;
|
|
17
|
-
readonly waitForChange: (after: number) => Effect.Effect<number>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function waitUntil<A, E, R>(
|
|
21
|
-
signal: Signal,
|
|
22
|
-
waitingFor: string,
|
|
23
|
-
read: Effect.Effect<Reading<A>, E, R>,
|
|
24
|
-
options: PgBossTestingWaitOptions | undefined,
|
|
25
|
-
) {
|
|
26
|
-
const within = Duration.fromInputUnsafe(options?.within ?? "20 seconds");
|
|
27
|
-
return Effect.suspend(() => {
|
|
28
|
-
let lastSeen = "nothing yet";
|
|
29
|
-
const wait = Effect.gen(function* () {
|
|
30
|
-
while (true) {
|
|
31
|
-
const revision = yield* signal.revision;
|
|
32
|
-
const { arrived, seen } = yield* read;
|
|
33
|
-
lastSeen = seen;
|
|
34
|
-
if (Option.isSome(arrived)) {
|
|
35
|
-
return arrived.value;
|
|
36
|
-
}
|
|
37
|
-
yield* signal.waitForChange(revision);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
return wait.pipe(Effect.timeoutOrElse({ duration: within, orElse: () => Effect.fail(new PgBossWaitError({ lastSeen, waitingFor, within })) }));
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function fetchesRefused(queue: Pick<QueueDefinition, "name">, original: Error) {
|
|
45
|
-
return new PgBossTestingError({ operation: "fetchesPass", original: Redacted.make(original), queue: queue.name });
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function testingWaits(inspection: () => PgBossInspectionService, fetches: () => TestingFetches | undefined, signal: Signal) {
|
|
49
|
-
return {
|
|
50
|
-
fetchesPass: (queue: Pick<QueueDefinition, "name">, count: number, options?: PgBossTestingWaitOptions) =>
|
|
51
|
-
Effect.gen(function* () {
|
|
52
|
-
if (!Number.isSafeInteger(count) || count < 1) {
|
|
53
|
-
return yield* fetchesRefused(queue, new RangeError("Fetch count must be a positive integer"));
|
|
54
|
-
}
|
|
55
|
-
const observed = fetches();
|
|
56
|
-
if (observed === undefined) {
|
|
57
|
-
return yield* fetchesRefused(queue, new Error("Provide the testing clientFactory to a jobs Layer first"));
|
|
58
|
-
}
|
|
59
|
-
const begun = observed.begun(queue.name);
|
|
60
|
-
const fetchesHave = count === 1 ? "fetch that began after the wait has" : "fetches that began after the wait have";
|
|
61
|
-
return yield* waitUntil(
|
|
62
|
-
signal,
|
|
63
|
-
`${count} ${queue.name} ${fetchesHave} finished`,
|
|
64
|
-
Effect.sync(() => {
|
|
65
|
-
const passed = observed.passedSince(queue.name, begun);
|
|
66
|
-
return { arrived: passed >= count ? Option.some(undefined) : Option.none(), seen: `${passed} finished` };
|
|
67
|
-
}),
|
|
68
|
-
options,
|
|
69
|
-
);
|
|
70
|
-
}),
|
|
71
|
-
untilJob: <TName extends string, TPayload extends JobPayloadSchema | typeof Schema.Null>(
|
|
72
|
-
queue: { readonly name: TName; readonly schema: TPayload },
|
|
73
|
-
id: string,
|
|
74
|
-
state: JobState,
|
|
75
|
-
options?: PgBossTestingWaitOptions,
|
|
76
|
-
) =>
|
|
77
|
-
waitUntil(
|
|
78
|
-
signal,
|
|
79
|
-
`job ${id} in ${queue.name} is ${state}`,
|
|
80
|
-
Effect.suspend(() => testingInspection("untilJob", inspection().jobs(queue, { id }), queue.name)).pipe(
|
|
81
|
-
Effect.flatMap(([job]): Effect.Effect<Reading<Job<TPayload["Type"]>>, PgBossPayloadError, TPayload["DecodingServices"]> => {
|
|
82
|
-
if (job === undefined) {
|
|
83
|
-
return Effect.succeed({ arrived: Option.none(), seen: "no such job" });
|
|
84
|
-
}
|
|
85
|
-
if (job.state !== state) {
|
|
86
|
-
return Effect.succeed({ arrived: Option.none(), seen: job.state });
|
|
87
|
-
}
|
|
88
|
-
return Effect.succeed({ arrived: Option.some(job), seen: job.state });
|
|
89
|
-
}),
|
|
90
|
-
),
|
|
91
|
-
options,
|
|
92
|
-
),
|
|
93
|
-
};
|
|
94
|
-
}
|
package/src/server/testing.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { type Duration, Effect, type Tracer } from "effect";
|
|
2
|
-
import type { TestClock } from "effect/testing";
|
|
3
|
-
import { testingController } from "#server/adapters/testingController.ts";
|
|
4
|
-
|
|
5
|
-
export function makePgBossTesting(options: PgBossTestingOptions = {}) {
|
|
6
|
-
return testingController(options);
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface PgBossTestingWaitOptions {
|
|
10
|
-
readonly within?: Duration.Input;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export const testRetryPolicy = Object.freeze({ retryBackoff: false, retryDelay: 0 });
|
|
14
|
-
|
|
15
|
-
export interface PgBossTestingOptions {
|
|
16
|
-
readonly clock?: TestClock.TestClock;
|
|
17
|
-
readonly retryPolicy?: typeof testRetryPolicy;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function linkedWorkerSpans(sender: Pick<Tracer.AnySpan, "spanId" | "traceId">, spans: readonly Tracer.Span[]) {
|
|
21
|
-
return Effect.sync(() =>
|
|
22
|
-
spans.filter(
|
|
23
|
-
(span) =>
|
|
24
|
-
span.kind === "consumer"
|
|
25
|
-
&& span.attributes.get("messaging.system") === "pg-boss"
|
|
26
|
-
&& span.links.some((link) => link.span.spanId === sender.spanId && link.span.traceId === sender.traceId),
|
|
27
|
-
),
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export type PgBossTesting = ReturnType<typeof makePgBossTesting>;
|