prisma-flare 1.1.7 → 1.1.8

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.
@@ -386,23 +386,32 @@ function generateClient() {
386
386
  prismaClientImport = getPrismaClientPath(rootDir);
387
387
  }
388
388
  const isCustomOutput = hasCustomPrismaOutput(rootDir);
389
+ generateInNodeModules(rootDir, prismaClientImport, isCustomOutput);
389
390
  if (isCustomOutput || config.prismaClientPath && config.prismaClientPath !== "@prisma/client") {
390
391
  generateNextToPrismaClient(rootDir, prismaClientImport);
391
- generateErrorStubInNodeModules(rootDir, prismaClientImport);
392
- } else {
393
- generateInNodeModules(rootDir);
394
392
  }
395
393
  }
396
- function generateInNodeModules(rootDir) {
394
+ function generateInNodeModules(rootDir, prismaClientImport, isCustomOutput) {
397
395
  const nodeModulesDir = path5.join(rootDir, "node_modules");
398
396
  const prismaFlareDir = path5.join(nodeModulesDir, ".prisma-flare");
399
397
  if (!fs5.existsSync(prismaFlareDir)) {
400
398
  fs5.mkdirSync(prismaFlareDir, { recursive: true });
401
399
  }
400
+ let resolvedImport;
401
+ if (prismaClientImport === "@prisma/client") {
402
+ resolvedImport = "@prisma/client";
403
+ } else {
404
+ resolvedImport = path5.relative(prismaFlareDir, prismaClientImport);
405
+ if (!resolvedImport.startsWith(".")) {
406
+ resolvedImport = "./" + resolvedImport;
407
+ }
408
+ resolvedImport = resolvedImport.replace(/\\/g, "/");
409
+ }
402
410
  const esmContent = `// Generated by prisma-flare - DO NOT EDIT
403
411
  // This file provides FlareClient configured for your Prisma client output path
412
+ // Import path: ${prismaClientImport}
404
413
 
405
- import { PrismaClient, Prisma } from '@prisma/client';
414
+ import { PrismaClient, Prisma } from '${resolvedImport}';
406
415
  import { createFlareClient } from 'prisma-flare';
407
416
 
408
417
  // Create and export FlareClient using the factory
@@ -413,8 +422,9 @@ export { PrismaClient, Prisma };
413
422
  `;
414
423
  const cjsContent = `// Generated by prisma-flare - DO NOT EDIT
415
424
  // This file provides FlareClient configured for your Prisma client output path
425
+ // Import path: ${prismaClientImport}
416
426
 
417
- const { PrismaClient, Prisma } = require('@prisma/client');
427
+ const { PrismaClient, Prisma } = require('${resolvedImport}');
418
428
  const { createFlareClient } = require('prisma-flare');
419
429
 
420
430
  // Create FlareClient using the factory
@@ -429,7 +439,7 @@ module.exports = {
429
439
  const dtsContent = `// Generated by prisma-flare - DO NOT EDIT
430
440
  // This file provides FlareClient configured for your Prisma client output path
431
441
 
432
- import { PrismaClient as BasePrismaClient, Prisma as BasePrisma } from '@prisma/client';
442
+ import { PrismaClient as BasePrismaClient, Prisma as BasePrisma } from '${resolvedImport}';
433
443
  import type { FlareClientOptions } from 'prisma-flare';
434
444
  import type { ModelName } from 'prisma-flare';
435
445
  import type FlareBuilder from 'prisma-flare/flareBuilder';
@@ -482,83 +492,17 @@ export declare class FlareClient extends BasePrismaClient {
482
492
  path5.join(prismaFlareDir, "package.json"),
483
493
  JSON.stringify(packageJson, null, 2)
484
494
  );
485
- console.log(`\u2705 Generated prisma-flare client using @prisma/client`);
486
- console.log(` Location: ${prismaFlareDir}`);
487
- console.log(`
495
+ if (isCustomOutput) {
496
+ console.log(`\u2705 Generated .prisma-flare with custom Prisma output: ${prismaClientImport}`);
497
+ console.log(` Location: ${prismaFlareDir}`);
498
+ console.log(`
499
+ \u26A0\uFE0F For Turbopack/bundler compatibility, import from the generated flare.ts instead.`);
500
+ } else {
501
+ console.log(`\u2705 Generated prisma-flare client using @prisma/client`);
502
+ console.log(` Location: ${prismaFlareDir}`);
503
+ console.log(`
488
504
  Import: import { FlareClient } from 'prisma-flare';`);
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
505
  }
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
506
  }
563
507
  function generateNextToPrismaClient(rootDir, prismaClientImport) {
564
508
  let prismaOutputDir = prismaClientImport;
package/dist/cli/index.js CHANGED
@@ -363,23 +363,32 @@ function generateClient() {
363
363
  prismaClientImport = getPrismaClientPath(rootDir);
364
364
  }
365
365
  const isCustomOutput = hasCustomPrismaOutput(rootDir);
366
+ generateInNodeModules(rootDir, prismaClientImport, isCustomOutput);
366
367
  if (isCustomOutput || config.prismaClientPath && config.prismaClientPath !== "@prisma/client") {
367
368
  generateNextToPrismaClient(rootDir, prismaClientImport);
368
- generateErrorStubInNodeModules(rootDir, prismaClientImport);
369
- } else {
370
- generateInNodeModules(rootDir);
371
369
  }
372
370
  }
373
- function generateInNodeModules(rootDir) {
371
+ function generateInNodeModules(rootDir, prismaClientImport, isCustomOutput) {
374
372
  const nodeModulesDir = path5.join(rootDir, "node_modules");
375
373
  const prismaFlareDir = path5.join(nodeModulesDir, ".prisma-flare");
376
374
  if (!fs5.existsSync(prismaFlareDir)) {
377
375
  fs5.mkdirSync(prismaFlareDir, { recursive: true });
378
376
  }
377
+ let resolvedImport;
378
+ if (prismaClientImport === "@prisma/client") {
379
+ resolvedImport = "@prisma/client";
380
+ } else {
381
+ resolvedImport = path5.relative(prismaFlareDir, prismaClientImport);
382
+ if (!resolvedImport.startsWith(".")) {
383
+ resolvedImport = "./" + resolvedImport;
384
+ }
385
+ resolvedImport = resolvedImport.replace(/\\/g, "/");
386
+ }
379
387
  const esmContent = `// Generated by prisma-flare - DO NOT EDIT
380
388
  // This file provides FlareClient configured for your Prisma client output path
389
+ // Import path: ${prismaClientImport}
381
390
 
382
- import { PrismaClient, Prisma } from '@prisma/client';
391
+ import { PrismaClient, Prisma } from '${resolvedImport}';
383
392
  import { createFlareClient } from 'prisma-flare';
384
393
 
385
394
  // Create and export FlareClient using the factory
@@ -390,8 +399,9 @@ export { PrismaClient, Prisma };
390
399
  `;
391
400
  const cjsContent = `// Generated by prisma-flare - DO NOT EDIT
392
401
  // This file provides FlareClient configured for your Prisma client output path
402
+ // Import path: ${prismaClientImport}
393
403
 
394
- const { PrismaClient, Prisma } = require('@prisma/client');
404
+ const { PrismaClient, Prisma } = require('${resolvedImport}');
395
405
  const { createFlareClient } = require('prisma-flare');
396
406
 
397
407
  // Create FlareClient using the factory
@@ -406,7 +416,7 @@ module.exports = {
406
416
  const dtsContent = `// Generated by prisma-flare - DO NOT EDIT
407
417
  // This file provides FlareClient configured for your Prisma client output path
408
418
 
409
- import { PrismaClient as BasePrismaClient, Prisma as BasePrisma } from '@prisma/client';
419
+ import { PrismaClient as BasePrismaClient, Prisma as BasePrisma } from '${resolvedImport}';
410
420
  import type { FlareClientOptions } from 'prisma-flare';
411
421
  import type { ModelName } from 'prisma-flare';
412
422
  import type FlareBuilder from 'prisma-flare/flareBuilder';
@@ -459,83 +469,17 @@ export declare class FlareClient extends BasePrismaClient {
459
469
  path5.join(prismaFlareDir, "package.json"),
460
470
  JSON.stringify(packageJson, null, 2)
461
471
  );
462
- console.log(`\u2705 Generated prisma-flare client using @prisma/client`);
463
- console.log(` Location: ${prismaFlareDir}`);
464
- console.log(`
472
+ if (isCustomOutput) {
473
+ console.log(`\u2705 Generated .prisma-flare with custom Prisma output: ${prismaClientImport}`);
474
+ console.log(` Location: ${prismaFlareDir}`);
475
+ console.log(`
476
+ \u26A0\uFE0F For Turbopack/bundler compatibility, import from the generated flare.ts instead.`);
477
+ } else {
478
+ console.log(`\u2705 Generated prisma-flare client using @prisma/client`);
479
+ console.log(` Location: ${prismaFlareDir}`);
480
+ console.log(`
465
481
  Import: import { FlareClient } from 'prisma-flare';`);
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
482
  }
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
483
  }
540
484
  function generateNextToPrismaClient(rootDir, prismaClientImport) {
541
485
  let prismaOutputDir = prismaClientImport;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prisma-flare",
3
- "version": "1.1.7",
3
+ "version": "1.1.8",
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,7 +149,7 @@ 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 (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.):
152
+ If you use a custom `output` in your Prisma schema (common with Prisma 7+), prisma-flare automatically detects it:
153
153
 
154
154
  ```prisma
155
155
  // schema.prisma
@@ -166,26 +166,29 @@ npx prisma generate
166
166
  npx prisma-flare generate
167
167
  ```
168
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
- ```
169
+ This generates FlareClient in **two locations**:
170
+ 1. `node_modules/.prisma-flare/` - for Node.js and general use
171
+ 2. `prisma/generated/flare.ts` - for bundler compatibility (Turbopack, Webpack, Vite)
177
172
 
178
- **Import from the generated flare file:**
173
+ **For Turbopack / Next.js 15+ users:** Import from the generated `flare.ts`:
179
174
 
180
175
  ```typescript
181
176
  // prisma/db.ts
182
177
  import './callbacks';
183
- import { FlareClient } from './generated/flare'; // ← Different import path!
178
+ import { FlareClient } from './generated/flare'; // ← Bundler-compatible path
184
179
 
185
180
  export const db = new FlareClient();
186
181
  ```
187
182
 
188
- > **Note:** With custom outputs, importing from `'prisma-flare'` directly will throw an error guiding you to the correct import path.
183
+ **For Node.js / non-Turbopack users:** You can still import from `prisma-flare`:
184
+
185
+ ```typescript
186
+ // prisma/db.ts
187
+ import './callbacks';
188
+ import { FlareClient } from 'prisma-flare'; // ← Works in Node.js
189
+
190
+ export const db = new FlareClient();
191
+ ```
189
192
 
190
193
  **Manual override:** If auto-detection doesn't work, add to `prisma-flare.config.json`:
191
194