appflare 0.2.24 → 0.2.26
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/Documentation.md +758 -758
- package/cli/commands/index.ts +238 -238
- package/cli/generate.ts +178 -178
- package/cli/index.ts +120 -120
- package/cli/load-config.ts +184 -184
- package/cli/schema-compiler.ts +1183 -1183
- package/cli/templates/auth/README.md +156 -156
- package/cli/templates/auth/config.ts +61 -61
- package/cli/templates/auth/route-config.ts +1 -1
- package/cli/templates/auth/route-handler.ts +1 -1
- package/cli/templates/auth/route-request-utils.ts +5 -5
- package/cli/templates/auth/route.config.ts +18 -18
- package/cli/templates/auth/route.handler.ts +18 -18
- package/cli/templates/auth/route.request-utils.ts +55 -55
- package/cli/templates/auth/route.ts +14 -14
- package/cli/templates/core/README.md +266 -266
- package/cli/templates/core/app-creation.ts +19 -19
- package/cli/templates/core/client/appflare.ts +112 -112
- package/cli/templates/core/client/handlers/index.ts +748 -749
- package/cli/templates/core/client/handlers.ts +1 -1
- package/cli/templates/core/client/index.ts +7 -7
- package/cli/templates/core/client/storage.ts +180 -180
- package/cli/templates/core/client/types.ts +184 -184
- package/cli/templates/core/client-modules/appflare.ts +1 -1
- package/cli/templates/core/client-modules/handlers.ts +1 -1
- package/cli/templates/core/client-modules/index.ts +1 -1
- package/cli/templates/core/client-modules/storage.ts +1 -1
- package/cli/templates/core/client-modules/types.ts +1 -1
- package/cli/templates/core/client.artifacts.ts +39 -39
- package/cli/templates/core/client.ts +4 -4
- package/cli/templates/core/drizzle.ts +15 -15
- package/cli/templates/core/export.ts +14 -14
- package/cli/templates/core/handlers.route.ts +24 -24
- package/cli/templates/core/handlers.ts +1 -1
- package/cli/templates/core/imports.ts +9 -9
- package/cli/templates/core/server.ts +38 -38
- package/cli/templates/core/types.ts +6 -6
- package/cli/templates/core/wrangler.ts +109 -109
- package/cli/templates/dashboard/builders/functions/index.ts +17 -17
- package/cli/templates/dashboard/builders/functions/render-page/header.ts +20 -20
- package/cli/templates/dashboard/builders/functions/render-page/index.ts +33 -33
- package/cli/templates/dashboard/builders/functions/render-page/request-panel.ts +171 -171
- package/cli/templates/dashboard/builders/functions/render-page/result-panel.ts +85 -85
- package/cli/templates/dashboard/builders/functions/render-page/scripts.ts +554 -554
- package/cli/templates/dashboard/builders/navigation.ts +122 -122
- package/cli/templates/dashboard/builders/storage/index.ts +13 -13
- package/cli/templates/dashboard/builders/storage/routes/create-directory-route.ts +29 -29
- package/cli/templates/dashboard/builders/storage/routes/delete-route.ts +18 -18
- package/cli/templates/dashboard/builders/storage/routes/download-route.ts +23 -23
- package/cli/templates/dashboard/builders/storage/routes/index.ts +22 -22
- package/cli/templates/dashboard/builders/storage/routes/list-route.ts +25 -25
- package/cli/templates/dashboard/builders/storage/routes/preview-route.ts +21 -21
- package/cli/templates/dashboard/builders/storage/routes/upload-route.ts +21 -21
- package/cli/templates/dashboard/builders/storage/runtime/helpers.ts +72 -72
- package/cli/templates/dashboard/builders/storage/runtime/storage-page.ts +130 -130
- package/cli/templates/dashboard/builders/table-routes/common/drawer-panel.ts +27 -27
- package/cli/templates/dashboard/builders/table-routes/common/pagination.ts +30 -30
- package/cli/templates/dashboard/builders/table-routes/common/search-bar.ts +23 -23
- package/cli/templates/dashboard/builders/table-routes/fragments.ts +217 -217
- package/cli/templates/dashboard/builders/table-routes/helpers.ts +45 -45
- package/cli/templates/dashboard/builders/table-routes/index.ts +8 -8
- package/cli/templates/dashboard/builders/table-routes/table/actions-cell.ts +71 -71
- package/cli/templates/dashboard/builders/table-routes/table/get-route.ts +291 -291
- package/cli/templates/dashboard/builders/table-routes/table/index.ts +80 -80
- package/cli/templates/dashboard/builders/table-routes/table/post-routes.ts +163 -163
- package/cli/templates/dashboard/builders/table-routes/table-route.ts +7 -7
- package/cli/templates/dashboard/builders/table-routes/users/get-route.ts +69 -69
- package/cli/templates/dashboard/builders/table-routes/users/html/modals.ts +57 -57
- package/cli/templates/dashboard/builders/table-routes/users/html/page.ts +27 -27
- package/cli/templates/dashboard/builders/table-routes/users/html/table.ts +128 -128
- package/cli/templates/dashboard/builders/table-routes/users/index.ts +32 -32
- package/cli/templates/dashboard/builders/table-routes/users/post-routes.ts +150 -150
- package/cli/templates/dashboard/builders/table-routes/users/redirect.ts +14 -14
- package/cli/templates/dashboard/builders/table-routes/users-route.ts +10 -10
- package/cli/templates/dashboard/components/dashboard-home.ts +23 -23
- package/cli/templates/dashboard/components/layout.ts +388 -388
- package/cli/templates/dashboard/components/login-page.ts +65 -65
- package/cli/templates/dashboard/index.ts +61 -61
- package/cli/templates/dashboard/types.ts +9 -9
- package/cli/templates/handlers/README.md +353 -353
- package/cli/templates/handlers/auth.ts +37 -37
- package/cli/templates/handlers/execution.ts +42 -42
- package/cli/templates/handlers/generators/context/context-creation.ts +101 -101
- package/cli/templates/handlers/generators/context/error-helpers.ts +11 -11
- package/cli/templates/handlers/generators/context/scheduler.ts +24 -24
- package/cli/templates/handlers/generators/context/storage-api.ts +134 -112
- package/cli/templates/handlers/generators/context/storage-helpers.ts +59 -59
- package/cli/templates/handlers/generators/context/types.ts +18 -18
- package/cli/templates/handlers/generators/context.ts +43 -43
- package/cli/templates/handlers/generators/execution.ts +15 -15
- package/cli/templates/handlers/generators/handlers.ts +13 -13
- package/cli/templates/handlers/generators/registration/modules/cron.ts +26 -26
- package/cli/templates/handlers/generators/registration/modules/realtime/auth.ts +75 -75
- package/cli/templates/handlers/generators/registration/modules/realtime/durable-object.ts +144 -144
- package/cli/templates/handlers/generators/registration/modules/realtime/index.ts +14 -14
- package/cli/templates/handlers/generators/registration/modules/realtime/publisher.ts +102 -102
- package/cli/templates/handlers/generators/registration/modules/realtime/routes.ts +164 -164
- package/cli/templates/handlers/generators/registration/modules/realtime/types.ts +30 -30
- package/cli/templates/handlers/generators/registration/modules/realtime/utils.ts +516 -516
- package/cli/templates/handlers/generators/registration/modules/scheduler.ts +56 -56
- package/cli/templates/handlers/generators/registration/modules/storage.ts +196 -194
- package/cli/templates/handlers/generators/registration/sections.ts +210 -210
- package/cli/templates/handlers/generators/types/context.ts +68 -66
- package/cli/templates/handlers/generators/types/core.ts +106 -106
- package/cli/templates/handlers/generators/types/operations.ts +135 -135
- package/cli/templates/handlers/generators/types/query-definitions/filter-and-where-types.ts +259 -259
- package/cli/templates/handlers/generators/types/query-definitions/query-api-types.ts +135 -135
- package/cli/templates/handlers/generators/types/query-definitions/query-helper-functions.ts +1031 -1031
- package/cli/templates/handlers/generators/types/query-definitions/schema-and-table-types.ts +246 -246
- package/cli/templates/handlers/generators/types/query-definitions.ts +13 -13
- package/cli/templates/handlers/generators/types/query-runtime/handled-error.ts +13 -13
- package/cli/templates/handlers/generators/types/query-runtime/runtime-aggregate-and-footer.ts +174 -174
- package/cli/templates/handlers/generators/types/query-runtime/runtime-read.ts +121 -121
- package/cli/templates/handlers/generators/types/query-runtime/runtime-setup.ts +45 -45
- package/cli/templates/handlers/generators/types/query-runtime/runtime-write.ts +676 -676
- package/cli/templates/handlers/generators/types/query-runtime.ts +15 -15
- package/cli/templates/handlers/index.ts +43 -43
- package/cli/templates/handlers/operations.ts +116 -116
- package/cli/templates/handlers/registration.ts +91 -83
- package/cli/templates/handlers/types.ts +15 -15
- package/cli/templates/handlers/utils.ts +48 -48
- package/cli/types.ts +110 -110
- package/cli/utils/handler-discovery.ts +466 -466
- package/cli/utils/json-utils.ts +24 -24
- package/cli/utils/path-utils.ts +19 -19
- package/cli/utils/schema-discovery.ts +399 -399
- package/dist/cli/index.js +61 -28
- package/dist/cli/index.mjs +61 -28
- package/index.ts +18 -18
- package/package.json +58 -58
- package/react/index.ts +5 -5
- package/react/use-infinite-query.ts +252 -252
- package/react/use-mutation.ts +89 -89
- package/react/use-query.ts +207 -207
- package/schema.ts +415 -415
- package/test-better-auth-hash.ts +2 -2
- package/tsconfig.json +6 -6
- package/tsup.config.ts +82 -82
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
export function generateTypesCoreSection(): string {
|
|
2
|
-
return `import { betterAuth } from "better-auth";
|
|
3
|
-
import { auth } from "./auth.config";
|
|
4
|
-
import {
|
|
5
|
-
and,
|
|
6
|
-
eq,
|
|
7
|
-
ne,
|
|
8
|
-
inArray,
|
|
9
|
-
notInArray,
|
|
10
|
-
gt,
|
|
11
|
-
gte,
|
|
12
|
-
lt,
|
|
13
|
-
lte,
|
|
14
|
-
isNull,
|
|
15
|
-
isNotNull,
|
|
16
|
-
getTableColumns,
|
|
17
|
-
sql,
|
|
18
|
-
type InferInsertModel,
|
|
19
|
-
type InferSelectModel,
|
|
20
|
-
type SQL,
|
|
21
|
-
} from "drizzle-orm";
|
|
22
|
-
import type {
|
|
23
|
-
BuildQueryResult,
|
|
24
|
-
DBQueryConfig,
|
|
25
|
-
ExtractTablesWithRelations,
|
|
26
|
-
} from "drizzle-orm/relations";
|
|
27
|
-
|
|
28
|
-
export type WorkerEnv = {
|
|
29
|
-
Bindings: Record<string, unknown>;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export type RegisterHandlersOptions = {
|
|
33
|
-
databaseBinding: string;
|
|
34
|
-
kvBinding?: string;
|
|
35
|
-
schedulerBinding?: string;
|
|
36
|
-
r2Binding?: string;
|
|
37
|
-
realtimeBinding?: string;
|
|
38
|
-
realtimeObjectName?: string;
|
|
39
|
-
realtimeSubscribePath?: string;
|
|
40
|
-
realtimeWebsocketPath?: string;
|
|
41
|
-
realtimeProtocol?: string;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export type StorageMethod =
|
|
45
|
-
| "download"
|
|
46
|
-
| "get"
|
|
47
|
-
| "delete"
|
|
48
|
-
| "list"
|
|
49
|
-
| "put"
|
|
50
|
-
| "preview";
|
|
51
|
-
|
|
52
|
-
export type StorageAuthorizationArgs = {
|
|
53
|
-
path: string;
|
|
54
|
-
method: StorageMethod;
|
|
55
|
-
headers?: Headers;
|
|
56
|
-
query?: Record<string, string>;
|
|
57
|
-
contentType?: string;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export type StorageHandler = (
|
|
61
|
-
ctx: AppflareContext,
|
|
62
|
-
args: StorageAuthorizationArgs,
|
|
63
|
-
) => boolean | Promise<boolean>;
|
|
64
|
-
|
|
65
|
-
export type RegisteredStorageHandler = {
|
|
66
|
-
kind: "storage-manager";
|
|
67
|
-
definition: {
|
|
68
|
-
handler: StorageHandler;
|
|
69
|
-
};
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export function storageManager(definition: {
|
|
73
|
-
handler: StorageHandler;
|
|
74
|
-
}): RegisteredStorageHandler {
|
|
75
|
-
return {
|
|
76
|
-
kind: "storage-manager",
|
|
77
|
-
definition,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const storageHandlers: StorageHandler[] = [];
|
|
82
|
-
|
|
83
|
-
export function setStorageHandlers(handlers: StorageHandler[]): void {
|
|
84
|
-
storageHandlers.length = 0;
|
|
85
|
-
storageHandlers.push(...handlers);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export async function isStorageAllowed(
|
|
89
|
-
ctx: AppflareContext,
|
|
90
|
-
args: StorageAuthorizationArgs,
|
|
91
|
-
): Promise<boolean> {
|
|
92
|
-
if (storageHandlers.length === 0) {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
for (const handler of storageHandlers) {
|
|
97
|
-
const allowed = await handler(ctx, args);
|
|
98
|
-
if (allowed) {
|
|
99
|
-
return true;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
`;
|
|
106
|
-
}
|
|
1
|
+
export function generateTypesCoreSection(): string {
|
|
2
|
+
return `import { betterAuth } from "better-auth";
|
|
3
|
+
import { auth } from "./auth.config";
|
|
4
|
+
import {
|
|
5
|
+
and,
|
|
6
|
+
eq,
|
|
7
|
+
ne,
|
|
8
|
+
inArray,
|
|
9
|
+
notInArray,
|
|
10
|
+
gt,
|
|
11
|
+
gte,
|
|
12
|
+
lt,
|
|
13
|
+
lte,
|
|
14
|
+
isNull,
|
|
15
|
+
isNotNull,
|
|
16
|
+
getTableColumns,
|
|
17
|
+
sql,
|
|
18
|
+
type InferInsertModel,
|
|
19
|
+
type InferSelectModel,
|
|
20
|
+
type SQL,
|
|
21
|
+
} from "drizzle-orm";
|
|
22
|
+
import type {
|
|
23
|
+
BuildQueryResult,
|
|
24
|
+
DBQueryConfig,
|
|
25
|
+
ExtractTablesWithRelations,
|
|
26
|
+
} from "drizzle-orm/relations";
|
|
27
|
+
|
|
28
|
+
export type WorkerEnv = {
|
|
29
|
+
Bindings: Record<string, unknown>;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export type RegisterHandlersOptions = {
|
|
33
|
+
databaseBinding: string;
|
|
34
|
+
kvBinding?: string;
|
|
35
|
+
schedulerBinding?: string;
|
|
36
|
+
r2Binding?: string;
|
|
37
|
+
realtimeBinding?: string;
|
|
38
|
+
realtimeObjectName?: string;
|
|
39
|
+
realtimeSubscribePath?: string;
|
|
40
|
+
realtimeWebsocketPath?: string;
|
|
41
|
+
realtimeProtocol?: string;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export type StorageMethod =
|
|
45
|
+
| "download"
|
|
46
|
+
| "get"
|
|
47
|
+
| "delete"
|
|
48
|
+
| "list"
|
|
49
|
+
| "put"
|
|
50
|
+
| "preview";
|
|
51
|
+
|
|
52
|
+
export type StorageAuthorizationArgs = {
|
|
53
|
+
path: string;
|
|
54
|
+
method: StorageMethod;
|
|
55
|
+
headers?: Headers;
|
|
56
|
+
query?: Record<string, string>;
|
|
57
|
+
contentType?: string;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export type StorageHandler = (
|
|
61
|
+
ctx: AppflareContext,
|
|
62
|
+
args: StorageAuthorizationArgs,
|
|
63
|
+
) => boolean | Promise<boolean>;
|
|
64
|
+
|
|
65
|
+
export type RegisteredStorageHandler = {
|
|
66
|
+
kind: "storage-manager";
|
|
67
|
+
definition: {
|
|
68
|
+
handler: StorageHandler;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export function storageManager(definition: {
|
|
73
|
+
handler: StorageHandler;
|
|
74
|
+
}): RegisteredStorageHandler {
|
|
75
|
+
return {
|
|
76
|
+
kind: "storage-manager",
|
|
77
|
+
definition,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const storageHandlers: StorageHandler[] = [];
|
|
82
|
+
|
|
83
|
+
export function setStorageHandlers(handlers: StorageHandler[]): void {
|
|
84
|
+
storageHandlers.length = 0;
|
|
85
|
+
storageHandlers.push(...handlers);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export async function isStorageAllowed(
|
|
89
|
+
ctx: AppflareContext,
|
|
90
|
+
args: StorageAuthorizationArgs,
|
|
91
|
+
): Promise<boolean> {
|
|
92
|
+
if (storageHandlers.length === 0) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
for (const handler of storageHandlers) {
|
|
97
|
+
const allowed = await handler(ctx, args);
|
|
98
|
+
if (allowed) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
`;
|
|
106
|
+
}
|
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
export function generateTypesOperationsSection(): string {
|
|
2
|
-
return `type InferOperationArgs<TShape extends ZodRawShape> = z.output<z.ZodObject<TShape>>;
|
|
3
|
-
|
|
4
|
-
export type SchedulerEnqueueOptions = {
|
|
5
|
-
delaySeconds?: number;
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
declare global {
|
|
9
|
-
interface AppflareSchedulerHandlerMap {}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export type SchedulerTaskName = keyof AppflareSchedulerHandlerMap extends never
|
|
13
|
-
? string
|
|
14
|
-
: Extract<keyof AppflareSchedulerHandlerMap, string>;
|
|
15
|
-
|
|
16
|
-
export type SchedulerTaskPayload<TTask extends SchedulerTaskName> =
|
|
17
|
-
TTask extends keyof AppflareSchedulerHandlerMap
|
|
18
|
-
? AppflareSchedulerHandlerMap[TTask]
|
|
19
|
-
: unknown;
|
|
20
|
-
|
|
21
|
-
export type SchedulerEnqueue = {
|
|
22
|
-
<TTask extends SchedulerTaskName>(
|
|
23
|
-
task: TTask,
|
|
24
|
-
...args: undefined extends SchedulerTaskPayload<TTask>
|
|
25
|
-
? [
|
|
26
|
-
payload?: SchedulerTaskPayload<TTask>,
|
|
27
|
-
options?: SchedulerEnqueueOptions,
|
|
28
|
-
]
|
|
29
|
-
: [
|
|
30
|
-
payload: SchedulerTaskPayload<TTask>,
|
|
31
|
-
options?: SchedulerEnqueueOptions,
|
|
32
|
-
]
|
|
33
|
-
): Promise<void>;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export type Scheduler = {
|
|
37
|
-
enqueue: SchedulerEnqueue;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
type OperationDefinition<
|
|
41
|
-
TShape extends ZodRawShape,
|
|
42
|
-
TResult,
|
|
43
|
-
> = {
|
|
44
|
-
args: TShape;
|
|
45
|
-
authRequired: boolean;
|
|
46
|
-
middleware?: (
|
|
47
|
-
ctx: AppflareContext,
|
|
48
|
-
index: InferOperationArgs<TShape>,
|
|
49
|
-
request: Request,
|
|
50
|
-
) => void | Promise<void>;
|
|
51
|
-
handler: (
|
|
52
|
-
ctx: AppflareContext,
|
|
53
|
-
args: InferOperationArgs<TShape>,
|
|
54
|
-
) => TResult | Promise<TResult>;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
type OperationDefinitionInput<
|
|
58
|
-
TShape extends ZodRawShape,
|
|
59
|
-
TResult,
|
|
60
|
-
> = Omit<OperationDefinition<TShape, TResult>, "authRequired"> & {
|
|
61
|
-
authRequired?: boolean;
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
export type RegisteredOperation<
|
|
65
|
-
TShape extends ZodRawShape,
|
|
66
|
-
TResult,
|
|
67
|
-
> = {
|
|
68
|
-
kind: "query" | "mutation";
|
|
69
|
-
definition: OperationDefinition<TShape, TResult>;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
type SchedulerDefinition<TShape extends ZodRawShape | undefined> = {
|
|
73
|
-
args?: TShape;
|
|
74
|
-
handler: (
|
|
75
|
-
ctx: AppflareContext,
|
|
76
|
-
args: TShape extends ZodRawShape ? InferOperationArgs<TShape> : undefined,
|
|
77
|
-
) => void | Promise<void>;
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
export type RegisteredScheduler<TShape extends ZodRawShape | undefined> = {
|
|
81
|
-
kind: "scheduler";
|
|
82
|
-
definition: SchedulerDefinition<TShape>;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
type CronDefinition = {
|
|
86
|
-
cronTrigger: string | string[];
|
|
87
|
-
handler: (ctx: AppflareContext) => void | Promise<void>;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
export type RegisteredCron = {
|
|
91
|
-
kind: "cron";
|
|
92
|
-
definition: CronDefinition;
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
export function query<TShape extends ZodRawShape, TResult>(
|
|
96
|
-
definition: OperationDefinitionInput<TShape, TResult>,
|
|
97
|
-
): RegisteredOperation<TShape, TResult> {
|
|
98
|
-
return {
|
|
99
|
-
kind: "query",
|
|
100
|
-
definition: {
|
|
101
|
-
authRequired: false,
|
|
102
|
-
...definition,
|
|
103
|
-
},
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export function mutation<TShape extends ZodRawShape, TResult>(
|
|
108
|
-
definition: OperationDefinitionInput<TShape, TResult>,
|
|
109
|
-
): RegisteredOperation<TShape, TResult> {
|
|
110
|
-
return {
|
|
111
|
-
kind: "mutation",
|
|
112
|
-
definition: {
|
|
113
|
-
authRequired: false,
|
|
114
|
-
...definition,
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export function scheduler<TShape extends ZodRawShape | undefined = undefined>(
|
|
120
|
-
definition: SchedulerDefinition<TShape>,
|
|
121
|
-
): RegisteredScheduler<TShape> {
|
|
122
|
-
return {
|
|
123
|
-
kind: "scheduler",
|
|
124
|
-
definition,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export function cron(definition: CronDefinition): RegisteredCron {
|
|
129
|
-
return {
|
|
130
|
-
kind: "cron",
|
|
131
|
-
definition,
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
`;
|
|
135
|
-
}
|
|
1
|
+
export function generateTypesOperationsSection(): string {
|
|
2
|
+
return `type InferOperationArgs<TShape extends ZodRawShape> = z.output<z.ZodObject<TShape>>;
|
|
3
|
+
|
|
4
|
+
export type SchedulerEnqueueOptions = {
|
|
5
|
+
delaySeconds?: number;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
declare global {
|
|
9
|
+
interface AppflareSchedulerHandlerMap {}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type SchedulerTaskName = keyof AppflareSchedulerHandlerMap extends never
|
|
13
|
+
? string
|
|
14
|
+
: Extract<keyof AppflareSchedulerHandlerMap, string>;
|
|
15
|
+
|
|
16
|
+
export type SchedulerTaskPayload<TTask extends SchedulerTaskName> =
|
|
17
|
+
TTask extends keyof AppflareSchedulerHandlerMap
|
|
18
|
+
? AppflareSchedulerHandlerMap[TTask]
|
|
19
|
+
: unknown;
|
|
20
|
+
|
|
21
|
+
export type SchedulerEnqueue = {
|
|
22
|
+
<TTask extends SchedulerTaskName>(
|
|
23
|
+
task: TTask,
|
|
24
|
+
...args: undefined extends SchedulerTaskPayload<TTask>
|
|
25
|
+
? [
|
|
26
|
+
payload?: SchedulerTaskPayload<TTask>,
|
|
27
|
+
options?: SchedulerEnqueueOptions,
|
|
28
|
+
]
|
|
29
|
+
: [
|
|
30
|
+
payload: SchedulerTaskPayload<TTask>,
|
|
31
|
+
options?: SchedulerEnqueueOptions,
|
|
32
|
+
]
|
|
33
|
+
): Promise<void>;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export type Scheduler = {
|
|
37
|
+
enqueue: SchedulerEnqueue;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
type OperationDefinition<
|
|
41
|
+
TShape extends ZodRawShape,
|
|
42
|
+
TResult,
|
|
43
|
+
> = {
|
|
44
|
+
args: TShape;
|
|
45
|
+
authRequired: boolean;
|
|
46
|
+
middleware?: (
|
|
47
|
+
ctx: AppflareContext,
|
|
48
|
+
index: InferOperationArgs<TShape>,
|
|
49
|
+
request: Request,
|
|
50
|
+
) => void | Promise<void>;
|
|
51
|
+
handler: (
|
|
52
|
+
ctx: AppflareContext,
|
|
53
|
+
args: InferOperationArgs<TShape>,
|
|
54
|
+
) => TResult | Promise<TResult>;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
type OperationDefinitionInput<
|
|
58
|
+
TShape extends ZodRawShape,
|
|
59
|
+
TResult,
|
|
60
|
+
> = Omit<OperationDefinition<TShape, TResult>, "authRequired"> & {
|
|
61
|
+
authRequired?: boolean;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export type RegisteredOperation<
|
|
65
|
+
TShape extends ZodRawShape,
|
|
66
|
+
TResult,
|
|
67
|
+
> = {
|
|
68
|
+
kind: "query" | "mutation";
|
|
69
|
+
definition: OperationDefinition<TShape, TResult>;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
type SchedulerDefinition<TShape extends ZodRawShape | undefined> = {
|
|
73
|
+
args?: TShape;
|
|
74
|
+
handler: (
|
|
75
|
+
ctx: AppflareContext,
|
|
76
|
+
args: TShape extends ZodRawShape ? InferOperationArgs<TShape> : undefined,
|
|
77
|
+
) => void | Promise<void>;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export type RegisteredScheduler<TShape extends ZodRawShape | undefined> = {
|
|
81
|
+
kind: "scheduler";
|
|
82
|
+
definition: SchedulerDefinition<TShape>;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
type CronDefinition = {
|
|
86
|
+
cronTrigger: string | string[];
|
|
87
|
+
handler: (ctx: AppflareContext) => void | Promise<void>;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export type RegisteredCron = {
|
|
91
|
+
kind: "cron";
|
|
92
|
+
definition: CronDefinition;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export function query<TShape extends ZodRawShape, TResult>(
|
|
96
|
+
definition: OperationDefinitionInput<TShape, TResult>,
|
|
97
|
+
): RegisteredOperation<TShape, TResult> {
|
|
98
|
+
return {
|
|
99
|
+
kind: "query",
|
|
100
|
+
definition: {
|
|
101
|
+
authRequired: false,
|
|
102
|
+
...definition,
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function mutation<TShape extends ZodRawShape, TResult>(
|
|
108
|
+
definition: OperationDefinitionInput<TShape, TResult>,
|
|
109
|
+
): RegisteredOperation<TShape, TResult> {
|
|
110
|
+
return {
|
|
111
|
+
kind: "mutation",
|
|
112
|
+
definition: {
|
|
113
|
+
authRequired: false,
|
|
114
|
+
...definition,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function scheduler<TShape extends ZodRawShape | undefined = undefined>(
|
|
120
|
+
definition: SchedulerDefinition<TShape>,
|
|
121
|
+
): RegisteredScheduler<TShape> {
|
|
122
|
+
return {
|
|
123
|
+
kind: "scheduler",
|
|
124
|
+
definition,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function cron(definition: CronDefinition): RegisteredCron {
|
|
129
|
+
return {
|
|
130
|
+
kind: "cron",
|
|
131
|
+
definition,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
`;
|
|
135
|
+
}
|