@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.
- package/package.json +4 -4
- package/packages/ai/node_modules/.bin/esbuild +0 -19
- package/packages/ai/node_modules/.bin/tsc +0 -22
- package/packages/ai/node_modules/.bin/tsserver +0 -22
- package/packages/ai/node_modules/.bin/tsup +0 -22
- package/packages/ai/node_modules/.bin/tsup-node +0 -22
- package/packages/ai/node_modules/.bin/vite +0 -22
- package/packages/ai/node_modules/.bin/vitest +0 -22
- package/packages/ai/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/ai/src/AiService.ts +0 -226
- package/packages/ai/src/index.ts +0 -18
- package/packages/ai/src/sse.ts +0 -141
- package/packages/ai/src/types.ts +0 -30
- package/packages/ai/tests/chat-stream.test.ts +0 -151
- package/packages/ai/tests/rag-namespaces.test.ts +0 -54
- package/packages/ai/tests/sse.test.ts +0 -69
- package/packages/ai/tsconfig.json +0 -5
- package/packages/ai/tsup.config.ts +0 -11
- package/packages/aurabase/node_modules/.bin/esbuild +0 -19
- package/packages/aurabase/node_modules/.bin/tsc +0 -22
- package/packages/aurabase/node_modules/.bin/tsserver +0 -22
- package/packages/aurabase/node_modules/.bin/tsup +0 -22
- package/packages/aurabase/node_modules/.bin/tsup-node +0 -22
- package/packages/aurabase/node_modules/.bin/vite +0 -22
- package/packages/aurabase/node_modules/.bin/vitest +0 -22
- package/packages/aurabase/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/aurabase/src/AuraClient.ts +0 -237
- package/packages/aurabase/src/index.ts +0 -152
- package/packages/aurabase/src/ssr.ts +0 -156
- package/packages/aurabase/tests/ai-streaming-rag-e2e.test.ts +0 -82
- package/packages/aurabase/tests/ai.test.ts +0 -111
- package/packages/aurabase/tests/auth-admin.test.ts +0 -515
- package/packages/aurabase/tests/auth-e2e.test.ts +0 -135
- package/packages/aurabase/tests/auth-hardening.test.ts +0 -206
- package/packages/aurabase/tests/auth.test.ts +0 -947
- package/packages/aurabase/tests/database.test.ts +0 -230
- package/packages/aurabase/tests/db-types-e2e.test.ts +0 -217
- package/packages/aurabase/tests/dispose.test.ts +0 -23
- package/packages/aurabase/tests/foreign-token.e2e.test.ts +0 -129
- package/packages/aurabase/tests/functions.test.ts +0 -107
- package/packages/aurabase/tests/integration.test.ts +0 -413
- package/packages/aurabase/tests/live-production-validation.js +0 -241
- package/packages/aurabase/tests/live-sdk-production-validation.js +0 -293
- package/packages/aurabase/tests/mocks.ts +0 -139
- package/packages/aurabase/tests/notifications.test.ts +0 -314
- package/packages/aurabase/tests/observability-backup.test.ts +0 -186
- package/packages/aurabase/tests/observability-hook.test.ts +0 -130
- package/packages/aurabase/tests/production-robustness.test.ts +0 -268
- package/packages/aurabase/tests/public-api-surface.test.ts +0 -53
- package/packages/aurabase/tests/query-builder.test.ts +0 -329
- package/packages/aurabase/tests/readme-smoke-e2e.test.ts +0 -231
- package/packages/aurabase/tests/realtime-filter-e2e.test.ts +0 -344
- package/packages/aurabase/tests/refresh-locks.test.ts +0 -210
- package/packages/aurabase/tests/retry-option.test.ts +0 -17
- package/packages/aurabase/tests/rpc-e2e.test.ts +0 -254
- package/packages/aurabase/tests/rs256-local-e2e.test.ts +0 -114
- package/packages/aurabase/tests/rt-alias-public-e2e.test.ts +0 -235
- package/packages/aurabase/tests/rt-http-broadcast-e2e.test.ts +0 -124
- package/packages/aurabase/tests/service-role-guard.test.ts +0 -99
- package/packages/aurabase/tests/ssr.test.ts +0 -91
- package/packages/aurabase/tests/storage-backend-e2e.test.ts +0 -481
- package/packages/aurabase/tests/storage-sdk-parity-e2e.test.ts +0 -104
- package/packages/aurabase/tests/storage-transform-e2e.test.ts +0 -684
- package/packages/aurabase/tests/storage.test.ts +0 -55
- package/packages/aurabase/tests/types/client-generic.test-d.ts +0 -79
- package/packages/aurabase/tests/types/docs-snippets.test-d.ts +0 -571
- package/packages/aurabase/tests/types/error-code.test-d.ts +0 -53
- package/packages/aurabase/tsconfig.json +0 -5
- package/packages/aurabase/tsconfig.test-d.json +0 -5
- package/packages/aurabase/tsup.config.ts +0 -11
- package/packages/aurabase/vitest.config.ts +0 -16
- package/packages/auth/node_modules/.bin/esbuild +0 -19
- package/packages/auth/node_modules/.bin/tsc +0 -22
- package/packages/auth/node_modules/.bin/tsserver +0 -22
- package/packages/auth/node_modules/.bin/tsup +0 -22
- package/packages/auth/node_modules/.bin/tsup-node +0 -22
- package/packages/auth/node_modules/.bin/vite +0 -22
- package/packages/auth/node_modules/.bin/vitest +0 -22
- package/packages/auth/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/auth/src/AuthAdminService.ts +0 -149
- package/packages/auth/src/AuthService.ts +0 -1166
- package/packages/auth/src/SessionManager.ts +0 -92
- package/packages/auth/src/index.ts +0 -17
- package/packages/auth/src/jwks.ts +0 -337
- package/packages/auth/src/pkce.ts +0 -27
- package/packages/auth/src/types.ts +0 -89
- package/packages/auth/tests/auth-lifecycle.test.ts +0 -149
- package/packages/auth/tests/detect-session.test.ts +0 -361
- package/packages/auth/tests/getclaims.test.ts +0 -780
- package/packages/auth/tests/is-mfa-challenge.test.ts +0 -27
- package/packages/auth/tests/password-recovery.test.ts +0 -124
- package/packages/auth/tests/pkce.test.ts +0 -192
- package/packages/auth/tests/session-manager.test.ts +0 -103
- package/packages/auth/tests/set-session.test.ts +0 -139
- package/packages/auth/tests/verify-otp.test.ts +0 -153
- package/packages/auth/tsconfig.json +0 -5
- package/packages/auth/tsup.config.ts +0 -11
- package/packages/core/node_modules/.bin/esbuild +0 -22
- package/packages/core/node_modules/.bin/tsc +0 -22
- package/packages/core/node_modules/.bin/tsserver +0 -22
- package/packages/core/node_modules/.bin/tsup +0 -22
- package/packages/core/node_modules/.bin/tsup-node +0 -22
- package/packages/core/node_modules/.bin/vite +0 -22
- package/packages/core/node_modules/.bin/vitest +0 -22
- package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/core/src/AuraError.ts +0 -89
- package/packages/core/src/BaseService.ts +0 -44
- package/packages/core/src/client.ts +0 -34
- package/packages/core/src/cookie-utils.ts +0 -42
- package/packages/core/src/fetch.ts +0 -435
- package/packages/core/src/index.ts +0 -22
- package/packages/core/src/retry.ts +0 -63
- package/packages/core/src/serialize.ts +0 -6
- package/packages/core/src/stores/BaseAuthStore.ts +0 -164
- package/packages/core/src/stores/LocalAuthStore.ts +0 -199
- package/packages/core/src/types.ts +0 -1042
- package/packages/core/tests/auth-store.test.ts +0 -300
- package/packages/core/tests/error-code.test.ts +0 -61
- package/packages/core/tests/error.test.ts +0 -24
- package/packages/core/tests/fetch.test.ts +0 -286
- package/packages/core/tests/mocks.ts +0 -139
- package/packages/core/tests/observability.test.ts +0 -86
- package/packages/core/tests/refresh-hardening.test.ts +0 -164
- package/packages/core/tests/refresh-observability.test.ts +0 -111
- package/packages/core/tests/retry.test.ts +0 -106
- package/packages/core/tests/serialize.test.ts +0 -12
- package/packages/core/tests/timeout.test.ts +0 -79
- package/packages/core/tsconfig.json +0 -5
- package/packages/core/tsup.config.ts +0 -11
- package/packages/db/node_modules/.bin/esbuild +0 -19
- package/packages/db/node_modules/.bin/tsc +0 -22
- package/packages/db/node_modules/.bin/tsserver +0 -22
- package/packages/db/node_modules/.bin/tsup +0 -22
- package/packages/db/node_modules/.bin/tsup-node +0 -22
- package/packages/db/node_modules/.bin/vite +0 -22
- package/packages/db/node_modules/.bin/vitest +0 -22
- package/packages/db/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/db/src/DatabaseService.ts +0 -170
- package/packages/db/src/QueryBuilder.ts +0 -830
- package/packages/db/src/index.ts +0 -2
- package/packages/db/src/pgrst-types/common/common.ts +0 -86
- package/packages/db/src/pgrst-types/common/rpc.ts +0 -151
- package/packages/db/src/pgrst-types/feature-flags.ts +0 -20
- package/packages/db/src/pgrst-types/types.ts +0 -134
- package/packages/db/src/select-query-parser/parser.ts +0 -479
- package/packages/db/src/select-query-parser/result.ts +0 -553
- package/packages/db/src/select-query-parser/types.ts +0 -132
- package/packages/db/src/select-query-parser/utils.ts +0 -707
- package/packages/db/tests/filters.test.ts +0 -81
- package/packages/db/tests/mutations-filtered.e2e.test.ts +0 -132
- package/packages/db/tests/mutations-filtered.test.ts +0 -188
- package/packages/db/tests/order.test.ts +0 -45
- package/packages/db/tests/rpc.test.ts +0 -41
- package/packages/db/tests/scale/build-large-schema.ts +0 -94
- package/packages/db/tests/scale/scale-compile.test.ts +0 -167
- package/packages/db/tests/schema.test.ts +0 -77
- package/packages/db/tests/single-accept.e2e.test.ts +0 -123
- package/packages/db/tests/single.test.ts +0 -211
- package/packages/db/tests/types/filters.test-d.ts +0 -52
- package/packages/db/tests/types/fixtures.ts +0 -40
- package/packages/db/tests/types/from-views.test-d.ts +0 -18
- package/packages/db/tests/types/mutations.test-d.ts +0 -23
- package/packages/db/tests/types/rpc.test-d.ts +0 -60
- package/packages/db/tests/types/schema-shape.test-d.ts +0 -8
- package/packages/db/tests/types/select-inference.test-d.ts +0 -38
- package/packages/db/tests/vendored/fixtures.ts +0 -83
- package/packages/db/tests/vendored/get-result.test-d.ts +0 -75
- package/packages/db/tsconfig.json +0 -5
- package/packages/db/tsconfig.test-d.json +0 -5
- package/packages/db/tsup.config.ts +0 -11
- package/packages/db/vitest.config.ts +0 -8
- package/packages/functions/node_modules/.bin/esbuild +0 -19
- package/packages/functions/node_modules/.bin/tsc +0 -22
- package/packages/functions/node_modules/.bin/tsserver +0 -22
- package/packages/functions/node_modules/.bin/tsup +0 -22
- package/packages/functions/node_modules/.bin/tsup-node +0 -22
- package/packages/functions/node_modules/.bin/vite +0 -22
- package/packages/functions/node_modules/.bin/vitest +0 -22
- package/packages/functions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/functions/src/FunctionsService.ts +0 -188
- package/packages/functions/src/errors.ts +0 -70
- package/packages/functions/src/index.ts +0 -6
- package/packages/functions/tests/invoke.test.ts +0 -97
- package/packages/functions/tests/response-type-errors.test.ts +0 -135
- package/packages/functions/tsconfig.json +0 -5
- package/packages/functions/tsup.config.ts +0 -11
- package/packages/gen/node_modules/.bin/esbuild +0 -19
- package/packages/gen/node_modules/.bin/tsc +0 -22
- package/packages/gen/node_modules/.bin/tsserver +0 -22
- package/packages/gen/node_modules/.bin/tsup +0 -22
- package/packages/gen/node_modules/.bin/tsup-node +0 -22
- package/packages/gen/node_modules/.bin/vite +0 -22
- package/packages/gen/node_modules/.bin/vitest +0 -22
- package/packages/gen/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/gen/src/cli.ts +0 -67
- package/packages/gen/src/generate.ts +0 -0
- package/packages/gen/src/index.ts +0 -2
- package/packages/gen/tests/compile.test.ts +0 -213
- package/packages/gen/tests/e2e.test.ts +0 -130
- package/packages/gen/tests/generate.test.ts +0 -396
- package/packages/gen/tsconfig.json +0 -5
- package/packages/gen/tsup.config.ts +0 -11
- package/packages/notifications/node_modules/.bin/esbuild +0 -19
- package/packages/notifications/node_modules/.bin/tsc +0 -22
- package/packages/notifications/node_modules/.bin/tsserver +0 -22
- package/packages/notifications/node_modules/.bin/tsup +0 -22
- package/packages/notifications/node_modules/.bin/tsup-node +0 -22
- package/packages/notifications/node_modules/.bin/vite +0 -22
- package/packages/notifications/node_modules/.bin/vitest +0 -22
- package/packages/notifications/src/NotificationsService.ts +0 -230
- package/packages/notifications/src/index.ts +0 -19
- package/packages/notifications/tsconfig.json +0 -5
- package/packages/notifications/tsup.config.ts +0 -11
- package/packages/realtime/node_modules/.bin/esbuild +0 -19
- package/packages/realtime/node_modules/.bin/tsc +0 -22
- package/packages/realtime/node_modules/.bin/tsserver +0 -22
- package/packages/realtime/node_modules/.bin/tsup +0 -22
- package/packages/realtime/node_modules/.bin/tsup-node +0 -22
- package/packages/realtime/node_modules/.bin/vite +0 -22
- package/packages/realtime/node_modules/.bin/vitest +0 -22
- package/packages/realtime/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/realtime/src/AuraChannel.ts +0 -485
- package/packages/realtime/src/HeartbeatManager.ts +0 -73
- package/packages/realtime/src/RealtimeService.ts +0 -505
- package/packages/realtime/src/columnFilter.ts +0 -301
- package/packages/realtime/src/index.ts +0 -4
- package/packages/realtime/tests/ack-routing.test.ts +0 -81
- package/packages/realtime/tests/column-filter.test.ts +0 -144
- package/packages/realtime/tests/dispatch.test.ts +0 -191
- package/packages/realtime/tests/heartbeat.test.ts +0 -67
- package/packages/realtime/tests/http-broadcast.test.ts +0 -68
- package/packages/realtime/tests/realtime-token.test.ts +0 -43
- package/packages/realtime/tests/reconnect-race.test.ts +0 -149
- package/packages/realtime/tests/ref-id.test.ts +0 -34
- package/packages/realtime/tests/set-auth.test.ts +0 -70
- package/packages/realtime/tsconfig.json +0 -5
- package/packages/realtime/tsup.config.ts +0 -11
- package/packages/storage/node_modules/.bin/esbuild +0 -19
- package/packages/storage/node_modules/.bin/tsc +0 -22
- package/packages/storage/node_modules/.bin/tsserver +0 -22
- package/packages/storage/node_modules/.bin/tsup +0 -22
- package/packages/storage/node_modules/.bin/tsup-node +0 -22
- package/packages/storage/node_modules/.bin/vite +0 -22
- package/packages/storage/node_modules/.bin/vitest +0 -22
- package/packages/storage/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/storage/src/DownloadBuilder.ts +0 -60
- package/packages/storage/src/StorageService.ts +0 -323
- package/packages/storage/src/index.ts +0 -2
- package/packages/storage/src/path.ts +0 -35
- package/packages/storage/src/transform.ts +0 -15
- package/packages/storage/tests/download.test.ts +0 -64
- package/packages/storage/tests/parity.test.ts +0 -154
- package/packages/storage/tests/path.test.ts +0 -87
- package/packages/storage/tests/transform.test.ts +0 -79
- package/packages/storage/tsconfig.json +0 -5
- package/packages/storage/tsup.config.ts +0 -11
- package/pnpm-workspace.yaml +0 -24
- 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
|
package/packages/gen/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json
DELETED
|
@@ -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}]]}
|
package/packages/gen/src/cli.ts
DELETED
|
@@ -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,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
|
-
})
|