@platformatic/job-queue 0.0.1 → 0.1.0-alpha.3

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 (58) hide show
  1. package/README.md +511 -0
  2. package/dist/consumer.d.ts +43 -0
  3. package/dist/consumer.d.ts.map +1 -0
  4. package/dist/consumer.js +214 -0
  5. package/dist/consumer.js.map +1 -0
  6. package/dist/errors.d.ts +60 -0
  7. package/dist/errors.d.ts.map +1 -0
  8. package/dist/errors.js +141 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/index.d.ts +12 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +13 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/producer.d.ts +39 -0
  15. package/dist/producer.d.ts.map +1 -0
  16. package/dist/producer.js +163 -0
  17. package/dist/producer.js.map +1 -0
  18. package/dist/queue.d.ts +42 -0
  19. package/dist/queue.d.ts.map +1 -0
  20. package/dist/queue.js +153 -0
  21. package/dist/queue.js.map +1 -0
  22. package/dist/reaper.d.ts +52 -0
  23. package/dist/reaper.d.ts.map +1 -0
  24. package/dist/reaper.js +376 -0
  25. package/dist/reaper.js.map +1 -0
  26. package/dist/serde/index.d.ts +19 -0
  27. package/dist/serde/index.d.ts.map +1 -0
  28. package/dist/serde/index.js +18 -0
  29. package/dist/serde/index.js.map +1 -0
  30. package/dist/storage/file.d.ts +44 -0
  31. package/dist/storage/file.d.ts.map +1 -0
  32. package/dist/storage/file.js +601 -0
  33. package/dist/storage/file.js.map +1 -0
  34. package/dist/storage/memory.d.ts +39 -0
  35. package/dist/storage/memory.d.ts.map +1 -0
  36. package/dist/storage/memory.js +292 -0
  37. package/dist/storage/memory.js.map +1 -0
  38. package/dist/storage/redis.d.ts +47 -0
  39. package/dist/storage/redis.d.ts.map +1 -0
  40. package/dist/storage/redis.js +317 -0
  41. package/dist/storage/redis.js.map +1 -0
  42. package/dist/storage/types.d.ts +179 -0
  43. package/dist/storage/types.d.ts.map +1 -0
  44. package/dist/storage/types.js +2 -0
  45. package/dist/storage/types.js.map +1 -0
  46. package/dist/types.d.ts +126 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/utils/id.d.ts +10 -0
  51. package/dist/utils/id.d.ts.map +1 -0
  52. package/dist/utils/id.js +18 -0
  53. package/dist/utils/id.js.map +1 -0
  54. package/dist/utils/state.d.ts +13 -0
  55. package/dist/utils/state.d.ts.map +1 -0
  56. package/dist/utils/state.js +22 -0
  57. package/dist/utils/state.js.map +1 -0
  58. package/package.json +45 -9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Generate a random unique ID
3
+ */
4
+ export declare function generateId(): string;
5
+ /**
6
+ * Generate a content-based ID by hashing the payload
7
+ * Useful for deduplication based on content
8
+ */
9
+ export declare function contentId(payload: unknown): string;
10
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,UAAU,IAAK,MAAM,CAEpC;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAKnD"}
@@ -0,0 +1,18 @@
1
+ import { randomUUID, createHash } from 'node:crypto';
2
+ /**
3
+ * Generate a random unique ID
4
+ */
5
+ export function generateId() {
6
+ return randomUUID();
7
+ }
8
+ /**
9
+ * Generate a content-based ID by hashing the payload
10
+ * Useful for deduplication based on content
11
+ */
12
+ export function contentId(payload) {
13
+ return createHash('sha256')
14
+ .update(JSON.stringify(payload))
15
+ .digest('hex')
16
+ .slice(0, 16);
17
+ }
18
+ //# sourceMappingURL=id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEpD;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,EAAE,CAAA;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAE,OAAgB;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAC/B,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACjB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { MessageState } from '../types.ts';
2
+ export interface ParsedState {
3
+ status: MessageState;
4
+ timestamp: number;
5
+ workerId?: string;
6
+ attempts?: number;
7
+ }
8
+ /**
9
+ * Parse job state string into components.
10
+ * State format: "status:timestamp[:workerId]" or "failing:timestamp:attempts"
11
+ */
12
+ export declare function parseState(state: string): ParsedState;
13
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAkBtD"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Parse job state string into components.
3
+ * State format: "status:timestamp[:workerId]" or "failing:timestamp:attempts"
4
+ */
5
+ export function parseState(state) {
6
+ const parts = state.split(':');
7
+ const status = parts[0];
8
+ const timestamp = parseInt(parts[1], 10);
9
+ if (status === 'failing') {
10
+ return {
11
+ status,
12
+ timestamp,
13
+ attempts: parseInt(parts[2], 10)
14
+ };
15
+ }
16
+ return {
17
+ status,
18
+ timestamp,
19
+ workerId: parts[2]
20
+ };
21
+ }
22
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAE,KAAa;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAiB,CAAA;IACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAExC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;YACL,MAAM;YACN,SAAS;YACT,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;SACjC,CAAA;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,SAAS;QACT,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;KACnB,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,14 +1,10 @@
1
1
  {
2
2
  "name": "@platformatic/job-queue",
3
- "version": "0.0.1",
3
+ "version": "0.1.0-alpha.3",
4
4
  "description": "A reliable job queue with deduplication, request/response support, and pluggable storage",
5
- "type": "module",
6
- "files": [
7
- "LICENSE"
8
- ],
9
- "engines": {
10
- "node": ">=22.19.0"
11
- },
5
+ "homepage": "https://github.com/platformatic/job-queue",
6
+ "author": "Platformatic Inc. <oss@platformatic.dev> (https://platformatic.dev)",
7
+ "license": "Apache-2.0",
12
8
  "repository": {
13
9
  "type": "git",
14
10
  "url": "https://github.com/platformatic/job-queue.git"
@@ -20,5 +16,45 @@
20
16
  "valkey",
21
17
  "reliable-queue"
22
18
  ],
23
- "license": "Apache-2.0"
19
+ "private": false,
20
+ "files": [
21
+ "dist",
22
+ "LICENSE",
23
+ "README.md"
24
+ ],
25
+ "type": "module",
26
+ "exports": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "dependencies": {
29
+ "fast-write-atomic": "^0.4.0",
30
+ "iovalkey": "^0.2.0"
31
+ },
32
+ "devDependencies": {
33
+ "@platformatic/flame": "^1.6.0",
34
+ "@types/node": "^22.0.0",
35
+ "c8": "^10.1.3",
36
+ "cleaner-spec-reporter": "^1.0.3",
37
+ "eslint": "^9.0.0",
38
+ "neostandard": "^0.12.0",
39
+ "semver": "^7.7.4",
40
+ "typescript": "^5.7.0"
41
+ },
42
+ "engines": {
43
+ "node": ">=22.19.0"
44
+ },
45
+ "scripts": {
46
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
47
+ "lint": "eslint --cache",
48
+ "typecheck": "tsc -p . --noEmit",
49
+ "format": "prettier -w benchmarks playground src test",
50
+ "test": "c8 -c test/config/c8-local.json node --test-reporter=cleaner-spec-reporter --no-warnings --test --test-timeout=60000 'test/**/*.test.ts'",
51
+ "test:ci": "c8 -c test/config/c8-ci.json node --test-reporter=cleaner-spec-reporter --no-warnings --test --test-timeout=60000 'test/**/*.test.ts'",
52
+ "test:docker:up": "docker-compose up -d --wait",
53
+ "test:docker:down": "docker-compose down",
54
+ "ci": "npm run build && npm run lint && npm run test:ci",
55
+ "ci:v20": "npm run lint && rm -rf dist && tsc -p tsconfig.json && node dist/scripts/postbuild.js && cd dist && node --env-file=../test/config/env --no-warnings --test --test-timeout=600000",
56
+ "bench": "node benchmark/request-response.ts",
57
+ "bench:redis": "REDIS_URL=${REDIS_URL:-redis://localhost:6379} node benchmark/request-response.ts",
58
+ "bench:valkey": "REDIS_URL=${REDIS_URL:-redis://localhost:6380} node benchmark/request-response.ts"
59
+ }
24
60
  }