prisma-prefixed-ids 1.7.0 → 2.1.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/dist/index.cjs CHANGED
@@ -39,6 +39,31 @@ exports.findRelationModel = findRelationModel;
39
39
  const isRelationOperation = (key) => {
40
40
  return RELATION_OPERATIONS.includes(key);
41
41
  };
42
+ // Helper to process upsert items (handles both single object and array)
43
+ const processUpsertItems = (value, relatedModel, prefixedId, dmmf) => {
44
+ const items = Array.isArray(value) ? value : [value];
45
+ const processed = items.map((item) => ({
46
+ ...item,
47
+ create: item.create
48
+ ? (0, exports.processNestedData)(item.create, relatedModel, prefixedId, dmmf)
49
+ : item.create,
50
+ update: item.update
51
+ ? (0, exports.processNestedData)(item.update, relatedModel, prefixedId, dmmf, false)
52
+ : item.update,
53
+ }));
54
+ return Array.isArray(value) ? processed : processed[0];
55
+ };
56
+ // Helper to process connectOrCreate items (handles both single object and array)
57
+ const processConnectOrCreateItems = (value, relatedModel, prefixedId, dmmf) => {
58
+ const items = Array.isArray(value) ? value : [value];
59
+ const processed = items.map((item) => ({
60
+ ...item,
61
+ create: item.create
62
+ ? (0, exports.processNestedData)(item.create, relatedModel, prefixedId, dmmf, true)
63
+ : item.create,
64
+ }));
65
+ return Array.isArray(value) ? processed : processed[0];
66
+ };
42
67
  // Helper function to process nested data with proper model detection
43
68
  const processNestedData = (data, model, prefixedId, dmmf, shouldAddRootId = true) => {
44
69
  if (!data) {
@@ -79,22 +104,11 @@ const processNestedData = (data, model, prefixedId, dmmf, shouldAddRootId = true
79
104
  }
80
105
  else if (key === "upsert") {
81
106
  // Handle upsert operation (has create and update)
82
- result[key] = {
83
- ...value,
84
- create: value.create
85
- ? (0, exports.processNestedData)(value.create, relatedModel, prefixedId, dmmf)
86
- : value.create,
87
- update: value.update,
88
- };
107
+ result[key] = processUpsertItems(value, relatedModel, prefixedId, dmmf);
89
108
  }
90
109
  else if (key === "connectOrCreate") {
91
110
  // Handle connectOrCreate operation
92
- result[key] = {
93
- ...value,
94
- create: value.create
95
- ? (0, exports.processNestedData)(value.create, relatedModel, prefixedId, dmmf)
96
- : value.create,
97
- };
111
+ result[key] = processConnectOrCreateItems(value, relatedModel, prefixedId, dmmf);
98
112
  }
99
113
  else if (key === "create" || key === "createMany") {
100
114
  // Only process create operations with ID generation
@@ -126,28 +140,10 @@ const processNestedData = (data, model, prefixedId, dmmf, shouldAddRootId = true
126
140
  };
127
141
  }
128
142
  else if (op === "upsert") {
129
- updatedValue[op] = {
130
- ...value[op],
131
- create: value[op].create
132
- ? (0, exports.processNestedData)(value[op].create, relatedModel, prefixedId, dmmf)
133
- : value[op].create,
134
- update: value[op].update, // Don't process update
135
- };
143
+ updatedValue[op] = processUpsertItems(value[op], relatedModel, prefixedId, dmmf);
136
144
  }
137
145
  else if (op === "connectOrCreate") {
138
- // Special handling for connectOrCreate - it's an array where each item has where/create
139
- if (Array.isArray(value[op])) {
140
- updatedValue[op] = value[op].map((connectOrCreateItem) => ({
141
- ...connectOrCreateItem,
142
- create: connectOrCreateItem.create
143
- ? (0, exports.processNestedData)(connectOrCreateItem.create, relatedModel, prefixedId, dmmf, true)
144
- : connectOrCreateItem.create,
145
- }));
146
- }
147
- else {
148
- // Fallback for non-array connectOrCreate (shouldn't happen in normal usage)
149
- updatedValue[op] = value[op];
150
- }
146
+ updatedValue[op] = processConnectOrCreateItems(value[op], relatedModel, prefixedId, dmmf);
151
147
  }
152
148
  else if (op === "create" || op === "createMany") {
153
149
  // Only process create operations with ID generation
package/dist/index.d.ts CHANGED
@@ -1,5 +1,13 @@
1
- import { type PrismaClient } from "@prisma/client";
2
1
  export type ModelName = string;
2
+ /**
3
+ * Minimal interface representing a Prisma Client instance.
4
+ * This allows the library to work with any Prisma Client version (v6, v7+)
5
+ * without importing from @prisma/client directly.
6
+ */
7
+ export interface PrismaClientLike {
8
+ $extends: (extension: any) => any;
9
+ [key: string]: any;
10
+ }
3
11
  export type PrefixConfig<ModelName extends string> = {
4
12
  prefixes: Partial<Record<ModelName, string>> | ((modelName: ModelName) => string | null);
5
13
  idGenerator?: (prefix: string) => string;
@@ -24,7 +32,7 @@ export declare function createPrefixedIdsExtension<ModelName extends string>(con
24
32
  };
25
33
  };
26
34
  };
27
- export declare function extendPrismaClient<ModelName extends string = string, Client extends PrismaClient = PrismaClient>(prisma: Client, config: PrefixConfig<ModelName>): Client;
28
- export declare function getDMMF(clientOrContext: PrismaClient | any): any;
29
- export declare function getModelNames(prismaClient: PrismaClient): string[];
35
+ export declare function extendPrismaClient<ModelName extends string = string, Client extends PrismaClientLike = PrismaClientLike>(prisma: Client, config: PrefixConfig<ModelName>): Client;
36
+ export declare function getDMMF(clientOrContext: PrismaClientLike | any): any;
37
+ export declare function getModelNames(prismaClient: PrismaClientLike): string[];
30
38
  export {};
package/dist/index.js CHANGED
@@ -31,6 +31,31 @@ export const findRelationModel = (dmmf, parentModel, fieldName) => {
31
31
  const isRelationOperation = (key) => {
32
32
  return RELATION_OPERATIONS.includes(key);
33
33
  };
34
+ // Helper to process upsert items (handles both single object and array)
35
+ const processUpsertItems = (value, relatedModel, prefixedId, dmmf) => {
36
+ const items = Array.isArray(value) ? value : [value];
37
+ const processed = items.map((item) => ({
38
+ ...item,
39
+ create: item.create
40
+ ? processNestedData(item.create, relatedModel, prefixedId, dmmf)
41
+ : item.create,
42
+ update: item.update
43
+ ? processNestedData(item.update, relatedModel, prefixedId, dmmf, false)
44
+ : item.update,
45
+ }));
46
+ return Array.isArray(value) ? processed : processed[0];
47
+ };
48
+ // Helper to process connectOrCreate items (handles both single object and array)
49
+ const processConnectOrCreateItems = (value, relatedModel, prefixedId, dmmf) => {
50
+ const items = Array.isArray(value) ? value : [value];
51
+ const processed = items.map((item) => ({
52
+ ...item,
53
+ create: item.create
54
+ ? processNestedData(item.create, relatedModel, prefixedId, dmmf, true)
55
+ : item.create,
56
+ }));
57
+ return Array.isArray(value) ? processed : processed[0];
58
+ };
34
59
  // Helper function to process nested data with proper model detection
35
60
  export const processNestedData = (data, model, prefixedId, dmmf, shouldAddRootId = true) => {
36
61
  if (!data) {
@@ -71,22 +96,11 @@ export const processNestedData = (data, model, prefixedId, dmmf, shouldAddRootId
71
96
  }
72
97
  else if (key === "upsert") {
73
98
  // Handle upsert operation (has create and update)
74
- result[key] = {
75
- ...value,
76
- create: value.create
77
- ? processNestedData(value.create, relatedModel, prefixedId, dmmf)
78
- : value.create,
79
- update: value.update,
80
- };
99
+ result[key] = processUpsertItems(value, relatedModel, prefixedId, dmmf);
81
100
  }
82
101
  else if (key === "connectOrCreate") {
83
102
  // Handle connectOrCreate operation
84
- result[key] = {
85
- ...value,
86
- create: value.create
87
- ? processNestedData(value.create, relatedModel, prefixedId, dmmf)
88
- : value.create,
89
- };
103
+ result[key] = processConnectOrCreateItems(value, relatedModel, prefixedId, dmmf);
90
104
  }
91
105
  else if (key === "create" || key === "createMany") {
92
106
  // Only process create operations with ID generation
@@ -118,28 +132,10 @@ export const processNestedData = (data, model, prefixedId, dmmf, shouldAddRootId
118
132
  };
119
133
  }
120
134
  else if (op === "upsert") {
121
- updatedValue[op] = {
122
- ...value[op],
123
- create: value[op].create
124
- ? processNestedData(value[op].create, relatedModel, prefixedId, dmmf)
125
- : value[op].create,
126
- update: value[op].update, // Don't process update
127
- };
135
+ updatedValue[op] = processUpsertItems(value[op], relatedModel, prefixedId, dmmf);
128
136
  }
129
137
  else if (op === "connectOrCreate") {
130
- // Special handling for connectOrCreate - it's an array where each item has where/create
131
- if (Array.isArray(value[op])) {
132
- updatedValue[op] = value[op].map((connectOrCreateItem) => ({
133
- ...connectOrCreateItem,
134
- create: connectOrCreateItem.create
135
- ? processNestedData(connectOrCreateItem.create, relatedModel, prefixedId, dmmf, true)
136
- : connectOrCreateItem.create,
137
- }));
138
- }
139
- else {
140
- // Fallback for non-array connectOrCreate (shouldn't happen in normal usage)
141
- updatedValue[op] = value[op];
142
- }
138
+ updatedValue[op] = processConnectOrCreateItems(value[op], relatedModel, prefixedId, dmmf);
143
139
  }
144
140
  else if (op === "create" || op === "createMany") {
145
141
  // Only process create operations with ID generation
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prisma-prefixed-ids",
3
- "version": "1.7.0",
3
+ "version": "2.1.0",
4
4
  "description": "A Prisma extension that adds prefixed IDs to your models",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -28,9 +28,17 @@
28
28
  "clean:test-artifacts": "rm -rf test-client prisma/test.db prisma/test.db-journal",
29
29
  "test": "npm run test:unit && npm run test:integration",
30
30
  "test:unit": "jest --testPathIgnorePatterns=integration",
31
- "test:integration": "npm run db:setup && jest --testPathPattern=integration",
31
+ "test:integration": "npm run db:setup && jest --testPathPattern=integration --testPathIgnorePatterns='integration.mysql|integration.postgres'",
32
+ "test:mysql": "npm run db:setup:mysql && jest --testPathPattern=integration.mysql",
33
+ "test:postgres": "npm run db:setup:postgres && jest --testPathPattern=integration.postgres",
34
+ "db:setup:mysql": "npm run db:generate:mysql && npm run db:push:mysql",
35
+ "db:generate:mysql": "prisma generate --schema=tests/prisma/schema.mysql.prisma",
36
+ "db:push:mysql": "prisma db push --schema=tests/prisma/schema.mysql.prisma",
37
+ "db:setup:postgres": "npm run db:generate:postgres && npm run db:push:postgres",
38
+ "db:generate:postgres": "prisma generate --schema=tests/prisma/schema.postgres.prisma",
39
+ "db:push:postgres": "prisma db push --schema=tests/prisma/schema.postgres.prisma",
32
40
  "test:watch": "jest --watch",
33
- "test:coverage": "jest --coverage --collectCoverageFrom='src/**/*.ts' --coveragePathIgnorePatterns='src/__tests__'",
41
+ "test:coverage": "jest --coverage --collectCoverageFrom='src/**/*.ts' --coveragePathIgnorePatterns='src/__tests__' --testPathIgnorePatterns='integration'",
34
42
  "db:setup": "npm run db:generate && npm run db:push",
35
43
  "db:generate": "prisma generate",
36
44
  "db:push": "prisma db push",
@@ -52,27 +60,32 @@
52
60
  "author": "Prageeth Silva <prageeth@codemode.com.au>",
53
61
  "license": "MIT",
54
62
  "dependencies": {
55
- "@prisma/client": "^5.0.0 || ^6.0.0",
63
+ "@prisma/client": "^6.0.0 || ^7.0.0",
56
64
  "nanoid": "^5.0.0"
57
65
  },
58
66
  "devDependencies": {
67
+ "@libsql/client": "^0.17.0",
68
+ "@prisma/adapter-libsql": "^7.3.0",
69
+ "@prisma/adapter-mariadb": "^7.3.0",
70
+ "@prisma/adapter-pg": "^7.3.0",
59
71
  "@types/jest": "^29.0.0",
60
- "@types/node": "^20.0.0",
61
72
  "@types/nanoid": "^2.0.0",
73
+ "@types/node": "^22.0.0",
62
74
  "@typescript-eslint/eslint-plugin": "^6.0.0",
63
75
  "@typescript-eslint/parser": "^6.0.0",
76
+ "dotenv": "^16.0.0",
64
77
  "eslint": "^8.56.0",
65
78
  "eslint-config-prettier": "^9.0.0",
66
79
  "jest": "^29.0.0",
67
80
  "prettier": "^3.0.0",
68
- "prisma": "^5.0.0",
81
+ "prisma": "^7.0.0",
69
82
  "ts-jest": "^29.0.0",
70
83
  "typescript": "^5.0.0"
71
84
  },
72
85
  "peerDependencies": {
73
- "@prisma/client": "^5.0.0 || ^6.0.0"
86
+ "@prisma/client": "^6.0.0 || ^7.0.0"
74
87
  },
75
88
  "prisma": {
76
89
  "schema": "tests/prisma/schema.prisma"
77
90
  }
78
- }
91
+ }