@convex-dev/crons 0.1.9 → 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 (97) hide show
  1. package/README.md +18 -16
  2. package/dist/{commonjs/client → client}/index.d.ts +5 -5
  3. package/dist/client/index.d.ts.map +1 -0
  4. package/dist/client/index.js.map +1 -0
  5. package/dist/client/utils.d.ts +8 -0
  6. package/dist/client/utils.d.ts.map +1 -0
  7. package/dist/client/utils.js +2 -0
  8. package/dist/{commonjs/client → client}/utils.js.map +1 -1
  9. package/dist/component/_generated/api.d.ts +34 -0
  10. package/dist/component/_generated/api.d.ts.map +1 -0
  11. package/{src → dist}/component/_generated/api.js +11 -7
  12. package/dist/component/_generated/api.js.map +1 -0
  13. package/dist/component/_generated/component.d.ts +79 -0
  14. package/dist/component/_generated/component.d.ts.map +1 -0
  15. package/dist/component/_generated/component.js +11 -0
  16. package/dist/component/_generated/component.js.map +1 -0
  17. package/dist/component/_generated/dataModel.d.ts +46 -0
  18. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  19. package/dist/component/_generated/dataModel.js +11 -0
  20. package/dist/component/_generated/dataModel.js.map +1 -0
  21. package/{src → dist}/component/_generated/server.d.ts +10 -42
  22. package/dist/component/_generated/server.d.ts.map +1 -0
  23. package/dist/{commonjs/component → component}/_generated/server.js +9 -7
  24. package/dist/component/_generated/server.js.map +1 -0
  25. package/dist/{commonjs/component → component}/convex.config.d.ts +1 -1
  26. package/dist/component/convex.config.d.ts.map +1 -0
  27. package/dist/component/convex.config.js.map +1 -0
  28. package/dist/{commonjs/component → component}/public.d.ts +2 -2
  29. package/dist/component/public.d.ts.map +1 -0
  30. package/dist/{commonjs/component → component}/public.js +9 -8
  31. package/dist/component/public.js.map +1 -0
  32. package/dist/{commonjs/component → component}/schema.d.ts +2 -2
  33. package/dist/component/schema.d.ts.map +1 -0
  34. package/dist/{commonjs/component → component}/schema.js +3 -3
  35. package/dist/component/schema.js.map +1 -0
  36. package/package.json +60 -41
  37. package/src/client/index.ts +10 -10
  38. package/src/client/utils.ts +0 -32
  39. package/src/component/_generated/api.ts +50 -0
  40. package/src/component/_generated/component.ts +79 -0
  41. package/src/component/_generated/{dataModel.d.ts → dataModel.ts} +1 -5
  42. package/src/component/_generated/server.ts +156 -0
  43. package/src/component/public.ts +26 -19
  44. package/src/component/schema.ts +1 -1
  45. package/src/test.ts +18 -0
  46. package/dist/commonjs/client/index.d.ts.map +0 -1
  47. package/dist/commonjs/client/index.js.map +0 -1
  48. package/dist/commonjs/client/utils.d.ts +0 -15
  49. package/dist/commonjs/client/utils.d.ts.map +0 -1
  50. package/dist/commonjs/client/utils.js +0 -3
  51. package/dist/commonjs/component/_generated/api.d.ts +0 -12
  52. package/dist/commonjs/component/_generated/api.d.ts.map +0 -1
  53. package/dist/commonjs/component/_generated/api.js +0 -24
  54. package/dist/commonjs/component/_generated/api.js.map +0 -1
  55. package/dist/commonjs/component/_generated/server.d.ts +0 -64
  56. package/dist/commonjs/component/_generated/server.d.ts.map +0 -1
  57. package/dist/commonjs/component/_generated/server.js.map +0 -1
  58. package/dist/commonjs/component/convex.config.d.ts.map +0 -1
  59. package/dist/commonjs/component/convex.config.js.map +0 -1
  60. package/dist/commonjs/component/public.d.ts.map +0 -1
  61. package/dist/commonjs/component/public.js.map +0 -1
  62. package/dist/commonjs/component/schema.d.ts.map +0 -1
  63. package/dist/commonjs/component/schema.js.map +0 -1
  64. package/dist/commonjs/package.json +0 -3
  65. package/dist/esm/client/index.d.ts +0 -89
  66. package/dist/esm/client/index.d.ts.map +0 -1
  67. package/dist/esm/client/index.js +0 -104
  68. package/dist/esm/client/index.js.map +0 -1
  69. package/dist/esm/client/utils.d.ts +0 -15
  70. package/dist/esm/client/utils.d.ts.map +0 -1
  71. package/dist/esm/client/utils.js +0 -3
  72. package/dist/esm/client/utils.js.map +0 -1
  73. package/dist/esm/component/_generated/api.d.ts +0 -12
  74. package/dist/esm/component/_generated/api.d.ts.map +0 -1
  75. package/dist/esm/component/_generated/api.js +0 -24
  76. package/dist/esm/component/_generated/api.js.map +0 -1
  77. package/dist/esm/component/_generated/server.d.ts +0 -64
  78. package/dist/esm/component/_generated/server.d.ts.map +0 -1
  79. package/dist/esm/component/_generated/server.js +0 -76
  80. package/dist/esm/component/_generated/server.js.map +0 -1
  81. package/dist/esm/component/convex.config.d.ts +0 -3
  82. package/dist/esm/component/convex.config.d.ts.map +0 -1
  83. package/dist/esm/component/convex.config.js +0 -3
  84. package/dist/esm/component/convex.config.js.map +0 -1
  85. package/dist/esm/component/public.d.ts +0 -119
  86. package/dist/esm/component/public.d.ts.map +0 -1
  87. package/dist/esm/component/public.js +0 -226
  88. package/dist/esm/component/public.js.map +0 -1
  89. package/dist/esm/component/schema.d.ts +0 -49
  90. package/dist/esm/component/schema.d.ts.map +0 -1
  91. package/dist/esm/component/schema.js +0 -21
  92. package/dist/esm/component/schema.js.map +0 -1
  93. package/dist/esm/package.json +0 -3
  94. package/src/component/_generated/api.d.ts +0 -98
  95. package/src/component/_generated/server.js +0 -94
  96. /package/dist/{commonjs/client → client}/index.js +0 -0
  97. /package/dist/{commonjs/component → component}/convex.config.js +0 -0
@@ -70,7 +70,7 @@ function validateSchedule(schedule) {
70
70
  async function scheduleNextRun(ctx, id, lastScheduled, schedule) {
71
71
  const nextRun = calculateNextRun(lastScheduled, schedule);
72
72
  const schedulerJobId = await ctx.scheduler.runAt(nextRun, internal.public.rescheduler, { id });
73
- await ctx.db.patch(id, { schedulerJobId });
73
+ await ctx.db.patch("crons", id, { schedulerJobId });
74
74
  }
75
75
  function calculateNextRun(lastScheduled, schedule) {
76
76
  if (schedule.kind === "interval") {
@@ -116,7 +116,7 @@ export const get = query({
116
116
  returns: v.union(cronInfoValidator, v.null()),
117
117
  handler: async (ctx, { identifier }) => {
118
118
  const cron = "id" in identifier
119
- ? await ctx.db.get(identifier.id)
119
+ ? await ctx.db.get("crons", identifier.id)
120
120
  : await ctx.db
121
121
  .query("crons")
122
122
  .withIndex("name", (q) => q.eq("name", identifier.name))
@@ -145,7 +145,7 @@ export const del = mutation({
145
145
  handler: async (ctx, { identifier }) => {
146
146
  let cron;
147
147
  if ("id" in identifier) {
148
- cron = await ctx.db.get(identifier.id);
148
+ cron = await ctx.db.get("crons", identifier.id);
149
149
  if (!cron) {
150
150
  throw new Error(`Cron ${identifier.id} not found`);
151
151
  }
@@ -169,7 +169,7 @@ export const del = mutation({
169
169
  await ctx.scheduler.cancel(cron.executionJobId);
170
170
  }
171
171
  console.log(`Deleting cron ${cron._id}`);
172
- await ctx.db.delete(cron._id);
172
+ await ctx.db.delete("crons", cron._id);
173
173
  },
174
174
  });
175
175
  // Continue rescheduling a cron job.
@@ -186,7 +186,7 @@ export const rescheduler = internalMutation({
186
186
  returns: v.null(),
187
187
  handler: async (ctx, { id }) => {
188
188
  // Cron job is the logical concept we're rescheduling repeatedly.
189
- const cronJob = await ctx.db.get(id);
189
+ const cronJob = await ctx.db.get("crons", id);
190
190
  if (!cronJob) {
191
191
  throw Error(`Cron ${id} not found`);
192
192
  }
@@ -195,7 +195,7 @@ export const rescheduler = internalMutation({
195
195
  }
196
196
  // Scheduler job is the job that's running right now, that we use to trigger
197
197
  // repeated executions.
198
- const schedulerJob = await ctx.db.system.get(cronJob.schedulerJobId);
198
+ const schedulerJob = await ctx.db.system.get("_scheduled_functions", cronJob.schedulerJobId);
199
199
  if (!schedulerJob) {
200
200
  throw Error(`Scheduler job ${cronJob.schedulerJobId} not found`);
201
201
  }
@@ -206,7 +206,7 @@ export const rescheduler = internalMutation({
206
206
  // Execution job is the previous job used to actually do the work of the cron.
207
207
  let stillRunning = false;
208
208
  if (cronJob.executionJobId) {
209
- const executionJob = await ctx.db.system.get(cronJob.executionJobId);
209
+ const executionJob = await ctx.db.system.get("_scheduled_functions", cronJob.executionJobId);
210
210
  if (executionJob &&
211
211
  (executionJob.state.kind === "pending" ||
212
212
  executionJob.state.kind === "inProgress")) {
@@ -218,7 +218,8 @@ export const rescheduler = internalMutation({
218
218
  }
219
219
  else {
220
220
  console.log(`Running cron ${cronJob._id}.`);
221
- await ctx.scheduler.runAfter(0, cronJob.functionHandle, cronJob.args);
221
+ const executionJobId = await ctx.scheduler.runAfter(0, cronJob.functionHandle, cronJob.args);
222
+ await ctx.db.patch("crons", id, { executionJobId });
222
223
  }
223
224
  await scheduleNextRun(ctx, id, new Date(schedulerJob.scheduledTime), cronJob.schedule);
224
225
  },
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/component/public.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ declare const _default: import("convex/server").SchemaDefinition<{
3
3
  name?: string | undefined;
4
4
  schedulerJobId?: import("convex/values").GenericId<"_scheduled_functions"> | undefined;
5
5
  executionJobId?: import("convex/values").GenericId<"_scheduled_functions"> | undefined;
6
- functionHandle: string;
7
6
  args: Record<string, any>;
7
+ functionHandle: string;
8
8
  schedule: {
9
9
  kind: "interval";
10
10
  ms: number;
@@ -41,7 +41,7 @@ declare const _default: import("convex/server").SchemaDefinition<{
41
41
  }, "required", "kind" | "cronspec" | "tz">], "required", "kind" | "ms" | "cronspec" | "tz">;
42
42
  schedulerJobId: import("convex/values").VId<import("convex/values").GenericId<"_scheduled_functions"> | undefined, "optional">;
43
43
  executionJobId: import("convex/values").VId<import("convex/values").GenericId<"_scheduled_functions"> | undefined, "optional">;
44
- }, "required", "name" | "functionHandle" | "args" | "schedule" | "schedulerJobId" | "executionJobId" | `args.${string}` | "schedule.kind" | "schedule.ms" | "schedule.cronspec" | "schedule.tz">, {
44
+ }, "required", "args" | "functionHandle" | "name" | "schedule" | "schedulerJobId" | "executionJobId" | `args.${string}` | "schedule.kind" | "schedule.ms" | "schedule.cronspec" | "schedule.tz">, {
45
45
  name: ["name", "_creationTime"];
46
46
  }, {}, {}>;
47
47
  }, true>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAoBG"}
@@ -3,7 +3,7 @@ import { v } from "convex/values";
3
3
  export default defineSchema({
4
4
  // User space crons.
5
5
  crons: defineTable({
6
- name: v.optional(v.string()),
6
+ name: v.optional(v.string()), // optional
7
7
  functionHandle: v.string(),
8
8
  args: v.record(v.string(), v.any()),
9
9
  schedule: v.union(v.object({
@@ -11,10 +11,10 @@ export default defineSchema({
11
11
  ms: v.float64(), // milliseconds
12
12
  }), v.object({
13
13
  kind: v.literal("cron"),
14
- cronspec: v.string(),
14
+ cronspec: v.string(), // "* * * * *"
15
15
  tz: v.optional(v.string()), // optional timezone, e.g. "America/New_York"
16
16
  })),
17
- schedulerJobId: v.optional(v.id("_scheduled_functions")),
17
+ schedulerJobId: v.optional(v.id("_scheduled_functions")), // job to wait for the next execution
18
18
  executionJobId: v.optional(v.id("_scheduled_functions")), // async job to run the function
19
19
  }).index("name", ["name"]),
20
20
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,eAAe,YAAY,CAAC;IAC1B,oBAAoB;IACpB,KAAK,EAAE,WAAW,CAAC;QACjB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW;QACzC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;QAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QACnC,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;YAC3B,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,eAAe;SACjC,CAAC,EACF,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc;YACpC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,6CAA6C;SAC1E,CAAC,CACH;QACD,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,qCAAqC;QAC/F,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,gCAAgC;KAC3F,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;CAC3B,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@convex-dev/crons",
3
- "version": "0.1.9",
3
+ "version": "0.2.1",
4
4
  "description": "Convex component for scheduling periodic jobs.",
5
5
  "keywords": [
6
6
  "convex",
@@ -17,56 +17,75 @@
17
17
  "repository": "github:get-convex/crons",
18
18
  "license": "Apache-2.0",
19
19
  "type": "module",
20
+ "files": [
21
+ "dist",
22
+ "src"
23
+ ],
24
+ "scripts": {
25
+ "dev": "convex dev --start 'npm run dev:build'",
26
+ "dev:frontend": "cd example && vite --clearScreen false",
27
+ "dev:build": "chokidar 'tsconfig*.json' 'src/**/*.ts' -i '**/*.test.ts' -c 'npm run build:codegen' --initial",
28
+ "predev": "convex init && npm run build:codegen",
29
+ "build": "tsc --project ./tsconfig.build.json",
30
+ "build:codegen": "npx convex codegen --component-dir ./src/component && npm run build",
31
+ "build:clean": "rm -rf dist *.tsbuildinfo && npm run build:codegen",
32
+ "typecheck": "tsc --noEmit && tsc -p example/convex",
33
+ "lint": "eslint .",
34
+ "test": "vitest run --typecheck",
35
+ "test:watch": "vitest --typecheck --clearScreen false",
36
+ "test:debug": "vitest --inspect-brk --no-file-parallelism",
37
+ "test:coverage": "vitest run --coverage --coverage.reporter=text",
38
+ "preversion": "npm ci && npm run build:clean && npm run test && npm run lint && npm run typecheck",
39
+ "alpha": "npm version prerelease --preid alpha && npm publish --tag alpha && git push --follow-tags",
40
+ "release": "npm version patch && npm publish && git push --follow-tags",
41
+ "version": "(npm whoami || npm login) && vim -c 'normal o' -c 'normal o## '$npm_package_version CHANGELOG.md && prettier -w CHANGELOG.md && git add CHANGELOG.md"
42
+ },
20
43
  "exports": {
21
44
  "./package.json": "./package.json",
22
45
  ".": {
23
- "import": {
24
- "@convex-dev/component-source": "./src/client/index.ts",
25
- "types": "./dist/esm/client/index.d.ts",
26
- "default": "./dist/esm/client/index.js"
27
- },
28
- "require": {
29
- "@convex-dev/component-source": "./src/client/index.ts",
30
- "types": "./dist/commonjs/client/index.d.ts",
31
- "default": "./dist/commonjs/client/index.js"
32
- }
46
+ "types": "./dist/client/index.d.ts",
47
+ "default": "./dist/client/index.js"
48
+ },
49
+ "./test": "./src/test.ts",
50
+ "./_generated/component.js": {
51
+ "types": "./dist/component/_generated/component.d.ts"
33
52
  },
34
53
  "./convex.config": {
35
- "import": {
36
- "@convex-dev/component-source": "./src/component/convex.config.ts",
37
- "types": "./dist/esm/component/convex.config.d.ts",
38
- "default": "./dist/esm/component/convex.config.js"
39
- }
54
+ "types": "./dist/component/convex.config.d.ts",
55
+ "default": "./dist/component/convex.config.js"
56
+ },
57
+ "./convex.config.js": {
58
+ "types": "./dist/component/convex.config.d.ts",
59
+ "default": "./dist/component/convex.config.js"
40
60
  }
41
61
  },
42
- "main": "./dist/commonjs/client/index.js",
43
- "module": "./dist/esm/client/index.js",
44
- "types": "./dist/commonjs/client/index.d.ts",
45
- "files": [
46
- "dist",
47
- "src"
48
- ],
49
- "scripts": {
50
- "build": "npm run build:esm && npm run build:cjs",
51
- "build:cjs": "tsc --project ./commonjs.json && echo '{\\n \"type\": \"commonjs\"\\n}' > dist/commonjs/package.json",
52
- "build:esm": "tsc --project ./esm.json && echo '{\\n \"type\": \"module\"\\n}' > dist/esm/package.json",
53
- "lint": "eslint --ext .ts src",
54
- "prepare": "npm run build",
55
- "typecheck": "tsc --noEmit"
56
- },
62
+ "module": "./dist/client/index.js",
63
+ "types": "./dist/client/index.d.ts",
57
64
  "dependencies": {
58
65
  "cron-parser": "^4.9.0"
59
66
  },
60
- "devDependencies": {
61
- "@eslint/js": "^9.28.0",
62
- "@types/node": "^18.17.0",
63
- "eslint": "^9.28.0",
64
- "globals": "^16.2.0",
65
- "prettier": "3.2.5",
66
- "typescript": "~5.0.3",
67
- "typescript-eslint": "^8.33.1"
68
- },
69
67
  "peerDependencies": {
70
- "convex": "~1.16.5 || >=1.17.0 <1.35.0"
68
+ "convex": "^1.24.8"
69
+ },
70
+ "devDependencies": {
71
+ "@arethetypeswrong/cli": "0.18.3",
72
+ "@convex-dev/eslint-plugin": "2.0.0",
73
+ "@edge-runtime/vm": "5.0.0",
74
+ "@eslint/eslintrc": "3.3.5",
75
+ "@eslint/js": "10.0.1",
76
+ "@types/node": "24.12.4",
77
+ "@typescript-eslint/eslint-plugin": "8.60.0",
78
+ "@typescript-eslint/parser": "8.60.0",
79
+ "chokidar-cli": "3.0.0",
80
+ "convex": "1.39.1",
81
+ "convex-test": "0.0.53",
82
+ "eslint": "10.4.1",
83
+ "eslint-plugin-react-hooks": "7.1.1",
84
+ "eslint-plugin-react-refresh": "0.5.2",
85
+ "globals": "17.6.0",
86
+ "prettier": "3.8.3",
87
+ "typescript": "6.0.3",
88
+ "typescript-eslint": "8.60.0",
89
+ "vitest": "4.1.7"
71
90
  }
72
91
  }
@@ -2,13 +2,13 @@
2
2
 
3
3
  import {
4
4
  createFunctionHandle,
5
- FunctionArgs,
6
- FunctionHandle,
7
- SchedulableFunctionReference,
5
+ type FunctionArgs,
6
+ type FunctionHandle,
7
+ type SchedulableFunctionReference,
8
8
  } from "convex/server";
9
- import { api } from "../component/_generated/api.js";
10
- import { CronInfo, Schedule } from "../component/public.js";
11
- import { RunMutationCtx, RunQueryCtx, UseApi } from "./utils.js";
9
+ import type { ComponentApi } from "../component/_generated/component.js";
10
+ import type { CronInfo, Schedule } from "../component/public.js";
11
+ import type { RunMutationCtx, RunQueryCtx } from "./utils.js";
12
12
 
13
13
  export type { CronInfo };
14
14
 
@@ -52,7 +52,7 @@ export class Crons {
52
52
  * }
53
53
  * ```
54
54
  */
55
- constructor(private component: UseApi<typeof api>) {}
55
+ constructor(private component: ComponentApi) {}
56
56
 
57
57
  /**
58
58
  * Schedule a mutation or action to run on a cron schedule or interval.
@@ -71,7 +71,7 @@ export class Crons {
71
71
  schedule: Schedule,
72
72
  func: F,
73
73
  args: FunctionArgs<F>,
74
- name?: string
74
+ name?: string,
75
75
  ): Promise<string> {
76
76
  return ctx.runMutation(this.component.public.register, {
77
77
  name,
@@ -104,7 +104,7 @@ export class Crons {
104
104
  */
105
105
  async get(
106
106
  ctx: RunQueryCtx,
107
- identifier: { id: string } | { name: string }
107
+ identifier: { id: string } | { name: string },
108
108
  ): Promise<CronInfo | null> {
109
109
  const cron = await ctx.runQuery(this.component.public.get, { identifier });
110
110
  if (cron === null) {
@@ -125,7 +125,7 @@ export class Crons {
125
125
  */
126
126
  async delete(
127
127
  ctx: RunMutationCtx,
128
- identifier: { id: string } | { name: string }
128
+ identifier: { id: string } | { name: string },
129
129
  ): Promise<null> {
130
130
  return ctx.runMutation(this.component.public.del, { identifier });
131
131
  }
@@ -1,13 +1,8 @@
1
- // Type utilities for component clients.
2
-
3
1
  import type {
4
- Expand,
5
- FunctionReference,
6
2
  GenericDataModel,
7
3
  GenericMutationCtx,
8
4
  GenericQueryCtx,
9
5
  } from "convex/server";
10
- import type { GenericId } from "convex/values";
11
6
 
12
7
  export type RunQueryCtx = {
13
8
  runQuery: GenericQueryCtx<GenericDataModel>["runQuery"];
@@ -15,30 +10,3 @@ export type RunQueryCtx = {
15
10
  export type RunMutationCtx = {
16
11
  runMutation: GenericMutationCtx<GenericDataModel>["runMutation"];
17
12
  };
18
-
19
- export type OpaqueIds<T> =
20
- T extends GenericId<infer _T>
21
- ? string
22
- : T extends (infer U)[]
23
- ? OpaqueIds<U>[]
24
- : T extends object
25
- ? { [K in keyof T]: OpaqueIds<T[K]> }
26
- : T;
27
-
28
- export type UseApi<API> = Expand<{
29
- [mod in keyof API]: API[mod] extends FunctionReference<
30
- infer FType,
31
- "public",
32
- infer FArgs,
33
- infer FReturnType,
34
- infer FComponentPath
35
- >
36
- ? FunctionReference<
37
- FType,
38
- "internal",
39
- OpaqueIds<FArgs>,
40
- OpaqueIds<FReturnType>,
41
- FComponentPath
42
- >
43
- : UseApi<API[mod]>;
44
- }>;
@@ -0,0 +1,50 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * Generated `api` utility.
4
+ *
5
+ * THIS CODE IS AUTOMATICALLY GENERATED.
6
+ *
7
+ * To regenerate, run `npx convex dev`.
8
+ * @module
9
+ */
10
+
11
+ import type * as public_ from "../public.js";
12
+
13
+ import type {
14
+ ApiFromModules,
15
+ FilterApi,
16
+ FunctionReference,
17
+ } from "convex/server";
18
+ import { anyApi, componentsGeneric } from "convex/server";
19
+
20
+ const fullApi: ApiFromModules<{
21
+ public: typeof public_;
22
+ }> = anyApi as any;
23
+
24
+ /**
25
+ * A utility for referencing Convex functions in your app's public API.
26
+ *
27
+ * Usage:
28
+ * ```js
29
+ * const myFunctionReference = api.myModule.myFunction;
30
+ * ```
31
+ */
32
+ export const api: FilterApi<
33
+ typeof fullApi,
34
+ FunctionReference<any, "public">
35
+ > = anyApi as any;
36
+
37
+ /**
38
+ * A utility for referencing Convex functions in your app's internal API.
39
+ *
40
+ * Usage:
41
+ * ```js
42
+ * const myFunctionReference = internal.myModule.myFunction;
43
+ * ```
44
+ */
45
+ export const internal: FilterApi<
46
+ typeof fullApi,
47
+ FunctionReference<any, "internal">
48
+ > = anyApi as any;
49
+
50
+ export const components = componentsGeneric() as unknown as {};
@@ -0,0 +1,79 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * Generated `ComponentApi` utility.
4
+ *
5
+ * THIS CODE IS AUTOMATICALLY GENERATED.
6
+ *
7
+ * To regenerate, run `npx convex dev`.
8
+ * @module
9
+ */
10
+
11
+ import type { FunctionReference } from "convex/server";
12
+
13
+ /**
14
+ * A utility for referencing a Convex component's exposed API.
15
+ *
16
+ * Useful when expecting a parameter like `components.myComponent`.
17
+ * Usage:
18
+ * ```ts
19
+ * async function myFunction(ctx: QueryCtx, component: ComponentApi) {
20
+ * return ctx.runQuery(component.someFile.someQuery, { ...args });
21
+ * }
22
+ * ```
23
+ */
24
+ export type ComponentApi<Name extends string | undefined = string | undefined> =
25
+ {
26
+ public: {
27
+ del: FunctionReference<
28
+ "mutation",
29
+ "internal",
30
+ { identifier: { id: string } | { name: string } },
31
+ null,
32
+ Name
33
+ >;
34
+ get: FunctionReference<
35
+ "query",
36
+ "internal",
37
+ { identifier: { id: string } | { name: string } },
38
+ {
39
+ args: Record<string, any>;
40
+ functionHandle: string;
41
+ id: string;
42
+ name?: string;
43
+ schedule:
44
+ | { kind: "interval"; ms: number }
45
+ | { cronspec: string; kind: "cron"; tz?: string };
46
+ } | null,
47
+ Name
48
+ >;
49
+ list: FunctionReference<
50
+ "query",
51
+ "internal",
52
+ {},
53
+ Array<{
54
+ args: Record<string, any>;
55
+ functionHandle: string;
56
+ id: string;
57
+ name?: string;
58
+ schedule:
59
+ | { kind: "interval"; ms: number }
60
+ | { cronspec: string; kind: "cron"; tz?: string };
61
+ }>,
62
+ Name
63
+ >;
64
+ register: FunctionReference<
65
+ "mutation",
66
+ "internal",
67
+ {
68
+ args: Record<string, any>;
69
+ functionHandle: string;
70
+ name?: string;
71
+ schedule:
72
+ | { kind: "interval"; ms: number }
73
+ | { cronspec: string; kind: "cron"; tz?: string };
74
+ },
75
+ string,
76
+ Name
77
+ >;
78
+ };
79
+ };
@@ -1,5 +1,3 @@
1
- /* prettier-ignore-start */
2
-
3
1
  /* eslint-disable */
4
2
  /**
5
3
  * Generated data model types.
@@ -40,7 +38,7 @@ export type Doc<TableName extends TableNames> = DocumentByName<
40
38
  * Convex documents are uniquely identified by their `Id`, which is accessible
41
39
  * on the `_id` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).
42
40
  *
43
- * Documents can be loaded using `db.get(id)` in query and mutation functions.
41
+ * Documents can be loaded using `db.get(tableName, id)` in query and mutation functions.
44
42
  *
45
43
  * IDs are just strings at runtime, but this type can be used to distinguish them from other
46
44
  * strings when type checking.
@@ -60,5 +58,3 @@ export type Id<TableName extends TableNames | SystemTableNames> =
60
58
  * `mutationGeneric` to make them type-safe.
61
59
  */
62
60
  export type DataModel = DataModelFromSchemaDefinition<typeof schema>;
63
-
64
- /* prettier-ignore-end */