@aurabase/gen 0.4.1 → 0.5.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/README.md +4 -4
- package/dist/cli.cjs +37 -14
- package/dist/cli.d.cts +16 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.js +37 -14
- package/dist/index.cjs +6 -1
- package/dist/index.js +6 -1
- package/package.json +14 -13
package/README.md
CHANGED
|
@@ -21,13 +21,13 @@ npm i -D @aurabase/gen
|
|
|
21
21
|
### CLI `aurabase-gen`
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
npx aurabase-gen --url
|
|
24
|
+
npx aurabase-gen --url https://mon-projet.aurabase.cloud --key aura_anon_xxx --out database.types.ts
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
Options complètes :
|
|
28
28
|
|
|
29
29
|
```
|
|
30
|
-
aurabase-gen --url <
|
|
30
|
+
aurabase-gen --url <projectUrl> --key <apiKey> [--out database.types.ts] [--schema public] [--type-name Database]
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
Sans `--out`, la sortie est écrite sur `stdout` plutôt que dans un fichier.
|
|
@@ -58,14 +58,14 @@ const source = generateDatabaseTypes(tables, { schemaName: 'public', typeName: '
|
|
|
58
58
|
### Workflow complet (typage bout-en-bout avec `@aurabase/db`)
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
|
-
npx aurabase-gen --url
|
|
61
|
+
npx aurabase-gen --url https://mon-projet.aurabase.cloud --key aura_anon_xxx --out database.types.ts
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
```ts
|
|
65
65
|
import { createClient } from '@aurabase/aurabase-js'
|
|
66
66
|
import type { Database } from './database.types' // fichier généré à l'étape précédente
|
|
67
67
|
|
|
68
|
-
const aura = createClient<Database>('
|
|
68
|
+
const aura = createClient<Database>('https://mon-projet.aurabase.cloud', 'aura_anon_xxx')
|
|
69
69
|
|
|
70
70
|
// select()/insert()/update() sont désormais inférés depuis les colonnes réelles de `posts`.
|
|
71
71
|
const { data } = await aura.db.from('posts').select('id,title').eq('id', 'post-id').single()
|
package/dist/cli.cjs
CHANGED
|
@@ -217,7 +217,12 @@ function generateDatabaseTypes(tables, options = {}) {
|
|
|
217
217
|
const enums = options.enums ?? [];
|
|
218
218
|
const views = options.views ?? [];
|
|
219
219
|
const relationNames = new Set([...tables, ...views].map((r) => r.name));
|
|
220
|
-
const ctx = {
|
|
220
|
+
const ctx = {
|
|
221
|
+
typeName,
|
|
222
|
+
schemaName,
|
|
223
|
+
enumNames: new Set(enums.map((e) => e.name)),
|
|
224
|
+
relationNames
|
|
225
|
+
};
|
|
221
226
|
const functionsBody = genFunctionsBody(options.functions ?? [], ctx);
|
|
222
227
|
const enumsBody = genEnumsBody(enums);
|
|
223
228
|
const viewsBody = genViewsBody(views, ctx);
|
|
@@ -259,6 +264,16 @@ export interface ${typeName} {
|
|
|
259
264
|
}
|
|
260
265
|
|
|
261
266
|
// src/cli.ts
|
|
267
|
+
function diagnostiquerSchema(tables) {
|
|
268
|
+
if (tables.length === 0) {
|
|
269
|
+
return "Sch\xE9ma vide : aucune table. Les types g\xE9n\xE9r\xE9s seraient inutilisables.";
|
|
270
|
+
}
|
|
271
|
+
const vides = tables.filter((t) => !t.columns || t.columns.length === 0).map((t) => t.name);
|
|
272
|
+
if (vides.length > 0) {
|
|
273
|
+
return `Tables sans aucune colonne : ${vides.join(", ")}. Les types g\xE9n\xE9r\xE9s pour elles seraient \xAB Row: {} \xBB \u2014 sans garantie : ils acceptent n'importe quel champ et n'en garantissent aucun. C'est le cas d'un projet MongoDB, dont le sch\xE9ma n'est pas d\xE9clar\xE9. Utilisez --allow-empty pour g\xE9n\xE9rer quand m\xEAme.`;
|
|
274
|
+
}
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
262
277
|
function parseArgs(argv) {
|
|
263
278
|
const a = {};
|
|
264
279
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -268,10 +283,6 @@ function parseArgs(argv) {
|
|
|
268
283
|
a.url = v;
|
|
269
284
|
i++;
|
|
270
285
|
break;
|
|
271
|
-
case "--project":
|
|
272
|
-
a.project = v;
|
|
273
|
-
i++;
|
|
274
|
-
break;
|
|
275
286
|
case "--key":
|
|
276
287
|
a.key = v;
|
|
277
288
|
i++;
|
|
@@ -288,18 +299,22 @@ function parseArgs(argv) {
|
|
|
288
299
|
a.typeName = v;
|
|
289
300
|
i++;
|
|
290
301
|
break;
|
|
302
|
+
// A10 : échappatoire explicite pour générer malgré un schéma sans colonnes.
|
|
303
|
+
case "--allow-empty":
|
|
304
|
+
a.allowEmpty = true;
|
|
305
|
+
break;
|
|
291
306
|
}
|
|
292
307
|
}
|
|
293
308
|
return a;
|
|
294
309
|
}
|
|
295
|
-
var USAGE = `Usage: aurabase-gen --url <
|
|
310
|
+
var USAGE = `Usage: aurabase-gen --url <projectUrl> --key <apiKey> [--out database.types.ts] [--schema public] [--type-name Database] [--allow-empty]`;
|
|
296
311
|
async function main() {
|
|
297
312
|
const args = parseArgs(process.argv.slice(2));
|
|
298
|
-
if (!args.url || !args.
|
|
313
|
+
if (!args.url || !args.key) {
|
|
299
314
|
console.error(USAGE);
|
|
300
315
|
process.exit(1);
|
|
301
316
|
}
|
|
302
|
-
const client = aurabaseJs.createClient(args.url, args.
|
|
317
|
+
const client = aurabaseJs.createClient(args.url, args.key);
|
|
303
318
|
const { data, error } = await client.db.schema();
|
|
304
319
|
if (error) {
|
|
305
320
|
console.error(`[aurabase-gen] Erreur de r\xE9cup\xE9ration du sch\xE9ma : ${error.message}`);
|
|
@@ -309,8 +324,12 @@ async function main() {
|
|
|
309
324
|
const functions = data?.functions ?? [];
|
|
310
325
|
const enums = data?.enums ?? [];
|
|
311
326
|
const views = data?.views ?? [];
|
|
312
|
-
|
|
313
|
-
|
|
327
|
+
const probleme = diagnostiquerSchema(tables);
|
|
328
|
+
if (probleme && !args.allowEmpty) {
|
|
329
|
+
console.error(`[aurabase-gen] ${probleme}`);
|
|
330
|
+
process.exit(1);
|
|
331
|
+
} else if (probleme) {
|
|
332
|
+
console.error(`[aurabase-gen] Avertissement (--allow-empty) : ${probleme}`);
|
|
314
333
|
}
|
|
315
334
|
const output = generateDatabaseTypes(tables, {
|
|
316
335
|
schemaName: args.schema,
|
|
@@ -328,7 +347,11 @@ async function main() {
|
|
|
328
347
|
process.stdout.write(output);
|
|
329
348
|
}
|
|
330
349
|
}
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
350
|
+
if (process.argv[1] && /aurabase-gen|cli\.(ts|js|mjs|cjs)$/.test(process.argv[1])) {
|
|
351
|
+
main().catch((e) => {
|
|
352
|
+
console.error("[aurabase-gen]", e instanceof Error ? e.message : e);
|
|
353
|
+
process.exit(1);
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
exports.diagnostiquerSchema = diagnostiquerSchema;
|
package/dist/cli.d.cts
CHANGED
|
@@ -1 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* A10 — refuse de faire passer pour un succès un typage qui ne garantit rien.
|
|
4
|
+
*
|
|
5
|
+
* Un projet MongoDB rend un schéma dont chaque table a `columns: []` (le moteur n'a pas de
|
|
6
|
+
* schéma déclaré) : le générateur écrivait alors `Row: {}` — un type qui accepte n'importe
|
|
7
|
+
* quel champ et n'en garantit aucun — puis sortait en **code 0**. Une CI qui régénère les
|
|
8
|
+
* types ne voyait rien du tout : le garde-fou de typage disparaissait en silence.
|
|
9
|
+
*
|
|
10
|
+
* Retourne `null` si le schéma est exploitable, sinon le message à afficher.
|
|
11
|
+
*/
|
|
12
|
+
declare function diagnostiquerSchema(tables: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
columns?: unknown[];
|
|
15
|
+
}>): string | null;
|
|
16
|
+
|
|
17
|
+
export { diagnostiquerSchema };
|
package/dist/cli.d.ts
CHANGED
|
@@ -1 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* A10 — refuse de faire passer pour un succès un typage qui ne garantit rien.
|
|
4
|
+
*
|
|
5
|
+
* Un projet MongoDB rend un schéma dont chaque table a `columns: []` (le moteur n'a pas de
|
|
6
|
+
* schéma déclaré) : le générateur écrivait alors `Row: {}` — un type qui accepte n'importe
|
|
7
|
+
* quel champ et n'en garantit aucun — puis sortait en **code 0**. Une CI qui régénère les
|
|
8
|
+
* types ne voyait rien du tout : le garde-fou de typage disparaissait en silence.
|
|
9
|
+
*
|
|
10
|
+
* Retourne `null` si le schéma est exploitable, sinon le message à afficher.
|
|
11
|
+
*/
|
|
12
|
+
declare function diagnostiquerSchema(tables: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
columns?: unknown[];
|
|
15
|
+
}>): string | null;
|
|
16
|
+
|
|
17
|
+
export { diagnostiquerSchema };
|
package/dist/cli.js
CHANGED
|
@@ -215,7 +215,12 @@ function generateDatabaseTypes(tables, options = {}) {
|
|
|
215
215
|
const enums = options.enums ?? [];
|
|
216
216
|
const views = options.views ?? [];
|
|
217
217
|
const relationNames = new Set([...tables, ...views].map((r) => r.name));
|
|
218
|
-
const ctx = {
|
|
218
|
+
const ctx = {
|
|
219
|
+
typeName,
|
|
220
|
+
schemaName,
|
|
221
|
+
enumNames: new Set(enums.map((e) => e.name)),
|
|
222
|
+
relationNames
|
|
223
|
+
};
|
|
219
224
|
const functionsBody = genFunctionsBody(options.functions ?? [], ctx);
|
|
220
225
|
const enumsBody = genEnumsBody(enums);
|
|
221
226
|
const viewsBody = genViewsBody(views, ctx);
|
|
@@ -257,6 +262,16 @@ export interface ${typeName} {
|
|
|
257
262
|
}
|
|
258
263
|
|
|
259
264
|
// src/cli.ts
|
|
265
|
+
function diagnostiquerSchema(tables) {
|
|
266
|
+
if (tables.length === 0) {
|
|
267
|
+
return "Sch\xE9ma vide : aucune table. Les types g\xE9n\xE9r\xE9s seraient inutilisables.";
|
|
268
|
+
}
|
|
269
|
+
const vides = tables.filter((t) => !t.columns || t.columns.length === 0).map((t) => t.name);
|
|
270
|
+
if (vides.length > 0) {
|
|
271
|
+
return `Tables sans aucune colonne : ${vides.join(", ")}. Les types g\xE9n\xE9r\xE9s pour elles seraient \xAB Row: {} \xBB \u2014 sans garantie : ils acceptent n'importe quel champ et n'en garantissent aucun. C'est le cas d'un projet MongoDB, dont le sch\xE9ma n'est pas d\xE9clar\xE9. Utilisez --allow-empty pour g\xE9n\xE9rer quand m\xEAme.`;
|
|
272
|
+
}
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
260
275
|
function parseArgs(argv) {
|
|
261
276
|
const a = {};
|
|
262
277
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -266,10 +281,6 @@ function parseArgs(argv) {
|
|
|
266
281
|
a.url = v;
|
|
267
282
|
i++;
|
|
268
283
|
break;
|
|
269
|
-
case "--project":
|
|
270
|
-
a.project = v;
|
|
271
|
-
i++;
|
|
272
|
-
break;
|
|
273
284
|
case "--key":
|
|
274
285
|
a.key = v;
|
|
275
286
|
i++;
|
|
@@ -286,18 +297,22 @@ function parseArgs(argv) {
|
|
|
286
297
|
a.typeName = v;
|
|
287
298
|
i++;
|
|
288
299
|
break;
|
|
300
|
+
// A10 : échappatoire explicite pour générer malgré un schéma sans colonnes.
|
|
301
|
+
case "--allow-empty":
|
|
302
|
+
a.allowEmpty = true;
|
|
303
|
+
break;
|
|
289
304
|
}
|
|
290
305
|
}
|
|
291
306
|
return a;
|
|
292
307
|
}
|
|
293
|
-
var USAGE = `Usage: aurabase-gen --url <
|
|
308
|
+
var USAGE = `Usage: aurabase-gen --url <projectUrl> --key <apiKey> [--out database.types.ts] [--schema public] [--type-name Database] [--allow-empty]`;
|
|
294
309
|
async function main() {
|
|
295
310
|
const args = parseArgs(process.argv.slice(2));
|
|
296
|
-
if (!args.url || !args.
|
|
311
|
+
if (!args.url || !args.key) {
|
|
297
312
|
console.error(USAGE);
|
|
298
313
|
process.exit(1);
|
|
299
314
|
}
|
|
300
|
-
const client = createClient(args.url, args.
|
|
315
|
+
const client = createClient(args.url, args.key);
|
|
301
316
|
const { data, error } = await client.db.schema();
|
|
302
317
|
if (error) {
|
|
303
318
|
console.error(`[aurabase-gen] Erreur de r\xE9cup\xE9ration du sch\xE9ma : ${error.message}`);
|
|
@@ -307,8 +322,12 @@ async function main() {
|
|
|
307
322
|
const functions = data?.functions ?? [];
|
|
308
323
|
const enums = data?.enums ?? [];
|
|
309
324
|
const views = data?.views ?? [];
|
|
310
|
-
|
|
311
|
-
|
|
325
|
+
const probleme = diagnostiquerSchema(tables);
|
|
326
|
+
if (probleme && !args.allowEmpty) {
|
|
327
|
+
console.error(`[aurabase-gen] ${probleme}`);
|
|
328
|
+
process.exit(1);
|
|
329
|
+
} else if (probleme) {
|
|
330
|
+
console.error(`[aurabase-gen] Avertissement (--allow-empty) : ${probleme}`);
|
|
312
331
|
}
|
|
313
332
|
const output = generateDatabaseTypes(tables, {
|
|
314
333
|
schemaName: args.schema,
|
|
@@ -326,7 +345,11 @@ async function main() {
|
|
|
326
345
|
process.stdout.write(output);
|
|
327
346
|
}
|
|
328
347
|
}
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
348
|
+
if (process.argv[1] && /aurabase-gen|cli\.(ts|js|mjs|cjs)$/.test(process.argv[1])) {
|
|
349
|
+
main().catch((e) => {
|
|
350
|
+
console.error("[aurabase-gen]", e instanceof Error ? e.message : e);
|
|
351
|
+
process.exit(1);
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
export { diagnostiquerSchema };
|
package/dist/index.cjs
CHANGED
|
@@ -213,7 +213,12 @@ function generateDatabaseTypes(tables, options = {}) {
|
|
|
213
213
|
const enums = options.enums ?? [];
|
|
214
214
|
const views = options.views ?? [];
|
|
215
215
|
const relationNames = new Set([...tables, ...views].map((r) => r.name));
|
|
216
|
-
const ctx = {
|
|
216
|
+
const ctx = {
|
|
217
|
+
typeName,
|
|
218
|
+
schemaName,
|
|
219
|
+
enumNames: new Set(enums.map((e) => e.name)),
|
|
220
|
+
relationNames
|
|
221
|
+
};
|
|
217
222
|
const functionsBody = genFunctionsBody(options.functions ?? [], ctx);
|
|
218
223
|
const enumsBody = genEnumsBody(enums);
|
|
219
224
|
const viewsBody = genViewsBody(views, ctx);
|
package/dist/index.js
CHANGED
|
@@ -211,7 +211,12 @@ function generateDatabaseTypes(tables, options = {}) {
|
|
|
211
211
|
const enums = options.enums ?? [];
|
|
212
212
|
const views = options.views ?? [];
|
|
213
213
|
const relationNames = new Set([...tables, ...views].map((r) => r.name));
|
|
214
|
-
const ctx = {
|
|
214
|
+
const ctx = {
|
|
215
|
+
typeName,
|
|
216
|
+
schemaName,
|
|
217
|
+
enumNames: new Set(enums.map((e) => e.name)),
|
|
218
|
+
relationNames
|
|
219
|
+
};
|
|
215
220
|
const functionsBody = genFunctionsBody(options.functions ?? [], ctx);
|
|
216
221
|
const enumsBody = genEnumsBody(enums);
|
|
217
222
|
const viewsBody = genViewsBody(views, ctx);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aurabase/gen",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "Générateur de types TypeScript Database pour le SDK Aurabase (CLI aurabase-gen)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"url": "git+https://github.com/daylami555/aurabase.git",
|
|
38
38
|
"directory": "aurabase-js/packages/gen"
|
|
39
39
|
},
|
|
40
|
-
"homepage": "https://
|
|
40
|
+
"homepage": "https://aurabase.cloud",
|
|
41
41
|
"bugs": {
|
|
42
42
|
"url": "https://github.com/daylami555/aurabase/issues"
|
|
43
43
|
},
|
|
@@ -48,20 +48,21 @@
|
|
|
48
48
|
"generator",
|
|
49
49
|
"types"
|
|
50
50
|
],
|
|
51
|
-
"dependencies": {
|
|
52
|
-
"@aurabase/core": "0.4.1",
|
|
53
|
-
"@aurabase/aurabase-js": "0.4.1"
|
|
54
|
-
},
|
|
55
|
-
"devDependencies": {
|
|
56
|
-
"tsup": "^8.0.0",
|
|
57
|
-
"typescript": "^5.5.0",
|
|
58
|
-
"vitest": "^4.1.6",
|
|
59
|
-
"@types/node": "20.14.15"
|
|
60
|
-
},
|
|
61
51
|
"scripts": {
|
|
62
52
|
"build": "tsup",
|
|
63
53
|
"test": "vitest run --passWithNoTests",
|
|
64
54
|
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.test.json",
|
|
55
|
+
"prepack": "pnpm build",
|
|
65
56
|
"typecheck:tests": "tsc --noEmit -p tsconfig.test.json"
|
|
57
|
+
},
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"@aurabase/core": "workspace:*",
|
|
60
|
+
"@aurabase/aurabase-js": "workspace:*"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"tsup": "catalog:",
|
|
64
|
+
"typescript": "catalog:",
|
|
65
|
+
"vitest": "catalog:",
|
|
66
|
+
"@types/node": "catalog:"
|
|
66
67
|
}
|
|
67
|
-
}
|
|
68
|
+
}
|