@aurabase/gen 0.4.0 → 0.5.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.
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 http://localhost:8080 --project my-project --key aura_anon_xxx --out database.types.ts
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 <baseUrl> --project <id> [--key <apiKey>] [--out database.types.ts] [--schema public] [--type-name Database]
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 http://localhost:8080 --project my-project --key aura_anon_xxx --out database.types.ts
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>('http://localhost:8080', 'my-project', 'aura_anon_xxx')
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 = { typeName, schemaName, enumNames: new Set(enums.map((e) => e.name)), relationNames };
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 <baseUrl> --project <id> [--key <apiKey>] [--out database.types.ts] [--schema public] [--type-name Database]`;
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.project) {
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.project, args.key);
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
- if (tables.length === 0) {
313
- console.error("[aurabase-gen] Avertissement : sch\xE9ma vide (aucune table).");
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
- main().catch((e) => {
332
- console.error("[aurabase-gen]", e instanceof Error ? e.message : e);
333
- process.exit(1);
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 = { typeName, schemaName, enumNames: new Set(enums.map((e) => e.name)), relationNames };
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 <baseUrl> --project <id> [--key <apiKey>] [--out database.types.ts] [--schema public] [--type-name Database]`;
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.project) {
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.project, args.key);
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
- if (tables.length === 0) {
311
- console.error("[aurabase-gen] Avertissement : sch\xE9ma vide (aucune table).");
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
- main().catch((e) => {
330
- console.error("[aurabase-gen]", e instanceof Error ? e.message : e);
331
- process.exit(1);
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 = { typeName, schemaName, enumNames: new Set(enums.map((e) => e.name)), relationNames };
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 = { typeName, schemaName, enumNames: new Set(enums.map((e) => e.name)), relationNames };
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.4.0",
3
+ "version": "0.5.0",
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",
@@ -49,8 +49,8 @@
49
49
  "types"
50
50
  ],
51
51
  "dependencies": {
52
- "@aurabase/core": "0.4.0",
53
- "@aurabase/aurabase-js": "0.4.0"
52
+ "@aurabase/core": "0.5.0",
53
+ "@aurabase/aurabase-js": "0.5.0"
54
54
  },
55
55
  "devDependencies": {
56
56
  "tsup": "^8.0.0",
@@ -61,6 +61,7 @@
61
61
  "scripts": {
62
62
  "build": "tsup",
63
63
  "test": "vitest run --passWithNoTests",
64
- "typecheck": "tsc --noEmit"
64
+ "typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.test.json",
65
+ "typecheck:tests": "tsc --noEmit -p tsconfig.test.json"
65
66
  }
66
67
  }