@shivaedev/effect-pg-boss 0.1.3 → 0.2.1

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/README.md +7 -5
  3. package/dist/definition.d.ts +8 -8
  4. package/dist/definition.d.ts.map +1 -1
  5. package/dist/definition.js +6 -6
  6. package/dist/definition.js.map +1 -1
  7. package/dist/error.d.ts +1 -1
  8. package/dist/error.d.ts.map +1 -1
  9. package/dist/error.js +1 -1
  10. package/dist/error.js.map +1 -1
  11. package/dist/health.d.ts.map +1 -1
  12. package/dist/health.js.map +1 -1
  13. package/dist/index.d.ts +5 -5
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/internal/client.d.ts +2 -2
  17. package/dist/internal/client.d.ts.map +1 -1
  18. package/dist/internal/client.js.map +1 -1
  19. package/dist/internal/health.d.ts +3 -3
  20. package/dist/internal/health.d.ts.map +1 -1
  21. package/dist/internal/health.js +4 -7
  22. package/dist/internal/health.js.map +1 -1
  23. package/dist/internal/lifecycle.d.ts +5 -5
  24. package/dist/internal/lifecycle.d.ts.map +1 -1
  25. package/dist/internal/lifecycle.js +24 -15
  26. package/dist/internal/lifecycle.js.map +1 -1
  27. package/dist/internal/register.d.ts +5 -4
  28. package/dist/internal/register.d.ts.map +1 -1
  29. package/dist/internal/register.js +30 -14
  30. package/dist/internal/register.js.map +1 -1
  31. package/dist/internal/service.d.ts +2 -2
  32. package/dist/internal/service.d.ts.map +1 -1
  33. package/dist/internal/service.js +2 -2
  34. package/dist/internal/service.js.map +1 -1
  35. package/dist/service.d.ts +5 -6
  36. package/dist/service.d.ts.map +1 -1
  37. package/dist/service.js +8 -15
  38. package/dist/service.js.map +1 -1
  39. package/package.json +35 -29
  40. package/src/definition.ts +22 -46
  41. package/src/error.ts +4 -13
  42. package/src/health.ts +1 -2
  43. package/src/index.ts +8 -8
  44. package/src/internal/client.ts +7 -33
  45. package/src/internal/health.ts +7 -20
  46. package/src/internal/lifecycle.ts +35 -35
  47. package/src/internal/register.ts +58 -71
  48. package/src/internal/service.ts +20 -36
  49. package/src/service.ts +29 -91
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/internal/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/internal/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhE,OAAO,EAAwB,UAAU,EAA0C,MAAM,gBAAgB,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD,MAAM,YAAY,GAAG,CAAC,OAA0C,EAAE,EAAE,CAAC,CAAC;IACrE,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,CAAC;IACb,GAAG,OAAO;CACV,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,YAA6B,EAA+B,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,aAAa,CAAC;AAE1H,MAAM,iBAAiB,GAAG,CAAC,YAA6B,EAAmC,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,iBAAiB,CAAC;AAEtI,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,YAA6B,EAAU,EAAE;IACzE,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;IAChC,CAAC;IACD,IAAI,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;IACnC,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,iCAAiC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC;AAIF,SAAS,aAAa,CAAC,OAAgB;IACtC,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,MAAmB,EAAE,GAAiB,EAAE,OAAiC,EAAoB,EAAE,CACtH,MAAM,CAAC,UAAU,CAChB,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAC7D,MAAM,CAAC,QAAQ,CACd,CAAC,KAAK,EAAE,EAAE,CACT,IAAI,kBAAkB,CAAC;IACtB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;CACxB,CAAC,CACH,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EACrE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CACvB,EACD,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CACtB,CAAC;AAEH,MAAM,aAAa,GAAG,KAAK,EAAE,MAAoB,EAAE,MAAmB,EAAE,OAAiC,EAAE,aAAsB,EAAiB,EAAE;IACnJ,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/B,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,aAAa,EAAE,CAAC;QACnB,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;QAC9B,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;QAC1C,UAAU;KACV,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,KAAK,EAC7B,MAAoB,EACpB,MAAuB,EACvB,OAAiC,EACjC,aAAsB,EACN,EAAE;IAClB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC5B,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,aAAa,EAAE,CAAC;QACnB,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE;QACvC,GAAG,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;QACtC,UAAU;KACV,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;QAChG,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;gBAC/D,MAAM,EAAE,GAAG,CAAC,MAAM;aAClB,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;AACrF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,aAAyC,EAAqB,EAAE;IACjG,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClD,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC3B,MAAoB,EACpB,aAAyC,EACzC,OAA2B,EAC3B,cAAuB,EACgC,EAAE,CACzD,MAAM,CAAC,UAAU,CAAC;IACjB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC;IAClD,GAAG,EAAE,KAAK,IAAI,EAAE;QACf,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YAC1C,IAAI,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjC,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC5C,MAAM,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;YACxE,CAAC;QACF,CAAC;IACF,CAAC;CACD,CAAC,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { PgBossService } from "../service.js";
2
- import type { PgBossClient } from "./client.js";
1
+ import type { PgBossService } from "#service.ts";
2
+ import type { PgBossClient } from "./client.ts";
3
3
  export declare const makeService: (client: PgBossClient, names: readonly string[]) => PgBossService;
4
4
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/internal/service.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,eAAO,MAAM,WAAW,GACvB,QAAQ,YAAY,EACpB,OAAO,SAAS,MAAM,EAAE,KACtB,aAqCD,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/internal/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,eAAO,MAAM,WAAW,GAAI,QAAQ,YAAY,EAAE,OAAO,SAAS,MAAM,EAAE,KAAG,aA4B3E,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Effect, Option, Redacted, Schema } from "effect";
2
- import { PgBossPayloadError, toPgBossError, } from "../error.js";
2
+ import { PgBossPayloadError, toPgBossError } from "#error.ts";
3
3
  import { healthFor } from "./health.js";
4
4
  export const makeService = (client, names) => ({
5
5
  enqueue: (queue, payload, options) => Schema.encodeUnknownEffect(queue.schema)(payload).pipe(Effect.mapError((error) => new PgBossPayloadError({
@@ -15,8 +15,8 @@ export const makeService = (client, names) => ({
15
15
  }));
16
16
  }
17
17
  return Effect.tryPromise({
18
- try: () => client.send(queue.name, encoded, options),
19
18
  catch: (error) => toPgBossError("enqueue", error, queue.name),
19
+ try: () => client.send(queue.name, encoded, options),
20
20
  }).pipe(Effect.map(Option.fromNullishOr));
21
21
  })),
22
22
  health: healthFor(client, names),
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/internal/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAEN,kBAAkB,EAClB,aAAa,GACb,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,WAAW,GAAG,CAC1B,MAAoB,EACpB,KAAwB,EACR,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CACpC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CACrD,MAAM,CAAC,QAAQ,CACd,CAAC,KAAK,EAAE,EAAE,CACT,IAAI,kBAAkB,CAAC;QACtB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,KAAK,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC,CACH,EACD,MAAM,CAAC,OAAO,CACb,CACC,OAAO,EAIN,EAAE;QACH,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrD,OAAO,MAAM,CAAC,IAAI,CACjB,IAAI,kBAAkB,CAAC;gBACtB,SAAS,EAAE,QAAQ;gBACnB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CACtB,IAAI,SAAS,CAAC,yCAAyC,CAAC,CACxD;gBACD,KAAK,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CACF,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,UAAU,CAAC;YACxB,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;YACpD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;SAC7D,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3C,CAAC,CACD,CACD;IACF,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;CAChC,CAAC,CAAC"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/internal/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAoB,kBAAkB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAGhF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAoB,EAAE,KAAwB,EAAiB,EAAE,CAAC,CAAC;IAC9F,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CACpC,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CACrD,MAAM,CAAC,QAAQ,CACd,CAAC,KAAK,EAAE,EAAE,CACT,IAAI,kBAAkB,CAAC;QACtB,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,KAAK,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC,CACH,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAA0E,EAAE;QAClG,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrD,OAAO,MAAM,CAAC,IAAI,CACjB,IAAI,kBAAkB,CAAC;gBACtB,SAAS,EAAE,QAAQ;gBACnB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;gBACjF,KAAK,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC,CACF,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,UAAU,CAAC;YACxB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;YAC7D,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC;SACpD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CACF;IACF,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;CAChC,CAAC,CAAC"}
package/dist/service.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { Context, Effect, Layer, type Option, type Schema } from "effect";
2
2
  import type { ConstructorOptions, SendOptions, StopOptions } from "pg-boss";
3
- import type { JobPayloadSchema, JobRegistration, QueueDefinition, RegistrationRequirements } from "./definition.js";
4
- import type { PgBossError, PgBossPayloadError } from "./error.js";
5
- import type { JobsHealth } from "./health.js";
6
- import type { PgBossClientFactory } from "./internal/client.js";
3
+ import type { PgBossClientFactory } from "#internal/client.ts";
4
+ import type { JobPayloadSchema, JobRegistration, QueueDefinition, RegistrationRequirements } from "./definition.ts";
5
+ import type { PgBossError, PgBossPayloadError } from "./error.ts";
6
+ import type { JobsHealth } from "./health.ts";
7
7
  export interface PgBossService {
8
8
  readonly enqueue: <const Name extends string, const Payload extends JobPayloadSchema>(queue: QueueDefinition<Name, Payload>, payload: Schema.Schema.Type<Payload>, options?: SendOptions) => Effect.Effect<Option.Option<string>, PgBossError | PgBossPayloadError, Payload["EncodingServices"]>;
9
9
  readonly health: Effect.Effect<JobsHealth, PgBossError>;
@@ -12,9 +12,8 @@ interface PgBossIdentifier {
12
12
  readonly _pgBossIdentifier: unique symbol;
13
13
  }
14
14
  export type PgBossLayerOptions<Registrations extends readonly JobRegistration[], ErrorRequirements> = ConstructorOptions & {
15
- /** Override client construction for compatible clients or deterministic tests. */
16
15
  readonly clientFactory?: PgBossClientFactory;
17
- readonly developmentCacheKey?: string | symbol;
16
+ readonly clientCacheKey?: string | symbol | undefined;
18
17
  readonly jobs: Registrations;
19
18
  readonly onError?: (error: Error) => Effect.Effect<unknown, never, ErrorRequirements>;
20
19
  readonly stop?: StopOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,KAAK,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAKhE,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,CACjB,KAAK,CAAC,IAAI,SAAS,MAAM,EACzB,KAAK,CAAC,OAAO,SAAS,gBAAgB,EAEtC,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EACrC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE,WAAW,KACjB,MAAM,CAAC,MAAM,CACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACrB,WAAW,GAAG,kBAAkB,EAChC,OAAO,CAAC,kBAAkB,CAAC,CAC3B,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;CACxD;AAED,UAAU,gBAAgB;IACzB,QAAQ,CAAC,iBAAiB,EAAE,OAAO,MAAM,CAAC;CAC1C;AAED,MAAM,MAAM,kBAAkB,CAC7B,aAAa,SAAS,SAAS,eAAe,EAAE,EAChD,iBAAiB,IACd,kBAAkB,GAAG;IACxB,kFAAkF;IAClF,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAC7C,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAClB,KAAK,EAAE,KAAK,KACR,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,gBAChB,SAAQ,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,aAAa,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE,CACf,KAAK,CAAC,aAAa,SAAS,SAAS,eAAe,EAAE,EACtD,iBAAiB,GAAG,KAAK,EAEzB,OAAO,EAAE,kBAAkB,CAAC,aAAa,EAAE,iBAAiB,CAAC,KACzD,KAAK,CAAC,KAAK,CACf,gBAAgB,EAChB,WAAW,EACX,wBAAwB,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAC3D,CAAC;CACF;AAED,eAAO,MAAM,UAAU,GAAI,YAAY,MAAM,KAAG,gBAoF/C,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AACpH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,KAAK,CAAC,OAAO,SAAS,gBAAgB,EACnF,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EACrC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE,WAAW,KACjB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACzG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;CACxD;AAED,UAAU,gBAAgB;IACzB,QAAQ,CAAC,iBAAiB,EAAE,OAAO,MAAM,CAAC;CAC1C;AAED,MAAM,MAAM,kBAAkB,CAAC,aAAa,SAAS,SAAS,eAAe,EAAE,EAAE,iBAAiB,IAAI,kBAAkB,GAAG;IAC1H,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAE7C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACtF,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,aAAa,CAAC;IACzF,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,aAAa,SAAS,SAAS,eAAe,EAAE,EAAE,iBAAiB,GAAG,KAAK,EACjG,OAAO,EAAE,kBAAkB,CAAC,aAAa,EAAE,iBAAiB,CAAC,KACzD,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,WAAW,EAAE,wBAAwB,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAAC,CAAC;CAC7G;AAID,eAAO,MAAM,UAAU,GAAI,YAAY,MAAM,KAAG,gBA6C/C,CAAC"}
package/dist/service.js CHANGED
@@ -1,28 +1,21 @@
1
1
  import { Context, Effect, Layer } from "effect";
2
- import { acquireClient, releaseClient } from "./internal/lifecycle.js";
3
- import { registerJobs } from "./internal/register.js";
4
- import { makeService } from "./internal/service.js";
2
+ import { acquireClient, releaseClient } from "#internal/lifecycle.ts";
3
+ import { registerJobs, registrationName } from "#internal/register.ts";
4
+ import { makeService } from "#internal/service.ts";
5
+ const logClientError = (error) => Effect.logError({ event: "pg_boss_error", message: error.message });
5
6
  export const makePgBoss = (identifier) => {
6
7
  const Service = Context.Service(identifier);
7
8
  const layer = (options) => {
8
- const names = options.jobs.map((registration) => registration._tag === "QueueWorker"
9
- ? registration.queue.name
10
- : registration.schedule
11
- .name);
12
- const { clientFactory, developmentCacheKey, jobs, onError, stop, ...constructorOptions } = options;
9
+ const names = options.jobs.map(registrationName);
10
+ const { clientFactory, clientCacheKey, jobs, onError, stop, ...constructorOptions } = options;
13
11
  const acquire = Effect.acquireRelease(Effect.gen(function* () {
14
12
  const context = yield* Effect.context();
15
13
  const acquired = yield* acquireClient({
14
+ clientCacheKey,
16
15
  clientFactory,
17
16
  constructor: constructorOptions,
18
- developmentCacheKey,
19
17
  });
20
- const reportError = onError === undefined
21
- ? (error) => Effect.logError({
22
- event: "pg_boss_error",
23
- message: error.message,
24
- })
25
- : onError;
18
+ const reportError = onError ?? logClientError;
26
19
  const errorListener = (error) => {
27
20
  void Effect.runPromise(Effect.exit(Effect.provide(reportError(error), context)));
28
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAA4B,MAAM,QAAQ,CAAC;AAW1E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAkDpD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAoB,EAAE;IAClE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAkC,UAAU,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG,CAIb,OAA6D,EAK5D,EAAE;QAIH,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAC/C,YAAY,CAAC,IAAI,KAAK,aAAa;YAClC,CAAC,CAAE,YAAsD,CAAC,KAAK,CAAC,IAAI;YACpE,CAAC,CAAE,YAA0D,CAAC,QAAQ;iBACnE,IAAI,CACR,CAAC;QACF,MAAM,EACL,aAAa,EACb,mBAAmB,EACnB,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,GAAG,kBAAkB,EACrB,GAAG,OAAO,CAAC;QAEZ,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAgB,CAAC;YACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;gBACrC,aAAa;gBACb,WAAW,EAAE,kBAAkB;gBAC/B,mBAAmB;aACnB,CAAC,CAAC;YACH,MAAM,WAAW,GAGhB,OAAO,KAAK,SAAS;gBACpB,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CACV,MAAM,CAAC,QAAQ,CAAC;oBACf,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACtB,CAAC;gBACJ,CAAC,CAAC,OAAO,CAAC;YACZ,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,EAAE;gBACtC,KAAK,MAAM,CAAC,UAAU,CACrB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CACxD,CAAC;YACH,CAAC,CAAC;YACF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YAC3C,MAAM,YAAY,GAAG,YAAY,CAChC,QAAQ,CAAC,MAAM,EACf,IAAI,EACJ,OAAO,EACP,QAAQ,CAAC,MAAM,CACf,CAAC;YACF,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,IAAI,CAC9B,MAAM,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,EAC/C,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;gBACnB,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAC5C,OAAO,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CACF,CAAC;QACH,CAAC,CAAC,EACF,CAAC,QAAQ,EAAE,EAAE;YACZ,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC9D,OAAO,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC,CACD,CAAC;QAEF,OAAO,KAAK,CAAC,MAAM,CAClB,OAAO,EACP,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CACpC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CACnC,CACD,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAqB,CAAC;AAC9D,CAAC,CAAC"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,28 +1,27 @@
1
1
  {
2
2
  "name": "@shivaedev/effect-pg-boss",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "description": "Effect-native jobs and lifecycle management for pg-boss",
5
- "type": "module",
6
- "license": "MIT",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/ShivaeDev/platform.git",
10
- "directory": "packages/effect-pg-boss"
11
- },
12
5
  "homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/effect-pg-boss#readme",
13
6
  "bugs": {
14
7
  "url": "https://github.com/ShivaeDev/platform/issues"
15
8
  },
16
- "engines": {
17
- "node": ">=24"
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/ShivaeDev/platform.git",
12
+ "directory": "packages/effect-pg-boss"
18
13
  },
14
+ "license": "MIT",
19
15
  "sideEffects": false,
20
- "files": [
21
- "dist",
22
- "src",
23
- "CHANGELOG.md",
24
- "README.md"
25
- ],
16
+ "type": "module",
17
+ "imports": {
18
+ "#test/*": "./test/*",
19
+ "#*.ts": {
20
+ "source": "./src/*.ts",
21
+ "types": "./dist/*.d.ts",
22
+ "default": "./dist/*.js"
23
+ }
24
+ },
26
25
  "exports": {
27
26
  ".": {
28
27
  "types": "./dist/index.d.ts",
@@ -32,15 +31,14 @@
32
31
  },
33
32
  "./package.json": "./package.json"
34
33
  },
35
- "publishConfig": {
36
- "access": "public",
37
- "provenance": true
38
- },
39
- "peerDependencies": {
40
- "effect": "4.0.0-rc.112",
41
- "pg-boss": "12.23.1"
42
- },
34
+ "files": [
35
+ "dist",
36
+ "src",
37
+ "CHANGELOG.md",
38
+ "README.md"
39
+ ],
43
40
  "devDependencies": {
41
+ "@shivaedev/quality": "0.7.3",
44
42
  "@types/node": "24.10.1",
45
43
  "@typescript/native": "npm:typescript@7.0.2",
46
44
  "effect": "4.0.0-rc.112",
@@ -48,13 +46,21 @@
48
46
  "typescript": "npm:@typescript/typescript6@6.0.2",
49
47
  "vitest": "4.1.9"
50
48
  },
49
+ "peerDependencies": {
50
+ "effect": "4.0.0-rc.112",
51
+ "pg-boss": "12.23.1"
52
+ },
53
+ "engines": {
54
+ "node": ">=24"
55
+ },
56
+ "publishConfig": {
57
+ "access": "public",
58
+ "provenance": true
59
+ },
51
60
  "scripts": {
52
61
  "build": "node --eval \"import('node:fs').then(({ rmSync }) => rmSync('dist', { force: true, recursive: true }))\" && tsc6 --project tsconfig.build.json",
53
- "check": "biome check .",
62
+ "ready": "pnpm typecheck && pnpm test && pnpm build",
54
63
  "test": "vitest run",
55
- "test:package": "node scripts/test-package.mjs",
56
- "typecheck": "tsc --noEmit",
57
- "typecheck:compat": "tsc6 --noEmit",
58
- "ready": "pnpm check && pnpm typecheck && pnpm typecheck:compat && pnpm test && pnpm build && pnpm test:package"
64
+ "typecheck": "tsc --noEmit"
59
65
  }
60
66
  }
package/src/definition.ts CHANGED
@@ -7,40 +7,28 @@ export interface JobPayloadSchema extends Schema.Top {
7
7
  }
8
8
 
9
9
  export interface JobContext {
10
+ readonly expireInSeconds: number;
11
+ readonly heartbeatSeconds: number | null;
10
12
  readonly id: string;
11
13
  readonly name: string;
12
14
  readonly signal: AbortSignal;
13
- readonly expireInSeconds: number;
14
- readonly heartbeatSeconds: number | null;
15
15
  }
16
16
 
17
- export interface QueueDefinition<
18
- Name extends string = string,
19
- Payload extends JobPayloadSchema = JobPayloadSchema,
20
- > {
17
+ export interface QueueDefinition<Name extends string = string, Payload extends JobPayloadSchema = JobPayloadSchema> {
21
18
  readonly _tag: "QueueDefinition";
19
+ readonly handle: <E, R>(
20
+ handler: (payload: Schema.Schema.Type<Payload>, job: JobContext) => Effect.Effect<unknown, E, R>,
21
+ ) => QueueWorker<Payload, R>;
22
22
  readonly name: Name;
23
- readonly schema: Payload;
24
23
  readonly queueOptions: Omit<QueueOptions, "deadLetter">;
24
+ readonly schema: Payload;
25
25
  readonly workerOptions: WorkOptions;
26
- readonly handle: <E, R>(
27
- handler: (
28
- payload: Schema.Schema.Type<Payload>,
29
- job: JobContext,
30
- ) => Effect.Effect<unknown, E, R>,
31
- ) => QueueWorker<Payload, R>;
32
26
  }
33
27
 
34
- export interface QueueWorker<
35
- Payload extends JobPayloadSchema = JobPayloadSchema,
36
- Requirements = unknown,
37
- > {
28
+ export interface QueueWorker<Payload extends JobPayloadSchema = JobPayloadSchema, Requirements = unknown> {
38
29
  readonly _tag: "QueueWorker";
30
+ readonly handler: (payload: Schema.Schema.Type<Payload>, job: JobContext) => Effect.Effect<unknown, unknown, Requirements>;
39
31
  readonly queue: QueueDefinition<string, Payload>;
40
- readonly handler: (
41
- payload: Schema.Schema.Type<Payload>,
42
- job: JobContext,
43
- ) => Effect.Effect<unknown, unknown, Requirements>;
44
32
  }
45
33
 
46
34
  export interface JobRegistration {
@@ -52,22 +40,18 @@ export interface ScheduleDefinition<Name extends string = string> {
52
40
  readonly cron: string;
53
41
  readonly name: Name;
54
42
  readonly queueOptions: Omit<QueueOptions, "deadLetter">;
43
+ readonly run: <E, R>(effect: Effect.Effect<unknown, E, R>) => ScheduledWorker<R>;
55
44
  readonly scheduleOptions: ScheduleOptions;
56
45
  readonly workerOptions: WorkOptions;
57
- readonly run: <E, R>(
58
- effect: Effect.Effect<unknown, E, R>,
59
- ) => ScheduledWorker<R>;
60
46
  }
61
47
 
62
48
  export interface ScheduledWorker<Requirements = unknown> {
63
49
  readonly _tag: "ScheduledWorker";
64
- readonly schedule: ScheduleDefinition;
65
50
  readonly effect: Effect.Effect<unknown, unknown, Requirements>;
51
+ readonly schedule: ScheduleDefinition;
66
52
  }
67
53
 
68
- export type RegistrationRequirements<
69
- Registrations extends readonly JobRegistration[],
70
- > = Registrations[number] extends infer Registration
54
+ export type RegistrationRequirements<Registrations extends readonly JobRegistration[]> = Registrations[number] extends infer Registration
71
55
  ? Registration extends QueueWorker<infer Payload, infer Requirements>
72
56
  ? Requirements | Payload["DecodingServices"]
73
57
  : Registration extends ScheduledWorker<infer Requirements>
@@ -75,34 +59,28 @@ export type RegistrationRequirements<
75
59
  : never
76
60
  : never;
77
61
 
78
- export interface DefineQueueOptions<
79
- Name extends string,
80
- Payload extends JobPayloadSchema,
81
- > {
62
+ export interface DefineQueueOptions<Name extends string, Payload extends JobPayloadSchema> {
82
63
  readonly name: Name;
83
- readonly schema: Payload;
84
64
  readonly queue?: Omit<QueueOptions, "deadLetter">;
65
+ readonly schema: Payload;
85
66
  readonly worker?: WorkOptions;
86
67
  }
87
68
 
88
- export const defineQueue = <
89
- const Name extends string,
90
- const Payload extends JobPayloadSchema,
91
- >(
69
+ export const defineQueue = <const Name extends string, const Payload extends JobPayloadSchema>(
92
70
  options: DefineQueueOptions<Name, Payload>,
93
71
  ): QueueDefinition<Name, Payload> => {
94
72
  const definition: QueueDefinition<Name, Payload> = {
95
73
  _tag: "QueueDefinition",
96
- name: options.name,
97
- queueOptions: Object.freeze({ ...options.queue }),
98
- schema: options.schema,
99
- workerOptions: Object.freeze({ batchSize: 1, ...options.worker }),
100
74
  handle: (handler) =>
101
75
  Object.freeze({
102
76
  _tag: "QueueWorker" as const,
103
77
  handler,
104
78
  queue: definition,
105
79
  }),
80
+ name: options.name,
81
+ queueOptions: Object.freeze({ ...options.queue }),
82
+ schema: options.schema,
83
+ workerOptions: Object.freeze({ batchSize: 1, ...options.worker }),
106
84
  };
107
85
  return Object.freeze(definition);
108
86
  };
@@ -115,22 +93,20 @@ export interface DefineScheduleOptions<Name extends string> {
115
93
  readonly worker?: WorkOptions;
116
94
  }
117
95
 
118
- export const defineSchedule = <const Name extends string>(
119
- options: DefineScheduleOptions<Name>,
120
- ): ScheduleDefinition<Name> => {
96
+ export const defineSchedule = <const Name extends string>(options: DefineScheduleOptions<Name>): ScheduleDefinition<Name> => {
121
97
  const definition: ScheduleDefinition<Name> = {
122
98
  _tag: "ScheduleDefinition",
123
99
  cron: options.cron,
124
100
  name: options.name,
125
101
  queueOptions: Object.freeze({ ...options.queue }),
126
- scheduleOptions: Object.freeze({ tz: "UTC", ...options.schedule }),
127
- workerOptions: Object.freeze({ batchSize: 1, ...options.worker }),
128
102
  run: (effect) =>
129
103
  Object.freeze({
130
104
  _tag: "ScheduledWorker" as const,
131
105
  effect,
132
106
  schedule: definition,
133
107
  }),
108
+ scheduleOptions: Object.freeze({ tz: "UTC", ...options.schedule }),
109
+ workerOptions: Object.freeze({ batchSize: 1, ...options.worker }),
134
110
  };
135
111
  return Object.freeze(definition);
136
112
  };
package/src/error.ts CHANGED
@@ -1,15 +1,10 @@
1
1
  import { Data, Redacted } from "effect";
2
2
 
3
- export type PgBossOperation =
4
- | "enqueue"
5
- | "health"
6
- | "register"
7
- | "start"
8
- | "stop";
3
+ export type PgBossOperation = "enqueue" | "health" | "register" | "start" | "stop";
9
4
 
10
5
  export class PgBossError extends Data.TaggedError("PgBossError")<{
11
6
  readonly operation: PgBossOperation;
12
- readonly queue?: string;
7
+ readonly queue?: string | undefined;
13
8
  readonly original: Redacted.Redacted<unknown>;
14
9
  }> {}
15
10
 
@@ -19,13 +14,9 @@ export class PgBossPayloadError extends Data.TaggedError("PgBossPayloadError")<{
19
14
  readonly original: Redacted.Redacted<unknown>;
20
15
  }> {}
21
16
 
22
- export const toPgBossError = (
23
- operation: PgBossOperation,
24
- error: unknown,
25
- queue?: string,
26
- ): PgBossError =>
17
+ export const toPgBossError = (operation: PgBossOperation, error: unknown, queue?: string): PgBossError =>
27
18
  new PgBossError({
28
19
  operation,
29
- queue,
30
20
  original: Redacted.make(error),
21
+ queue,
31
22
  });
package/src/health.ts CHANGED
@@ -16,5 +16,4 @@ export interface JobsHealth {
16
16
  readonly readyTotal: number;
17
17
  }
18
18
 
19
- export const deadLetterQueueName = (queueName: string): string =>
20
- `${queueName}-dlq`;
19
+ export const deadLetterQueueName = (queueName: string): string => `${queueName}-dlq`;
package/src/index.ts CHANGED
@@ -1,3 +1,7 @@
1
+ export type {
2
+ PgBossClient,
3
+ PgBossClientFactory,
4
+ } from "#internal/client.ts";
1
5
  export {
2
6
  type DefineQueueOptions,
3
7
  type DefineScheduleOptions,
@@ -10,24 +14,20 @@ export {
10
14
  type QueueWorker,
11
15
  type ScheduleDefinition,
12
16
  type ScheduledWorker,
13
- } from "./definition.js";
17
+ } from "./definition.ts";
14
18
  export {
15
19
  PgBossError,
16
20
  type PgBossOperation,
17
21
  PgBossPayloadError,
18
- } from "./error.js";
22
+ } from "./error.ts";
19
23
  export {
20
24
  deadLetterQueueName,
21
25
  type JobsHealth,
22
26
  type QueueHealth,
23
- } from "./health.js";
24
- export type {
25
- PgBossClient,
26
- PgBossClientFactory,
27
- } from "./internal/client.js";
27
+ } from "./health.ts";
28
28
  export {
29
29
  makePgBoss,
30
30
  type PgBossDefinition,
31
31
  type PgBossLayerOptions,
32
32
  type PgBossService,
33
- } from "./service.js";
33
+ } from "./service.ts";
@@ -1,45 +1,19 @@
1
- import type {
2
- ConstructorOptions,
3
- Job,
4
- Queue,
5
- QueueResult,
6
- ScheduleOptions,
7
- SendOptions,
8
- StopOptions,
9
- WorkOptions,
10
- } from "pg-boss";
1
+ import type { ConstructorOptions, Job, Queue, QueueResult, ScheduleOptions, SendOptions, StopOptions, WorkOptions } from "pg-boss";
11
2
  import { PgBoss } from "pg-boss";
12
3
 
13
4
  export interface PgBossClient {
14
- readonly createQueue: (
15
- name: string,
16
- options?: Omit<Queue, "name">,
17
- ) => Promise<void>;
5
+ readonly createQueue: (name: string, options?: Omit<Queue, "name">) => Promise<void>;
18
6
  readonly getQueue: (name: string) => Promise<QueueResult | null>;
7
+ readonly off: (event: "error", listener: (error: Error) => void) => unknown;
19
8
  readonly offWork: (name: string) => Promise<void>;
20
9
  readonly on: (event: "error", listener: (error: Error) => void) => unknown;
21
- readonly off: (event: "error", listener: (error: Error) => void) => unknown;
22
- readonly schedule: (
23
- name: string,
24
- cron: string,
25
- data?: object | null,
26
- options?: ScheduleOptions,
27
- ) => Promise<void>;
28
- readonly send: (
29
- name: string,
30
- data?: object | null,
31
- options?: SendOptions,
32
- ) => Promise<string | null>;
10
+ readonly schedule: (name: string, cron: string, data?: object | null, options?: ScheduleOptions) => Promise<void>;
11
+ readonly send: (name: string, data?: object | null, options?: SendOptions) => Promise<string | null>;
33
12
  readonly start: () => Promise<unknown>;
34
13
  readonly stop: (options?: StopOptions) => Promise<void>;
35
- readonly work: <Payload>(
36
- name: string,
37
- options: WorkOptions,
38
- handler: (jobs: readonly Job<Payload>[]) => Promise<unknown>,
39
- ) => Promise<string>;
14
+ readonly work: (name: string, options: WorkOptions, handler: (jobs: readonly Job<unknown>[]) => Promise<unknown>) => Promise<string>;
40
15
  }
41
16
 
42
17
  export type PgBossClientFactory = (options: ConstructorOptions) => PgBossClient;
43
18
 
44
- export const defaultClientFactory: PgBossClientFactory = (options) =>
45
- new PgBoss(options);
19
+ export const defaultClientFactory: PgBossClientFactory = (options) => new PgBoss(options);
@@ -1,25 +1,16 @@
1
1
  import { Effect } from "effect";
2
- import { toPgBossError } from "../error.js";
3
- import {
4
- deadLetterQueueName,
5
- type JobsHealth,
6
- type QueueHealth,
7
- } from "../health.js";
8
- import type { PgBossClient } from "./client.js";
2
+ import { toPgBossError } from "#error.ts";
3
+ import { deadLetterQueueName, type JobsHealth, type QueueHealth } from "#health.ts";
4
+ import type { PgBossClient } from "./client.ts";
9
5
 
10
- export const healthFor = (
11
- client: PgBossClient,
12
- names: readonly string[],
13
- ): Effect.Effect<JobsHealth, import("../error.js").PgBossError> =>
6
+ export const healthFor = (client: PgBossClient, names: readonly string[]): Effect.Effect<JobsHealth, import("#error.ts").PgBossError> =>
14
7
  Effect.forEach(
15
8
  names,
16
9
  (name) =>
17
10
  Effect.tryPromise({
11
+ catch: (error) => toPgBossError("health", error, name),
18
12
  try: async (): Promise<QueueHealth> => {
19
- const [queue, deadLetter] = await Promise.all([
20
- client.getQueue(name),
21
- client.getQueue(deadLetterQueueName(name)),
22
- ]);
13
+ const [queue, deadLetter] = await Promise.all([client.getQueue(name), client.getQueue(deadLetterQueueName(name))]);
23
14
  return {
24
15
  activeCount: queue?.activeCount ?? 0,
25
16
  deadLetteredCount: deadLetter?.queuedCount ?? 0,
@@ -29,16 +20,12 @@ export const healthFor = (
29
20
  readyCount: queue?.readyCount ?? 0,
30
21
  };
31
22
  },
32
- catch: (error) => toPgBossError("health", error, name),
33
23
  }),
34
24
  { concurrency: "unbounded" },
35
25
  ).pipe(
36
26
  Effect.map((jobs) => ({
37
27
  activeTotal: jobs.reduce((sum, job) => sum + job.activeCount, 0),
38
- deadLetteredTotal: jobs.reduce(
39
- (sum, job) => sum + job.deadLetteredCount,
40
- 0,
41
- ),
28
+ deadLetteredTotal: jobs.reduce((sum, job) => sum + job.deadLetteredCount, 0),
42
29
  failedTotal: jobs.reduce((sum, job) => sum + job.failedCount, 0),
43
30
  jobs,
44
31
  queuedTotal: jobs.reduce((sum, job) => sum + job.queuedCount, 0),