@aurabase/aurabase-js 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/package.json +4 -4
  2. package/packages/ai/node_modules/.bin/esbuild +0 -19
  3. package/packages/ai/node_modules/.bin/tsc +0 -22
  4. package/packages/ai/node_modules/.bin/tsserver +0 -22
  5. package/packages/ai/node_modules/.bin/tsup +0 -22
  6. package/packages/ai/node_modules/.bin/tsup-node +0 -22
  7. package/packages/ai/node_modules/.bin/vite +0 -22
  8. package/packages/ai/node_modules/.bin/vitest +0 -22
  9. package/packages/ai/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  10. package/packages/ai/src/AiService.ts +0 -226
  11. package/packages/ai/src/index.ts +0 -18
  12. package/packages/ai/src/sse.ts +0 -141
  13. package/packages/ai/src/types.ts +0 -30
  14. package/packages/ai/tests/chat-stream.test.ts +0 -151
  15. package/packages/ai/tests/rag-namespaces.test.ts +0 -54
  16. package/packages/ai/tests/sse.test.ts +0 -69
  17. package/packages/ai/tsconfig.json +0 -5
  18. package/packages/ai/tsup.config.ts +0 -11
  19. package/packages/aurabase/node_modules/.bin/esbuild +0 -19
  20. package/packages/aurabase/node_modules/.bin/tsc +0 -22
  21. package/packages/aurabase/node_modules/.bin/tsserver +0 -22
  22. package/packages/aurabase/node_modules/.bin/tsup +0 -22
  23. package/packages/aurabase/node_modules/.bin/tsup-node +0 -22
  24. package/packages/aurabase/node_modules/.bin/vite +0 -22
  25. package/packages/aurabase/node_modules/.bin/vitest +0 -22
  26. package/packages/aurabase/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  27. package/packages/aurabase/src/AuraClient.ts +0 -237
  28. package/packages/aurabase/src/index.ts +0 -152
  29. package/packages/aurabase/src/ssr.ts +0 -156
  30. package/packages/aurabase/tests/ai-streaming-rag-e2e.test.ts +0 -82
  31. package/packages/aurabase/tests/ai.test.ts +0 -111
  32. package/packages/aurabase/tests/auth-admin.test.ts +0 -515
  33. package/packages/aurabase/tests/auth-e2e.test.ts +0 -135
  34. package/packages/aurabase/tests/auth-hardening.test.ts +0 -206
  35. package/packages/aurabase/tests/auth.test.ts +0 -947
  36. package/packages/aurabase/tests/database.test.ts +0 -230
  37. package/packages/aurabase/tests/db-types-e2e.test.ts +0 -217
  38. package/packages/aurabase/tests/dispose.test.ts +0 -23
  39. package/packages/aurabase/tests/foreign-token.e2e.test.ts +0 -129
  40. package/packages/aurabase/tests/functions.test.ts +0 -107
  41. package/packages/aurabase/tests/integration.test.ts +0 -413
  42. package/packages/aurabase/tests/live-production-validation.js +0 -241
  43. package/packages/aurabase/tests/live-sdk-production-validation.js +0 -293
  44. package/packages/aurabase/tests/mocks.ts +0 -139
  45. package/packages/aurabase/tests/notifications.test.ts +0 -314
  46. package/packages/aurabase/tests/observability-backup.test.ts +0 -186
  47. package/packages/aurabase/tests/observability-hook.test.ts +0 -130
  48. package/packages/aurabase/tests/production-robustness.test.ts +0 -268
  49. package/packages/aurabase/tests/public-api-surface.test.ts +0 -53
  50. package/packages/aurabase/tests/query-builder.test.ts +0 -329
  51. package/packages/aurabase/tests/readme-smoke-e2e.test.ts +0 -231
  52. package/packages/aurabase/tests/realtime-filter-e2e.test.ts +0 -344
  53. package/packages/aurabase/tests/refresh-locks.test.ts +0 -210
  54. package/packages/aurabase/tests/retry-option.test.ts +0 -17
  55. package/packages/aurabase/tests/rpc-e2e.test.ts +0 -254
  56. package/packages/aurabase/tests/rs256-local-e2e.test.ts +0 -114
  57. package/packages/aurabase/tests/rt-alias-public-e2e.test.ts +0 -235
  58. package/packages/aurabase/tests/rt-http-broadcast-e2e.test.ts +0 -124
  59. package/packages/aurabase/tests/service-role-guard.test.ts +0 -99
  60. package/packages/aurabase/tests/ssr.test.ts +0 -91
  61. package/packages/aurabase/tests/storage-backend-e2e.test.ts +0 -481
  62. package/packages/aurabase/tests/storage-sdk-parity-e2e.test.ts +0 -104
  63. package/packages/aurabase/tests/storage-transform-e2e.test.ts +0 -684
  64. package/packages/aurabase/tests/storage.test.ts +0 -55
  65. package/packages/aurabase/tests/types/client-generic.test-d.ts +0 -79
  66. package/packages/aurabase/tests/types/docs-snippets.test-d.ts +0 -571
  67. package/packages/aurabase/tests/types/error-code.test-d.ts +0 -53
  68. package/packages/aurabase/tsconfig.json +0 -5
  69. package/packages/aurabase/tsconfig.test-d.json +0 -5
  70. package/packages/aurabase/tsup.config.ts +0 -11
  71. package/packages/aurabase/vitest.config.ts +0 -16
  72. package/packages/auth/node_modules/.bin/esbuild +0 -19
  73. package/packages/auth/node_modules/.bin/tsc +0 -22
  74. package/packages/auth/node_modules/.bin/tsserver +0 -22
  75. package/packages/auth/node_modules/.bin/tsup +0 -22
  76. package/packages/auth/node_modules/.bin/tsup-node +0 -22
  77. package/packages/auth/node_modules/.bin/vite +0 -22
  78. package/packages/auth/node_modules/.bin/vitest +0 -22
  79. package/packages/auth/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  80. package/packages/auth/src/AuthAdminService.ts +0 -149
  81. package/packages/auth/src/AuthService.ts +0 -1166
  82. package/packages/auth/src/SessionManager.ts +0 -92
  83. package/packages/auth/src/index.ts +0 -17
  84. package/packages/auth/src/jwks.ts +0 -337
  85. package/packages/auth/src/pkce.ts +0 -27
  86. package/packages/auth/src/types.ts +0 -89
  87. package/packages/auth/tests/auth-lifecycle.test.ts +0 -149
  88. package/packages/auth/tests/detect-session.test.ts +0 -361
  89. package/packages/auth/tests/getclaims.test.ts +0 -780
  90. package/packages/auth/tests/is-mfa-challenge.test.ts +0 -27
  91. package/packages/auth/tests/password-recovery.test.ts +0 -124
  92. package/packages/auth/tests/pkce.test.ts +0 -192
  93. package/packages/auth/tests/session-manager.test.ts +0 -103
  94. package/packages/auth/tests/set-session.test.ts +0 -139
  95. package/packages/auth/tests/verify-otp.test.ts +0 -153
  96. package/packages/auth/tsconfig.json +0 -5
  97. package/packages/auth/tsup.config.ts +0 -11
  98. package/packages/core/node_modules/.bin/esbuild +0 -22
  99. package/packages/core/node_modules/.bin/tsc +0 -22
  100. package/packages/core/node_modules/.bin/tsserver +0 -22
  101. package/packages/core/node_modules/.bin/tsup +0 -22
  102. package/packages/core/node_modules/.bin/tsup-node +0 -22
  103. package/packages/core/node_modules/.bin/vite +0 -22
  104. package/packages/core/node_modules/.bin/vitest +0 -22
  105. package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  106. package/packages/core/src/AuraError.ts +0 -89
  107. package/packages/core/src/BaseService.ts +0 -44
  108. package/packages/core/src/client.ts +0 -34
  109. package/packages/core/src/cookie-utils.ts +0 -42
  110. package/packages/core/src/fetch.ts +0 -435
  111. package/packages/core/src/index.ts +0 -22
  112. package/packages/core/src/retry.ts +0 -63
  113. package/packages/core/src/serialize.ts +0 -6
  114. package/packages/core/src/stores/BaseAuthStore.ts +0 -164
  115. package/packages/core/src/stores/LocalAuthStore.ts +0 -199
  116. package/packages/core/src/types.ts +0 -1042
  117. package/packages/core/tests/auth-store.test.ts +0 -300
  118. package/packages/core/tests/error-code.test.ts +0 -61
  119. package/packages/core/tests/error.test.ts +0 -24
  120. package/packages/core/tests/fetch.test.ts +0 -286
  121. package/packages/core/tests/mocks.ts +0 -139
  122. package/packages/core/tests/observability.test.ts +0 -86
  123. package/packages/core/tests/refresh-hardening.test.ts +0 -164
  124. package/packages/core/tests/refresh-observability.test.ts +0 -111
  125. package/packages/core/tests/retry.test.ts +0 -106
  126. package/packages/core/tests/serialize.test.ts +0 -12
  127. package/packages/core/tests/timeout.test.ts +0 -79
  128. package/packages/core/tsconfig.json +0 -5
  129. package/packages/core/tsup.config.ts +0 -11
  130. package/packages/db/node_modules/.bin/esbuild +0 -19
  131. package/packages/db/node_modules/.bin/tsc +0 -22
  132. package/packages/db/node_modules/.bin/tsserver +0 -22
  133. package/packages/db/node_modules/.bin/tsup +0 -22
  134. package/packages/db/node_modules/.bin/tsup-node +0 -22
  135. package/packages/db/node_modules/.bin/vite +0 -22
  136. package/packages/db/node_modules/.bin/vitest +0 -22
  137. package/packages/db/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  138. package/packages/db/src/DatabaseService.ts +0 -170
  139. package/packages/db/src/QueryBuilder.ts +0 -830
  140. package/packages/db/src/index.ts +0 -2
  141. package/packages/db/src/pgrst-types/common/common.ts +0 -86
  142. package/packages/db/src/pgrst-types/common/rpc.ts +0 -151
  143. package/packages/db/src/pgrst-types/feature-flags.ts +0 -20
  144. package/packages/db/src/pgrst-types/types.ts +0 -134
  145. package/packages/db/src/select-query-parser/parser.ts +0 -479
  146. package/packages/db/src/select-query-parser/result.ts +0 -553
  147. package/packages/db/src/select-query-parser/types.ts +0 -132
  148. package/packages/db/src/select-query-parser/utils.ts +0 -707
  149. package/packages/db/tests/filters.test.ts +0 -81
  150. package/packages/db/tests/mutations-filtered.e2e.test.ts +0 -132
  151. package/packages/db/tests/mutations-filtered.test.ts +0 -188
  152. package/packages/db/tests/order.test.ts +0 -45
  153. package/packages/db/tests/rpc.test.ts +0 -41
  154. package/packages/db/tests/scale/build-large-schema.ts +0 -94
  155. package/packages/db/tests/scale/scale-compile.test.ts +0 -167
  156. package/packages/db/tests/schema.test.ts +0 -77
  157. package/packages/db/tests/single-accept.e2e.test.ts +0 -123
  158. package/packages/db/tests/single.test.ts +0 -211
  159. package/packages/db/tests/types/filters.test-d.ts +0 -52
  160. package/packages/db/tests/types/fixtures.ts +0 -40
  161. package/packages/db/tests/types/from-views.test-d.ts +0 -18
  162. package/packages/db/tests/types/mutations.test-d.ts +0 -23
  163. package/packages/db/tests/types/rpc.test-d.ts +0 -60
  164. package/packages/db/tests/types/schema-shape.test-d.ts +0 -8
  165. package/packages/db/tests/types/select-inference.test-d.ts +0 -38
  166. package/packages/db/tests/vendored/fixtures.ts +0 -83
  167. package/packages/db/tests/vendored/get-result.test-d.ts +0 -75
  168. package/packages/db/tsconfig.json +0 -5
  169. package/packages/db/tsconfig.test-d.json +0 -5
  170. package/packages/db/tsup.config.ts +0 -11
  171. package/packages/db/vitest.config.ts +0 -8
  172. package/packages/functions/node_modules/.bin/esbuild +0 -19
  173. package/packages/functions/node_modules/.bin/tsc +0 -22
  174. package/packages/functions/node_modules/.bin/tsserver +0 -22
  175. package/packages/functions/node_modules/.bin/tsup +0 -22
  176. package/packages/functions/node_modules/.bin/tsup-node +0 -22
  177. package/packages/functions/node_modules/.bin/vite +0 -22
  178. package/packages/functions/node_modules/.bin/vitest +0 -22
  179. package/packages/functions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  180. package/packages/functions/src/FunctionsService.ts +0 -188
  181. package/packages/functions/src/errors.ts +0 -70
  182. package/packages/functions/src/index.ts +0 -6
  183. package/packages/functions/tests/invoke.test.ts +0 -97
  184. package/packages/functions/tests/response-type-errors.test.ts +0 -135
  185. package/packages/functions/tsconfig.json +0 -5
  186. package/packages/functions/tsup.config.ts +0 -11
  187. package/packages/gen/node_modules/.bin/esbuild +0 -19
  188. package/packages/gen/node_modules/.bin/tsc +0 -22
  189. package/packages/gen/node_modules/.bin/tsserver +0 -22
  190. package/packages/gen/node_modules/.bin/tsup +0 -22
  191. package/packages/gen/node_modules/.bin/tsup-node +0 -22
  192. package/packages/gen/node_modules/.bin/vite +0 -22
  193. package/packages/gen/node_modules/.bin/vitest +0 -22
  194. package/packages/gen/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  195. package/packages/gen/src/cli.ts +0 -67
  196. package/packages/gen/src/generate.ts +0 -0
  197. package/packages/gen/src/index.ts +0 -2
  198. package/packages/gen/tests/compile.test.ts +0 -213
  199. package/packages/gen/tests/e2e.test.ts +0 -130
  200. package/packages/gen/tests/generate.test.ts +0 -396
  201. package/packages/gen/tsconfig.json +0 -5
  202. package/packages/gen/tsup.config.ts +0 -11
  203. package/packages/notifications/node_modules/.bin/esbuild +0 -19
  204. package/packages/notifications/node_modules/.bin/tsc +0 -22
  205. package/packages/notifications/node_modules/.bin/tsserver +0 -22
  206. package/packages/notifications/node_modules/.bin/tsup +0 -22
  207. package/packages/notifications/node_modules/.bin/tsup-node +0 -22
  208. package/packages/notifications/node_modules/.bin/vite +0 -22
  209. package/packages/notifications/node_modules/.bin/vitest +0 -22
  210. package/packages/notifications/src/NotificationsService.ts +0 -230
  211. package/packages/notifications/src/index.ts +0 -19
  212. package/packages/notifications/tsconfig.json +0 -5
  213. package/packages/notifications/tsup.config.ts +0 -11
  214. package/packages/realtime/node_modules/.bin/esbuild +0 -19
  215. package/packages/realtime/node_modules/.bin/tsc +0 -22
  216. package/packages/realtime/node_modules/.bin/tsserver +0 -22
  217. package/packages/realtime/node_modules/.bin/tsup +0 -22
  218. package/packages/realtime/node_modules/.bin/tsup-node +0 -22
  219. package/packages/realtime/node_modules/.bin/vite +0 -22
  220. package/packages/realtime/node_modules/.bin/vitest +0 -22
  221. package/packages/realtime/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  222. package/packages/realtime/src/AuraChannel.ts +0 -485
  223. package/packages/realtime/src/HeartbeatManager.ts +0 -73
  224. package/packages/realtime/src/RealtimeService.ts +0 -505
  225. package/packages/realtime/src/columnFilter.ts +0 -301
  226. package/packages/realtime/src/index.ts +0 -4
  227. package/packages/realtime/tests/ack-routing.test.ts +0 -81
  228. package/packages/realtime/tests/column-filter.test.ts +0 -144
  229. package/packages/realtime/tests/dispatch.test.ts +0 -191
  230. package/packages/realtime/tests/heartbeat.test.ts +0 -67
  231. package/packages/realtime/tests/http-broadcast.test.ts +0 -68
  232. package/packages/realtime/tests/realtime-token.test.ts +0 -43
  233. package/packages/realtime/tests/reconnect-race.test.ts +0 -149
  234. package/packages/realtime/tests/ref-id.test.ts +0 -34
  235. package/packages/realtime/tests/set-auth.test.ts +0 -70
  236. package/packages/realtime/tsconfig.json +0 -5
  237. package/packages/realtime/tsup.config.ts +0 -11
  238. package/packages/storage/node_modules/.bin/esbuild +0 -19
  239. package/packages/storage/node_modules/.bin/tsc +0 -22
  240. package/packages/storage/node_modules/.bin/tsserver +0 -22
  241. package/packages/storage/node_modules/.bin/tsup +0 -22
  242. package/packages/storage/node_modules/.bin/tsup-node +0 -22
  243. package/packages/storage/node_modules/.bin/vite +0 -22
  244. package/packages/storage/node_modules/.bin/vitest +0 -22
  245. package/packages/storage/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  246. package/packages/storage/src/DownloadBuilder.ts +0 -60
  247. package/packages/storage/src/StorageService.ts +0 -323
  248. package/packages/storage/src/index.ts +0 -2
  249. package/packages/storage/src/path.ts +0 -35
  250. package/packages/storage/src/transform.ts +0 -15
  251. package/packages/storage/tests/download.test.ts +0 -64
  252. package/packages/storage/tests/parity.test.ts +0 -154
  253. package/packages/storage/tests/path.test.ts +0 -87
  254. package/packages/storage/tests/transform.test.ts +0 -79
  255. package/packages/storage/tsconfig.json +0 -5
  256. package/packages/storage/tsup.config.ts +0 -11
  257. package/pnpm-workspace.yaml +0 -24
  258. package/tsconfig.base.json +0 -15
@@ -1,22 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*)
6
- if command -v cygpath > /dev/null 2>&1; then
7
- basedir=`cygpath -w "$basedir"`
8
- fi
9
- ;;
10
- esac
11
-
12
- if [ -z "$NODE_PATH" ]; then
13
- export NODE_PATH="/Users/affanedaylami/aurabase/aurabase-js/node_modules/.pnpm/vitest@4.1.9_@types+node@20.14.15_vite@8.1.3_@types+node@20.14.15_esbuild@0.27.7_/node_modules/vitest/node_modules:/Users/affanedaylami/aurabase/aurabase-js/node_modules/.pnpm/vitest@4.1.9_@types+node@20.14.15_vite@8.1.3_@types+node@20.14.15_esbuild@0.27.7_/node_modules:/Users/affanedaylami/aurabase/aurabase-js/node_modules/.pnpm/node_modules"
14
- else
15
- export NODE_PATH="/Users/affanedaylami/aurabase/aurabase-js/node_modules/.pnpm/vitest@4.1.9_@types+node@20.14.15_vite@8.1.3_@types+node@20.14.15_esbuild@0.27.7_/node_modules/vitest/node_modules:/Users/affanedaylami/aurabase/aurabase-js/node_modules/.pnpm/vitest@4.1.9_@types+node@20.14.15_vite@8.1.3_@types+node@20.14.15_esbuild@0.27.7_/node_modules:/Users/affanedaylami/aurabase/aurabase-js/node_modules/.pnpm/node_modules:$NODE_PATH"
16
- fi
17
- if [ -x "$basedir/node" ]; then
18
- exec "$basedir/node" "$basedir/../vitest/vitest.mjs" "$@"
19
- else
20
- exec node "$basedir/../vitest/vitest.mjs" "$@"
21
- fi
22
- # cmd-shim-target=/Users/affanedaylami/aurabase/aurabase-js/packages/gen/node_modules/vitest/vitest.mjs
@@ -1 +0,0 @@
1
- {"version":"4.1.9","results":[[":tests/generate.test.ts",{"duration":284.61229099999946,"failed":false}],[":tests/compile.test.ts",{"duration":86465.322083,"failed":false}],[":tests/e2e.test.ts",{"duration":0,"failed":false}]]}
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env node
2
- import { writeFileSync } from 'node:fs'
3
- import { createClient } from 'aurabase'
4
- import { generateDatabaseTypes } from './generate'
5
-
6
- interface Args { url?: string; project?: string; key?: string; out?: string; schema?: string; typeName?: string }
7
-
8
- function parseArgs(argv: string[]): Args {
9
- const a: Args = {}
10
- for (let i = 0; i < argv.length; i++) {
11
- const v = argv[i + 1]
12
- switch (argv[i]) {
13
- case '--url': a.url = v; i++; break
14
- case '--project': a.project = v; i++; break
15
- case '--key': a.key = v; i++; break
16
- case '--out': a.out = v; i++; break
17
- case '--schema': a.schema = v; i++; break
18
- case '--type-name': a.typeName = v; i++; break
19
- }
20
- }
21
- return a
22
- }
23
-
24
- const USAGE = `Usage: aurabase-gen --url <baseUrl> --project <id> [--key <apiKey>] [--out database.types.ts] [--schema public] [--type-name Database]`
25
-
26
- async function main(): Promise<void> {
27
- const args = parseArgs(process.argv.slice(2))
28
- if (!args.url || !args.project) {
29
- console.error(USAGE)
30
- process.exit(1)
31
- }
32
- const client = createClient(args.url, args.project, args.key)
33
- const { data, error } = await client.db.schema()
34
- if (error) {
35
- console.error(`[aurabase-gen] Erreur de récupération du schéma : ${error.message}`)
36
- process.exit(1)
37
- }
38
- // `schema()` renvoie `{ tables, functions, enums, views }`. Le typage généré
39
- // sérialise Functions (Args/Returns/SetofOptions), Enums (unions) et Views (Row).
40
- const tables = data?.tables ?? []
41
- const functions = data?.functions ?? []
42
- const enums = data?.enums ?? []
43
- const views = data?.views ?? []
44
- if (tables.length === 0) {
45
- console.error('[aurabase-gen] Avertissement : schéma vide (aucune table).')
46
- }
47
- const output = generateDatabaseTypes(tables, {
48
- schemaName: args.schema,
49
- typeName: args.typeName,
50
- functions,
51
- enums,
52
- views,
53
- })
54
- if (args.out) {
55
- writeFileSync(args.out, output)
56
- console.error(
57
- `[aurabase-gen] ✓ Types écrits dans ${args.out} (${tables.length} table(s), ${functions.length} fonction(s), ${enums.length} enum(s), ${views.length} vue(s)).`,
58
- )
59
- } else {
60
- process.stdout.write(output)
61
- }
62
- }
63
-
64
- main().catch((e) => {
65
- console.error('[aurabase-gen]', e instanceof Error ? e.message : e)
66
- process.exit(1)
67
- })
Binary file
@@ -1,2 +0,0 @@
1
- export { generateDatabaseTypes } from './generate'
2
- export type { GenerateOptions } from './generate'
@@ -1,213 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { execFileSync } from 'node:child_process'
3
- import { mkdtempSync, writeFileSync } from 'node:fs'
4
- import { tmpdir } from 'node:os'
5
- import { join } from 'node:path'
6
- import { generateDatabaseTypes } from '../src/generate'
7
- import type { SchemaTable, SchemaFunction, SchemaEnum } from '@aurabase/core'
8
-
9
- const tables: SchemaTable[] = [
10
- { name: 'users', columns: [
11
- { name: 'id', col_type: 'uuid', nullable: false, unique: true, default_val: 'gen_random_uuid()', references: null },
12
- { name: 'email', col_type: 'text', nullable: false, unique: true, default_val: null, references: null },
13
- ], indexes: [], rls_enabled: false, realtime_enabled: false, primary_key: 'id' },
14
- { name: 'posts', columns: [
15
- { name: 'id', col_type: 'uuid', nullable: false, unique: true, default_val: 'gen_random_uuid()', references: null },
16
- { name: 'author_id', col_type: 'uuid', nullable: false, unique: false, default_val: null, references: { table: 'users', column: 'id' } },
17
- { name: 'meta', col_type: 'jsonb', nullable: true, unique: false, default_val: null, references: null },
18
- ], indexes: [], rls_enabled: false, realtime_enabled: false, primary_key: 'id' },
19
- ]
20
-
21
- describe('generateDatabaseTypes — la sortie compile', () => {
22
- it('tsc --noEmit --strict sans erreur', () => {
23
- const out = generateDatabaseTypes(tables)
24
- const dir = mkdtempSync(join(tmpdir(), 'aura-gen-'))
25
- const file = join(dir, 'database.types.ts')
26
- writeFileSync(file, out)
27
- // Compile le fichier isolé (aucun import externe → autonome).
28
- expect(() =>
29
- execFileSync('npx', ['tsc', '--noEmit', '--strict', '--skipLibCheck', file], { stdio: 'pipe' }),
30
- ).not.toThrow()
31
- }, 30000)
32
- })
33
-
34
- const functions: SchemaFunction[] = [
35
- { name: 'add', args: [
36
- { name: 'a', data_type: 'int4', mode: 'IN' },
37
- { name: 'b', data_type: 'int4', mode: 'IN' },
38
- ], returns: 'int4', is_set_returning: false },
39
- { name: 'list_things', args: [], returns: 'record', is_set_returning: true },
40
- ]
41
-
42
- // Forme minimale de `GenericSchema['Functions']` (packages/db/src/pgrst-types/common/common.ts),
43
- // dupliquée ici pour garder ce test autonome (le fichier généré compile isolément).
44
- const GENERIC_SCHEMA_SHAPE = `
45
- type GenericFunction = {
46
- Args: Record<string, unknown> | never
47
- Returns: unknown
48
- SetofOptions?: {
49
- isSetofReturn?: boolean
50
- isOneToOne?: boolean
51
- isNotNullable?: boolean
52
- to: string
53
- from: string
54
- }
55
- }
56
- type AssertFunctionsShape<T extends Record<string, GenericFunction>> = T
57
- type _assertFunctions = AssertFunctionsShape<Database['public']['Functions']>
58
- `
59
-
60
- describe('generateDatabaseTypes — le bloc Functions compile et satisfait GenericSchema', () => {
61
- it('tsc --noEmit --strict : Args/Returns/SetofOptions valides pour une fonction scalaire + une SETOF', () => {
62
- const out = generateDatabaseTypes(tables, { functions })
63
- const dir = mkdtempSync(join(tmpdir(), 'aura-gen-fn-'))
64
- const file = join(dir, 'database.types.ts')
65
- writeFileSync(file, `${out}\n${GENERIC_SCHEMA_SHAPE}`)
66
- expect(() =>
67
- execFileSync('npx', ['tsc', '--noEmit', '--strict', '--skipLibCheck', file], { stdio: 'pipe' }),
68
- ).not.toThrow()
69
- }, 30000)
70
- })
71
-
72
- // C5/C6 : preuve que l'auto-référence `Database['public']['Enums']['mood']` (colonnes
73
- // enum + args de fonction enum) et le bloc Views compilent réellement.
74
- const enums: SchemaEnum[] = [{ name: 'mood', values: ['happy', 'sad'] }]
75
- const enumTables: SchemaTable[] = [
76
- { name: 'people', columns: [
77
- { name: 'id', col_type: 'uuid', nullable: false, unique: true, default_val: 'gen_random_uuid()', references: null },
78
- { name: 'mood', col_type: { enum: 'mood' } as unknown as string, nullable: false, unique: false, default_val: null, references: null },
79
- { name: 'tags', col_type: { array: 'text' } as unknown as string, nullable: true, unique: false, default_val: null, references: null },
80
- { name: 'moods', col_type: { array: { enum: 'mood' } } as unknown as string, nullable: true, unique: false, default_val: null, references: null },
81
- ], indexes: [], rls_enabled: false, realtime_enabled: false, primary_key: 'id' },
82
- ]
83
- const enumViews: SchemaTable[] = [
84
- { name: 'v_happy_people', columns: [
85
- { name: 'id', col_type: 'uuid', nullable: true, unique: false, default_val: null, references: null },
86
- { name: 'mood', col_type: { enum: 'mood' } as unknown as string, nullable: true, unique: false, default_val: null, references: null },
87
- ], indexes: [], rls_enabled: false, realtime_enabled: false },
88
- ]
89
- const enumFunctions: SchemaFunction[] = [
90
- { name: 'set_mood', args: [{ name: 'm', data_type: 'mood', mode: 'IN' }], returns: 'mood', is_set_returning: false },
91
- { name: 'tags_of', args: [{ name: 'ids', data_type: '_int4', mode: 'IN' }], returns: '_text', is_set_returning: false },
92
- ]
93
-
94
- // GEN-M1 : deux overloads de même nom NE DOIVENT PAS produire deux clés dupliquées
95
- // (TS2300, fichier non compilable). Ils sont fusionnés en union `Args`/`Returns`.
96
- const overloads: SchemaFunction[] = [
97
- { name: 'add', args: [
98
- { name: 'a', data_type: 'int4', mode: 'IN' },
99
- { name: 'b', data_type: 'int4', mode: 'IN' },
100
- ], returns: 'int4', is_set_returning: false },
101
- { name: 'add', args: [
102
- { name: 'a', data_type: 'text', mode: 'IN' },
103
- { name: 'b', data_type: 'text', mode: 'IN' },
104
- ], returns: 'text', is_set_returning: false },
105
- ]
106
-
107
- describe('generateDatabaseTypes — GEN-M1 : overloads fusionnés (compile, pas de TS2300)', () => {
108
- it('deux add(...) → UNE clé add, Args/Returns en union, tsc --strict OK', () => {
109
- const out = generateDatabaseTypes(tables, { functions: overloads })
110
- // Une seule clé `add:` dans le bloc Functions (pas de duplicate identifier).
111
- const fnBlock = out.slice(out.indexOf('Functions:'), out.indexOf('Enums:'))
112
- expect(fnBlock.match(/add: {/g)).toHaveLength(1)
113
- // Union des signatures (les deux formes d'Args + les deux Returns).
114
- expect(fnBlock).toContain('{ a: number; b: number } | { a: string; b: string }')
115
- expect(fnBlock).toContain('Returns: number | string')
116
- // Et surtout : le fichier compile réellement.
117
- const dir = mkdtempSync(join(tmpdir(), 'aura-gen-ovl-'))
118
- const file = join(dir, 'database.types.ts')
119
- writeFileSync(file, `${out}\n${GENERIC_SCHEMA_SHAPE}`)
120
- expect(() =>
121
- execFileSync('npx', ['tsc', '--noEmit', '--strict', '--skipLibCheck', file], { stdio: 'pipe' }),
122
- ).not.toThrow()
123
- }, 30000)
124
- })
125
-
126
- // Probe type-level (P4) : mirroir FIDÈLE des branches `Row` et `Result` du résolveur RPC
127
- // vendoré (`packages/db/src/pgrst-types/common/rpc.ts:110-135`), dupliqué ici pour rester
128
- // autonome (le fichier généré compile isolément, sans importer @aurabase/db). Prouve que la
129
- // sortie de `@aurabase/gen` alimente CORRECTEMENT le narrowing SETOF :
130
- // - `.select()` (Row) sur une fonction `SETOF <table>` narrown les colonnes de la table cible
131
- // (`SetofOptions.to` = table réelle) — c'est le fix P4 ;
132
- // - une fonction `SETOF record` (placeholder) garde un `.rpc()` Result = `Fn['Returns']` =
133
- // `Record<string, unknown>[]` (non-régression, comportement identique avant/après le fix).
134
- const SETOF_NARROWING_PROBE = `
135
- type Schema = Database['public']
136
- type TablesAndViews = Schema['Tables'] & Exclude<Schema['Views'], ''>
137
-
138
- // Branche Row du résolveur (post-.select) : rpc.ts:111-113 pour le cas table connue.
139
- type RpcRow<FnName extends keyof Schema['Functions']> =
140
- Schema['Functions'][FnName] extends infer Fn
141
- ? Fn extends { SetofOptions: { to: infer To } }
142
- ? To extends keyof TablesAndViews
143
- ? TablesAndViews[To] extends { Row: infer R } ? R : never
144
- : never
145
- : never
146
- : never
147
-
148
- // Branche Result du résolveur (.rpc sans .select) : rpc.ts:129-135.
149
- type RpcResult<FnName extends keyof Schema['Functions']> =
150
- Schema['Functions'][FnName] extends infer Fn
151
- ? Fn extends { SetofOptions: { isSetofReturn: infer S; isOneToOne: infer O }; Returns: infer R }
152
- ? S extends true ? (O extends true ? R[] : R) : R
153
- : Fn extends { Returns: infer R2 } ? R2 : never
154
- : never
155
-
156
- type Assert<T extends true> = T
157
- type Extends<A, B> = [A] extends [B] ? true : false
158
- type Equals<A, B> =
159
- (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? true : false
160
-
161
- // SETOF users → Row de la table users (id/email typés, PAS Record<string, unknown>).
162
- type _P1 = Assert<Extends<RpcRow<'list_users'>, { id: string; email: string }>>
163
- // La colonne 'id' est bien une clé narrowée.
164
- type _P2 = Assert<Extends<'id', keyof RpcRow<'list_users'>>>
165
- // Colonne inexistante NON présente (prouve le narrowing réel, pas un index signature).
166
- type _P3 = Assert<Extends<'not_a_col', keyof RpcRow<'list_users'>> extends true ? false : true>
167
- // SETOF record (placeholder) → .rpc() Result reste Record<string, unknown>[] (non-régression).
168
- type _P4 = Assert<Equals<RpcResult<'list_things'>, Record<string, unknown>[]>>
169
- `
170
-
171
- describe('generateDatabaseTypes — P4 : narrowing SETOF <table> (probe tsc type-level)', () => {
172
- it('tsc --strict : SETOF users narrown les colonnes, SETOF record reste Record<string, unknown>', () => {
173
- const out = generateDatabaseTypes(
174
- [
175
- { name: 'users', columns: [
176
- { name: 'id', col_type: 'uuid', nullable: false, unique: true, default_val: null, references: null },
177
- { name: 'email', col_type: 'text', nullable: false, unique: false, default_val: null, references: null },
178
- ], indexes: [], rls_enabled: false, realtime_enabled: false, primary_key: 'id' },
179
- ],
180
- {
181
- functions: [
182
- { name: 'list_users', args: [], returns: 'users', is_set_returning: true },
183
- { name: 'list_things', args: [], returns: 'record', is_set_returning: true },
184
- ],
185
- },
186
- )
187
- // La cible SETOF est bien résolue à la table dans la sortie textuelle.
188
- expect(out).toContain("to: 'users'")
189
- expect(out).toContain("to: 'list_things'")
190
- const dir = mkdtempSync(join(tmpdir(), 'aura-gen-setof-'))
191
- const file = join(dir, 'database.types.ts')
192
- writeFileSync(file, `${out}\n${SETOF_NARROWING_PROBE}`)
193
- expect(() =>
194
- execFileSync('npx', ['tsc', '--noEmit', '--strict', '--skipLibCheck', file], { stdio: 'pipe' }),
195
- ).not.toThrow()
196
- }, 30000)
197
- })
198
-
199
- describe('generateDatabaseTypes — Enums/Views/colonnes enum compilent (C5/C6)', () => {
200
- it('tsc --noEmit --strict : auto-référence Enums, array d’enum, view, function enum/array', () => {
201
- const out = generateDatabaseTypes(enumTables, {
202
- enums,
203
- views: enumViews,
204
- functions: enumFunctions,
205
- })
206
- const dir = mkdtempSync(join(tmpdir(), 'aura-gen-enum-'))
207
- const file = join(dir, 'database.types.ts')
208
- writeFileSync(file, `${out}\n${GENERIC_SCHEMA_SHAPE}`)
209
- expect(() =>
210
- execFileSync('npx', ['tsc', '--noEmit', '--strict', '--skipLibCheck', file], { stdio: 'pipe' }),
211
- ).not.toThrow()
212
- }, 30000)
213
- })
@@ -1,130 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { execFileSync } from 'node:child_process'
3
- import { mkdtempSync, writeFileSync } from 'node:fs'
4
- import { tmpdir } from 'node:os'
5
- import { join } from 'node:path'
6
- import { createClient } from 'aurabase'
7
- import { generateDatabaseTypes } from '../src/generate'
8
-
9
- const URL = process.env.AURA_E2E_URL
10
- const PROJECT = process.env.AURA_E2E_PROJECT
11
- const KEY = process.env.AURA_E2E_KEY
12
- const RUN = Boolean(process.env.RUN_E2E && URL && PROJECT && KEY)
13
-
14
- // Suffixe UNIQUE par run : évite les collisions « already exists » sur reruns
15
- // (l'endpoint /raw interdit les DROP → impossible de nettoyer par SQL brut ; on ne
16
- // tente donc plus de DROP, on isole chaque run par un suffixe distinct).
17
- function uniqueSuffix(): string {
18
- return (process.env.AURA_E2E_SUFFIX ?? '') + Math.random().toString(36).slice(2, 8)
19
- }
20
-
21
- // Exécute un SQL brut en RETENTANT sur les statuts transitoires — notamment 429
22
- // (l'endpoint /raw est rate-limité : burst 10 / 30 req/min) et 404/503 (cache
23
- // PostgREST). ASSERTE le succès : un CREATE avalé silencieusement (429) ne doit
24
- // plus faire échouer le test plus loin sur « 0 table ».
25
- async function sqlOk(
26
- client: ReturnType<typeof createClient>,
27
- query: string,
28
- ): Promise<void> {
29
- let res = await client.db.sql(query)
30
- for (let i = 0; i < 20 && res.error && [429, 404, 503].includes(res.error.status ?? 0); i++) {
31
- await new Promise((r) => setTimeout(r, 1000))
32
- res = await client.db.sql(query)
33
- }
34
- expect(res.error, `SQL a échoué: ${query.slice(0, 60)}… → ${JSON.stringify(res.error)}`).toBeNull()
35
- }
36
-
37
- async function schemaWithRetry<T extends { error: { status?: number } | null }>(
38
- fn: () => Promise<T>,
39
- ): Promise<T> {
40
- let res = await fn()
41
- for (let i = 0; i < 20 && res.error && [429, 404, 503].includes(res.error.status ?? 0); i++) {
42
- await new Promise((r) => setTimeout(r, 1000))
43
- res = await fn()
44
- }
45
- return res
46
- }
47
-
48
- describe.runIf(RUN)('gen E2E — schéma réel → génère → compile', () => {
49
- it('crée 2 tables liées par FK, génère les types, et ils compilent', async () => {
50
- const client = createClient(URL!, PROJECT!, KEY!)
51
- const suffix = uniqueSuffix()
52
- const authors = `e2e_authors_${suffix}`
53
- const books = `e2e_books_${suffix}`
54
-
55
- // Création via SQL brut (service_role). Pas de DROP préalable : /raw les rejette
56
- // (blocklist DDL) et ils consommeraient inutilement le budget rate-limit.
57
- await sqlOk(client, `CREATE TABLE ${authors} (id uuid PRIMARY KEY DEFAULT gen_random_uuid(), name text NOT NULL)`)
58
- await sqlOk(client, `CREATE TABLE ${books} (id uuid PRIMARY KEY DEFAULT gen_random_uuid(), author_id uuid NOT NULL REFERENCES ${authors}(id), title text NOT NULL)`)
59
-
60
- const { data, error } = await schemaWithRetry(() => client.db.schema())
61
- expect(error).toBeNull()
62
- const tables = (data?.tables ?? []).filter((t) => t.name === authors || t.name === books)
63
- expect(tables.length).toBe(2)
64
-
65
- const out = generateDatabaseTypes(tables)
66
- expect(out).toContain(`referencedRelation: '${authors}'`)
67
- expect(out).toContain(`columns: ['author_id']`)
68
-
69
- const dir = mkdtempSync(join(tmpdir(), 'aura-gen-e2e-'))
70
- const file = join(dir, 'database.types.ts')
71
- writeFileSync(file, out)
72
- expect(() =>
73
- execFileSync('npx', ['tsc', '--noEmit', '--strict', '--skipLibCheck', file], { stdio: 'pipe' }),
74
- ).not.toThrow()
75
- }, 60_000)
76
-
77
- // LOT C — enum + array typé + FK composite + view + function scalaire.
78
- it('enum + array + FK composite + view + function → génère blocs Enums/Views/Functions typés et compile', async () => {
79
- const client = createClient(URL!, PROJECT!, KEY!)
80
- const suffix = uniqueSuffix()
81
- const moodEnum = `e2e_mood_${suffix}`
82
- const orders = `e2e_orders_${suffix}`
83
- const items = `e2e_items_${suffix}`
84
- const view = `e2e_v_items_${suffix}`
85
- const addFn = `e2e_add_${suffix}`
86
-
87
- // Pas de DROP (voir cas 1). Chaque CREATE est asserté + retenté sur 429/404/503.
88
- await sqlOk(client, `CREATE TYPE ${moodEnum} AS ENUM ('happy', 'sad', 'ok')`)
89
- await sqlOk(
90
- client,
91
- `CREATE TABLE ${orders} (tenant uuid NOT NULL, id uuid NOT NULL, mood ${moodEnum} NOT NULL, tags text[] NOT NULL DEFAULT '{}', PRIMARY KEY (tenant, id))`,
92
- )
93
- await sqlOk(
94
- client,
95
- `CREATE TABLE ${items} (id uuid PRIMARY KEY DEFAULT gen_random_uuid(), order_tenant uuid NOT NULL, order_id uuid NOT NULL, CONSTRAINT fk_order FOREIGN KEY (order_tenant, order_id) REFERENCES ${orders}(tenant, id))`,
96
- )
97
- await sqlOk(client, `CREATE VIEW ${view} AS SELECT id, order_id FROM ${items}`)
98
- await sqlOk(client, `CREATE FUNCTION ${addFn}(a int, b int) RETURNS int LANGUAGE sql AS 'SELECT a + b'`)
99
- await sqlOk(client, `SELECT pg_notify('pgrst', 'reload schema')`)
100
-
101
- const { data, error } = await schemaWithRetry(() => client.db.schema())
102
- expect(error).toBeNull()
103
- const tables = (data?.tables ?? []).filter((t) => t.name === orders || t.name === items)
104
- const enums = (data?.enums ?? []).filter((e) => e.name === moodEnum)
105
- const views = (data?.views ?? []).filter((v) => v.name === view)
106
- const functions = (data?.functions ?? []).filter((f) => f.name === addFn)
107
- expect(tables.length).toBe(2)
108
- expect(enums.length).toBe(1)
109
- expect(views.length).toBe(1)
110
- expect(functions.length).toBe(1)
111
-
112
- const out = generateDatabaseTypes(tables, { enums, views, functions })
113
- expect(out).toContain(`${moodEnum}: 'happy' | 'sad' | 'ok'`)
114
- expect(out).toContain(`mood: Database['public']['Enums']['${moodEnum}']`)
115
- expect(out).toContain('tags: string[]')
116
- expect(out).toContain("columns: ['order_tenant', 'order_id']")
117
- expect(out).toContain(`${view}: {`)
118
- const fnBlock = out.slice(out.indexOf(`${addFn}: {`), out.indexOf(`${addFn}: {`) + 300)
119
- expect(fnBlock).toContain('a: number')
120
- expect(fnBlock).toContain('Returns: number')
121
- expect(fnBlock).not.toContain('unknown')
122
-
123
- const dir = mkdtempSync(join(tmpdir(), 'aura-gen-e2e-c-'))
124
- const file = join(dir, 'database.types.ts')
125
- writeFileSync(file, out)
126
- expect(() =>
127
- execFileSync('npx', ['tsc', '--noEmit', '--strict', '--skipLibCheck', file], { stdio: 'pipe' }),
128
- ).not.toThrow()
129
- }, 60_000)
130
- })