prisma-flare 1.1.5 → 1.1.7

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.
@@ -349,6 +349,11 @@ function resolvePrismaClientPath(rootDir, output) {
349
349
  }
350
350
  const schemaDir = path4.join(rootDir, "prisma");
351
351
  const absolutePath = path4.resolve(schemaDir, output);
352
+ const clientEntryPath = path4.join(absolutePath, "client.ts");
353
+ const clientEntryPathJs = path4.join(absolutePath, "client.js");
354
+ if (fs4.existsSync(clientEntryPath) || fs4.existsSync(clientEntryPathJs)) {
355
+ return path4.join(absolutePath, "client");
356
+ }
352
357
  return absolutePath;
353
358
  }
354
359
  function getPrismaClientPath(rootDir) {
@@ -380,27 +385,24 @@ function generateClient() {
380
385
  } else {
381
386
  prismaClientImport = getPrismaClientPath(rootDir);
382
387
  }
388
+ const isCustomOutput = hasCustomPrismaOutput(rootDir);
389
+ if (isCustomOutput || config.prismaClientPath && config.prismaClientPath !== "@prisma/client") {
390
+ generateNextToPrismaClient(rootDir, prismaClientImport);
391
+ generateErrorStubInNodeModules(rootDir, prismaClientImport);
392
+ } else {
393
+ generateInNodeModules(rootDir);
394
+ }
395
+ }
396
+ function generateInNodeModules(rootDir) {
383
397
  const nodeModulesDir = path5.join(rootDir, "node_modules");
384
398
  const prismaFlareDir = path5.join(nodeModulesDir, ".prisma-flare");
385
399
  if (!fs5.existsSync(prismaFlareDir)) {
386
400
  fs5.mkdirSync(prismaFlareDir, { recursive: true });
387
401
  }
388
- let resolvedImport;
389
- if (prismaClientImport === "@prisma/client") {
390
- resolvedImport = "@prisma/client";
391
- } else {
392
- resolvedImport = path5.relative(prismaFlareDir, prismaClientImport);
393
- if (!resolvedImport.startsWith(".")) {
394
- resolvedImport = "./" + resolvedImport;
395
- }
396
- resolvedImport = resolvedImport.replace(/\\/g, "/");
397
- }
398
- const isCustomOutput = hasCustomPrismaOutput(rootDir);
399
402
  const esmContent = `// Generated by prisma-flare - DO NOT EDIT
400
403
  // This file provides FlareClient configured for your Prisma client output path
401
- // Import path: ${prismaClientImport}
402
404
 
403
- import { PrismaClient, Prisma } from '${resolvedImport}';
405
+ import { PrismaClient, Prisma } from '@prisma/client';
404
406
  import { createFlareClient } from 'prisma-flare';
405
407
 
406
408
  // Create and export FlareClient using the factory
@@ -411,9 +413,8 @@ export { PrismaClient, Prisma };
411
413
  `;
412
414
  const cjsContent = `// Generated by prisma-flare - DO NOT EDIT
413
415
  // This file provides FlareClient configured for your Prisma client output path
414
- // Import path: ${prismaClientImport}
415
416
 
416
- const { PrismaClient, Prisma } = require('${resolvedImport}');
417
+ const { PrismaClient, Prisma } = require('@prisma/client');
417
418
  const { createFlareClient } = require('prisma-flare');
418
419
 
419
420
  // Create FlareClient using the factory
@@ -428,7 +429,7 @@ module.exports = {
428
429
  const dtsContent = `// Generated by prisma-flare - DO NOT EDIT
429
430
  // This file provides FlareClient configured for your Prisma client output path
430
431
 
431
- import { PrismaClient as BasePrismaClient, Prisma as BasePrisma } from '${resolvedImport}';
432
+ import { PrismaClient as BasePrismaClient, Prisma as BasePrisma } from '@prisma/client';
432
433
  import type { FlareClientOptions } from 'prisma-flare';
433
434
  import type { ModelName } from 'prisma-flare';
434
435
  import type FlareBuilder from 'prisma-flare/flareBuilder';
@@ -481,15 +482,145 @@ export declare class FlareClient extends BasePrismaClient {
481
482
  path5.join(prismaFlareDir, "package.json"),
482
483
  JSON.stringify(packageJson, null, 2)
483
484
  );
484
- if (isCustomOutput) {
485
- console.log(`\u2705 Generated prisma-flare client with custom Prisma output: ${prismaClientImport}`);
486
- } else {
487
- console.log(`\u2705 Generated prisma-flare client using @prisma/client`);
488
- }
485
+ console.log(`\u2705 Generated prisma-flare client using @prisma/client`);
489
486
  console.log(` Location: ${prismaFlareDir}`);
490
487
  console.log(`
491
488
  Import: import { FlareClient } from 'prisma-flare';`);
492
489
  }
490
+ function generateErrorStubInNodeModules(rootDir, prismaClientImport) {
491
+ const nodeModulesDir = path5.join(rootDir, "node_modules");
492
+ const prismaFlareDir = path5.join(nodeModulesDir, ".prisma-flare");
493
+ if (!fs5.existsSync(prismaFlareDir)) {
494
+ fs5.mkdirSync(prismaFlareDir, { recursive: true });
495
+ }
496
+ let prismaOutputDir = prismaClientImport;
497
+ if (prismaOutputDir.endsWith("/client") || prismaOutputDir.endsWith("\\client")) {
498
+ prismaOutputDir = path5.dirname(prismaOutputDir);
499
+ }
500
+ const relativeFlareDir = path5.relative(rootDir, prismaOutputDir);
501
+ const correctImportPath = "./" + path5.join(relativeFlareDir, "flare").replace(/\\/g, "/");
502
+ const errorMessage = `
503
+ You are using a custom Prisma output path.
504
+
505
+ Instead of importing from 'prisma-flare', import from your generated flare file:
506
+
507
+ import { FlareClient } from '${correctImportPath}';
508
+
509
+ Run 'npx prisma-flare generate' after 'npx prisma generate' to regenerate.
510
+ `.trim();
511
+ const esmContent = `// Generated by prisma-flare - DO NOT EDIT
512
+ // This project uses a custom Prisma output path.
513
+ // You must import from the generated flare.ts file instead.
514
+
515
+ throw new Error(\`${errorMessage.replace(/`/g, "\\`")}\`);
516
+ `;
517
+ const cjsContent = `// Generated by prisma-flare - DO NOT EDIT
518
+ // This project uses a custom Prisma output path.
519
+ // You must import from the generated flare.ts file instead.
520
+
521
+ throw new Error(\`${errorMessage.replace(/`/g, "\\`")}\`);
522
+ `;
523
+ const dtsContent = `// Generated by prisma-flare - DO NOT EDIT
524
+ // This project uses a custom Prisma output path.
525
+ //
526
+ // DO NOT import from 'prisma-flare' - import from your generated flare file:
527
+ //
528
+ // import { FlareClient } from '${correctImportPath}';
529
+ //
530
+
531
+ /** @deprecated Import from '${correctImportPath}' instead */
532
+ export declare const FlareClient: never;
533
+
534
+ /** @deprecated Import from '${correctImportPath}' instead */
535
+ export declare const PrismaClient: never;
536
+
537
+ /** @deprecated Import from '${correctImportPath}' instead */
538
+ export declare const Prisma: never;
539
+ `;
540
+ fs5.writeFileSync(path5.join(prismaFlareDir, "index.js"), esmContent);
541
+ fs5.writeFileSync(path5.join(prismaFlareDir, "index.cjs"), cjsContent);
542
+ fs5.writeFileSync(path5.join(prismaFlareDir, "index.d.ts"), dtsContent);
543
+ const packageJson = {
544
+ name: ".prisma-flare",
545
+ version: "0.0.0",
546
+ main: "./index.cjs",
547
+ module: "./index.js",
548
+ types: "./index.d.ts",
549
+ type: "module",
550
+ exports: {
551
+ ".": {
552
+ types: "./index.d.ts",
553
+ import: "./index.js",
554
+ require: "./index.cjs"
555
+ }
556
+ }
557
+ };
558
+ fs5.writeFileSync(
559
+ path5.join(prismaFlareDir, "package.json"),
560
+ JSON.stringify(packageJson, null, 2)
561
+ );
562
+ }
563
+ function generateNextToPrismaClient(rootDir, prismaClientImport) {
564
+ let prismaOutputDir = prismaClientImport;
565
+ if (prismaOutputDir.endsWith("/client") || prismaOutputDir.endsWith("\\client")) {
566
+ prismaOutputDir = path5.dirname(prismaOutputDir);
567
+ }
568
+ const hasClientEntry = fs5.existsSync(path5.join(prismaOutputDir, "client.ts")) || fs5.existsSync(path5.join(prismaOutputDir, "client.js"));
569
+ const prismaImportPath = hasClientEntry ? "./client" : "./index";
570
+ const flareFilePath = path5.join(prismaOutputDir, "flare.ts");
571
+ const flareContent = `// Generated by prisma-flare - DO NOT EDIT
572
+ // This file provides FlareClient configured for your Prisma client
573
+ // Re-run 'npx prisma-flare generate' after 'npx prisma generate'
574
+
575
+ import { PrismaClient, Prisma } from '${prismaImportPath}';
576
+ import { createFlareClient } from 'prisma-flare';
577
+
578
+ // Create and export FlareClient using the factory
579
+ export const FlareClient = createFlareClient(PrismaClient, Prisma);
580
+
581
+ // Re-export PrismaClient and Prisma for convenience
582
+ export { PrismaClient, Prisma };
583
+
584
+ // Re-export types from prisma-flare for convenience
585
+ export type { FlareClientOptions, ModelName } from 'prisma-flare';
586
+ export { default as FlareBuilder } from 'prisma-flare/flareBuilder';
587
+ `;
588
+ const flareDtsPath = path5.join(prismaOutputDir, "flare.d.ts");
589
+ const flareDtsContent = `// Generated by prisma-flare - DO NOT EDIT
590
+ // TypeScript declarations for FlareClient
591
+
592
+ import { PrismaClient as BasePrismaClient, Prisma as BasePrisma } from '${prismaImportPath}';
593
+ import type { FlareClientOptions, ModelName } from 'prisma-flare';
594
+ import type FlareBuilder from 'prisma-flare/flareBuilder';
595
+
596
+ // Re-export PrismaClient and Prisma
597
+ export { BasePrismaClient as PrismaClient, BasePrisma as Prisma };
598
+
599
+ // Re-export types from prisma-flare
600
+ export type { FlareClientOptions, ModelName };
601
+ export { FlareBuilder };
602
+
603
+ // FlareClient type that extends the project's PrismaClient
604
+ export declare const FlareClient: {
605
+ new (options?: FlareClientOptions): BasePrismaClient & {
606
+ from<T extends ModelName>(modelName: T): FlareBuilder<T>;
607
+ transaction<R>(
608
+ fn: (tx: BasePrismaClient) => Promise<R>,
609
+ options?: { maxWait?: number; timeout?: number; isolationLevel?: any }
610
+ ): Promise<R>;
611
+ };
612
+ };
613
+ `;
614
+ fs5.writeFileSync(flareFilePath, flareContent);
615
+ fs5.writeFileSync(flareDtsPath, flareDtsContent);
616
+ const relativeFlareDir = path5.relative(rootDir, prismaOutputDir);
617
+ const relativeImportPath = "./" + path5.join(relativeFlareDir, "flare").replace(/\\/g, "/");
618
+ console.log(`\u2705 Generated prisma-flare client with custom Prisma output`);
619
+ console.log(` Location: ${prismaOutputDir}`);
620
+ console.log(` Files: flare.ts, flare.d.ts`);
621
+ console.log(`
622
+ Import: import { FlareClient } from '${relativeImportPath}';`);
623
+ }
493
624
 
494
625
  // src/cli/index.ts
495
626
  var import_child_process = require("child_process");
package/dist/cli/index.js CHANGED
@@ -326,6 +326,11 @@ function resolvePrismaClientPath(rootDir, output) {
326
326
  }
327
327
  const schemaDir = path4.join(rootDir, "prisma");
328
328
  const absolutePath = path4.resolve(schemaDir, output);
329
+ const clientEntryPath = path4.join(absolutePath, "client.ts");
330
+ const clientEntryPathJs = path4.join(absolutePath, "client.js");
331
+ if (fs4.existsSync(clientEntryPath) || fs4.existsSync(clientEntryPathJs)) {
332
+ return path4.join(absolutePath, "client");
333
+ }
329
334
  return absolutePath;
330
335
  }
331
336
  function getPrismaClientPath(rootDir) {
@@ -357,27 +362,24 @@ function generateClient() {
357
362
  } else {
358
363
  prismaClientImport = getPrismaClientPath(rootDir);
359
364
  }
365
+ const isCustomOutput = hasCustomPrismaOutput(rootDir);
366
+ if (isCustomOutput || config.prismaClientPath && config.prismaClientPath !== "@prisma/client") {
367
+ generateNextToPrismaClient(rootDir, prismaClientImport);
368
+ generateErrorStubInNodeModules(rootDir, prismaClientImport);
369
+ } else {
370
+ generateInNodeModules(rootDir);
371
+ }
372
+ }
373
+ function generateInNodeModules(rootDir) {
360
374
  const nodeModulesDir = path5.join(rootDir, "node_modules");
361
375
  const prismaFlareDir = path5.join(nodeModulesDir, ".prisma-flare");
362
376
  if (!fs5.existsSync(prismaFlareDir)) {
363
377
  fs5.mkdirSync(prismaFlareDir, { recursive: true });
364
378
  }
365
- let resolvedImport;
366
- if (prismaClientImport === "@prisma/client") {
367
- resolvedImport = "@prisma/client";
368
- } else {
369
- resolvedImport = path5.relative(prismaFlareDir, prismaClientImport);
370
- if (!resolvedImport.startsWith(".")) {
371
- resolvedImport = "./" + resolvedImport;
372
- }
373
- resolvedImport = resolvedImport.replace(/\\/g, "/");
374
- }
375
- const isCustomOutput = hasCustomPrismaOutput(rootDir);
376
379
  const esmContent = `// Generated by prisma-flare - DO NOT EDIT
377
380
  // This file provides FlareClient configured for your Prisma client output path
378
- // Import path: ${prismaClientImport}
379
381
 
380
- import { PrismaClient, Prisma } from '${resolvedImport}';
382
+ import { PrismaClient, Prisma } from '@prisma/client';
381
383
  import { createFlareClient } from 'prisma-flare';
382
384
 
383
385
  // Create and export FlareClient using the factory
@@ -388,9 +390,8 @@ export { PrismaClient, Prisma };
388
390
  `;
389
391
  const cjsContent = `// Generated by prisma-flare - DO NOT EDIT
390
392
  // This file provides FlareClient configured for your Prisma client output path
391
- // Import path: ${prismaClientImport}
392
393
 
393
- const { PrismaClient, Prisma } = require('${resolvedImport}');
394
+ const { PrismaClient, Prisma } = require('@prisma/client');
394
395
  const { createFlareClient } = require('prisma-flare');
395
396
 
396
397
  // Create FlareClient using the factory
@@ -405,7 +406,7 @@ module.exports = {
405
406
  const dtsContent = `// Generated by prisma-flare - DO NOT EDIT
406
407
  // This file provides FlareClient configured for your Prisma client output path
407
408
 
408
- import { PrismaClient as BasePrismaClient, Prisma as BasePrisma } from '${resolvedImport}';
409
+ import { PrismaClient as BasePrismaClient, Prisma as BasePrisma } from '@prisma/client';
409
410
  import type { FlareClientOptions } from 'prisma-flare';
410
411
  import type { ModelName } from 'prisma-flare';
411
412
  import type FlareBuilder from 'prisma-flare/flareBuilder';
@@ -458,15 +459,145 @@ export declare class FlareClient extends BasePrismaClient {
458
459
  path5.join(prismaFlareDir, "package.json"),
459
460
  JSON.stringify(packageJson, null, 2)
460
461
  );
461
- if (isCustomOutput) {
462
- console.log(`\u2705 Generated prisma-flare client with custom Prisma output: ${prismaClientImport}`);
463
- } else {
464
- console.log(`\u2705 Generated prisma-flare client using @prisma/client`);
465
- }
462
+ console.log(`\u2705 Generated prisma-flare client using @prisma/client`);
466
463
  console.log(` Location: ${prismaFlareDir}`);
467
464
  console.log(`
468
465
  Import: import { FlareClient } from 'prisma-flare';`);
469
466
  }
467
+ function generateErrorStubInNodeModules(rootDir, prismaClientImport) {
468
+ const nodeModulesDir = path5.join(rootDir, "node_modules");
469
+ const prismaFlareDir = path5.join(nodeModulesDir, ".prisma-flare");
470
+ if (!fs5.existsSync(prismaFlareDir)) {
471
+ fs5.mkdirSync(prismaFlareDir, { recursive: true });
472
+ }
473
+ let prismaOutputDir = prismaClientImport;
474
+ if (prismaOutputDir.endsWith("/client") || prismaOutputDir.endsWith("\\client")) {
475
+ prismaOutputDir = path5.dirname(prismaOutputDir);
476
+ }
477
+ const relativeFlareDir = path5.relative(rootDir, prismaOutputDir);
478
+ const correctImportPath = "./" + path5.join(relativeFlareDir, "flare").replace(/\\/g, "/");
479
+ const errorMessage = `
480
+ You are using a custom Prisma output path.
481
+
482
+ Instead of importing from 'prisma-flare', import from your generated flare file:
483
+
484
+ import { FlareClient } from '${correctImportPath}';
485
+
486
+ Run 'npx prisma-flare generate' after 'npx prisma generate' to regenerate.
487
+ `.trim();
488
+ const esmContent = `// Generated by prisma-flare - DO NOT EDIT
489
+ // This project uses a custom Prisma output path.
490
+ // You must import from the generated flare.ts file instead.
491
+
492
+ throw new Error(\`${errorMessage.replace(/`/g, "\\`")}\`);
493
+ `;
494
+ const cjsContent = `// Generated by prisma-flare - DO NOT EDIT
495
+ // This project uses a custom Prisma output path.
496
+ // You must import from the generated flare.ts file instead.
497
+
498
+ throw new Error(\`${errorMessage.replace(/`/g, "\\`")}\`);
499
+ `;
500
+ const dtsContent = `// Generated by prisma-flare - DO NOT EDIT
501
+ // This project uses a custom Prisma output path.
502
+ //
503
+ // DO NOT import from 'prisma-flare' - import from your generated flare file:
504
+ //
505
+ // import { FlareClient } from '${correctImportPath}';
506
+ //
507
+
508
+ /** @deprecated Import from '${correctImportPath}' instead */
509
+ export declare const FlareClient: never;
510
+
511
+ /** @deprecated Import from '${correctImportPath}' instead */
512
+ export declare const PrismaClient: never;
513
+
514
+ /** @deprecated Import from '${correctImportPath}' instead */
515
+ export declare const Prisma: never;
516
+ `;
517
+ fs5.writeFileSync(path5.join(prismaFlareDir, "index.js"), esmContent);
518
+ fs5.writeFileSync(path5.join(prismaFlareDir, "index.cjs"), cjsContent);
519
+ fs5.writeFileSync(path5.join(prismaFlareDir, "index.d.ts"), dtsContent);
520
+ const packageJson = {
521
+ name: ".prisma-flare",
522
+ version: "0.0.0",
523
+ main: "./index.cjs",
524
+ module: "./index.js",
525
+ types: "./index.d.ts",
526
+ type: "module",
527
+ exports: {
528
+ ".": {
529
+ types: "./index.d.ts",
530
+ import: "./index.js",
531
+ require: "./index.cjs"
532
+ }
533
+ }
534
+ };
535
+ fs5.writeFileSync(
536
+ path5.join(prismaFlareDir, "package.json"),
537
+ JSON.stringify(packageJson, null, 2)
538
+ );
539
+ }
540
+ function generateNextToPrismaClient(rootDir, prismaClientImport) {
541
+ let prismaOutputDir = prismaClientImport;
542
+ if (prismaOutputDir.endsWith("/client") || prismaOutputDir.endsWith("\\client")) {
543
+ prismaOutputDir = path5.dirname(prismaOutputDir);
544
+ }
545
+ const hasClientEntry = fs5.existsSync(path5.join(prismaOutputDir, "client.ts")) || fs5.existsSync(path5.join(prismaOutputDir, "client.js"));
546
+ const prismaImportPath = hasClientEntry ? "./client" : "./index";
547
+ const flareFilePath = path5.join(prismaOutputDir, "flare.ts");
548
+ const flareContent = `// Generated by prisma-flare - DO NOT EDIT
549
+ // This file provides FlareClient configured for your Prisma client
550
+ // Re-run 'npx prisma-flare generate' after 'npx prisma generate'
551
+
552
+ import { PrismaClient, Prisma } from '${prismaImportPath}';
553
+ import { createFlareClient } from 'prisma-flare';
554
+
555
+ // Create and export FlareClient using the factory
556
+ export const FlareClient = createFlareClient(PrismaClient, Prisma);
557
+
558
+ // Re-export PrismaClient and Prisma for convenience
559
+ export { PrismaClient, Prisma };
560
+
561
+ // Re-export types from prisma-flare for convenience
562
+ export type { FlareClientOptions, ModelName } from 'prisma-flare';
563
+ export { default as FlareBuilder } from 'prisma-flare/flareBuilder';
564
+ `;
565
+ const flareDtsPath = path5.join(prismaOutputDir, "flare.d.ts");
566
+ const flareDtsContent = `// Generated by prisma-flare - DO NOT EDIT
567
+ // TypeScript declarations for FlareClient
568
+
569
+ import { PrismaClient as BasePrismaClient, Prisma as BasePrisma } from '${prismaImportPath}';
570
+ import type { FlareClientOptions, ModelName } from 'prisma-flare';
571
+ import type FlareBuilder from 'prisma-flare/flareBuilder';
572
+
573
+ // Re-export PrismaClient and Prisma
574
+ export { BasePrismaClient as PrismaClient, BasePrisma as Prisma };
575
+
576
+ // Re-export types from prisma-flare
577
+ export type { FlareClientOptions, ModelName };
578
+ export { FlareBuilder };
579
+
580
+ // FlareClient type that extends the project's PrismaClient
581
+ export declare const FlareClient: {
582
+ new (options?: FlareClientOptions): BasePrismaClient & {
583
+ from<T extends ModelName>(modelName: T): FlareBuilder<T>;
584
+ transaction<R>(
585
+ fn: (tx: BasePrismaClient) => Promise<R>,
586
+ options?: { maxWait?: number; timeout?: number; isolationLevel?: any }
587
+ ): Promise<R>;
588
+ };
589
+ };
590
+ `;
591
+ fs5.writeFileSync(flareFilePath, flareContent);
592
+ fs5.writeFileSync(flareDtsPath, flareDtsContent);
593
+ const relativeFlareDir = path5.relative(rootDir, prismaOutputDir);
594
+ const relativeImportPath = "./" + path5.join(relativeFlareDir, "flare").replace(/\\/g, "/");
595
+ console.log(`\u2705 Generated prisma-flare client with custom Prisma output`);
596
+ console.log(` Location: ${prismaOutputDir}`);
597
+ console.log(` Files: flare.ts, flare.d.ts`);
598
+ console.log(`
599
+ Import: import { FlareClient } from '${relativeImportPath}';`);
600
+ }
470
601
 
471
602
  // src/cli/index.ts
472
603
  import { spawn } from "child_process";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prisma-flare",
3
- "version": "1.1.5",
3
+ "version": "1.1.7",
4
4
  "description": "Prisma utilities package with callback system and query builder for chained operations",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
package/readme.md CHANGED
@@ -149,17 +149,43 @@ Example with custom plurals:
149
149
 
150
150
  ### Custom Prisma Output Path
151
151
 
152
- If you use a custom `output` in your Prisma schema, prisma-flare automatically detects and supports it:
152
+ If you use a custom `output` in your Prisma schema (common with Prisma 7+), prisma-flare automatically detects it and generates the FlareClient next to your Prisma client for full bundler compatibility (Turbopack, Webpack, Vite, etc.):
153
153
 
154
154
  ```prisma
155
155
  // schema.prisma
156
156
  generator client {
157
157
  provider = "prisma-client-js"
158
- output = "./generated/client" // Custom output path
158
+ output = "./generated" // Custom output path
159
159
  }
160
160
  ```
161
161
 
162
- Just run `npx prisma-flare generate` - it parses your `schema.prisma` and configures everything automatically. No extra configuration needed.
162
+ Run `npx prisma-flare generate` after `npx prisma generate`:
163
+
164
+ ```bash
165
+ npx prisma generate
166
+ npx prisma-flare generate
167
+ ```
168
+
169
+ This creates `flare.ts` next to your Prisma client:
170
+ ```
171
+ prisma/
172
+ generated/
173
+ client.ts ← Prisma generates this
174
+ flare.ts ← prisma-flare generates this
175
+ flare.d.ts ← TypeScript declarations
176
+ ```
177
+
178
+ **Import from the generated flare file:**
179
+
180
+ ```typescript
181
+ // prisma/db.ts
182
+ import './callbacks';
183
+ import { FlareClient } from './generated/flare'; // ← Different import path!
184
+
185
+ export const db = new FlareClient();
186
+ ```
187
+
188
+ > **Note:** With custom outputs, importing from `'prisma-flare'` directly will throw an error guiding you to the correct import path.
163
189
 
164
190
  **Manual override:** If auto-detection doesn't work, add to `prisma-flare.config.json`:
165
191