convex-batch-processor 0.5.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.
Files changed (44) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +395 -0
  3. package/dist/client/index.d.ts +212 -0
  4. package/dist/client/index.d.ts.map +1 -0
  5. package/dist/client/index.js +78 -0
  6. package/dist/client/index.js.map +1 -0
  7. package/dist/component/_generated/api.d.ts +34 -0
  8. package/dist/component/_generated/api.d.ts.map +1 -0
  9. package/dist/component/_generated/api.js +31 -0
  10. package/dist/component/_generated/api.js.map +1 -0
  11. package/dist/component/_generated/component.d.ts +80 -0
  12. package/dist/component/_generated/component.d.ts.map +1 -0
  13. package/dist/component/_generated/component.js +11 -0
  14. package/dist/component/_generated/component.js.map +1 -0
  15. package/dist/component/_generated/dataModel.d.ts +46 -0
  16. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  17. package/dist/component/_generated/dataModel.js +11 -0
  18. package/dist/component/_generated/dataModel.js.map +1 -0
  19. package/dist/component/_generated/server.d.ts +121 -0
  20. package/dist/component/_generated/server.d.ts.map +1 -0
  21. package/dist/component/_generated/server.js +78 -0
  22. package/dist/component/_generated/server.js.map +1 -0
  23. package/dist/component/convex.config.d.ts +3 -0
  24. package/dist/component/convex.config.d.ts.map +1 -0
  25. package/dist/component/convex.config.js +4 -0
  26. package/dist/component/convex.config.js.map +1 -0
  27. package/dist/component/lib.d.ts +351 -0
  28. package/dist/component/lib.d.ts.map +1 -0
  29. package/dist/component/lib.js +879 -0
  30. package/dist/component/lib.js.map +1 -0
  31. package/dist/component/schema.d.ts +118 -0
  32. package/dist/component/schema.d.ts.map +1 -0
  33. package/dist/component/schema.js +61 -0
  34. package/dist/component/schema.js.map +1 -0
  35. package/package.json +63 -0
  36. package/src/client/index.test.ts +123 -0
  37. package/src/client/index.ts +336 -0
  38. package/src/component/_generated/api.ts +50 -0
  39. package/src/component/_generated/component.ts +140 -0
  40. package/src/component/_generated/dataModel.ts +60 -0
  41. package/src/component/_generated/server.ts +156 -0
  42. package/src/component/convex.config.ts +4 -0
  43. package/src/component/lib.ts +1082 -0
  44. package/src/component/schema.ts +70 -0
@@ -0,0 +1,70 @@
1
+ import { defineSchema, defineTable } from "convex/server";
2
+ import { v } from "convex/values";
3
+
4
+ export default defineSchema({
5
+ batches: defineTable({
6
+ batchId: v.string(), // Full ID with sequence: "base::0"
7
+ baseBatchId: v.string(), // Base ID: "base"
8
+ sequence: v.number(), // Sequence number: 0, 1, 2...
9
+ // itemCount is computed on-demand from batchItems table
10
+ createdAt: v.number(),
11
+ lastUpdatedAt: v.number(),
12
+ status: v.union(v.literal("accumulating"), v.literal("flushing"), v.literal("completed")),
13
+ config: v.object({
14
+ maxBatchSize: v.number(),
15
+ flushIntervalMs: v.number(),
16
+ processBatchHandle: v.string(),
17
+ }),
18
+ scheduledFlushId: v.optional(v.id("_scheduled_functions")),
19
+ flushStartedAt: v.optional(v.number()),
20
+ })
21
+ .index("by_batchId", ["batchId"])
22
+ .index("by_baseBatchId_status", ["baseBatchId", "status"])
23
+ .index("by_baseBatchId_sequence", ["baseBatchId", "sequence"])
24
+ .index("by_status", ["status"]),
25
+
26
+ batchItems: defineTable({
27
+ batchDocId: v.id("batches"),
28
+ items: v.array(v.any()),
29
+ itemCount: v.number(),
30
+ createdAt: v.number(),
31
+ })
32
+ .index("by_batchDocId", ["batchDocId"])
33
+ .index("by_batchDocId_createdAt", ["batchDocId", "createdAt"]),
34
+
35
+ iteratorJobs: defineTable({
36
+ jobId: v.string(),
37
+ cursor: v.optional(v.string()),
38
+ processedCount: v.number(),
39
+ status: v.union(
40
+ v.literal("pending"),
41
+ v.literal("running"),
42
+ v.literal("paused"),
43
+ v.literal("completed"),
44
+ v.literal("failed")
45
+ ),
46
+ config: v.object({
47
+ batchSize: v.number(),
48
+ delayBetweenBatchesMs: v.number(),
49
+ getNextBatchHandle: v.string(),
50
+ processBatchHandle: v.string(),
51
+ onCompleteHandle: v.optional(v.string()),
52
+ maxRetries: v.optional(v.number()),
53
+ }),
54
+ retryCount: v.number(),
55
+ errorMessage: v.optional(v.string()),
56
+ createdAt: v.number(),
57
+ lastRunAt: v.optional(v.number()),
58
+ })
59
+ .index("by_jobId", ["jobId"])
60
+ .index("by_status", ["status"]),
61
+
62
+ flushHistory: defineTable({
63
+ batchId: v.string(), // Client's original ID (baseBatchId)
64
+ itemCount: v.number(),
65
+ flushedAt: v.number(),
66
+ durationMs: v.number(),
67
+ success: v.boolean(),
68
+ errorMessage: v.optional(v.string()),
69
+ }).index("by_batchId", ["batchId"]),
70
+ });