appflare 0.2.10 → 0.2.11

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.
@@ -0,0 +1,2 @@
1
+
2
+ export { }
@@ -0,0 +1,2 @@
1
+
2
+ export { }
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';var chunkDZUS277V_js=require('../chunk-DZUS277V.js'),commander=require('commander'),A=require('chokidar'),fs=require('fs'),path=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var A__default=/*#__PURE__*/_interopDefault(A);function C(e){let a=e;for(;;){if(fs.existsSync(path.resolve(a,"package.json")))return a;let r=path.dirname(a);if(r===a)return e;a=r;}}async function p(e){let a=await chunkDZUS277V_js.a(e);if(await chunkDZUS277V_js.f(a),a.wranglerOutDirAbs===a.outDirAbs){process.stdout.write(`\u2705 Generated artifacts in ${a.outDirAbs}
3
+ `);return}process.stdout.write(`\u2705 Generated server/client in ${a.outDirAbs} and wrangler.json in ${a.wranglerOutDirAbs}
4
+ `);}async function x(e,a=false){if(await p(e),!a)return;let r=await chunkDZUS277V_js.a(e),o=false,i=false,s=async()=>{if(o){i=true;return}o=true;try{await p(e);}catch(d){process.stderr.write(`\u274C Build failed: ${d.message}
5
+ `);}finally{o=false,i&&(i=false,await s());}};A__default.default.watch(r.scanDirAbs,{ignoreInitial:true}).on("all",async(d,t)=>{process.stdout.write(`\u{1F504} Change detected: ${t}
6
+ `),await s();}),process.stdout.write(`\u{1F440} Watching ${r.scanDirAbs}
7
+ `);}async function y(e,a={}){let r=await chunkDZUS277V_js.a(e),o=C(process.cwd());if([!!a.local,!!a.remote,!!a.preview].filter(Boolean).length>1)throw new Error("Only one of --local, --remote, or --preview can be set.");let s=path.resolve(r.outDirAbs,"drizzle.config.ts"),c=process.platform==="win32"?"npx.cmd":"npx",t=await Bun.spawn([c,"drizzle-kit","generate","--config",s],{cwd:o,stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(t!==0)throw new Error(`drizzle-kit generate failed with exit code ${t}`);let g=r.config.database[0].databaseName,n=[c,"wrangler","d1","migrations","apply",g];a.local?n.push("--local"):a.remote?n.push("--remote"):a.preview&&n.push("--preview");let f=await Bun.spawn(n,{cwd:r.configDir,stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(f!==0)throw new Error(`wrangler d1 migrations apply failed with exit code ${f}`)}async function D(e,a={name:"",email:"",password:""}){let r=await chunkDZUS277V_js.a(e);if([!!a.local,!!a.remote].filter(Boolean).length>1)throw new Error("Only one of --local or --remote can be set.");let{hashPassword:i}=await import('better-auth/crypto'),s=await i(a.password),c=crypto.randomUUID(),d=crypto.randomUUID(),t=Date.now(),g=a.name.replace(/'/g,"''"),n=a.email.replace(/'/g,"''"),u=["INSERT INTO users (id, name, email, email_verified, created_at, updated_at, role, banned)",`VALUES ('${c}', '${g}', '${n}', 1, ${t}, ${t}, 'admin', 0);`,"INSERT INTO accounts (id, account_id, provider_id, user_id, password, created_at, updated_at)",`VALUES ('${d}', '${n}', 'credential', '${c}', '${s}', ${t}, ${t});`].join(" "),f=r.config.database[0].databaseName,w=[process.platform==="win32"?"npx.cmd":"npx","wrangler","d1","execute",f,`--command=${u}`];a.local?w.push("--local"):a.remote&&w.push("--remote");let h=await Bun.spawn(w,{cwd:r.configDir,stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(h!==0)throw new Error(`Failed to add admin user. wrangler d1 execute exited with code ${h}`);console.log("\u2705 Admin user "+a.email+" created successfully!");}var l=new commander.Command;l.name("appflare").description("Appflare compiler/bundler for Cloudflare-native backends and SDK generation").version("0.0.28");l.command("build").description("Generate server.ts, client.ts, auth.config.ts, drizzle.config.ts, and wrangler.json artifacts").option("-c, --config <path>","Path to appflare.config.ts","appflare.config.ts").action(async e=>{await p(e.config);});l.command("dev").description("Run generator in development mode").option("-c, --config <path>","Path to appflare.config.ts","appflare.config.ts").option("-w, --watch","Watch scanDir and regenerate on changes",false).action(async e=>{await x(e.config,e.watch);});l.command("migrate").description("Generate drizzle migration files from outDir/auth.schema.ts and apply them to the configured D1 database").option("-c, --config <path>","Path to appflare.config.ts","appflare.config.ts").option("--local","Execute commands/files against a local DB for use with wrangler dev",false).option("--remote","Execute commands/files against a remote DB for use with wrangler dev --remote",false).option("--preview","Execute commands/files against a preview D1 DB",false).action(async e=>{await y(e.config,{local:e.local,remote:e.remote,preview:e.preview});});l.command("add-admin").description("Add an admin user to the database").requiredOption("-n, --name <name>","Admin's display name").requiredOption("-e, --email <email>","Admin's email address").requiredOption("-p, --password <password>","Admin's password").option("-c, --config <path>","Path to appflare.config.ts","appflare.config.ts").option("--local","Execute command against a local DB for use with wrangler dev",false).option("--remote","Execute command against a remote DB for use with wrangler dev --remote",false).action(async e=>{await D(e.config,{name:e.name,email:e.email,password:e.password,local:e.local,remote:e.remote});});(async()=>{await l.parseAsync(process.argv);})().catch(e=>{console.error(e),process.exit(1);});
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import {a,f}from'../chunk-RZSN246U.mjs';import {Command}from'commander';import A from'chokidar';import {existsSync}from'fs';import {resolve,dirname}from'path';function C(e){let a=e;for(;;){if(existsSync(resolve(a,"package.json")))return a;let r=dirname(a);if(r===a)return e;a=r;}}async function p(e){let a$1=await a(e);if(await f(a$1),a$1.wranglerOutDirAbs===a$1.outDirAbs){process.stdout.write(`\u2705 Generated artifacts in ${a$1.outDirAbs}
3
+ `);return}process.stdout.write(`\u2705 Generated server/client in ${a$1.outDirAbs} and wrangler.json in ${a$1.wranglerOutDirAbs}
4
+ `);}async function x(e,a$1=false){if(await p(e),!a$1)return;let r=await a(e),o=false,i=false,s=async()=>{if(o){i=true;return}o=true;try{await p(e);}catch(d){process.stderr.write(`\u274C Build failed: ${d.message}
5
+ `);}finally{o=false,i&&(i=false,await s());}};A.watch(r.scanDirAbs,{ignoreInitial:true}).on("all",async(d,t)=>{process.stdout.write(`\u{1F504} Change detected: ${t}
6
+ `),await s();}),process.stdout.write(`\u{1F440} Watching ${r.scanDirAbs}
7
+ `);}async function y(e,a$1={}){let r=await a(e),o=C(process.cwd());if([!!a$1.local,!!a$1.remote,!!a$1.preview].filter(Boolean).length>1)throw new Error("Only one of --local, --remote, or --preview can be set.");let s=resolve(r.outDirAbs,"drizzle.config.ts"),c=process.platform==="win32"?"npx.cmd":"npx",t=await Bun.spawn([c,"drizzle-kit","generate","--config",s],{cwd:o,stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(t!==0)throw new Error(`drizzle-kit generate failed with exit code ${t}`);let g=r.config.database[0].databaseName,n=[c,"wrangler","d1","migrations","apply",g];a$1.local?n.push("--local"):a$1.remote?n.push("--remote"):a$1.preview&&n.push("--preview");let f=await Bun.spawn(n,{cwd:r.configDir,stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(f!==0)throw new Error(`wrangler d1 migrations apply failed with exit code ${f}`)}async function D(e,a$1={name:"",email:"",password:""}){let r=await a(e);if([!!a$1.local,!!a$1.remote].filter(Boolean).length>1)throw new Error("Only one of --local or --remote can be set.");let{hashPassword:i}=await import('better-auth/crypto'),s=await i(a$1.password),c=crypto.randomUUID(),d=crypto.randomUUID(),t=Date.now(),g=a$1.name.replace(/'/g,"''"),n=a$1.email.replace(/'/g,"''"),u=["INSERT INTO users (id, name, email, email_verified, created_at, updated_at, role, banned)",`VALUES ('${c}', '${g}', '${n}', 1, ${t}, ${t}, 'admin', 0);`,"INSERT INTO accounts (id, account_id, provider_id, user_id, password, created_at, updated_at)",`VALUES ('${d}', '${n}', 'credential', '${c}', '${s}', ${t}, ${t});`].join(" "),f=r.config.database[0].databaseName,w=[process.platform==="win32"?"npx.cmd":"npx","wrangler","d1","execute",f,`--command=${u}`];a$1.local?w.push("--local"):a$1.remote&&w.push("--remote");let h=await Bun.spawn(w,{cwd:r.configDir,stdin:"inherit",stdout:"inherit",stderr:"inherit"}).exited;if(h!==0)throw new Error(`Failed to add admin user. wrangler d1 execute exited with code ${h}`);console.log("\u2705 Admin user "+a$1.email+" created successfully!");}var l=new Command;l.name("appflare").description("Appflare compiler/bundler for Cloudflare-native backends and SDK generation").version("0.0.28");l.command("build").description("Generate server.ts, client.ts, auth.config.ts, drizzle.config.ts, and wrangler.json artifacts").option("-c, --config <path>","Path to appflare.config.ts","appflare.config.ts").action(async e=>{await p(e.config);});l.command("dev").description("Run generator in development mode").option("-c, --config <path>","Path to appflare.config.ts","appflare.config.ts").option("-w, --watch","Watch scanDir and regenerate on changes",false).action(async e=>{await x(e.config,e.watch);});l.command("migrate").description("Generate drizzle migration files from outDir/auth.schema.ts and apply them to the configured D1 database").option("-c, --config <path>","Path to appflare.config.ts","appflare.config.ts").option("--local","Execute commands/files against a local DB for use with wrangler dev",false).option("--remote","Execute commands/files against a remote DB for use with wrangler dev --remote",false).option("--preview","Execute commands/files against a preview D1 DB",false).action(async e=>{await y(e.config,{local:e.local,remote:e.remote,preview:e.preview});});l.command("add-admin").description("Add an admin user to the database").requiredOption("-n, --name <name>","Admin's display name").requiredOption("-e, --email <email>","Admin's email address").requiredOption("-p, --password <password>","Admin's password").option("-c, --config <path>","Path to appflare.config.ts","appflare.config.ts").option("--local","Execute command against a local DB for use with wrangler dev",false).option("--remote","Execute command against a remote DB for use with wrangler dev --remote",false).action(async e=>{await D(e.config,{name:e.name,email:e.email,password:e.password,local:e.local,remote:e.remote});});(async()=>{await l.parseAsync(process.argv);})().catch(e=>{console.error(e),process.exit(1);});
@@ -0,0 +1,195 @@
1
+ import { BetterAuthOptions } from 'better-auth';
2
+ import { BetterAuthClientOptions } from 'better-auth/client';
3
+
4
+ type JsonPrimitive = string | number | boolean | null;
5
+ type JsonValue = JsonPrimitive | JsonObject | JsonValue[];
6
+ type JsonObject = {
7
+ [key: string]: JsonValue;
8
+ };
9
+ type AppflareDatabaseBinding = {
10
+ binding: string;
11
+ databaseName: string;
12
+ databaseId: string;
13
+ previewDatabaseId?: string;
14
+ migrationsDir?: string;
15
+ };
16
+ type AppflareKVNamespace = {
17
+ binding: string;
18
+ id: string;
19
+ previewId?: string;
20
+ };
21
+ type AppflareR2Bucket = {
22
+ binding: string;
23
+ bucketName: string;
24
+ previewBucketName?: string;
25
+ jurisdiction?: string;
26
+ };
27
+ type AppflareSchemaDslConfig = {
28
+ entry: string;
29
+ exportName?: string;
30
+ outFile?: string;
31
+ typesOutFile?: string;
32
+ zodOutFile?: string;
33
+ namingStrategy?: "camelToSnake";
34
+ };
35
+ type AppflareSchedulerConfig = {
36
+ enabled?: boolean;
37
+ binding?: string;
38
+ queue?: string;
39
+ };
40
+ type AppflareRealtimeConfig = {
41
+ enabled?: boolean;
42
+ binding?: string;
43
+ className?: string;
44
+ objectName?: string;
45
+ subscribePath?: string;
46
+ websocketPath?: string;
47
+ protocol?: string;
48
+ };
49
+ type AppflareConfig = {
50
+ scanDir: string;
51
+ outDir: string;
52
+ wranglerOutDir?: string;
53
+ wranglerOutPath?: string;
54
+ schema: string[];
55
+ schemaDsl?: AppflareSchemaDslConfig;
56
+ database: AppflareDatabaseBinding | AppflareDatabaseBinding[];
57
+ kv?: AppflareKVNamespace | AppflareKVNamespace[];
58
+ r2?: AppflareR2Bucket | AppflareR2Bucket[];
59
+ auth: {
60
+ enabled: boolean;
61
+ basePath: string;
62
+ options: Partial<BetterAuthOptions>;
63
+ clientOptions: BetterAuthClientOptions;
64
+ };
65
+ scheduler?: AppflareSchedulerConfig;
66
+ realtime?: AppflareRealtimeConfig;
67
+ wranglerOverrides?: JsonObject;
68
+ };
69
+ type NormalizedAppflareConfig = Omit<AppflareConfig, "database" | "kv" | "r2" | "wranglerOutPath"> & {
70
+ database: AppflareDatabaseBinding[];
71
+ kv: AppflareKVNamespace[];
72
+ r2: AppflareR2Bucket[];
73
+ wranglerOutDir: string;
74
+ scheduler: Required<Pick<AppflareSchedulerConfig, "enabled" | "binding">> & Pick<AppflareSchedulerConfig, "queue">;
75
+ realtime: Required<Pick<AppflareRealtimeConfig, "enabled" | "binding" | "className" | "objectName" | "subscribePath" | "websocketPath" | "protocol">>;
76
+ };
77
+ type LoadedAppflareConfig = {
78
+ configPath: string;
79
+ configDir: string;
80
+ scanDirAbs: string;
81
+ outDirAbs: string;
82
+ wranglerOutDirAbs: string;
83
+ config: NormalizedAppflareConfig;
84
+ };
85
+
86
+ declare function loadConfig(configPathArg?: string): Promise<LoadedAppflareConfig>;
87
+
88
+ declare function generateArtifacts(loadedConfig: LoadedAppflareConfig): Promise<void>;
89
+
90
+ type ColumnType = "int" | "string" | "boolean" | "date";
91
+ type ColumnBuilderOptions = {
92
+ sqlName?: string;
93
+ length?: number;
94
+ };
95
+ type PrimaryKeyOptions = {
96
+ autoIncrement?: boolean;
97
+ };
98
+ type RelationOneOptions = {
99
+ referenceField?: string;
100
+ field?: string;
101
+ fkType?: ColumnType;
102
+ sqlName?: string;
103
+ notNull?: boolean;
104
+ };
105
+ type RelationManyOptions = {
106
+ referenceField?: string;
107
+ field?: string;
108
+ fkType?: ColumnType;
109
+ sqlName?: string;
110
+ notNull?: boolean;
111
+ };
112
+ type ColumnReference = {
113
+ table: string;
114
+ column: string;
115
+ };
116
+ type ColumnDefinition = {
117
+ kind: "column";
118
+ type: ColumnType;
119
+ sqlName?: string;
120
+ length?: number;
121
+ notNull?: boolean;
122
+ primaryKey?: boolean;
123
+ autoIncrement?: boolean;
124
+ unique?: true | {
125
+ name?: string;
126
+ };
127
+ index?: true | {
128
+ name?: string;
129
+ };
130
+ sqlDefault?: unknown;
131
+ runtimeDefaultFn?: () => unknown;
132
+ references?: ColumnReference;
133
+ };
134
+ type OneRelationDefinition = {
135
+ kind: "relation";
136
+ relation: "one";
137
+ targetTable: string;
138
+ field?: string;
139
+ referenceField?: string;
140
+ fkType?: ColumnType;
141
+ sqlName?: string;
142
+ notNull?: boolean;
143
+ };
144
+ type ManyRelationDefinition = {
145
+ kind: "relation";
146
+ relation: "many";
147
+ targetTable: string;
148
+ field?: string;
149
+ referenceField?: string;
150
+ fkType?: ColumnType;
151
+ sqlName?: string;
152
+ notNull?: boolean;
153
+ };
154
+ type RelationDefinition = OneRelationDefinition | ManyRelationDefinition;
155
+ type TableOptions = {
156
+ sqlName?: string;
157
+ };
158
+ type TableShape = Record<string, ColumnBuilder | RelationDefinition>;
159
+ type TableDefinition = {
160
+ kind: "table";
161
+ sqlName?: string;
162
+ columns: Record<string, ColumnDefinition>;
163
+ relations: Record<string, RelationDefinition>;
164
+ };
165
+ type SchemaDefinition = {
166
+ kind: "schema";
167
+ tables: Record<string, TableDefinition>;
168
+ };
169
+ declare class ColumnBuilder {
170
+ private definition;
171
+ constructor(typeOrDefinition: ColumnType | ColumnDefinition, options?: ColumnBuilderOptions);
172
+ private with;
173
+ sql(name: string): ColumnBuilder;
174
+ notNull(): ColumnBuilder;
175
+ primaryKey(options?: PrimaryKeyOptions): ColumnBuilder;
176
+ unique(name?: string): ColumnBuilder;
177
+ index(name?: string): ColumnBuilder;
178
+ default(value: unknown): ColumnBuilder;
179
+ defaultFn(fn: () => unknown): ColumnBuilder;
180
+ references(table: string, column?: string): ColumnBuilder;
181
+ toDefinition(): ColumnDefinition;
182
+ }
183
+ declare function table(shape: TableShape, options?: TableOptions): TableDefinition;
184
+ declare function schema(tables: Record<string, TableDefinition>): SchemaDefinition;
185
+ declare function isSchemaDefinition(value: unknown): value is SchemaDefinition;
186
+ declare const v: {
187
+ int: (options?: ColumnBuilderOptions) => ColumnBuilder;
188
+ string: (options?: ColumnBuilderOptions) => ColumnBuilder;
189
+ boolean: (options?: ColumnBuilderOptions) => ColumnBuilder;
190
+ date: (options?: ColumnBuilderOptions) => ColumnBuilder;
191
+ one: (targetTable: string, fieldOrOptions?: string | RelationOneOptions, options?: RelationOneOptions) => OneRelationDefinition;
192
+ many: (targetTable: string, fieldOrOptions?: string | RelationManyOptions, options?: RelationManyOptions) => ManyRelationDefinition;
193
+ };
194
+
195
+ export { type AppflareConfig, type AppflareDatabaseBinding, type AppflareKVNamespace, type AppflareR2Bucket, type ColumnDefinition, type LoadedAppflareConfig, type NormalizedAppflareConfig, type RelationDefinition, type SchemaDefinition, type TableDefinition, generateArtifacts, isSchemaDefinition, loadConfig, schema, table, v };
@@ -0,0 +1,195 @@
1
+ import { BetterAuthOptions } from 'better-auth';
2
+ import { BetterAuthClientOptions } from 'better-auth/client';
3
+
4
+ type JsonPrimitive = string | number | boolean | null;
5
+ type JsonValue = JsonPrimitive | JsonObject | JsonValue[];
6
+ type JsonObject = {
7
+ [key: string]: JsonValue;
8
+ };
9
+ type AppflareDatabaseBinding = {
10
+ binding: string;
11
+ databaseName: string;
12
+ databaseId: string;
13
+ previewDatabaseId?: string;
14
+ migrationsDir?: string;
15
+ };
16
+ type AppflareKVNamespace = {
17
+ binding: string;
18
+ id: string;
19
+ previewId?: string;
20
+ };
21
+ type AppflareR2Bucket = {
22
+ binding: string;
23
+ bucketName: string;
24
+ previewBucketName?: string;
25
+ jurisdiction?: string;
26
+ };
27
+ type AppflareSchemaDslConfig = {
28
+ entry: string;
29
+ exportName?: string;
30
+ outFile?: string;
31
+ typesOutFile?: string;
32
+ zodOutFile?: string;
33
+ namingStrategy?: "camelToSnake";
34
+ };
35
+ type AppflareSchedulerConfig = {
36
+ enabled?: boolean;
37
+ binding?: string;
38
+ queue?: string;
39
+ };
40
+ type AppflareRealtimeConfig = {
41
+ enabled?: boolean;
42
+ binding?: string;
43
+ className?: string;
44
+ objectName?: string;
45
+ subscribePath?: string;
46
+ websocketPath?: string;
47
+ protocol?: string;
48
+ };
49
+ type AppflareConfig = {
50
+ scanDir: string;
51
+ outDir: string;
52
+ wranglerOutDir?: string;
53
+ wranglerOutPath?: string;
54
+ schema: string[];
55
+ schemaDsl?: AppflareSchemaDslConfig;
56
+ database: AppflareDatabaseBinding | AppflareDatabaseBinding[];
57
+ kv?: AppflareKVNamespace | AppflareKVNamespace[];
58
+ r2?: AppflareR2Bucket | AppflareR2Bucket[];
59
+ auth: {
60
+ enabled: boolean;
61
+ basePath: string;
62
+ options: Partial<BetterAuthOptions>;
63
+ clientOptions: BetterAuthClientOptions;
64
+ };
65
+ scheduler?: AppflareSchedulerConfig;
66
+ realtime?: AppflareRealtimeConfig;
67
+ wranglerOverrides?: JsonObject;
68
+ };
69
+ type NormalizedAppflareConfig = Omit<AppflareConfig, "database" | "kv" | "r2" | "wranglerOutPath"> & {
70
+ database: AppflareDatabaseBinding[];
71
+ kv: AppflareKVNamespace[];
72
+ r2: AppflareR2Bucket[];
73
+ wranglerOutDir: string;
74
+ scheduler: Required<Pick<AppflareSchedulerConfig, "enabled" | "binding">> & Pick<AppflareSchedulerConfig, "queue">;
75
+ realtime: Required<Pick<AppflareRealtimeConfig, "enabled" | "binding" | "className" | "objectName" | "subscribePath" | "websocketPath" | "protocol">>;
76
+ };
77
+ type LoadedAppflareConfig = {
78
+ configPath: string;
79
+ configDir: string;
80
+ scanDirAbs: string;
81
+ outDirAbs: string;
82
+ wranglerOutDirAbs: string;
83
+ config: NormalizedAppflareConfig;
84
+ };
85
+
86
+ declare function loadConfig(configPathArg?: string): Promise<LoadedAppflareConfig>;
87
+
88
+ declare function generateArtifacts(loadedConfig: LoadedAppflareConfig): Promise<void>;
89
+
90
+ type ColumnType = "int" | "string" | "boolean" | "date";
91
+ type ColumnBuilderOptions = {
92
+ sqlName?: string;
93
+ length?: number;
94
+ };
95
+ type PrimaryKeyOptions = {
96
+ autoIncrement?: boolean;
97
+ };
98
+ type RelationOneOptions = {
99
+ referenceField?: string;
100
+ field?: string;
101
+ fkType?: ColumnType;
102
+ sqlName?: string;
103
+ notNull?: boolean;
104
+ };
105
+ type RelationManyOptions = {
106
+ referenceField?: string;
107
+ field?: string;
108
+ fkType?: ColumnType;
109
+ sqlName?: string;
110
+ notNull?: boolean;
111
+ };
112
+ type ColumnReference = {
113
+ table: string;
114
+ column: string;
115
+ };
116
+ type ColumnDefinition = {
117
+ kind: "column";
118
+ type: ColumnType;
119
+ sqlName?: string;
120
+ length?: number;
121
+ notNull?: boolean;
122
+ primaryKey?: boolean;
123
+ autoIncrement?: boolean;
124
+ unique?: true | {
125
+ name?: string;
126
+ };
127
+ index?: true | {
128
+ name?: string;
129
+ };
130
+ sqlDefault?: unknown;
131
+ runtimeDefaultFn?: () => unknown;
132
+ references?: ColumnReference;
133
+ };
134
+ type OneRelationDefinition = {
135
+ kind: "relation";
136
+ relation: "one";
137
+ targetTable: string;
138
+ field?: string;
139
+ referenceField?: string;
140
+ fkType?: ColumnType;
141
+ sqlName?: string;
142
+ notNull?: boolean;
143
+ };
144
+ type ManyRelationDefinition = {
145
+ kind: "relation";
146
+ relation: "many";
147
+ targetTable: string;
148
+ field?: string;
149
+ referenceField?: string;
150
+ fkType?: ColumnType;
151
+ sqlName?: string;
152
+ notNull?: boolean;
153
+ };
154
+ type RelationDefinition = OneRelationDefinition | ManyRelationDefinition;
155
+ type TableOptions = {
156
+ sqlName?: string;
157
+ };
158
+ type TableShape = Record<string, ColumnBuilder | RelationDefinition>;
159
+ type TableDefinition = {
160
+ kind: "table";
161
+ sqlName?: string;
162
+ columns: Record<string, ColumnDefinition>;
163
+ relations: Record<string, RelationDefinition>;
164
+ };
165
+ type SchemaDefinition = {
166
+ kind: "schema";
167
+ tables: Record<string, TableDefinition>;
168
+ };
169
+ declare class ColumnBuilder {
170
+ private definition;
171
+ constructor(typeOrDefinition: ColumnType | ColumnDefinition, options?: ColumnBuilderOptions);
172
+ private with;
173
+ sql(name: string): ColumnBuilder;
174
+ notNull(): ColumnBuilder;
175
+ primaryKey(options?: PrimaryKeyOptions): ColumnBuilder;
176
+ unique(name?: string): ColumnBuilder;
177
+ index(name?: string): ColumnBuilder;
178
+ default(value: unknown): ColumnBuilder;
179
+ defaultFn(fn: () => unknown): ColumnBuilder;
180
+ references(table: string, column?: string): ColumnBuilder;
181
+ toDefinition(): ColumnDefinition;
182
+ }
183
+ declare function table(shape: TableShape, options?: TableOptions): TableDefinition;
184
+ declare function schema(tables: Record<string, TableDefinition>): SchemaDefinition;
185
+ declare function isSchemaDefinition(value: unknown): value is SchemaDefinition;
186
+ declare const v: {
187
+ int: (options?: ColumnBuilderOptions) => ColumnBuilder;
188
+ string: (options?: ColumnBuilderOptions) => ColumnBuilder;
189
+ boolean: (options?: ColumnBuilderOptions) => ColumnBuilder;
190
+ date: (options?: ColumnBuilderOptions) => ColumnBuilder;
191
+ one: (targetTable: string, fieldOrOptions?: string | RelationOneOptions, options?: RelationOneOptions) => OneRelationDefinition;
192
+ many: (targetTable: string, fieldOrOptions?: string | RelationManyOptions, options?: RelationManyOptions) => ManyRelationDefinition;
193
+ };
194
+
195
+ export { type AppflareConfig, type AppflareDatabaseBinding, type AppflareKVNamespace, type AppflareR2Bucket, type ColumnDefinition, type LoadedAppflareConfig, type NormalizedAppflareConfig, type RelationDefinition, type SchemaDefinition, type TableDefinition, generateArtifacts, isSchemaDefinition, loadConfig, schema, table, v };
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';var chunkDZUS277V_js=require('./chunk-DZUS277V.js');Object.defineProperty(exports,"generateArtifacts",{enumerable:true,get:function(){return chunkDZUS277V_js.f}});Object.defineProperty(exports,"isSchemaDefinition",{enumerable:true,get:function(){return chunkDZUS277V_js.d}});Object.defineProperty(exports,"loadConfig",{enumerable:true,get:function(){return chunkDZUS277V_js.a}});Object.defineProperty(exports,"schema",{enumerable:true,get:function(){return chunkDZUS277V_js.c}});Object.defineProperty(exports,"table",{enumerable:true,get:function(){return chunkDZUS277V_js.b}});Object.defineProperty(exports,"v",{enumerable:true,get:function(){return chunkDZUS277V_js.e}});
package/dist/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export{f as generateArtifacts,d as isSchemaDefinition,a as loadConfig,c as schema,b as table,e as v}from'./chunk-RZSN246U.mjs';
@@ -0,0 +1,143 @@
1
+ import { QueryKey, UseQueryOptions, UseQueryResult, InfiniteData, UseInfiniteQueryOptions, UseInfiniteQueryResult, UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
2
+
3
+ type AppflareRequestErrorLike$2 = {
4
+ message: string;
5
+ status?: number;
6
+ };
7
+ type AppflareRequestResultLike$2<TData> = {
8
+ data: TData | null;
9
+ error: AppflareRequestErrorLike$2 | null;
10
+ };
11
+ type AppflareRealtimeSubscriptionLike$1 = {
12
+ remove: () => void;
13
+ };
14
+ type AppflareRealtimeQueryUpdateLike$1<TData> = {
15
+ event: "query:update";
16
+ payload: {
17
+ queryName: string;
18
+ signature: string;
19
+ data: TData;
20
+ };
21
+ };
22
+ type AppflareRequiredInputKeys$2<TInput extends Record<string, unknown>> = {
23
+ [K in keyof TInput]-?: undefined extends TInput[K] ? never : K;
24
+ }[keyof TInput];
25
+ type AppflareHasRequiredInputKeys$2<TInput extends Record<string, unknown>> = [
26
+ AppflareRequiredInputKeys$2<TInput>
27
+ ] extends [never] ? false : true;
28
+ type AppflareRouteRunArgs$2<TInput extends Record<string, unknown>> = AppflareHasRequiredInputKeys$2<TInput> extends true ? [args: TInput, options?: any] : [args?: TInput, options?: any];
29
+ type AppflareQueryLike$1<TArgs extends Record<string, unknown>, TData> = {
30
+ run: (...params: AppflareRouteRunArgs$2<TArgs>) => Promise<AppflareRequestResultLike$2<TData>>;
31
+ subscribe?: (options: {
32
+ args?: TArgs;
33
+ authToken?: string;
34
+ requestOptions?: any;
35
+ signal?: AbortSignal;
36
+ onChange: (data: TData, update: AppflareRealtimeQueryUpdateLike$1<TData>) => void;
37
+ onError?: (error: unknown) => void;
38
+ }) => AppflareRealtimeSubscriptionLike$1;
39
+ };
40
+ type UseAppflareQueryOptions<TArgs extends Record<string, unknown>, TData, TSelected = TData, TKey extends QueryKey = QueryKey> = {
41
+ realtime?: {
42
+ enabled?: boolean;
43
+ authToken?: string;
44
+ requestOptions?: any;
45
+ onChange?: (data: TData, update: AppflareRealtimeQueryUpdateLike$1<TData>) => void;
46
+ onError?: (error: unknown) => void;
47
+ };
48
+ requestOptions?: any;
49
+ queryOptions?: Omit<UseQueryOptions<TData, Error, TSelected, TKey>, "queryFn" | "queryKey"> & {
50
+ queryKey?: TKey;
51
+ };
52
+ };
53
+ type UseQueryCallParams<TArgs extends Record<string, unknown>, TData, TSelected, TKey extends QueryKey> = AppflareHasRequiredInputKeys$2<TArgs> extends true ? [
54
+ args: TArgs,
55
+ options?: UseAppflareQueryOptions<TArgs, TData, TSelected, TKey>
56
+ ] : [
57
+ args?: TArgs,
58
+ options?: UseAppflareQueryOptions<TArgs, TData, TSelected, TKey>
59
+ ];
60
+ declare function useQuery<TArgs extends Record<string, unknown>, TData, TSelected = TData, TKey extends QueryKey = QueryKey>(query: AppflareQueryLike$1<TArgs, TData>, ...params: UseQueryCallParams<TArgs, TData, TSelected, TKey>): UseQueryResult<TSelected, Error>;
61
+
62
+ type AppflareRequestErrorLike$1 = {
63
+ message: string;
64
+ status?: number;
65
+ };
66
+ type AppflareRequestResultLike$1<TData> = {
67
+ data: TData | null;
68
+ error: AppflareRequestErrorLike$1 | null;
69
+ };
70
+ type AppflareRealtimeSubscriptionLike = {
71
+ remove: () => void;
72
+ };
73
+ type AppflareRealtimeQueryUpdateLike<TData> = {
74
+ event: "query:update";
75
+ payload: {
76
+ queryName: string;
77
+ signature: string;
78
+ data: TData;
79
+ };
80
+ };
81
+ type AppflareRequiredInputKeys$1<TInput extends Record<string, unknown>> = {
82
+ [K in keyof TInput]-?: undefined extends TInput[K] ? never : K;
83
+ }[keyof TInput];
84
+ type AppflareHasRequiredInputKeys$1<TInput extends Record<string, unknown>> = [
85
+ AppflareRequiredInputKeys$1<TInput>
86
+ ] extends [never] ? false : true;
87
+ type AppflareRouteRunArgs$1<TInput extends Record<string, unknown>> = AppflareHasRequiredInputKeys$1<TInput> extends true ? [args: TInput, options?: any] : [args?: TInput, options?: any];
88
+ type AppflareQueryLike<TArgs extends Record<string, unknown>, TData> = {
89
+ run: (...params: AppflareRouteRunArgs$1<TArgs>) => Promise<AppflareRequestResultLike$1<TData>>;
90
+ subscribe?: (options: {
91
+ args?: TArgs;
92
+ authToken?: string;
93
+ requestOptions?: any;
94
+ signal?: AbortSignal;
95
+ onChange: (data: TData, update: AppflareRealtimeQueryUpdateLike<TData>) => void;
96
+ onError?: (error: unknown) => void;
97
+ }) => AppflareRealtimeSubscriptionLike;
98
+ };
99
+ type UseAppflareInfiniteQueryOptions<TArgs extends Record<string, unknown>, TData, TPageParam, TSelected = InfiniteData<TData, TPageParam>, TKey extends QueryKey = QueryKey> = {
100
+ realtime?: {
101
+ enabled?: boolean;
102
+ authToken?: string;
103
+ requestOptions?: any;
104
+ onChange?: (data: TData, update: AppflareRealtimeQueryUpdateLike<TData>) => void;
105
+ onError?: (error: unknown) => void;
106
+ };
107
+ requestOptions?: any;
108
+ pageParamToArgs?: (baseArgs: TArgs, pageParam: TPageParam) => TArgs;
109
+ queryOptions?: Omit<UseInfiniteQueryOptions<TData, Error, TSelected, TKey, TPageParam>, "queryFn" | "queryKey"> & {
110
+ queryKey?: TKey;
111
+ };
112
+ };
113
+ type UseInfiniteQueryCallParams<TArgs extends Record<string, unknown>, TData, TPageParam, TSelected, TKey extends QueryKey> = AppflareHasRequiredInputKeys$1<TArgs> extends true ? [
114
+ args: TArgs,
115
+ options?: UseAppflareInfiniteQueryOptions<TArgs, TData, TPageParam, TSelected, TKey>
116
+ ] : [
117
+ args?: TArgs,
118
+ options?: UseAppflareInfiniteQueryOptions<TArgs, TData, TPageParam, TSelected, TKey>
119
+ ];
120
+ declare function useInfiniteQuery<TArgs extends Record<string, unknown>, TData, TPageParam = unknown, TSelected = InfiniteData<TData, TPageParam>, TKey extends QueryKey = QueryKey>(query: AppflareQueryLike<TArgs, TData>, ...params: UseInfiniteQueryCallParams<TArgs, TData, TPageParam, TSelected, TKey>): UseInfiniteQueryResult<TSelected, Error>;
121
+
122
+ type AppflareRequestErrorLike = {
123
+ message: string;
124
+ status?: number;
125
+ };
126
+ type AppflareRequestResultLike<TData> = {
127
+ data: TData | null;
128
+ error: AppflareRequestErrorLike | null;
129
+ };
130
+ type AppflareRequiredInputKeys<TInput extends Record<string, unknown>> = {
131
+ [K in keyof TInput]-?: undefined extends TInput[K] ? never : K;
132
+ }[keyof TInput];
133
+ type AppflareHasRequiredInputKeys<TInput extends Record<string, unknown>> = [
134
+ AppflareRequiredInputKeys<TInput>
135
+ ] extends [never] ? false : true;
136
+ type AppflareRouteRunArgs<TInput extends Record<string, unknown>> = AppflareHasRequiredInputKeys<TInput> extends true ? [args: TInput, options?: any] : [args?: TInput, options?: any];
137
+ type AppflareMutationVariables<TArgs extends Record<string, unknown>> = AppflareHasRequiredInputKeys<TArgs> extends true ? TArgs : TArgs | void;
138
+ type AppflareMutationLike<TArgs extends Record<string, unknown>, TData> = {
139
+ run: (...params: AppflareRouteRunArgs<TArgs>) => Promise<AppflareRequestResultLike<TData>>;
140
+ };
141
+ declare function useMutation<TArgs extends Record<string, unknown>, TData, TContext = unknown>(mutation: AppflareMutationLike<TArgs, TData>, mutationOptions?: Omit<UseMutationOptions<TData, Error, AppflareMutationVariables<TArgs>, TContext>, "mutationFn">): UseMutationResult<TData, Error, AppflareMutationVariables<TArgs>, TContext>;
142
+
143
+ export { type UseAppflareInfiniteQueryOptions, type UseAppflareQueryOptions, useInfiniteQuery, useMutation, useQuery };