appflare 0.2.41 → 0.2.43

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 (145) hide show
  1. package/Documentation.md +898 -758
  2. package/cli/commands/index.ts +247 -247
  3. package/cli/generate.ts +360 -360
  4. package/cli/index.ts +120 -120
  5. package/cli/load-config.ts +184 -184
  6. package/cli/schema-compiler.ts +1363 -1361
  7. package/cli/templates/auth/README.md +156 -156
  8. package/cli/templates/auth/config.ts +61 -61
  9. package/cli/templates/auth/route-config.ts +1 -1
  10. package/cli/templates/auth/route-handler.ts +1 -1
  11. package/cli/templates/auth/route-request-utils.ts +5 -5
  12. package/cli/templates/auth/route.config.ts +18 -18
  13. package/cli/templates/auth/route.handler.ts +18 -18
  14. package/cli/templates/auth/route.request-utils.ts +55 -55
  15. package/cli/templates/auth/route.ts +14 -14
  16. package/cli/templates/core/README.md +266 -266
  17. package/cli/templates/core/app-creation.ts +19 -19
  18. package/cli/templates/core/client/appflare.ts +112 -112
  19. package/cli/templates/core/client/handlers/index.ts +763 -755
  20. package/cli/templates/core/client/handlers.ts +1 -1
  21. package/cli/templates/core/client/index.ts +7 -7
  22. package/cli/templates/core/client/storage.ts +195 -195
  23. package/cli/templates/core/client/types.ts +187 -186
  24. package/cli/templates/core/client-modules/appflare.ts +1 -1
  25. package/cli/templates/core/client-modules/handlers.ts +1 -1
  26. package/cli/templates/core/client-modules/index.ts +1 -1
  27. package/cli/templates/core/client-modules/storage.ts +1 -1
  28. package/cli/templates/core/client-modules/types.ts +1 -1
  29. package/cli/templates/core/client.artifacts.ts +39 -39
  30. package/cli/templates/core/client.ts +4 -4
  31. package/cli/templates/core/drizzle.ts +15 -15
  32. package/cli/templates/core/export.ts +14 -14
  33. package/cli/templates/core/handlers.route.ts +24 -24
  34. package/cli/templates/core/handlers.ts +1 -1
  35. package/cli/templates/core/imports.ts +9 -9
  36. package/cli/templates/core/server.ts +38 -38
  37. package/cli/templates/core/types.ts +6 -6
  38. package/cli/templates/core/wrangler.ts +109 -109
  39. package/cli/templates/dashboard/builders/functions/index.ts +17 -17
  40. package/cli/templates/dashboard/builders/functions/render-page/header.ts +20 -20
  41. package/cli/templates/dashboard/builders/functions/render-page/index.ts +33 -33
  42. package/cli/templates/dashboard/builders/functions/render-page/request-panel.ts +171 -171
  43. package/cli/templates/dashboard/builders/functions/render-page/result-panel.ts +85 -85
  44. package/cli/templates/dashboard/builders/functions/render-page/scripts.ts +554 -554
  45. package/cli/templates/dashboard/builders/functions/tree-builder.ts +47 -47
  46. package/cli/templates/dashboard/builders/navigation.ts +155 -155
  47. package/cli/templates/dashboard/builders/storage/index.ts +13 -13
  48. package/cli/templates/dashboard/builders/storage/routes/create-directory-route.ts +29 -29
  49. package/cli/templates/dashboard/builders/storage/routes/delete-route.ts +18 -18
  50. package/cli/templates/dashboard/builders/storage/routes/download-route.ts +23 -23
  51. package/cli/templates/dashboard/builders/storage/routes/index.ts +22 -22
  52. package/cli/templates/dashboard/builders/storage/routes/list-route.ts +25 -25
  53. package/cli/templates/dashboard/builders/storage/routes/preview-route.ts +21 -21
  54. package/cli/templates/dashboard/builders/storage/routes/upload-route.ts +21 -21
  55. package/cli/templates/dashboard/builders/storage/runtime/helpers.ts +72 -72
  56. package/cli/templates/dashboard/builders/storage/runtime/storage-page.ts +130 -130
  57. package/cli/templates/dashboard/builders/table-routes/common/drawer-panel.ts +27 -27
  58. package/cli/templates/dashboard/builders/table-routes/common/pagination.ts +30 -30
  59. package/cli/templates/dashboard/builders/table-routes/common/search-bar.ts +23 -23
  60. package/cli/templates/dashboard/builders/table-routes/fragments.ts +217 -217
  61. package/cli/templates/dashboard/builders/table-routes/helpers.ts +45 -45
  62. package/cli/templates/dashboard/builders/table-routes/index.ts +8 -8
  63. package/cli/templates/dashboard/builders/table-routes/table/actions-cell.ts +71 -71
  64. package/cli/templates/dashboard/builders/table-routes/table/get-route.ts +291 -291
  65. package/cli/templates/dashboard/builders/table-routes/table/index.ts +80 -80
  66. package/cli/templates/dashboard/builders/table-routes/table/post-routes.ts +163 -163
  67. package/cli/templates/dashboard/builders/table-routes/table-route.ts +7 -7
  68. package/cli/templates/dashboard/builders/table-routes/users/get-route.ts +69 -69
  69. package/cli/templates/dashboard/builders/table-routes/users/html/modals.ts +57 -57
  70. package/cli/templates/dashboard/builders/table-routes/users/html/page.ts +27 -27
  71. package/cli/templates/dashboard/builders/table-routes/users/html/table.ts +128 -128
  72. package/cli/templates/dashboard/builders/table-routes/users/index.ts +32 -32
  73. package/cli/templates/dashboard/builders/table-routes/users/post-routes.ts +150 -150
  74. package/cli/templates/dashboard/builders/table-routes/users/redirect.ts +14 -14
  75. package/cli/templates/dashboard/builders/table-routes/users-route.ts +10 -10
  76. package/cli/templates/dashboard/components/dashboard-home.ts +23 -23
  77. package/cli/templates/dashboard/components/layout.ts +420 -420
  78. package/cli/templates/dashboard/components/login-page.ts +65 -65
  79. package/cli/templates/dashboard/index.ts +61 -61
  80. package/cli/templates/dashboard/types.ts +9 -9
  81. package/cli/templates/handlers/README.md +353 -353
  82. package/cli/templates/handlers/auth.ts +37 -37
  83. package/cli/templates/handlers/execution.ts +42 -42
  84. package/cli/templates/handlers/generators/context/context-creation.ts +101 -101
  85. package/cli/templates/handlers/generators/context/error-helpers.ts +11 -11
  86. package/cli/templates/handlers/generators/context/scheduler.ts +24 -24
  87. package/cli/templates/handlers/generators/context/storage-api.ts +82 -82
  88. package/cli/templates/handlers/generators/context/storage-helpers.ts +59 -59
  89. package/cli/templates/handlers/generators/context/types.ts +40 -40
  90. package/cli/templates/handlers/generators/context.ts +43 -43
  91. package/cli/templates/handlers/generators/execution.ts +15 -15
  92. package/cli/templates/handlers/generators/handlers.ts +14 -14
  93. package/cli/templates/handlers/generators/registration/modules/cron.ts +26 -26
  94. package/cli/templates/handlers/generators/registration/modules/realtime/auth.ts +75 -75
  95. package/cli/templates/handlers/generators/registration/modules/realtime/durable-object.ts +144 -144
  96. package/cli/templates/handlers/generators/registration/modules/realtime/index.ts +14 -14
  97. package/cli/templates/handlers/generators/registration/modules/realtime/publisher.ts +102 -102
  98. package/cli/templates/handlers/generators/registration/modules/realtime/routes.ts +164 -164
  99. package/cli/templates/handlers/generators/registration/modules/realtime/types.ts +30 -30
  100. package/cli/templates/handlers/generators/registration/modules/realtime/utils.ts +510 -510
  101. package/cli/templates/handlers/generators/registration/modules/scheduler.ts +56 -56
  102. package/cli/templates/handlers/generators/registration/modules/storage.ts +199 -199
  103. package/cli/templates/handlers/generators/registration/sections.ts +210 -210
  104. package/cli/templates/handlers/generators/types/context.ts +121 -121
  105. package/cli/templates/handlers/generators/types/core.ts +106 -106
  106. package/cli/templates/handlers/generators/types/operations.ts +135 -135
  107. package/cli/templates/handlers/generators/types/query-definitions/filter-and-where-types.ts +291 -271
  108. package/cli/templates/handlers/generators/types/query-definitions/query-api-types.ts +135 -135
  109. package/cli/templates/handlers/generators/types/query-definitions/query-helper-functions.ts +1382 -1382
  110. package/cli/templates/handlers/generators/types/query-definitions/schema-and-table-types.ts +278 -278
  111. package/cli/templates/handlers/generators/types/query-definitions.ts +13 -13
  112. package/cli/templates/handlers/generators/types/query-runtime/handled-error.ts +13 -13
  113. package/cli/templates/handlers/generators/types/query-runtime/runtime-aggregate-and-footer.ts +174 -174
  114. package/cli/templates/handlers/generators/types/query-runtime/runtime-read.ts +157 -157
  115. package/cli/templates/handlers/generators/types/query-runtime/runtime-setup.ts +45 -45
  116. package/cli/templates/handlers/generators/types/query-runtime/runtime-write.ts +958 -697
  117. package/cli/templates/handlers/generators/types/query-runtime.ts +15 -15
  118. package/cli/templates/handlers/index.ts +47 -47
  119. package/cli/templates/handlers/operations.ts +116 -116
  120. package/cli/templates/handlers/registration.ts +91 -91
  121. package/cli/templates/handlers/types.ts +17 -17
  122. package/cli/templates/handlers/utils.ts +48 -48
  123. package/cli/types.ts +110 -110
  124. package/cli/utils/handler-discovery.ts +466 -466
  125. package/cli/utils/json-utils.ts +24 -24
  126. package/cli/utils/path-utils.ts +19 -19
  127. package/cli/utils/schema-discovery.ts +399 -399
  128. package/dist/cli/index.js +320 -31
  129. package/dist/cli/index.mjs +320 -31
  130. package/dist/index.js +1 -1
  131. package/dist/index.mjs +1 -1
  132. package/dist/react/index.d.mts +2 -0
  133. package/dist/react/index.d.ts +2 -0
  134. package/dist/react/index.js +1 -1
  135. package/dist/react/index.mjs +1 -1
  136. package/index.ts +18 -18
  137. package/package.json +58 -58
  138. package/react/index.ts +5 -5
  139. package/react/use-infinite-query.ts +255 -252
  140. package/react/use-mutation.ts +89 -89
  141. package/react/use-query.ts +210 -207
  142. package/schema.ts +641 -641
  143. package/test-better-auth-hash.ts +2 -2
  144. package/tsconfig.json +6 -6
  145. package/tsup.config.ts +82 -82
@@ -1 +1 @@
1
- export { generateClientHandlersSource } from "./handlers/index";
1
+ export { generateClientHandlersSource } from "./handlers/index";
@@ -1,7 +1,7 @@
1
- export function generateClientIndexSource(): string {
2
- return `export * from "./types";
3
- export * from "./appflare";
4
- export * from "./storage";
5
- export * from "./handlers";
6
- `;
7
- }
1
+ export function generateClientIndexSource(): string {
2
+ return `export * from "./types";
3
+ export * from "./appflare";
4
+ export * from "./storage";
5
+ export * from "./handlers";
6
+ `;
7
+ }
@@ -1,195 +1,195 @@
1
- export function generateClientStorageSource(): string {
2
- return `import type { StorageClient, StorageSignedUrlResponse, StorageListResponse } from "./types";
3
-
4
- type AuthTokenResolver = (() => string | Promise<string>) | undefined;
5
-
6
- function toHeaderRecord(headers: HeadersInit | undefined): Record<string, string> {
7
- const result: Record<string, string> = {};
8
- if (!headers) {
9
- return result;
10
- }
11
-
12
- if (Array.isArray(headers)) {
13
- for (const entry of headers) {
14
- if (!Array.isArray(entry) || entry.length < 2) {
15
- continue;
16
- }
17
- result[String(entry[0])] = String(entry[1]);
18
- }
19
- return result;
20
- }
21
-
22
- if (typeof (headers as { forEach?: unknown }).forEach === "function") {
23
- (headers as Headers).forEach((value, key) => {
24
- result[key] = String(value);
25
- });
26
- return result;
27
- }
28
-
29
- for (const [key, value] of Object.entries(headers as Record<string, unknown>)) {
30
- result[key] = String(value ?? "");
31
- }
32
-
33
- return result;
34
- }
35
-
36
- function hasAuthorizationHeader(headers: Record<string, string>): boolean {
37
- for (const key of Object.keys(headers)) {
38
- if (key.toLowerCase() === "authorization") {
39
- return true;
40
- }
41
- }
42
-
43
- return false;
44
- }
45
-
46
- async function createAuthorizedHeaders(
47
- headers: HeadersInit | undefined,
48
- onGetAuthToken: AuthTokenResolver,
49
- ): Promise<HeadersInit | undefined> {
50
- const resolvedHeaders = toHeaderRecord(headers);
51
- if (onGetAuthToken) {
52
- const authToken = await onGetAuthToken();
53
- if (typeof authToken === "string" && authToken.trim().length > 0) {
54
- if (!hasAuthorizationHeader(resolvedHeaders)) {
55
- resolvedHeaders.authorization = \`Bearer \${authToken.trim()}\`;
56
- }
57
- }
58
- }
59
-
60
- return resolvedHeaders;
61
- }
62
-
63
- export function createStorageClient(
64
- endpoint: string,
65
- request: typeof fetch = fetch,
66
- onGetAuthToken?: () => string | Promise<string>,
67
- ): StorageClient {
68
- return {
69
- upload: async (args) => {
70
- let base64BodyToSend: string | undefined;
71
-
72
- if (args.body instanceof File) {
73
- const buffer = await args.body.arrayBuffer();
74
- const bytes = new Uint8Array(buffer);
75
- let binary = "";
76
- const chunkSize = 8192;
77
- for (let i = 0; i < bytes.length; i += chunkSize) {
78
- const chunk = bytes.subarray(i, i + chunkSize);
79
- binary += String.fromCharCode(...chunk);
80
- }
81
- base64BodyToSend = btoa(binary);
82
- } else if (typeof args.body === "string") {
83
- base64BodyToSend = btoa(args.body);
84
- }
85
-
86
- if (args.base64Body) {
87
- base64BodyToSend = args.base64Body;
88
- }
89
-
90
- const headers = await createAuthorizedHeaders(
91
- {
92
- "content-type": "application/json",
93
- },
94
- onGetAuthToken,
95
- );
96
-
97
- const response = await request(\`\${endpoint}/storage/upload\`, {
98
- method: "POST",
99
- headers,
100
- body: JSON.stringify({
101
- path: args.path,
102
- contentType: args.contentType,
103
- expiresIn: args.expiresIn,
104
- base64Body: base64BodyToSend,
105
- }),
106
- });
107
- if (!response.ok) {
108
- throw new Error(await response.text());
109
- }
110
-
111
- return (await response.json()) as StorageSignedUrlResponse;
112
- },
113
- download: async (args) => {
114
- const query = new URLSearchParams({
115
- path: args.path,
116
- ...(args.fileName ? { fileName: args.fileName } : {}),
117
- ...(typeof args.expiresIn === "number"
118
- ? { expiresIn: String(args.expiresIn) }
119
- : {}),
120
- });
121
- const response = await request(
122
- \`\${endpoint}/storage/download?\${query.toString()}\`,
123
- {
124
- headers: await createAuthorizedHeaders(undefined, onGetAuthToken),
125
- },
126
- );
127
- if (!response.ok) {
128
- throw new Error(await response.text());
129
- }
130
-
131
- return (await response.json()) as StorageSignedUrlResponse;
132
- },
133
- preview: (args) => {
134
- const query = new URLSearchParams({
135
- path: args.path,
136
- ...(typeof args.expiresIn === "number"
137
- ? { expiresIn: String(args.expiresIn) }
138
- : {}),
139
- });
140
- return \`\${endpoint}/storage/download?\${query.toString()}\`;
141
- },
142
- delete: async (args) => {
143
- const query = new URLSearchParams({
144
- path: args.path,
145
- });
146
- const response = await request(
147
- \`\${endpoint}/storage/object?\${query.toString()}\`,
148
- {
149
- method: "DELETE",
150
- headers: await createAuthorizedHeaders(undefined, onGetAuthToken),
151
- },
152
- );
153
- if (!response.ok) {
154
- throw new Error(await response.text());
155
- }
156
-
157
- return (await response.json()) as { ok: boolean; path: string };
158
- },
159
- list: async (args = {}) => {
160
- const query = new URLSearchParams();
161
- if (args.prefix) {
162
- query.set("prefix", args.prefix);
163
- }
164
- if (args.cursor) {
165
- query.set("cursor", args.cursor);
166
- }
167
- if (typeof args.limit === "number") {
168
- query.set("limit", String(args.limit));
169
- }
170
- if (args.delimiter) {
171
- query.set("delimiter", args.delimiter);
172
- }
173
- if (args.method) {
174
- query.set("method", args.method);
175
- }
176
-
177
- const querySuffix = query.toString();
178
- const response = await request(
179
- querySuffix.length > 0
180
- ? \`\${endpoint}/storage/list?\${querySuffix}\`
181
- : \`\${endpoint}/storage/list\`,
182
- {
183
- headers: await createAuthorizedHeaders(undefined, onGetAuthToken),
184
- },
185
- );
186
- if (!response.ok) {
187
- throw new Error(await response.text());
188
- }
189
-
190
- return (await response.json()) as StorageListResponse;
191
- },
192
- };
193
- }
194
- `;
195
- }
1
+ export function generateClientStorageSource(): string {
2
+ return `import type { StorageClient, StorageSignedUrlResponse, StorageListResponse } from "./types";
3
+
4
+ type AuthTokenResolver = (() => string | Promise<string>) | undefined;
5
+
6
+ function toHeaderRecord(headers: HeadersInit | undefined): Record<string, string> {
7
+ const result: Record<string, string> = {};
8
+ if (!headers) {
9
+ return result;
10
+ }
11
+
12
+ if (Array.isArray(headers)) {
13
+ for (const entry of headers) {
14
+ if (!Array.isArray(entry) || entry.length < 2) {
15
+ continue;
16
+ }
17
+ result[String(entry[0])] = String(entry[1]);
18
+ }
19
+ return result;
20
+ }
21
+
22
+ if (typeof (headers as { forEach?: unknown }).forEach === "function") {
23
+ (headers as Headers).forEach((value, key) => {
24
+ result[key] = String(value);
25
+ });
26
+ return result;
27
+ }
28
+
29
+ for (const [key, value] of Object.entries(headers as Record<string, unknown>)) {
30
+ result[key] = String(value ?? "");
31
+ }
32
+
33
+ return result;
34
+ }
35
+
36
+ function hasAuthorizationHeader(headers: Record<string, string>): boolean {
37
+ for (const key of Object.keys(headers)) {
38
+ if (key.toLowerCase() === "authorization") {
39
+ return true;
40
+ }
41
+ }
42
+
43
+ return false;
44
+ }
45
+
46
+ async function createAuthorizedHeaders(
47
+ headers: HeadersInit | undefined,
48
+ onGetAuthToken: AuthTokenResolver,
49
+ ): Promise<HeadersInit | undefined> {
50
+ const resolvedHeaders = toHeaderRecord(headers);
51
+ if (onGetAuthToken) {
52
+ const authToken = await onGetAuthToken();
53
+ if (typeof authToken === "string" && authToken.trim().length > 0) {
54
+ if (!hasAuthorizationHeader(resolvedHeaders)) {
55
+ resolvedHeaders.authorization = \`Bearer \${authToken.trim()}\`;
56
+ }
57
+ }
58
+ }
59
+
60
+ return resolvedHeaders;
61
+ }
62
+
63
+ export function createStorageClient(
64
+ endpoint: string,
65
+ request: typeof fetch = fetch,
66
+ onGetAuthToken?: () => string | Promise<string>,
67
+ ): StorageClient {
68
+ return {
69
+ upload: async (args) => {
70
+ let base64BodyToSend: string | undefined;
71
+
72
+ if (args.body instanceof File) {
73
+ const buffer = await args.body.arrayBuffer();
74
+ const bytes = new Uint8Array(buffer);
75
+ let binary = "";
76
+ const chunkSize = 8192;
77
+ for (let i = 0; i < bytes.length; i += chunkSize) {
78
+ const chunk = bytes.subarray(i, i + chunkSize);
79
+ binary += String.fromCharCode(...chunk);
80
+ }
81
+ base64BodyToSend = btoa(binary);
82
+ } else if (typeof args.body === "string") {
83
+ base64BodyToSend = btoa(args.body);
84
+ }
85
+
86
+ if (args.base64Body) {
87
+ base64BodyToSend = args.base64Body;
88
+ }
89
+
90
+ const headers = await createAuthorizedHeaders(
91
+ {
92
+ "content-type": "application/json",
93
+ },
94
+ onGetAuthToken,
95
+ );
96
+
97
+ const response = await request(\`\${endpoint}/storage/upload\`, {
98
+ method: "POST",
99
+ headers,
100
+ body: JSON.stringify({
101
+ path: args.path,
102
+ contentType: args.contentType,
103
+ expiresIn: args.expiresIn,
104
+ base64Body: base64BodyToSend,
105
+ }),
106
+ });
107
+ if (!response.ok) {
108
+ throw new Error(await response.text());
109
+ }
110
+
111
+ return (await response.json()) as StorageSignedUrlResponse;
112
+ },
113
+ download: async (args) => {
114
+ const query = new URLSearchParams({
115
+ path: args.path,
116
+ ...(args.fileName ? { fileName: args.fileName } : {}),
117
+ ...(typeof args.expiresIn === "number"
118
+ ? { expiresIn: String(args.expiresIn) }
119
+ : {}),
120
+ });
121
+ const response = await request(
122
+ \`\${endpoint}/storage/download?\${query.toString()}\`,
123
+ {
124
+ headers: await createAuthorizedHeaders(undefined, onGetAuthToken),
125
+ },
126
+ );
127
+ if (!response.ok) {
128
+ throw new Error(await response.text());
129
+ }
130
+
131
+ return (await response.json()) as StorageSignedUrlResponse;
132
+ },
133
+ preview: (args) => {
134
+ const query = new URLSearchParams({
135
+ path: args.path,
136
+ ...(typeof args.expiresIn === "number"
137
+ ? { expiresIn: String(args.expiresIn) }
138
+ : {}),
139
+ });
140
+ return \`\${endpoint}/storage/download?\${query.toString()}\`;
141
+ },
142
+ delete: async (args) => {
143
+ const query = new URLSearchParams({
144
+ path: args.path,
145
+ });
146
+ const response = await request(
147
+ \`\${endpoint}/storage/object?\${query.toString()}\`,
148
+ {
149
+ method: "DELETE",
150
+ headers: await createAuthorizedHeaders(undefined, onGetAuthToken),
151
+ },
152
+ );
153
+ if (!response.ok) {
154
+ throw new Error(await response.text());
155
+ }
156
+
157
+ return (await response.json()) as { ok: boolean; path: string };
158
+ },
159
+ list: async (args = {}) => {
160
+ const query = new URLSearchParams();
161
+ if (args.prefix) {
162
+ query.set("prefix", args.prefix);
163
+ }
164
+ if (args.cursor) {
165
+ query.set("cursor", args.cursor);
166
+ }
167
+ if (typeof args.limit === "number") {
168
+ query.set("limit", String(args.limit));
169
+ }
170
+ if (args.delimiter) {
171
+ query.set("delimiter", args.delimiter);
172
+ }
173
+ if (args.method) {
174
+ query.set("method", args.method);
175
+ }
176
+
177
+ const querySuffix = query.toString();
178
+ const response = await request(
179
+ querySuffix.length > 0
180
+ ? \`\${endpoint}/storage/list?\${querySuffix}\`
181
+ : \`\${endpoint}/storage/list\`,
182
+ {
183
+ headers: await createAuthorizedHeaders(undefined, onGetAuthToken),
184
+ },
185
+ );
186
+ if (!response.ok) {
187
+ throw new Error(await response.text());
188
+ }
189
+
190
+ return (await response.json()) as StorageListResponse;
191
+ },
192
+ };
193
+ }
194
+ `;
195
+ }