@aurabase/aurabase-js 0.3.0

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 (344) hide show
  1. package/.changeset/config.json +11 -0
  2. package/CHANGELOG.md +30 -0
  3. package/LICENSE +21 -0
  4. package/README.md +833 -0
  5. package/package.json +90 -0
  6. package/packages/ai/LICENSE +21 -0
  7. package/packages/ai/README.md +106 -0
  8. package/packages/ai/dist/index.cjs +229 -0
  9. package/packages/ai/dist/index.d.cts +139 -0
  10. package/packages/ai/dist/index.d.ts +139 -0
  11. package/packages/ai/dist/index.js +226 -0
  12. package/packages/ai/node_modules/.bin/esbuild +19 -0
  13. package/packages/ai/node_modules/.bin/tsc +22 -0
  14. package/packages/ai/node_modules/.bin/tsserver +22 -0
  15. package/packages/ai/node_modules/.bin/tsup +22 -0
  16. package/packages/ai/node_modules/.bin/tsup-node +22 -0
  17. package/packages/ai/node_modules/.bin/vite +22 -0
  18. package/packages/ai/node_modules/.bin/vitest +22 -0
  19. package/packages/ai/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  20. package/packages/ai/package.json +61 -0
  21. package/packages/ai/src/AiService.ts +226 -0
  22. package/packages/ai/src/index.ts +18 -0
  23. package/packages/ai/src/sse.ts +141 -0
  24. package/packages/ai/src/types.ts +30 -0
  25. package/packages/ai/tests/chat-stream.test.ts +151 -0
  26. package/packages/ai/tests/rag-namespaces.test.ts +54 -0
  27. package/packages/ai/tests/sse.test.ts +69 -0
  28. package/packages/ai/tsconfig.json +5 -0
  29. package/packages/ai/tsup.config.ts +11 -0
  30. package/packages/aurabase/LICENSE +21 -0
  31. package/packages/aurabase/README.md +64 -0
  32. package/packages/aurabase/dist/AuraClient-DAtDbfPB.d.cts +77 -0
  33. package/packages/aurabase/dist/AuraClient-DAtDbfPB.d.ts +77 -0
  34. package/packages/aurabase/dist/index.cjs +237 -0
  35. package/packages/aurabase/dist/index.d.cts +46 -0
  36. package/packages/aurabase/dist/index.d.ts +46 -0
  37. package/packages/aurabase/dist/index.js +177 -0
  38. package/packages/aurabase/dist/ssr.cjs +224 -0
  39. package/packages/aurabase/dist/ssr.d.cts +65 -0
  40. package/packages/aurabase/dist/ssr.d.ts +65 -0
  41. package/packages/aurabase/dist/ssr.js +214 -0
  42. package/packages/aurabase/node_modules/.bin/esbuild +19 -0
  43. package/packages/aurabase/node_modules/.bin/tsc +22 -0
  44. package/packages/aurabase/node_modules/.bin/tsserver +22 -0
  45. package/packages/aurabase/node_modules/.bin/tsup +22 -0
  46. package/packages/aurabase/node_modules/.bin/tsup-node +22 -0
  47. package/packages/aurabase/node_modules/.bin/vite +22 -0
  48. package/packages/aurabase/node_modules/.bin/vitest +22 -0
  49. package/packages/aurabase/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  50. package/packages/aurabase/package.json +80 -0
  51. package/packages/aurabase/src/AuraClient.ts +237 -0
  52. package/packages/aurabase/src/index.ts +152 -0
  53. package/packages/aurabase/src/ssr.ts +156 -0
  54. package/packages/aurabase/tests/ai-streaming-rag-e2e.test.ts +82 -0
  55. package/packages/aurabase/tests/ai.test.ts +111 -0
  56. package/packages/aurabase/tests/auth-admin.test.ts +515 -0
  57. package/packages/aurabase/tests/auth-e2e.test.ts +135 -0
  58. package/packages/aurabase/tests/auth-hardening.test.ts +206 -0
  59. package/packages/aurabase/tests/auth.test.ts +947 -0
  60. package/packages/aurabase/tests/database.test.ts +230 -0
  61. package/packages/aurabase/tests/db-types-e2e.test.ts +217 -0
  62. package/packages/aurabase/tests/dispose.test.ts +23 -0
  63. package/packages/aurabase/tests/foreign-token.e2e.test.ts +129 -0
  64. package/packages/aurabase/tests/functions.test.ts +107 -0
  65. package/packages/aurabase/tests/integration.test.ts +413 -0
  66. package/packages/aurabase/tests/live-production-validation.js +241 -0
  67. package/packages/aurabase/tests/live-sdk-production-validation.js +293 -0
  68. package/packages/aurabase/tests/mocks.ts +139 -0
  69. package/packages/aurabase/tests/notifications.test.ts +314 -0
  70. package/packages/aurabase/tests/observability-backup.test.ts +186 -0
  71. package/packages/aurabase/tests/observability-hook.test.ts +130 -0
  72. package/packages/aurabase/tests/production-robustness.test.ts +268 -0
  73. package/packages/aurabase/tests/public-api-surface.test.ts +53 -0
  74. package/packages/aurabase/tests/query-builder.test.ts +329 -0
  75. package/packages/aurabase/tests/readme-smoke-e2e.test.ts +231 -0
  76. package/packages/aurabase/tests/realtime-filter-e2e.test.ts +344 -0
  77. package/packages/aurabase/tests/refresh-locks.test.ts +210 -0
  78. package/packages/aurabase/tests/retry-option.test.ts +17 -0
  79. package/packages/aurabase/tests/rpc-e2e.test.ts +254 -0
  80. package/packages/aurabase/tests/rs256-local-e2e.test.ts +114 -0
  81. package/packages/aurabase/tests/rt-alias-public-e2e.test.ts +235 -0
  82. package/packages/aurabase/tests/rt-http-broadcast-e2e.test.ts +124 -0
  83. package/packages/aurabase/tests/service-role-guard.test.ts +99 -0
  84. package/packages/aurabase/tests/ssr.test.ts +91 -0
  85. package/packages/aurabase/tests/storage-backend-e2e.test.ts +481 -0
  86. package/packages/aurabase/tests/storage-sdk-parity-e2e.test.ts +104 -0
  87. package/packages/aurabase/tests/storage-transform-e2e.test.ts +684 -0
  88. package/packages/aurabase/tests/storage.test.ts +55 -0
  89. package/packages/aurabase/tests/types/client-generic.test-d.ts +79 -0
  90. package/packages/aurabase/tests/types/docs-snippets.test-d.ts +571 -0
  91. package/packages/aurabase/tests/types/error-code.test-d.ts +53 -0
  92. package/packages/aurabase/tsconfig.json +5 -0
  93. package/packages/aurabase/tsconfig.test-d.json +5 -0
  94. package/packages/aurabase/tsup.config.ts +11 -0
  95. package/packages/aurabase/vitest.config.ts +16 -0
  96. package/packages/aurabase/vitest.e2e.config.ts +9 -0
  97. package/packages/auth/LICENSE +21 -0
  98. package/packages/auth/README.md +215 -0
  99. package/packages/auth/dist/index.cjs +1175 -0
  100. package/packages/auth/dist/index.d.cts +397 -0
  101. package/packages/auth/dist/index.d.ts +397 -0
  102. package/packages/auth/dist/index.js +1170 -0
  103. package/packages/auth/node_modules/.bin/esbuild +19 -0
  104. package/packages/auth/node_modules/.bin/tsc +22 -0
  105. package/packages/auth/node_modules/.bin/tsserver +22 -0
  106. package/packages/auth/node_modules/.bin/tsup +22 -0
  107. package/packages/auth/node_modules/.bin/tsup-node +22 -0
  108. package/packages/auth/node_modules/.bin/vite +22 -0
  109. package/packages/auth/node_modules/.bin/vitest +22 -0
  110. package/packages/auth/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  111. package/packages/auth/package.json +61 -0
  112. package/packages/auth/src/AuthAdminService.ts +149 -0
  113. package/packages/auth/src/AuthService.ts +1166 -0
  114. package/packages/auth/src/SessionManager.ts +92 -0
  115. package/packages/auth/src/index.ts +17 -0
  116. package/packages/auth/src/jwks.ts +337 -0
  117. package/packages/auth/src/pkce.ts +27 -0
  118. package/packages/auth/src/types.ts +89 -0
  119. package/packages/auth/tests/auth-lifecycle.test.ts +149 -0
  120. package/packages/auth/tests/detect-session.test.ts +361 -0
  121. package/packages/auth/tests/getclaims.test.ts +780 -0
  122. package/packages/auth/tests/is-mfa-challenge.test.ts +27 -0
  123. package/packages/auth/tests/password-recovery.test.ts +124 -0
  124. package/packages/auth/tests/pkce.test.ts +192 -0
  125. package/packages/auth/tests/session-manager.test.ts +103 -0
  126. package/packages/auth/tests/set-session.test.ts +139 -0
  127. package/packages/auth/tests/verify-otp.test.ts +153 -0
  128. package/packages/auth/tsconfig.json +5 -0
  129. package/packages/auth/tsup.config.ts +11 -0
  130. package/packages/core/LICENSE +21 -0
  131. package/packages/core/README.md +132 -0
  132. package/packages/core/dist/index.cjs +695 -0
  133. package/packages/core/dist/index.d.cts +1137 -0
  134. package/packages/core/dist/index.d.ts +1137 -0
  135. package/packages/core/dist/index.js +673 -0
  136. package/packages/core/node_modules/.bin/esbuild +22 -0
  137. package/packages/core/node_modules/.bin/tsc +22 -0
  138. package/packages/core/node_modules/.bin/tsserver +22 -0
  139. package/packages/core/node_modules/.bin/tsup +22 -0
  140. package/packages/core/node_modules/.bin/tsup-node +22 -0
  141. package/packages/core/node_modules/.bin/vite +22 -0
  142. package/packages/core/node_modules/.bin/vitest +22 -0
  143. package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  144. package/packages/core/package.json +57 -0
  145. package/packages/core/src/AuraError.ts +89 -0
  146. package/packages/core/src/BaseService.ts +44 -0
  147. package/packages/core/src/client.ts +34 -0
  148. package/packages/core/src/cookie-utils.ts +42 -0
  149. package/packages/core/src/fetch.ts +435 -0
  150. package/packages/core/src/index.ts +22 -0
  151. package/packages/core/src/retry.ts +63 -0
  152. package/packages/core/src/serialize.ts +6 -0
  153. package/packages/core/src/stores/BaseAuthStore.ts +164 -0
  154. package/packages/core/src/stores/LocalAuthStore.ts +199 -0
  155. package/packages/core/src/types.ts +1042 -0
  156. package/packages/core/tests/auth-store.test.ts +300 -0
  157. package/packages/core/tests/error-code.test.ts +61 -0
  158. package/packages/core/tests/error.test.ts +24 -0
  159. package/packages/core/tests/fetch.test.ts +286 -0
  160. package/packages/core/tests/mocks.ts +139 -0
  161. package/packages/core/tests/observability.test.ts +86 -0
  162. package/packages/core/tests/refresh-hardening.test.ts +164 -0
  163. package/packages/core/tests/refresh-observability.test.ts +111 -0
  164. package/packages/core/tests/retry.test.ts +106 -0
  165. package/packages/core/tests/serialize.test.ts +12 -0
  166. package/packages/core/tests/timeout.test.ts +79 -0
  167. package/packages/core/tsconfig.json +5 -0
  168. package/packages/core/tsup.config.ts +11 -0
  169. package/packages/db/LICENSE +21 -0
  170. package/packages/db/README.md +152 -0
  171. package/packages/db/VENDORED.md +93 -0
  172. package/packages/db/dist/index.cjs +544 -0
  173. package/packages/db/dist/index.d.cts +1111 -0
  174. package/packages/db/dist/index.d.ts +1111 -0
  175. package/packages/db/dist/index.js +541 -0
  176. package/packages/db/node_modules/.bin/esbuild +19 -0
  177. package/packages/db/node_modules/.bin/tsc +22 -0
  178. package/packages/db/node_modules/.bin/tsserver +22 -0
  179. package/packages/db/node_modules/.bin/tsup +22 -0
  180. package/packages/db/node_modules/.bin/tsup-node +22 -0
  181. package/packages/db/node_modules/.bin/vite +22 -0
  182. package/packages/db/node_modules/.bin/vitest +22 -0
  183. package/packages/db/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  184. package/packages/db/package.json +62 -0
  185. package/packages/db/src/DatabaseService.ts +170 -0
  186. package/packages/db/src/QueryBuilder.ts +830 -0
  187. package/packages/db/src/index.ts +2 -0
  188. package/packages/db/src/pgrst-types/common/common.ts +86 -0
  189. package/packages/db/src/pgrst-types/common/rpc.ts +151 -0
  190. package/packages/db/src/pgrst-types/feature-flags.ts +20 -0
  191. package/packages/db/src/pgrst-types/types.ts +134 -0
  192. package/packages/db/src/select-query-parser/parser.ts +479 -0
  193. package/packages/db/src/select-query-parser/result.ts +553 -0
  194. package/packages/db/src/select-query-parser/types.ts +132 -0
  195. package/packages/db/src/select-query-parser/utils.ts +707 -0
  196. package/packages/db/tests/filters.test.ts +81 -0
  197. package/packages/db/tests/mutations-filtered.e2e.test.ts +132 -0
  198. package/packages/db/tests/mutations-filtered.test.ts +188 -0
  199. package/packages/db/tests/order.test.ts +45 -0
  200. package/packages/db/tests/rpc.test.ts +41 -0
  201. package/packages/db/tests/scale/build-large-schema.ts +94 -0
  202. package/packages/db/tests/scale/scale-compile.test.ts +167 -0
  203. package/packages/db/tests/schema.test.ts +77 -0
  204. package/packages/db/tests/single-accept.e2e.test.ts +123 -0
  205. package/packages/db/tests/single.test.ts +211 -0
  206. package/packages/db/tests/types/filters.test-d.ts +52 -0
  207. package/packages/db/tests/types/fixtures.ts +40 -0
  208. package/packages/db/tests/types/from-views.test-d.ts +18 -0
  209. package/packages/db/tests/types/mutations.test-d.ts +23 -0
  210. package/packages/db/tests/types/rpc.test-d.ts +60 -0
  211. package/packages/db/tests/types/schema-shape.test-d.ts +8 -0
  212. package/packages/db/tests/types/select-inference.test-d.ts +38 -0
  213. package/packages/db/tests/vendored/fixtures.ts +83 -0
  214. package/packages/db/tests/vendored/get-result.test-d.ts +75 -0
  215. package/packages/db/tsconfig.json +5 -0
  216. package/packages/db/tsconfig.test-d.json +5 -0
  217. package/packages/db/tsup.config.ts +11 -0
  218. package/packages/db/vitest.config.ts +8 -0
  219. package/packages/functions/LICENSE +21 -0
  220. package/packages/functions/README.md +96 -0
  221. package/packages/functions/dist/index.cjs +173 -0
  222. package/packages/functions/dist/index.d.cts +81 -0
  223. package/packages/functions/dist/index.d.ts +81 -0
  224. package/packages/functions/dist/index.js +168 -0
  225. package/packages/functions/node_modules/.bin/esbuild +19 -0
  226. package/packages/functions/node_modules/.bin/tsc +22 -0
  227. package/packages/functions/node_modules/.bin/tsserver +22 -0
  228. package/packages/functions/node_modules/.bin/tsup +22 -0
  229. package/packages/functions/node_modules/.bin/tsup-node +22 -0
  230. package/packages/functions/node_modules/.bin/vite +22 -0
  231. package/packages/functions/node_modules/.bin/vitest +22 -0
  232. package/packages/functions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  233. package/packages/functions/package.json +60 -0
  234. package/packages/functions/src/FunctionsService.ts +188 -0
  235. package/packages/functions/src/errors.ts +70 -0
  236. package/packages/functions/src/index.ts +6 -0
  237. package/packages/functions/tests/invoke.test.ts +97 -0
  238. package/packages/functions/tests/response-type-errors.test.ts +135 -0
  239. package/packages/functions/tsconfig.json +5 -0
  240. package/packages/functions/tsup.config.ts +11 -0
  241. package/packages/gen/LICENSE +21 -0
  242. package/packages/gen/README.md +84 -0
  243. package/packages/gen/dist/cli.cjs +334 -0
  244. package/packages/gen/dist/cli.d.cts +1 -0
  245. package/packages/gen/dist/cli.d.ts +1 -0
  246. package/packages/gen/dist/cli.js +332 -0
  247. package/packages/gen/dist/index.cjs +257 -0
  248. package/packages/gen/dist/index.d.cts +12 -0
  249. package/packages/gen/dist/index.d.ts +12 -0
  250. package/packages/gen/dist/index.js +255 -0
  251. package/packages/gen/node_modules/.bin/esbuild +19 -0
  252. package/packages/gen/node_modules/.bin/tsc +22 -0
  253. package/packages/gen/node_modules/.bin/tsserver +22 -0
  254. package/packages/gen/node_modules/.bin/tsup +22 -0
  255. package/packages/gen/node_modules/.bin/tsup-node +22 -0
  256. package/packages/gen/node_modules/.bin/vite +22 -0
  257. package/packages/gen/node_modules/.bin/vitest +22 -0
  258. package/packages/gen/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  259. package/packages/gen/package.json +66 -0
  260. package/packages/gen/src/cli.ts +67 -0
  261. package/packages/gen/src/generate.ts +0 -0
  262. package/packages/gen/src/index.ts +2 -0
  263. package/packages/gen/tests/compile.test.ts +213 -0
  264. package/packages/gen/tests/e2e.test.ts +130 -0
  265. package/packages/gen/tests/generate.test.ts +396 -0
  266. package/packages/gen/tsconfig.json +5 -0
  267. package/packages/gen/tsup.config.ts +11 -0
  268. package/packages/notifications/LICENSE +21 -0
  269. package/packages/notifications/README.md +134 -0
  270. package/packages/notifications/dist/index.cjs +128 -0
  271. package/packages/notifications/dist/index.d.cts +81 -0
  272. package/packages/notifications/dist/index.d.ts +81 -0
  273. package/packages/notifications/dist/index.js +125 -0
  274. package/packages/notifications/node_modules/.bin/esbuild +19 -0
  275. package/packages/notifications/node_modules/.bin/tsc +22 -0
  276. package/packages/notifications/node_modules/.bin/tsserver +22 -0
  277. package/packages/notifications/node_modules/.bin/tsup +22 -0
  278. package/packages/notifications/node_modules/.bin/tsup-node +22 -0
  279. package/packages/notifications/node_modules/.bin/vite +22 -0
  280. package/packages/notifications/node_modules/.bin/vitest +22 -0
  281. package/packages/notifications/package.json +60 -0
  282. package/packages/notifications/src/NotificationsService.ts +230 -0
  283. package/packages/notifications/src/index.ts +19 -0
  284. package/packages/notifications/tsconfig.json +5 -0
  285. package/packages/notifications/tsup.config.ts +11 -0
  286. package/packages/realtime/LICENSE +21 -0
  287. package/packages/realtime/README.md +183 -0
  288. package/packages/realtime/dist/index.cjs +977 -0
  289. package/packages/realtime/dist/index.d.cts +259 -0
  290. package/packages/realtime/dist/index.d.ts +259 -0
  291. package/packages/realtime/dist/index.js +973 -0
  292. package/packages/realtime/node_modules/.bin/esbuild +19 -0
  293. package/packages/realtime/node_modules/.bin/tsc +22 -0
  294. package/packages/realtime/node_modules/.bin/tsserver +22 -0
  295. package/packages/realtime/node_modules/.bin/tsup +22 -0
  296. package/packages/realtime/node_modules/.bin/tsup-node +22 -0
  297. package/packages/realtime/node_modules/.bin/vite +22 -0
  298. package/packages/realtime/node_modules/.bin/vitest +22 -0
  299. package/packages/realtime/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  300. package/packages/realtime/package.json +60 -0
  301. package/packages/realtime/src/AuraChannel.ts +485 -0
  302. package/packages/realtime/src/HeartbeatManager.ts +73 -0
  303. package/packages/realtime/src/RealtimeService.ts +505 -0
  304. package/packages/realtime/src/columnFilter.ts +301 -0
  305. package/packages/realtime/src/index.ts +4 -0
  306. package/packages/realtime/tests/ack-routing.test.ts +81 -0
  307. package/packages/realtime/tests/column-filter.test.ts +144 -0
  308. package/packages/realtime/tests/dispatch.test.ts +191 -0
  309. package/packages/realtime/tests/heartbeat.test.ts +67 -0
  310. package/packages/realtime/tests/http-broadcast.test.ts +68 -0
  311. package/packages/realtime/tests/realtime-token.test.ts +43 -0
  312. package/packages/realtime/tests/reconnect-race.test.ts +149 -0
  313. package/packages/realtime/tests/ref-id.test.ts +34 -0
  314. package/packages/realtime/tests/set-auth.test.ts +70 -0
  315. package/packages/realtime/tsconfig.json +5 -0
  316. package/packages/realtime/tsup.config.ts +11 -0
  317. package/packages/storage/LICENSE +21 -0
  318. package/packages/storage/README.md +141 -0
  319. package/packages/storage/dist/index.cjs +333 -0
  320. package/packages/storage/dist/index.d.cts +185 -0
  321. package/packages/storage/dist/index.d.ts +185 -0
  322. package/packages/storage/dist/index.js +329 -0
  323. package/packages/storage/node_modules/.bin/esbuild +19 -0
  324. package/packages/storage/node_modules/.bin/tsc +22 -0
  325. package/packages/storage/node_modules/.bin/tsserver +22 -0
  326. package/packages/storage/node_modules/.bin/tsup +22 -0
  327. package/packages/storage/node_modules/.bin/tsup-node +22 -0
  328. package/packages/storage/node_modules/.bin/vite +22 -0
  329. package/packages/storage/node_modules/.bin/vitest +22 -0
  330. package/packages/storage/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  331. package/packages/storage/package.json +60 -0
  332. package/packages/storage/src/DownloadBuilder.ts +60 -0
  333. package/packages/storage/src/StorageService.ts +323 -0
  334. package/packages/storage/src/index.ts +2 -0
  335. package/packages/storage/src/path.ts +35 -0
  336. package/packages/storage/src/transform.ts +15 -0
  337. package/packages/storage/tests/download.test.ts +64 -0
  338. package/packages/storage/tests/parity.test.ts +154 -0
  339. package/packages/storage/tests/path.test.ts +87 -0
  340. package/packages/storage/tests/transform.test.ts +79 -0
  341. package/packages/storage/tsconfig.json +5 -0
  342. package/packages/storage/tsup.config.ts +11 -0
  343. package/pnpm-workspace.yaml +24 -0
  344. package/tsconfig.base.json +15 -0
@@ -0,0 +1,334 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ var fs = require('fs');
5
+ var aurabase = require('aurabase');
6
+
7
+ // src/generate.ts
8
+ function enumRef(name, ctx) {
9
+ return ctx.enumNames.has(name) ? `${ctx.typeName}['${ctx.schemaName}']['Enums']['${name}']` : (
10
+ // Enum inconnu du bloc Enums → auto-référence non résoluble → repli textuel.
11
+ "string"
12
+ );
13
+ }
14
+ function mapColType(colType, ctx) {
15
+ if (typeof colType === "string") {
16
+ switch (colType) {
17
+ case "text":
18
+ case "varchar":
19
+ case "bpchar":
20
+ case "uuid":
21
+ case "timestamp":
22
+ case "timestamptz":
23
+ case "date":
24
+ case "time":
25
+ case "bytea":
26
+ case "numeric":
27
+ return "string";
28
+ case "int":
29
+ case "int2":
30
+ case "int4":
31
+ case "int8":
32
+ case "bigint":
33
+ case "float":
34
+ case "float4":
35
+ case "float8":
36
+ return "number";
37
+ case "bool":
38
+ return "boolean";
39
+ case "json":
40
+ case "jsonb":
41
+ return "Json";
42
+ default:
43
+ return "unknown";
44
+ }
45
+ }
46
+ if (colType && typeof colType === "object") {
47
+ if ("array" in colType) return `${mapColType(colType.array, ctx)}[]`;
48
+ if ("vector" in colType) return "number[]";
49
+ if ("enum" in colType) return enumRef(String(colType.enum), ctx);
50
+ }
51
+ return "unknown";
52
+ }
53
+ function mapPgType(raw, ctx) {
54
+ if (raw.startsWith("_")) return `${mapPgType(raw.slice(1), ctx)}[]`;
55
+ switch (raw) {
56
+ case "int2":
57
+ case "int4":
58
+ case "int8":
59
+ case "float4":
60
+ case "float8":
61
+ return "number";
62
+ case "numeric":
63
+ return "string";
64
+ case "bool":
65
+ return "boolean";
66
+ case "text":
67
+ case "varchar":
68
+ case "bpchar":
69
+ case "citext":
70
+ case "uuid":
71
+ case "date":
72
+ case "time":
73
+ case "timetz":
74
+ case "timestamp":
75
+ case "timestamptz":
76
+ case "bytea":
77
+ return "string";
78
+ case "json":
79
+ case "jsonb":
80
+ return "Json";
81
+ case "void":
82
+ return "undefined";
83
+ case "record":
84
+ return "unknown";
85
+ default:
86
+ return ctx.enumNames.has(raw) ? enumRef(raw, ctx) : "unknown";
87
+ }
88
+ }
89
+ function tsType(col, ctx) {
90
+ const base = mapColType(col.col_type, ctx);
91
+ return col.nullable ? `${base} | null` : base;
92
+ }
93
+ function genRow(cols, ctx) {
94
+ return cols.map((c) => ` ${c.name}: ${tsType(c, ctx)}`).join("\n");
95
+ }
96
+ var AUTO_COLS = /* @__PURE__ */ new Set(["id", "created_at", "updated_at"]);
97
+ function isInsertOptional(col) {
98
+ return col.nullable || col.default_val != null || AUTO_COLS.has(col.name);
99
+ }
100
+ function genInsert(cols, ctx) {
101
+ return cols.map((c) => ` ${c.name}${isInsertOptional(c) ? "?" : ""}: ${tsType(c, ctx)}`).join("\n");
102
+ }
103
+ function genUpdate(cols, ctx) {
104
+ return cols.map((c) => ` ${c.name}?: ${tsType(c, ctx)}`).join("\n");
105
+ }
106
+ function genRelationships(t) {
107
+ const fks = t.columns.filter((c) => c.references);
108
+ if (fks.length === 0) return "[]";
109
+ const groups = /* @__PURE__ */ new Map();
110
+ for (const c of fks) {
111
+ const ref = c.references;
112
+ const name = ref.constraint_name ?? `${t.name}_${c.name}_fkey`;
113
+ const key = ref.constraint_name ?? `\0synthetic\0${c.name}`;
114
+ let g = groups.get(key);
115
+ if (!g) {
116
+ g = { name, columns: [], refTable: ref.table, refColumns: [], cols: [] };
117
+ groups.set(key, g);
118
+ }
119
+ g.columns.push(c.name);
120
+ g.refColumns.push(ref.column);
121
+ g.cols.push(c);
122
+ }
123
+ const entries = [...groups.values()].map((g) => {
124
+ const isOneToOne = g.cols.every((c) => c.unique || t.primary_key === c.name);
125
+ const cols = g.columns.map((c) => `'${c}'`).join(", ");
126
+ const refCols = g.refColumns.map((c) => `'${c}'`).join(", ");
127
+ return ` {
128
+ foreignKeyName: '${g.name}'
129
+ columns: [${cols}]
130
+ isOneToOne: ${isOneToOne}
131
+ referencedRelation: '${g.refTable}'
132
+ referencedColumns: [${refCols}]
133
+ }`;
134
+ });
135
+ return `[
136
+ ${entries.join(",\n")}
137
+ ]`;
138
+ }
139
+ function genFunctionArgs(fn, ctx) {
140
+ const inputArgs = fn.args.filter((a) => a.mode.toUpperCase() !== "OUT");
141
+ if (inputArgs.length === 0) return "Record<string, never>";
142
+ const entries = inputArgs.map((a) => `${a.name}: ${mapPgType(a.data_type, ctx)}`).join("; ");
143
+ return `{ ${entries} }`;
144
+ }
145
+ function mapReturnType(fn, ctx) {
146
+ const base = mapPgType(fn.returns, ctx);
147
+ if (!fn.is_set_returning) return base;
148
+ return base === "unknown" ? "Record<string, unknown>[]" : `${base}[]`;
149
+ }
150
+ function genSetofOptions(fn, ctx) {
151
+ if (!fn.is_set_returning) return null;
152
+ const to = ctx.relationNames.has(fn.returns) ? fn.returns : fn.name;
153
+ return `{ isSetofReturn: true; isOneToOne: false; to: '${to}'; from: '*' }`;
154
+ }
155
+ function genFunctionsBody(functions, ctx) {
156
+ if (functions.length === 0) return "Record<string, never>";
157
+ const groups = /* @__PURE__ */ new Map();
158
+ for (const fn of functions) {
159
+ const g = groups.get(fn.name);
160
+ if (g) g.push(fn);
161
+ else groups.set(fn.name, [fn]);
162
+ }
163
+ const entries = [...groups.values()].map((overloads) => {
164
+ const argsUnion = uniq(overloads.map((fn) => genFunctionArgs(fn, ctx))).join(" | ");
165
+ const returnsUnion = uniq(overloads.map((fn) => mapReturnType(fn, ctx))).join(" | ");
166
+ const lines = [
167
+ ` ${overloads[0].name}: {`,
168
+ ` Args: ${argsUnion}`,
169
+ ` Returns: ${returnsUnion}`
170
+ ];
171
+ if (overloads.length === 1) {
172
+ const setofOptions = genSetofOptions(overloads[0], ctx);
173
+ if (setofOptions) lines.push(` SetofOptions: ${setofOptions}`);
174
+ }
175
+ lines.push(" }");
176
+ return lines.join("\n");
177
+ });
178
+ return `{
179
+ ${entries.join("\n")}
180
+ }`;
181
+ }
182
+ function uniq(items) {
183
+ return [...new Set(items)];
184
+ }
185
+ function genEnumsBody(enums) {
186
+ if (enums.length === 0) return "Record<string, never>";
187
+ const entries = enums.map((e) => {
188
+ const union = e.values.length === 0 ? "never" : e.values.map((v) => `'${v}'`).join(" | ");
189
+ return ` ${e.name}: ${union}`;
190
+ });
191
+ return `{
192
+ ${entries.join("\n")}
193
+ }`;
194
+ }
195
+ function genViewsBody(views, ctx) {
196
+ if (views.length === 0) return "Record<string, never>";
197
+ const entries = views.map(
198
+ (v) => ` ${v.name}: {
199
+ Row: {
200
+ ${genRow(v.columns, ctx)}
201
+ }
202
+ Relationships: []
203
+ }`
204
+ );
205
+ return `{
206
+ ${entries.join("\n")}
207
+ }`;
208
+ }
209
+ var HEADER = `// ============================================================
210
+ // Types TypeScript auto-g\xE9n\xE9r\xE9s par Aurabase (@aurabase/gen)
211
+ // NE PAS MODIFIER \u2014 r\xE9g\xE9n\xE9rer avec \`npx @aurabase/gen\`
212
+ // ============================================================
213
+ `;
214
+ function generateDatabaseTypes(tables, options = {}) {
215
+ const schemaName = options.schemaName ?? "public";
216
+ const typeName = options.typeName ?? "Database";
217
+ const enums = options.enums ?? [];
218
+ const views = options.views ?? [];
219
+ const relationNames = new Set([...tables, ...views].map((r) => r.name));
220
+ const ctx = { typeName, schemaName, enumNames: new Set(enums.map((e) => e.name)), relationNames };
221
+ const functionsBody = genFunctionsBody(options.functions ?? [], ctx);
222
+ const enumsBody = genEnumsBody(enums);
223
+ const viewsBody = genViewsBody(views, ctx);
224
+ const tablesBody = tables.length === 0 ? "Record<string, never>" : `{
225
+ ${tables.map(
226
+ (t) => ` ${t.name}: {
227
+ Row: {
228
+ ${genRow(t.columns, ctx)}
229
+ }
230
+ Insert: {
231
+ ${genInsert(t.columns, ctx)}
232
+ }
233
+ Update: {
234
+ ${genUpdate(t.columns, ctx)}
235
+ }
236
+ Relationships: ${genRelationships(t)}
237
+ }`
238
+ ).join("\n")}
239
+ }`;
240
+ return `${HEADER}
241
+ export type Json =
242
+ | string
243
+ | number
244
+ | boolean
245
+ | null
246
+ | { [key: string]: Json | undefined }
247
+ | Json[]
248
+
249
+ export interface ${typeName} {
250
+ ${schemaName}: {
251
+ Tables: ${tablesBody}
252
+ Views: ${viewsBody}
253
+ Functions: ${functionsBody}
254
+ Enums: ${enumsBody}
255
+ CompositeTypes: Record<string, never>
256
+ }
257
+ }
258
+ `;
259
+ }
260
+
261
+ // src/cli.ts
262
+ function parseArgs(argv) {
263
+ const a = {};
264
+ for (let i = 0; i < argv.length; i++) {
265
+ const v = argv[i + 1];
266
+ switch (argv[i]) {
267
+ case "--url":
268
+ a.url = v;
269
+ i++;
270
+ break;
271
+ case "--project":
272
+ a.project = v;
273
+ i++;
274
+ break;
275
+ case "--key":
276
+ a.key = v;
277
+ i++;
278
+ break;
279
+ case "--out":
280
+ a.out = v;
281
+ i++;
282
+ break;
283
+ case "--schema":
284
+ a.schema = v;
285
+ i++;
286
+ break;
287
+ case "--type-name":
288
+ a.typeName = v;
289
+ i++;
290
+ break;
291
+ }
292
+ }
293
+ return a;
294
+ }
295
+ var USAGE = `Usage: aurabase-gen --url <baseUrl> --project <id> [--key <apiKey>] [--out database.types.ts] [--schema public] [--type-name Database]`;
296
+ async function main() {
297
+ const args = parseArgs(process.argv.slice(2));
298
+ if (!args.url || !args.project) {
299
+ console.error(USAGE);
300
+ process.exit(1);
301
+ }
302
+ const client = aurabase.createClient(args.url, args.project, args.key);
303
+ const { data, error } = await client.db.schema();
304
+ if (error) {
305
+ console.error(`[aurabase-gen] Erreur de r\xE9cup\xE9ration du sch\xE9ma : ${error.message}`);
306
+ process.exit(1);
307
+ }
308
+ const tables = data?.tables ?? [];
309
+ const functions = data?.functions ?? [];
310
+ const enums = data?.enums ?? [];
311
+ const views = data?.views ?? [];
312
+ if (tables.length === 0) {
313
+ console.error("[aurabase-gen] Avertissement : sch\xE9ma vide (aucune table).");
314
+ }
315
+ const output = generateDatabaseTypes(tables, {
316
+ schemaName: args.schema,
317
+ typeName: args.typeName,
318
+ functions,
319
+ enums,
320
+ views
321
+ });
322
+ if (args.out) {
323
+ fs.writeFileSync(args.out, output);
324
+ console.error(
325
+ `[aurabase-gen] \u2713 Types \xE9crits dans ${args.out} (${tables.length} table(s), ${functions.length} fonction(s), ${enums.length} enum(s), ${views.length} vue(s)).`
326
+ );
327
+ } else {
328
+ process.stdout.write(output);
329
+ }
330
+ }
331
+ main().catch((e) => {
332
+ console.error("[aurabase-gen]", e instanceof Error ? e.message : e);
333
+ process.exit(1);
334
+ });
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
@@ -0,0 +1,332 @@
1
+ #!/usr/bin/env node
2
+ import { writeFileSync } from 'fs';
3
+ import { createClient } from 'aurabase';
4
+
5
+ // src/generate.ts
6
+ function enumRef(name, ctx) {
7
+ return ctx.enumNames.has(name) ? `${ctx.typeName}['${ctx.schemaName}']['Enums']['${name}']` : (
8
+ // Enum inconnu du bloc Enums → auto-référence non résoluble → repli textuel.
9
+ "string"
10
+ );
11
+ }
12
+ function mapColType(colType, ctx) {
13
+ if (typeof colType === "string") {
14
+ switch (colType) {
15
+ case "text":
16
+ case "varchar":
17
+ case "bpchar":
18
+ case "uuid":
19
+ case "timestamp":
20
+ case "timestamptz":
21
+ case "date":
22
+ case "time":
23
+ case "bytea":
24
+ case "numeric":
25
+ return "string";
26
+ case "int":
27
+ case "int2":
28
+ case "int4":
29
+ case "int8":
30
+ case "bigint":
31
+ case "float":
32
+ case "float4":
33
+ case "float8":
34
+ return "number";
35
+ case "bool":
36
+ return "boolean";
37
+ case "json":
38
+ case "jsonb":
39
+ return "Json";
40
+ default:
41
+ return "unknown";
42
+ }
43
+ }
44
+ if (colType && typeof colType === "object") {
45
+ if ("array" in colType) return `${mapColType(colType.array, ctx)}[]`;
46
+ if ("vector" in colType) return "number[]";
47
+ if ("enum" in colType) return enumRef(String(colType.enum), ctx);
48
+ }
49
+ return "unknown";
50
+ }
51
+ function mapPgType(raw, ctx) {
52
+ if (raw.startsWith("_")) return `${mapPgType(raw.slice(1), ctx)}[]`;
53
+ switch (raw) {
54
+ case "int2":
55
+ case "int4":
56
+ case "int8":
57
+ case "float4":
58
+ case "float8":
59
+ return "number";
60
+ case "numeric":
61
+ return "string";
62
+ case "bool":
63
+ return "boolean";
64
+ case "text":
65
+ case "varchar":
66
+ case "bpchar":
67
+ case "citext":
68
+ case "uuid":
69
+ case "date":
70
+ case "time":
71
+ case "timetz":
72
+ case "timestamp":
73
+ case "timestamptz":
74
+ case "bytea":
75
+ return "string";
76
+ case "json":
77
+ case "jsonb":
78
+ return "Json";
79
+ case "void":
80
+ return "undefined";
81
+ case "record":
82
+ return "unknown";
83
+ default:
84
+ return ctx.enumNames.has(raw) ? enumRef(raw, ctx) : "unknown";
85
+ }
86
+ }
87
+ function tsType(col, ctx) {
88
+ const base = mapColType(col.col_type, ctx);
89
+ return col.nullable ? `${base} | null` : base;
90
+ }
91
+ function genRow(cols, ctx) {
92
+ return cols.map((c) => ` ${c.name}: ${tsType(c, ctx)}`).join("\n");
93
+ }
94
+ var AUTO_COLS = /* @__PURE__ */ new Set(["id", "created_at", "updated_at"]);
95
+ function isInsertOptional(col) {
96
+ return col.nullable || col.default_val != null || AUTO_COLS.has(col.name);
97
+ }
98
+ function genInsert(cols, ctx) {
99
+ return cols.map((c) => ` ${c.name}${isInsertOptional(c) ? "?" : ""}: ${tsType(c, ctx)}`).join("\n");
100
+ }
101
+ function genUpdate(cols, ctx) {
102
+ return cols.map((c) => ` ${c.name}?: ${tsType(c, ctx)}`).join("\n");
103
+ }
104
+ function genRelationships(t) {
105
+ const fks = t.columns.filter((c) => c.references);
106
+ if (fks.length === 0) return "[]";
107
+ const groups = /* @__PURE__ */ new Map();
108
+ for (const c of fks) {
109
+ const ref = c.references;
110
+ const name = ref.constraint_name ?? `${t.name}_${c.name}_fkey`;
111
+ const key = ref.constraint_name ?? `\0synthetic\0${c.name}`;
112
+ let g = groups.get(key);
113
+ if (!g) {
114
+ g = { name, columns: [], refTable: ref.table, refColumns: [], cols: [] };
115
+ groups.set(key, g);
116
+ }
117
+ g.columns.push(c.name);
118
+ g.refColumns.push(ref.column);
119
+ g.cols.push(c);
120
+ }
121
+ const entries = [...groups.values()].map((g) => {
122
+ const isOneToOne = g.cols.every((c) => c.unique || t.primary_key === c.name);
123
+ const cols = g.columns.map((c) => `'${c}'`).join(", ");
124
+ const refCols = g.refColumns.map((c) => `'${c}'`).join(", ");
125
+ return ` {
126
+ foreignKeyName: '${g.name}'
127
+ columns: [${cols}]
128
+ isOneToOne: ${isOneToOne}
129
+ referencedRelation: '${g.refTable}'
130
+ referencedColumns: [${refCols}]
131
+ }`;
132
+ });
133
+ return `[
134
+ ${entries.join(",\n")}
135
+ ]`;
136
+ }
137
+ function genFunctionArgs(fn, ctx) {
138
+ const inputArgs = fn.args.filter((a) => a.mode.toUpperCase() !== "OUT");
139
+ if (inputArgs.length === 0) return "Record<string, never>";
140
+ const entries = inputArgs.map((a) => `${a.name}: ${mapPgType(a.data_type, ctx)}`).join("; ");
141
+ return `{ ${entries} }`;
142
+ }
143
+ function mapReturnType(fn, ctx) {
144
+ const base = mapPgType(fn.returns, ctx);
145
+ if (!fn.is_set_returning) return base;
146
+ return base === "unknown" ? "Record<string, unknown>[]" : `${base}[]`;
147
+ }
148
+ function genSetofOptions(fn, ctx) {
149
+ if (!fn.is_set_returning) return null;
150
+ const to = ctx.relationNames.has(fn.returns) ? fn.returns : fn.name;
151
+ return `{ isSetofReturn: true; isOneToOne: false; to: '${to}'; from: '*' }`;
152
+ }
153
+ function genFunctionsBody(functions, ctx) {
154
+ if (functions.length === 0) return "Record<string, never>";
155
+ const groups = /* @__PURE__ */ new Map();
156
+ for (const fn of functions) {
157
+ const g = groups.get(fn.name);
158
+ if (g) g.push(fn);
159
+ else groups.set(fn.name, [fn]);
160
+ }
161
+ const entries = [...groups.values()].map((overloads) => {
162
+ const argsUnion = uniq(overloads.map((fn) => genFunctionArgs(fn, ctx))).join(" | ");
163
+ const returnsUnion = uniq(overloads.map((fn) => mapReturnType(fn, ctx))).join(" | ");
164
+ const lines = [
165
+ ` ${overloads[0].name}: {`,
166
+ ` Args: ${argsUnion}`,
167
+ ` Returns: ${returnsUnion}`
168
+ ];
169
+ if (overloads.length === 1) {
170
+ const setofOptions = genSetofOptions(overloads[0], ctx);
171
+ if (setofOptions) lines.push(` SetofOptions: ${setofOptions}`);
172
+ }
173
+ lines.push(" }");
174
+ return lines.join("\n");
175
+ });
176
+ return `{
177
+ ${entries.join("\n")}
178
+ }`;
179
+ }
180
+ function uniq(items) {
181
+ return [...new Set(items)];
182
+ }
183
+ function genEnumsBody(enums) {
184
+ if (enums.length === 0) return "Record<string, never>";
185
+ const entries = enums.map((e) => {
186
+ const union = e.values.length === 0 ? "never" : e.values.map((v) => `'${v}'`).join(" | ");
187
+ return ` ${e.name}: ${union}`;
188
+ });
189
+ return `{
190
+ ${entries.join("\n")}
191
+ }`;
192
+ }
193
+ function genViewsBody(views, ctx) {
194
+ if (views.length === 0) return "Record<string, never>";
195
+ const entries = views.map(
196
+ (v) => ` ${v.name}: {
197
+ Row: {
198
+ ${genRow(v.columns, ctx)}
199
+ }
200
+ Relationships: []
201
+ }`
202
+ );
203
+ return `{
204
+ ${entries.join("\n")}
205
+ }`;
206
+ }
207
+ var HEADER = `// ============================================================
208
+ // Types TypeScript auto-g\xE9n\xE9r\xE9s par Aurabase (@aurabase/gen)
209
+ // NE PAS MODIFIER \u2014 r\xE9g\xE9n\xE9rer avec \`npx @aurabase/gen\`
210
+ // ============================================================
211
+ `;
212
+ function generateDatabaseTypes(tables, options = {}) {
213
+ const schemaName = options.schemaName ?? "public";
214
+ const typeName = options.typeName ?? "Database";
215
+ const enums = options.enums ?? [];
216
+ const views = options.views ?? [];
217
+ const relationNames = new Set([...tables, ...views].map((r) => r.name));
218
+ const ctx = { typeName, schemaName, enumNames: new Set(enums.map((e) => e.name)), relationNames };
219
+ const functionsBody = genFunctionsBody(options.functions ?? [], ctx);
220
+ const enumsBody = genEnumsBody(enums);
221
+ const viewsBody = genViewsBody(views, ctx);
222
+ const tablesBody = tables.length === 0 ? "Record<string, never>" : `{
223
+ ${tables.map(
224
+ (t) => ` ${t.name}: {
225
+ Row: {
226
+ ${genRow(t.columns, ctx)}
227
+ }
228
+ Insert: {
229
+ ${genInsert(t.columns, ctx)}
230
+ }
231
+ Update: {
232
+ ${genUpdate(t.columns, ctx)}
233
+ }
234
+ Relationships: ${genRelationships(t)}
235
+ }`
236
+ ).join("\n")}
237
+ }`;
238
+ return `${HEADER}
239
+ export type Json =
240
+ | string
241
+ | number
242
+ | boolean
243
+ | null
244
+ | { [key: string]: Json | undefined }
245
+ | Json[]
246
+
247
+ export interface ${typeName} {
248
+ ${schemaName}: {
249
+ Tables: ${tablesBody}
250
+ Views: ${viewsBody}
251
+ Functions: ${functionsBody}
252
+ Enums: ${enumsBody}
253
+ CompositeTypes: Record<string, never>
254
+ }
255
+ }
256
+ `;
257
+ }
258
+
259
+ // src/cli.ts
260
+ function parseArgs(argv) {
261
+ const a = {};
262
+ for (let i = 0; i < argv.length; i++) {
263
+ const v = argv[i + 1];
264
+ switch (argv[i]) {
265
+ case "--url":
266
+ a.url = v;
267
+ i++;
268
+ break;
269
+ case "--project":
270
+ a.project = v;
271
+ i++;
272
+ break;
273
+ case "--key":
274
+ a.key = v;
275
+ i++;
276
+ break;
277
+ case "--out":
278
+ a.out = v;
279
+ i++;
280
+ break;
281
+ case "--schema":
282
+ a.schema = v;
283
+ i++;
284
+ break;
285
+ case "--type-name":
286
+ a.typeName = v;
287
+ i++;
288
+ break;
289
+ }
290
+ }
291
+ return a;
292
+ }
293
+ var USAGE = `Usage: aurabase-gen --url <baseUrl> --project <id> [--key <apiKey>] [--out database.types.ts] [--schema public] [--type-name Database]`;
294
+ async function main() {
295
+ const args = parseArgs(process.argv.slice(2));
296
+ if (!args.url || !args.project) {
297
+ console.error(USAGE);
298
+ process.exit(1);
299
+ }
300
+ const client = createClient(args.url, args.project, args.key);
301
+ const { data, error } = await client.db.schema();
302
+ if (error) {
303
+ console.error(`[aurabase-gen] Erreur de r\xE9cup\xE9ration du sch\xE9ma : ${error.message}`);
304
+ process.exit(1);
305
+ }
306
+ const tables = data?.tables ?? [];
307
+ const functions = data?.functions ?? [];
308
+ const enums = data?.enums ?? [];
309
+ const views = data?.views ?? [];
310
+ if (tables.length === 0) {
311
+ console.error("[aurabase-gen] Avertissement : sch\xE9ma vide (aucune table).");
312
+ }
313
+ const output = generateDatabaseTypes(tables, {
314
+ schemaName: args.schema,
315
+ typeName: args.typeName,
316
+ functions,
317
+ enums,
318
+ views
319
+ });
320
+ if (args.out) {
321
+ writeFileSync(args.out, output);
322
+ console.error(
323
+ `[aurabase-gen] \u2713 Types \xE9crits dans ${args.out} (${tables.length} table(s), ${functions.length} fonction(s), ${enums.length} enum(s), ${views.length} vue(s)).`
324
+ );
325
+ } else {
326
+ process.stdout.write(output);
327
+ }
328
+ }
329
+ main().catch((e) => {
330
+ console.error("[aurabase-gen]", e instanceof Error ? e.message : e);
331
+ process.exit(1);
332
+ });