appflare 0.2.4 → 0.2.7

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 (64) hide show
  1. package/cli/commands/index.ts +98 -4
  2. package/cli/generate.ts +8 -0
  3. package/cli/index.ts +32 -1
  4. package/cli/templates/auth/config.ts +0 -2
  5. package/cli/templates/core/handlers.route.ts +1 -0
  6. package/cli/templates/core/imports.ts +1 -0
  7. package/cli/templates/dashboard/builders/functions/execute-handler.ts +124 -0
  8. package/cli/templates/dashboard/builders/functions/index.ts +22 -0
  9. package/cli/templates/dashboard/builders/functions/render-page/header.ts +20 -0
  10. package/cli/templates/dashboard/builders/functions/render-page/index.ts +33 -0
  11. package/cli/templates/dashboard/builders/functions/render-page/request-panel.ts +67 -0
  12. package/cli/templates/dashboard/builders/functions/render-page/result-panel.ts +19 -0
  13. package/cli/templates/dashboard/builders/functions/render-page/scripts.ts +17 -0
  14. package/cli/templates/dashboard/builders/navigation.ts +122 -0
  15. package/cli/templates/dashboard/builders/storage/index.ts +13 -0
  16. package/cli/templates/dashboard/builders/storage/routes/create-directory-route.ts +29 -0
  17. package/cli/templates/dashboard/builders/storage/routes/delete-route.ts +18 -0
  18. package/cli/templates/dashboard/builders/storage/routes/download-route.ts +23 -0
  19. package/cli/templates/dashboard/builders/storage/routes/index.ts +22 -0
  20. package/cli/templates/dashboard/builders/storage/routes/list-route.ts +25 -0
  21. package/cli/templates/dashboard/builders/storage/routes/preview-route.ts +21 -0
  22. package/cli/templates/dashboard/builders/storage/routes/upload-route.ts +21 -0
  23. package/cli/templates/dashboard/builders/storage/runtime/helpers.ts +72 -0
  24. package/cli/templates/dashboard/builders/storage/runtime/storage-page.ts +130 -0
  25. package/cli/templates/dashboard/builders/table-routes/common/drawer-panel.ts +27 -0
  26. package/cli/templates/dashboard/builders/table-routes/common/pagination.ts +30 -0
  27. package/cli/templates/dashboard/builders/table-routes/common/search-bar.ts +23 -0
  28. package/cli/templates/dashboard/builders/table-routes/fragments.ts +214 -0
  29. package/cli/templates/dashboard/builders/table-routes/helpers.ts +49 -0
  30. package/cli/templates/dashboard/builders/table-routes/index.ts +8 -0
  31. package/cli/templates/dashboard/builders/table-routes/table/actions-cell.ts +71 -0
  32. package/cli/templates/dashboard/builders/table-routes/table/get-route.ts +166 -0
  33. package/cli/templates/dashboard/builders/table-routes/table/index.ts +77 -0
  34. package/cli/templates/dashboard/builders/table-routes/table/post-routes.ts +111 -0
  35. package/cli/templates/dashboard/builders/table-routes/table-route.ts +7 -0
  36. package/cli/templates/dashboard/builders/table-routes/users/get-route.ts +69 -0
  37. package/cli/templates/dashboard/builders/table-routes/users/html/modals.ts +57 -0
  38. package/cli/templates/dashboard/builders/table-routes/users/html/page.ts +27 -0
  39. package/cli/templates/dashboard/builders/table-routes/users/html/table.ts +127 -0
  40. package/cli/templates/dashboard/builders/table-routes/users/index.ts +32 -0
  41. package/cli/templates/dashboard/builders/table-routes/users/post-routes.ts +150 -0
  42. package/cli/templates/dashboard/builders/table-routes/users/redirect.ts +14 -0
  43. package/cli/templates/dashboard/builders/table-routes/users-route.ts +10 -0
  44. package/cli/templates/dashboard/components/dashboard-home.ts +23 -0
  45. package/cli/templates/dashboard/components/layout.ts +388 -0
  46. package/cli/templates/dashboard/components/login-page.ts +65 -0
  47. package/cli/templates/dashboard/index.ts +61 -0
  48. package/cli/templates/dashboard/types.ts +9 -0
  49. package/cli/templates/handlers/generators/registration/modules/realtime/durable-object.ts +1 -1
  50. package/cli/templates/handlers/generators/types/core.ts +5 -0
  51. package/cli/templates/handlers/generators/types/query-definitions/filter-and-where-types.ts +168 -0
  52. package/cli/templates/handlers/generators/types/query-definitions/query-api-types.ts +133 -0
  53. package/cli/templates/handlers/generators/types/query-definitions/query-helper-functions.ts +686 -0
  54. package/cli/templates/handlers/generators/types/query-definitions/schema-and-table-types.ts +97 -0
  55. package/cli/templates/handlers/generators/types/query-definitions.ts +11 -1083
  56. package/cli/templates/handlers/generators/types/query-runtime/handled-error.ts +13 -0
  57. package/cli/templates/handlers/generators/types/query-runtime/runtime-aggregate-and-footer.ts +164 -0
  58. package/cli/templates/handlers/generators/types/query-runtime/runtime-read.ts +85 -0
  59. package/cli/templates/handlers/generators/types/query-runtime/runtime-setup.ts +45 -0
  60. package/cli/templates/handlers/generators/types/query-runtime/runtime-write.ts +137 -0
  61. package/cli/templates/handlers/generators/types/query-runtime.ts +13 -431
  62. package/cli/utils/schema-discovery.ts +10 -1
  63. package/package.json +1 -1
  64. package/test-better-auth-hash.ts +2 -0
@@ -0,0 +1,168 @@
1
+ export function generateFilterAndWhereTypesSection(): string {
2
+ return `type Primitive = string | number | boolean | Date;
3
+ type NonNil<T> = Exclude<T, null | undefined>;
4
+ type Friendly<T> = T extends Date ? Date | number : T;
5
+ type Comparable<T> = Friendly<Extract<NonNil<T>, Primitive>>;
6
+ type RegexOperand<T> = T extends string ? string : never;
7
+
8
+ type GeoPoint = {
9
+ latitude: number;
10
+ longitude: number;
11
+ };
12
+
13
+ type GeoCoordinates = {
14
+ type?: "Point";
15
+ coordinates: [number, number] | readonly [number, number];
16
+ };
17
+
18
+ type GeoWithinOperand = {
19
+ $geometry: GeoPoint | GeoCoordinates;
20
+ latitudeField?: string;
21
+ longitudeField?: string;
22
+ $minDistance?: number;
23
+ $maxDistance?: number;
24
+ gt?: number;
25
+ gte?: number;
26
+ lt?: number;
27
+ lte?: number;
28
+ $gt?: number;
29
+ $gte?: number;
30
+ $lt?: number;
31
+ $lte?: number;
32
+ };
33
+
34
+ type GeoWithinOperandForField<TFieldKey extends string> = Omit<
35
+ GeoWithinOperand,
36
+ "latitudeField" | "longitudeField"
37
+ > & {
38
+ latitudeField?: TFieldKey;
39
+ longitudeField?: TFieldKey;
40
+ };
41
+
42
+ type FieldOperators<T, TFieldKey extends string = string> = {
43
+ eq?: Friendly<NonNil<T>>;
44
+ $eq?: Friendly<NonNil<T>>;
45
+ ne?: Friendly<NonNil<T>>;
46
+ $ne?: Friendly<NonNil<T>>;
47
+ in?: ReadonlyArray<Friendly<NonNil<T>>>;
48
+ $in?: ReadonlyArray<Friendly<NonNil<T>>>;
49
+ nin?: ReadonlyArray<Friendly<NonNil<T>>>;
50
+ $nin?: ReadonlyArray<Friendly<NonNil<T>>>;
51
+ gt?: Comparable<T>;
52
+ $gt?: Comparable<T>;
53
+ gte?: Comparable<T>;
54
+ $gte?: Comparable<T>;
55
+ lt?: Comparable<T>;
56
+ $lt?: Comparable<T>;
57
+ lte?: Comparable<T>;
58
+ $lte?: Comparable<T>;
59
+ exists?: boolean;
60
+ regex?: RegexOperand<T>;
61
+ $options?: string;
62
+ geoWithin?: GeoWithinOperandForField<TFieldKey>;
63
+ };
64
+
65
+ type WhereFieldValue<T, TFieldKey extends string> =
66
+ | Friendly<NonNil<T>>
67
+ | FieldOperators<T, TFieldKey>;
68
+
69
+ export type WhereInput<TModel extends Record<string, unknown>> = {
70
+ [K in keyof TModel]?: WhereFieldValue<
71
+ TModel[K],
72
+ Extract<keyof TModel, string>
73
+ >;
74
+ } & {
75
+ geoWithin?: GeoWithinOperandForField<Extract<keyof TModel, string>>;
76
+ $geoWithin?: GeoWithinOperandForField<Extract<keyof TModel, string>>;
77
+ };
78
+
79
+ type ColumnData<TColumn> = TColumn extends { _: { data: infer TData } }
80
+ ? TData
81
+ : unknown;
82
+
83
+ type InferRelationWhereFields<TConfig> = TConfig extends { where?: infer TWhere }
84
+ ? TWhere extends (...args: infer TArgs) => unknown
85
+ ? TArgs extends [infer TFields, ...unknown[]]
86
+ ? TFields extends Record<string, unknown>
87
+ ? TFields
88
+ : never
89
+ : never
90
+ : never
91
+ : never;
92
+
93
+ type RelationModelFromConfig<TConfig extends Record<string, unknown>> =
94
+ InferRelationWhereFields<TConfig> extends infer TFields
95
+ ? TFields extends Record<string, unknown>
96
+ ? {
97
+ [K in Extract<keyof TFields, string>]: ColumnData<TFields[K]>;
98
+ }
99
+ : Record<string, unknown>
100
+ : Record<string, unknown>;
101
+
102
+ type NumericModelFieldKey<TModel extends Record<string, unknown>> = Extract<
103
+ {
104
+ [K in keyof TModel]-?: NonNullable<TModel[K]> extends number ? K : never;
105
+ }[keyof TModel],
106
+ string
107
+ >;
108
+
109
+ type RelationAvgSelectionInput<TModel extends Record<string, unknown>> =
110
+ Partial<Record<NumericModelFieldKey<TModel>, boolean>>;
111
+
112
+ type RelationAggregateSelectionInput<TModel extends Record<string, unknown>> = {
113
+ _count?: boolean;
114
+ _avg?: RelationAvgSelectionInput<TModel>;
115
+ };
116
+
117
+ type QueryWithRelationInput<TEntry> =
118
+ | (Extract<TEntry, true> extends never ? never : true)
119
+ | (Extract<TEntry, Record<string, unknown>> extends infer TRelation
120
+ ? TRelation extends Record<string, unknown>
121
+ ? Omit<TRelation, "where" | "with" | "_count" | "_avg"> &
122
+ RelationAggregateSelectionInput<RelationModelFromConfig<TRelation>> & {
123
+ where?: WhereInput<RelationModelFromConfig<TRelation>>;
124
+ with?: TRelation extends { with?: infer TNestedWith }
125
+ ? QueryWithInput<TNestedWith>
126
+ : never;
127
+ }
128
+ : never
129
+ : never);
130
+
131
+ type QueryWithInput<TWith> = TWith extends Record<string, unknown>
132
+ ? {
133
+ [K in keyof TWith]?: QueryWithRelationInput<TWith[K]>;
134
+ }
135
+ : TWith;
136
+
137
+ export type QueryFindManyArgs<TName extends TableName> = Omit<
138
+ NonNullable<TableFindManyArgs<TName>>,
139
+ "where" | "with"
140
+ > & {
141
+ where?: WhereInput<TableModel<TName>>;
142
+ with?: QueryWithInput<NativeFindManyWith<TName>>;
143
+ };
144
+
145
+ export type QueryFindFirstArgs<TName extends TableName> = Omit<
146
+ NonNullable<TableFindFirstArgs<TName>>,
147
+ "where" | "with"
148
+ > & {
149
+ where?: WhereInput<TableModel<TName>>;
150
+ with?: QueryWithInput<NativeFindFirstWith<TName>>;
151
+ };
152
+
153
+ export type QueryInsertArgs<TName extends TableName> = {
154
+ values: TableInsertModel<TName> | Array<TableInsertModel<TName>>;
155
+ };
156
+
157
+ export type QueryUpdateArgs<TName extends TableName> = {
158
+ set: Partial<TableInsertModel<TName>>;
159
+ where?: WhereInput<TableModel<TName>>;
160
+ limit?: number;
161
+ };
162
+
163
+ export type QueryDeleteArgs<TName extends TableName> = {
164
+ where?: WhereInput<TableModel<TName>>;
165
+ limit?: number;
166
+ };
167
+ `;
168
+ }
@@ -0,0 +1,133 @@
1
+ export function generateQueryApiTypesSection(): string {
2
+ return `type AggregateWithInput<TName extends TableName> =
3
+ QueryWithInput<NativeFindManyWith<TName>>;
4
+
5
+ type NumericFieldKey<TName extends TableName> = NumericModelFieldKey<
6
+ TableModel<TName>
7
+ >;
8
+
9
+ type RelationAggregateAvgResult<TAvg> = TAvg extends Record<string, unknown>
10
+ ? {
11
+ [K in Extract<keyof TAvg, string> as TAvg[K] extends true ? K : never]: number;
12
+ }
13
+ : {};
14
+
15
+ type RelationAggregateResult<TEntry> =
16
+ Extract<TEntry, Record<string, unknown>> extends infer TRelation
17
+ ? TRelation extends Record<string, unknown>
18
+ ? (TRelation extends { _count?: true } ? { count: number } : {}) &
19
+ (TRelation extends { _avg?: infer TAvg }
20
+ ? { avg: RelationAggregateAvgResult<TAvg> }
21
+ : {})
22
+ : {}
23
+ : {};
24
+
25
+ type HasRelationAggregateRequest<TEntry> =
26
+ Extract<TEntry, Record<string, unknown>> extends infer TRelation
27
+ ? TRelation extends Record<string, unknown>
28
+ ? TRelation extends { _count?: true }
29
+ ? true
30
+ : TRelation extends { _avg?: Record<string, unknown> }
31
+ ? true
32
+ : false
33
+ : false
34
+ : false;
35
+
36
+ type QueryWithAggregateResult<TWith> = TWith extends Record<string, unknown>
37
+ ? {
38
+ [K in Extract<keyof TWith, string> as HasRelationAggregateRequest<
39
+ TWith[K]
40
+ > extends true
41
+ ? \`\${K}Aggregate\`
42
+ : never]: RelationAggregateResult<TWith[K]>;
43
+ }
44
+ : {};
45
+
46
+ type WithFromArgs<TArgs> = TArgs extends { with?: infer TWith }
47
+ ? TWith
48
+ : undefined;
49
+
50
+ type AppendRelationAggregatesToRow<TRow, TWith> = TRow &
51
+ QueryWithAggregateResult<TWith>;
52
+
53
+ type ApplyFindManyWithAggregateResult<TResult, TArgs> =
54
+ TResult extends Promise<infer TRows>
55
+ ? TRows extends Array<infer TRow>
56
+ ? Promise<
57
+ Array<AppendRelationAggregatesToRow<TRow, WithFromArgs<TArgs>>>
58
+ >
59
+ : TResult
60
+ : TResult;
61
+
62
+ type ApplyFindFirstWithAggregateResult<TResult, TArgs> =
63
+ TResult extends Promise<infer TRow>
64
+ ? Promise<
65
+ TRow extends null
66
+ ? null
67
+ : AppendRelationAggregatesToRow<TRow, WithFromArgs<TArgs>>
68
+ >
69
+ : TResult;
70
+
71
+ export type QueryCountArgs<TName extends TableName> = {
72
+ where?: WhereInput<TableModel<TName>>;
73
+ field?: Extract<keyof TableModel<TName>, string> | string;
74
+ distinct?: boolean;
75
+ with?: AggregateWithInput<TName>;
76
+ };
77
+
78
+ export type QueryAvgArgs<TName extends TableName> = {
79
+ where?: WhereInput<TableModel<TName>>;
80
+ field: NumericFieldKey<TName> | string;
81
+ distinct?: boolean;
82
+ with?: AggregateWithInput<TName>;
83
+ };
84
+
85
+ export type QueryUpsertArgs<TName extends TableName> = {
86
+ values: TableInsertModel<TName> | Array<TableInsertModel<TName>>;
87
+ target?:
88
+ | Extract<keyof TableInsertModel<TName>, string>
89
+ | Array<Extract<keyof TableInsertModel<TName>, string>>;
90
+ set?: Partial<TableInsertModel<TName>>;
91
+ };
92
+
93
+ export type QueryTableApi<TName extends TableName> = {
94
+ findMany: <
95
+ TArgs extends QueryFindManyArgs<TName> | undefined =
96
+ | QueryFindManyArgs<TName>
97
+ | undefined,
98
+ >(
99
+ args?: TArgs,
100
+ ) => ApplyFindManyWithAggregateResult<TableFindManyResult<TName, TArgs>, TArgs>;
101
+ findFirst: <
102
+ TArgs extends QueryFindFirstArgs<TName> | undefined =
103
+ | QueryFindFirstArgs<TName>
104
+ | undefined,
105
+ >(
106
+ args?: TArgs,
107
+ ) => ApplyFindFirstWithAggregateResult<TableFindFirstResult<TName, TArgs>, TArgs>;
108
+ insert: (args: QueryInsertArgs<TName>) => Promise<Array<TableModel<TName>>>;
109
+ update: (args: QueryUpdateArgs<TName>) => Promise<Array<TableModel<TName>>>;
110
+ upsert: (args: QueryUpsertArgs<TName>) => Promise<Array<TableModel<TName>>>;
111
+ delete: (args?: QueryDeleteArgs<TName>) => Promise<Array<TableModel<TName>>>;
112
+ count: (args?: QueryCountArgs<TName>) => Promise<number>;
113
+ avg: (args: QueryAvgArgs<TName>) => Promise<number | null>;
114
+ };
115
+
116
+ export type AppflareQueryDb = {
117
+ [TName in TableName]: QueryTableApi<TName>;
118
+ };
119
+
120
+ export type DbMutationKind = "insert" | "update" | "upsert" | "delete";
121
+
122
+ export type DbMutationEvent = {
123
+ kind: DbMutationKind;
124
+ table: string;
125
+ args: Record<string, unknown>;
126
+ rows: unknown[];
127
+ };
128
+
129
+ export type QueryDbOptions = {
130
+ onMutation?: (event: DbMutationEvent) => void;
131
+ };
132
+ `;
133
+ }