prisma-flare 1.3.1 → 1.3.2

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.
@@ -1,5 +1,5 @@
1
1
  import { Prisma } from '@prisma/client';
2
- import { M as ModelName, b as ModelDelegate, Q as QueryArgs, W as WhereInput, O as OrderByInput, R as RecordType, D as DistinctInput, S as SelectInput, I as IncludeKey, G as GroupByInput, c as HavingInput, d as PaginatedResult, e as CreateData, f as CreateManyData, g as DeleteArgs, h as DeleteManyArgs, U as UpdateData, i as UpdateManyData, j as UpsertArgs, k as SumFields, l as AvgFields, m as MinFields, n as MaxFields } from '../prisma.types-CIEFXVL-.cjs';
2
+ import { M as ModelName, b as ModelDelegate, Q as QueryArgs, W as WhereInput, O as OrderByInput, R as RecordType, D as DistinctInput, S as SelectInput, I as IncludeKey, G as GroupByInput, c as HavingInput, d as PaginatedResult, e as CreateData, f as CreateManyData, g as DeleteArgs, h as DeleteManyArgs, U as UpdateData, i as UpdateManyData, j as UpsertArgs, k as SumFields, l as AvgFields, m as MinFields, n as MaxFields } from '../prisma.types-WBv5kOSl.cjs';
3
3
 
4
4
  /**
5
5
  * Global interface for relation-to-model mapping.
@@ -233,7 +233,7 @@ declare class FlareBuilder<T extends ModelName, Args extends Record<string, any>
233
233
  * @param page - Page number (1-based)
234
234
  * @param perPage - Number of records per page
235
235
  */
236
- paginate(page?: number, perPage?: number): Promise<PaginatedResult<RecordType<T>>>;
236
+ paginate(page?: number, perPage?: number): Promise<PaginatedResult<Prisma.Result<ModelDelegate<T>, Args, 'findFirstOrThrow'>>>;
237
237
  /**
238
238
  * Conditionally executes a callback on the query builder
239
239
  * @param condition - Boolean or function returning boolean
@@ -245,7 +245,7 @@ declare class FlareBuilder<T extends ModelName, Args extends Record<string, any>
245
245
  * @param size - Size of each chunk
246
246
  * @param callback - Function to process each chunk
247
247
  */
248
- chunk(size: number, callback: (results: RecordType<T>[]) => Promise<void> | void): Promise<void>;
248
+ chunk(size: number, callback: (results: Prisma.Result<ModelDelegate<T>, Args, 'findMany'>) => Promise<void> | void): Promise<void>;
249
249
  /**
250
250
  * Clones the current query builder instance.
251
251
  * Uses structuredClone for proper handling of Date, BigInt, etc.
@@ -257,7 +257,7 @@ declare class FlareBuilder<T extends ModelName, Args extends Record<string, any>
257
257
  * @throws {Prisma.NotFoundError} When no record matches the query
258
258
  * @returns Promise resolving to the found record
259
259
  */
260
- findFirstOrThrow(): Promise<NonNullable<RecordType<T>>>;
260
+ findFirstOrThrow(): Promise<Prisma.Result<ModelDelegate<T>, Args, 'findFirstOrThrow'>>;
261
261
  /**
262
262
  * Finds a unique record by primary key or throws an error if not found
263
263
  * Requires a unique constraint (typically the id field)
@@ -265,7 +265,7 @@ declare class FlareBuilder<T extends ModelName, Args extends Record<string, any>
265
265
  * @throws {Prisma.NotFoundError} When no record is found
266
266
  * @returns Promise resolving to the found record
267
267
  */
268
- findUniqueOrThrow(): Promise<NonNullable<RecordType<T>>>;
268
+ findUniqueOrThrow(): Promise<Prisma.Result<ModelDelegate<T>, Args, 'findUniqueOrThrow'>>;
269
269
  /**
270
270
  * Finds all records matching the query
271
271
  * Respects all previously set query conditions (where, orderBy, take, skip, include, select, distinct)
@@ -1,5 +1,5 @@
1
1
  import { Prisma } from '@prisma/client';
2
- import { M as ModelName, b as ModelDelegate, Q as QueryArgs, W as WhereInput, O as OrderByInput, R as RecordType, D as DistinctInput, S as SelectInput, I as IncludeKey, G as GroupByInput, c as HavingInput, d as PaginatedResult, e as CreateData, f as CreateManyData, g as DeleteArgs, h as DeleteManyArgs, U as UpdateData, i as UpdateManyData, j as UpsertArgs, k as SumFields, l as AvgFields, m as MinFields, n as MaxFields } from '../prisma.types-CIEFXVL-.js';
2
+ import { M as ModelName, b as ModelDelegate, Q as QueryArgs, W as WhereInput, O as OrderByInput, R as RecordType, D as DistinctInput, S as SelectInput, I as IncludeKey, G as GroupByInput, c as HavingInput, d as PaginatedResult, e as CreateData, f as CreateManyData, g as DeleteArgs, h as DeleteManyArgs, U as UpdateData, i as UpdateManyData, j as UpsertArgs, k as SumFields, l as AvgFields, m as MinFields, n as MaxFields } from '../prisma.types-WBv5kOSl.js';
3
3
 
4
4
  /**
5
5
  * Global interface for relation-to-model mapping.
@@ -233,7 +233,7 @@ declare class FlareBuilder<T extends ModelName, Args extends Record<string, any>
233
233
  * @param page - Page number (1-based)
234
234
  * @param perPage - Number of records per page
235
235
  */
236
- paginate(page?: number, perPage?: number): Promise<PaginatedResult<RecordType<T>>>;
236
+ paginate(page?: number, perPage?: number): Promise<PaginatedResult<Prisma.Result<ModelDelegate<T>, Args, 'findFirstOrThrow'>>>;
237
237
  /**
238
238
  * Conditionally executes a callback on the query builder
239
239
  * @param condition - Boolean or function returning boolean
@@ -245,7 +245,7 @@ declare class FlareBuilder<T extends ModelName, Args extends Record<string, any>
245
245
  * @param size - Size of each chunk
246
246
  * @param callback - Function to process each chunk
247
247
  */
248
- chunk(size: number, callback: (results: RecordType<T>[]) => Promise<void> | void): Promise<void>;
248
+ chunk(size: number, callback: (results: Prisma.Result<ModelDelegate<T>, Args, 'findMany'>) => Promise<void> | void): Promise<void>;
249
249
  /**
250
250
  * Clones the current query builder instance.
251
251
  * Uses structuredClone for proper handling of Date, BigInt, etc.
@@ -257,7 +257,7 @@ declare class FlareBuilder<T extends ModelName, Args extends Record<string, any>
257
257
  * @throws {Prisma.NotFoundError} When no record matches the query
258
258
  * @returns Promise resolving to the found record
259
259
  */
260
- findFirstOrThrow(): Promise<NonNullable<RecordType<T>>>;
260
+ findFirstOrThrow(): Promise<Prisma.Result<ModelDelegate<T>, Args, 'findFirstOrThrow'>>;
261
261
  /**
262
262
  * Finds a unique record by primary key or throws an error if not found
263
263
  * Requires a unique constraint (typically the id field)
@@ -265,7 +265,7 @@ declare class FlareBuilder<T extends ModelName, Args extends Record<string, any>
265
265
  * @throws {Prisma.NotFoundError} When no record is found
266
266
  * @returns Promise resolving to the found record
267
267
  */
268
- findUniqueOrThrow(): Promise<NonNullable<RecordType<T>>>;
268
+ findUniqueOrThrow(): Promise<Prisma.Result<ModelDelegate<T>, Args, 'findUniqueOrThrow'>>;
269
269
  /**
270
270
  * Finds all records matching the query
271
271
  * Respects all previously set query conditions (where, orderBy, take, skip, include, select, distinct)
@@ -71,6 +71,7 @@ var HookRegistry = class {
71
71
  this.fieldCache = {};
72
72
  this.modelsWithColumnHooks = /* @__PURE__ */ new Set();
73
73
  this.config = { ...DEFAULT_CONFIG };
74
+ this.disabledTags = /* @__PURE__ */ new Set();
74
75
  }
75
76
  /**
76
77
  * Configure the hook system.
@@ -97,30 +98,48 @@ var HookRegistry = class {
97
98
  getConfig() {
98
99
  return this.config;
99
100
  }
100
- addHook(model, action, timing, fn) {
101
+ addHook(model, action, timing, fn, tag) {
101
102
  const key = `${model}:${action}`;
102
103
  if (!this.hooks[timing][key]) {
103
104
  this.hooks[timing][key] = [];
104
105
  }
105
- this.hooks[timing][key].push(fn);
106
+ this.hooks[timing][key].push({ callback: fn, tag });
106
107
  }
107
108
  addColumnHook(model, column, fn, options) {
108
109
  const key = `${model}:${column}`;
109
110
  if (!this.columnHooks.afterChange[key]) {
110
111
  this.columnHooks.afterChange[key] = [];
111
112
  }
112
- this.columnHooks.afterChange[key].push({ callback: fn, options });
113
+ this.columnHooks.afterChange[key].push({ callback: fn, options, tag: options?.tag });
113
114
  this.modelsWithColumnHooks.add(model);
114
115
  delete this.fieldCache[model];
115
116
  }
117
+ /**
118
+ * Disable all hooks with the given tag.
119
+ * @example hookRegistry.disable('changelog');
120
+ */
121
+ disable(tag) {
122
+ this.disabledTags.add(tag);
123
+ }
124
+ /**
125
+ * Re-enable hooks with the given tag.
126
+ * @example hookRegistry.enable('changelog');
127
+ */
128
+ enable(tag) {
129
+ this.disabledTags.delete(tag);
130
+ }
131
+ isEnabled(tag) {
132
+ return !tag || !this.disabledTags.has(tag);
133
+ }
116
134
  async runHooks(timing, model, action, args, prisma) {
117
135
  const key = `${model}:${action}`;
118
- const hooks = this.hooks[timing]?.[key] ?? [];
136
+ const entries = this.hooks[timing]?.[key] ?? [];
137
+ const active = entries.filter((e) => this.isEnabled(e.tag));
119
138
  if (timing === "after") {
120
- await Promise.all(hooks.map((hook) => hook(...args, prisma)));
139
+ await Promise.all(active.map((e) => e.callback(...args, prisma)));
121
140
  } else {
122
- for (const hook of hooks) {
123
- await hook(...args, prisma);
141
+ for (const entry of active) {
142
+ await entry.callback(...args, prisma);
124
143
  }
125
144
  }
126
145
  }
@@ -131,7 +150,9 @@ var HookRegistry = class {
131
150
  const entries = this.columnHooks.afterChange[key];
132
151
  if (entries && !valuesEqual(newData[column], prevData[column])) {
133
152
  for (const entry of entries) {
134
- promises.push(entry.callback(prevData[column], newData[column], newData, prisma));
153
+ if (this.isEnabled(entry.tag)) {
154
+ promises.push(entry.callback(prevData[column], newData[column], newData, prisma));
155
+ }
135
156
  }
136
157
  }
137
158
  }
@@ -206,6 +227,7 @@ var HookRegistry = class {
206
227
  this.fieldCache = {};
207
228
  this.modelsWithColumnHooks.clear();
208
229
  this.config = { ...DEFAULT_CONFIG };
230
+ this.disabledTags.clear();
209
231
  }
210
232
  };
211
233
  var HOOK_REGISTRY_SYMBOL = /* @__PURE__ */ Symbol.for("prisma-flare.hookRegistry");
@@ -220,29 +242,29 @@ var hookRegistry_default = hookRegistry;
220
242
  function normalizeModelName(model) {
221
243
  return model.toLowerCase();
222
244
  }
223
- function beforeCreate(model, callback) {
224
- hookRegistry_default.addHook(normalizeModelName(model), "create", "before", callback);
245
+ function beforeCreate(model, callback, options) {
246
+ hookRegistry_default.addHook(normalizeModelName(model), "create", "before", callback, options?.tag);
225
247
  }
226
- function beforeDelete(model, callback) {
227
- hookRegistry_default.addHook(normalizeModelName(model), "delete", "before", callback);
248
+ function beforeDelete(model, callback, options) {
249
+ hookRegistry_default.addHook(normalizeModelName(model), "delete", "before", callback, options?.tag);
228
250
  }
229
- function afterCreate(model, callback) {
230
- hookRegistry_default.addHook(normalizeModelName(model), "create", "after", callback);
251
+ function afterCreate(model, callback, options) {
252
+ hookRegistry_default.addHook(normalizeModelName(model), "create", "after", callback, options?.tag);
231
253
  }
232
- function afterDelete(model, callback) {
233
- hookRegistry_default.addHook(normalizeModelName(model), "delete", "after", callback);
254
+ function afterDelete(model, callback, options) {
255
+ hookRegistry_default.addHook(normalizeModelName(model), "delete", "after", callback, options?.tag);
234
256
  }
235
- function beforeUpdate(model, callback) {
236
- hookRegistry_default.addHook(normalizeModelName(model), "update", "before", callback);
257
+ function beforeUpdate(model, callback, options) {
258
+ hookRegistry_default.addHook(normalizeModelName(model), "update", "before", callback, options?.tag);
237
259
  }
238
- function afterUpdate(model, callback) {
239
- hookRegistry_default.addHook(normalizeModelName(model), "update", "after", callback);
260
+ function afterUpdate(model, callback, options) {
261
+ hookRegistry_default.addHook(normalizeModelName(model), "update", "after", callback, options?.tag);
240
262
  }
241
263
  function afterChange(model, column, callback, options) {
242
264
  hookRegistry_default.addColumnHook(normalizeModelName(model), column, callback, options);
243
265
  }
244
- function afterUpsert(model, callback) {
245
- hookRegistry_default.addHook(normalizeModelName(model), "upsert", "after", callback);
266
+ function afterUpsert(model, callback, options) {
267
+ hookRegistry_default.addHook(normalizeModelName(model), "upsert", "after", callback, options?.tag);
246
268
  }
247
269
  // Annotate the CommonJS export names for ESM import in node:
248
270
  0 && (module.exports = {
@@ -1,13 +1,13 @@
1
- import { M as ModelName, B as BeforeHookCallback, A as AfterHookCallback, F as FieldName, C as ColumnChangeCallback, a as ColumnChangeOptions } from '../prisma.types-CIEFXVL-.cjs';
1
+ import { M as ModelName, B as BeforeHookCallback, o as HookOptions, A as AfterHookCallback, F as FieldName, C as ColumnChangeCallback, a as ColumnChangeOptions } from '../prisma.types-WBv5kOSl.cjs';
2
2
  import '@prisma/client';
3
3
 
4
- declare function beforeCreate<T extends ModelName>(model: T, callback: BeforeHookCallback<T>): void;
5
- declare function beforeDelete<T extends ModelName>(model: T, callback: BeforeHookCallback<T>): void;
6
- declare function afterCreate<T extends ModelName>(model: T, callback: AfterHookCallback<T>): void;
7
- declare function afterDelete<T extends ModelName>(model: T, callback: AfterHookCallback<T>): void;
8
- declare function beforeUpdate<T extends ModelName>(model: T, callback: BeforeHookCallback<T>): void;
9
- declare function afterUpdate<T extends ModelName>(model: T, callback: AfterHookCallback<T>): void;
4
+ declare function beforeCreate<T extends ModelName>(model: T, callback: BeforeHookCallback<T>, options?: HookOptions): void;
5
+ declare function beforeDelete<T extends ModelName>(model: T, callback: BeforeHookCallback<T>, options?: HookOptions): void;
6
+ declare function afterCreate<T extends ModelName>(model: T, callback: AfterHookCallback<T>, options?: HookOptions): void;
7
+ declare function afterDelete<T extends ModelName>(model: T, callback: AfterHookCallback<T>, options?: HookOptions): void;
8
+ declare function beforeUpdate<T extends ModelName>(model: T, callback: BeforeHookCallback<T>, options?: HookOptions): void;
9
+ declare function afterUpdate<T extends ModelName>(model: T, callback: AfterHookCallback<T>, options?: HookOptions): void;
10
10
  declare function afterChange<T extends ModelName>(model: T, column: FieldName<T>, callback: ColumnChangeCallback<T>, options?: ColumnChangeOptions<T>): void;
11
- declare function afterUpsert<T extends ModelName>(model: T, callback: AfterHookCallback<T>): void;
11
+ declare function afterUpsert<T extends ModelName>(model: T, callback: AfterHookCallback<T>, options?: HookOptions): void;
12
12
 
13
13
  export { afterChange, afterCreate, afterDelete, afterUpdate, afterUpsert, beforeCreate, beforeDelete, beforeUpdate };
@@ -1,13 +1,13 @@
1
- import { M as ModelName, B as BeforeHookCallback, A as AfterHookCallback, F as FieldName, C as ColumnChangeCallback, a as ColumnChangeOptions } from '../prisma.types-CIEFXVL-.js';
1
+ import { M as ModelName, B as BeforeHookCallback, o as HookOptions, A as AfterHookCallback, F as FieldName, C as ColumnChangeCallback, a as ColumnChangeOptions } from '../prisma.types-WBv5kOSl.js';
2
2
  import '@prisma/client';
3
3
 
4
- declare function beforeCreate<T extends ModelName>(model: T, callback: BeforeHookCallback<T>): void;
5
- declare function beforeDelete<T extends ModelName>(model: T, callback: BeforeHookCallback<T>): void;
6
- declare function afterCreate<T extends ModelName>(model: T, callback: AfterHookCallback<T>): void;
7
- declare function afterDelete<T extends ModelName>(model: T, callback: AfterHookCallback<T>): void;
8
- declare function beforeUpdate<T extends ModelName>(model: T, callback: BeforeHookCallback<T>): void;
9
- declare function afterUpdate<T extends ModelName>(model: T, callback: AfterHookCallback<T>): void;
4
+ declare function beforeCreate<T extends ModelName>(model: T, callback: BeforeHookCallback<T>, options?: HookOptions): void;
5
+ declare function beforeDelete<T extends ModelName>(model: T, callback: BeforeHookCallback<T>, options?: HookOptions): void;
6
+ declare function afterCreate<T extends ModelName>(model: T, callback: AfterHookCallback<T>, options?: HookOptions): void;
7
+ declare function afterDelete<T extends ModelName>(model: T, callback: AfterHookCallback<T>, options?: HookOptions): void;
8
+ declare function beforeUpdate<T extends ModelName>(model: T, callback: BeforeHookCallback<T>, options?: HookOptions): void;
9
+ declare function afterUpdate<T extends ModelName>(model: T, callback: AfterHookCallback<T>, options?: HookOptions): void;
10
10
  declare function afterChange<T extends ModelName>(model: T, column: FieldName<T>, callback: ColumnChangeCallback<T>, options?: ColumnChangeOptions<T>): void;
11
- declare function afterUpsert<T extends ModelName>(model: T, callback: AfterHookCallback<T>): void;
11
+ declare function afterUpsert<T extends ModelName>(model: T, callback: AfterHookCallback<T>, options?: HookOptions): void;
12
12
 
13
13
  export { afterChange, afterCreate, afterDelete, afterUpdate, afterUpsert, beforeCreate, beforeDelete, beforeUpdate };
@@ -38,6 +38,7 @@ var HookRegistry = class {
38
38
  this.fieldCache = {};
39
39
  this.modelsWithColumnHooks = /* @__PURE__ */ new Set();
40
40
  this.config = { ...DEFAULT_CONFIG };
41
+ this.disabledTags = /* @__PURE__ */ new Set();
41
42
  }
42
43
  /**
43
44
  * Configure the hook system.
@@ -64,30 +65,48 @@ var HookRegistry = class {
64
65
  getConfig() {
65
66
  return this.config;
66
67
  }
67
- addHook(model, action, timing, fn) {
68
+ addHook(model, action, timing, fn, tag) {
68
69
  const key = `${model}:${action}`;
69
70
  if (!this.hooks[timing][key]) {
70
71
  this.hooks[timing][key] = [];
71
72
  }
72
- this.hooks[timing][key].push(fn);
73
+ this.hooks[timing][key].push({ callback: fn, tag });
73
74
  }
74
75
  addColumnHook(model, column, fn, options) {
75
76
  const key = `${model}:${column}`;
76
77
  if (!this.columnHooks.afterChange[key]) {
77
78
  this.columnHooks.afterChange[key] = [];
78
79
  }
79
- this.columnHooks.afterChange[key].push({ callback: fn, options });
80
+ this.columnHooks.afterChange[key].push({ callback: fn, options, tag: options?.tag });
80
81
  this.modelsWithColumnHooks.add(model);
81
82
  delete this.fieldCache[model];
82
83
  }
84
+ /**
85
+ * Disable all hooks with the given tag.
86
+ * @example hookRegistry.disable('changelog');
87
+ */
88
+ disable(tag) {
89
+ this.disabledTags.add(tag);
90
+ }
91
+ /**
92
+ * Re-enable hooks with the given tag.
93
+ * @example hookRegistry.enable('changelog');
94
+ */
95
+ enable(tag) {
96
+ this.disabledTags.delete(tag);
97
+ }
98
+ isEnabled(tag) {
99
+ return !tag || !this.disabledTags.has(tag);
100
+ }
83
101
  async runHooks(timing, model, action, args, prisma) {
84
102
  const key = `${model}:${action}`;
85
- const hooks = this.hooks[timing]?.[key] ?? [];
103
+ const entries = this.hooks[timing]?.[key] ?? [];
104
+ const active = entries.filter((e) => this.isEnabled(e.tag));
86
105
  if (timing === "after") {
87
- await Promise.all(hooks.map((hook) => hook(...args, prisma)));
106
+ await Promise.all(active.map((e) => e.callback(...args, prisma)));
88
107
  } else {
89
- for (const hook of hooks) {
90
- await hook(...args, prisma);
108
+ for (const entry of active) {
109
+ await entry.callback(...args, prisma);
91
110
  }
92
111
  }
93
112
  }
@@ -98,7 +117,9 @@ var HookRegistry = class {
98
117
  const entries = this.columnHooks.afterChange[key];
99
118
  if (entries && !valuesEqual(newData[column], prevData[column])) {
100
119
  for (const entry of entries) {
101
- promises.push(entry.callback(prevData[column], newData[column], newData, prisma));
120
+ if (this.isEnabled(entry.tag)) {
121
+ promises.push(entry.callback(prevData[column], newData[column], newData, prisma));
122
+ }
102
123
  }
103
124
  }
104
125
  }
@@ -173,6 +194,7 @@ var HookRegistry = class {
173
194
  this.fieldCache = {};
174
195
  this.modelsWithColumnHooks.clear();
175
196
  this.config = { ...DEFAULT_CONFIG };
197
+ this.disabledTags.clear();
176
198
  }
177
199
  };
178
200
  var HOOK_REGISTRY_SYMBOL = /* @__PURE__ */ Symbol.for("prisma-flare.hookRegistry");
@@ -187,29 +209,29 @@ var hookRegistry_default = hookRegistry;
187
209
  function normalizeModelName(model) {
188
210
  return model.toLowerCase();
189
211
  }
190
- function beforeCreate(model, callback) {
191
- hookRegistry_default.addHook(normalizeModelName(model), "create", "before", callback);
212
+ function beforeCreate(model, callback, options) {
213
+ hookRegistry_default.addHook(normalizeModelName(model), "create", "before", callback, options?.tag);
192
214
  }
193
- function beforeDelete(model, callback) {
194
- hookRegistry_default.addHook(normalizeModelName(model), "delete", "before", callback);
215
+ function beforeDelete(model, callback, options) {
216
+ hookRegistry_default.addHook(normalizeModelName(model), "delete", "before", callback, options?.tag);
195
217
  }
196
- function afterCreate(model, callback) {
197
- hookRegistry_default.addHook(normalizeModelName(model), "create", "after", callback);
218
+ function afterCreate(model, callback, options) {
219
+ hookRegistry_default.addHook(normalizeModelName(model), "create", "after", callback, options?.tag);
198
220
  }
199
- function afterDelete(model, callback) {
200
- hookRegistry_default.addHook(normalizeModelName(model), "delete", "after", callback);
221
+ function afterDelete(model, callback, options) {
222
+ hookRegistry_default.addHook(normalizeModelName(model), "delete", "after", callback, options?.tag);
201
223
  }
202
- function beforeUpdate(model, callback) {
203
- hookRegistry_default.addHook(normalizeModelName(model), "update", "before", callback);
224
+ function beforeUpdate(model, callback, options) {
225
+ hookRegistry_default.addHook(normalizeModelName(model), "update", "before", callback, options?.tag);
204
226
  }
205
- function afterUpdate(model, callback) {
206
- hookRegistry_default.addHook(normalizeModelName(model), "update", "after", callback);
227
+ function afterUpdate(model, callback, options) {
228
+ hookRegistry_default.addHook(normalizeModelName(model), "update", "after", callback, options?.tag);
207
229
  }
208
230
  function afterChange(model, column, callback, options) {
209
231
  hookRegistry_default.addColumnHook(normalizeModelName(model), column, callback, options);
210
232
  }
211
- function afterUpsert(model, callback) {
212
- hookRegistry_default.addHook(normalizeModelName(model), "upsert", "after", callback);
233
+ function afterUpsert(model, callback, options) {
234
+ hookRegistry_default.addHook(normalizeModelName(model), "upsert", "after", callback, options?.tag);
213
235
  }
214
236
  export {
215
237
  afterChange,
@@ -1,4 +1,4 @@
1
- import { M as ModelName, P as PrismaOperation, H as HookTiming, B as BeforeHookCallback, A as AfterHookCallback, C as ColumnChangeCallback, a as ColumnChangeOptions } from './prisma.types-CIEFXVL-.cjs';
1
+ import { M as ModelName, P as PrismaOperation, H as HookTiming, B as BeforeHookCallback, A as AfterHookCallback, C as ColumnChangeCallback, a as ColumnChangeOptions } from './prisma.types-WBv5kOSl.cjs';
2
2
 
3
3
  /**
4
4
  * Configuration options for the hook system.
@@ -30,6 +30,7 @@ declare class HookRegistry {
30
30
  private fieldCache;
31
31
  private modelsWithColumnHooks;
32
32
  private config;
33
+ private disabledTags;
33
34
  constructor();
34
35
  /**
35
36
  * Configure the hook system.
@@ -52,8 +53,19 @@ declare class HookRegistry {
52
53
  * Get current configuration.
53
54
  */
54
55
  getConfig(): Readonly<HookConfig>;
55
- addHook(model: ModelName, action: PrismaOperation, timing: HookTiming, fn: BeforeHookCallback | AfterHookCallback): void;
56
+ addHook(model: ModelName, action: PrismaOperation, timing: HookTiming, fn: BeforeHookCallback | AfterHookCallback, tag?: string): void;
56
57
  addColumnHook(model: ModelName, column: string, fn: ColumnChangeCallback<any>, options?: ColumnChangeOptions<any>): void;
58
+ /**
59
+ * Disable all hooks with the given tag.
60
+ * @example hookRegistry.disable('changelog');
61
+ */
62
+ disable(tag: string): void;
63
+ /**
64
+ * Re-enable hooks with the given tag.
65
+ * @example hookRegistry.enable('changelog');
66
+ */
67
+ enable(tag: string): void;
68
+ private isEnabled;
57
69
  runHooks(timing: HookTiming, model: ModelName, action: PrismaOperation, args: any[], prisma: any): Promise<void>;
58
70
  runColumnHooks(model: ModelName, newData: any, prevData: any, prisma: any): Promise<void>;
59
71
  hasColumnHooks(model: ModelName): boolean;
@@ -1,4 +1,4 @@
1
- import { M as ModelName, P as PrismaOperation, H as HookTiming, B as BeforeHookCallback, A as AfterHookCallback, C as ColumnChangeCallback, a as ColumnChangeOptions } from './prisma.types-CIEFXVL-.js';
1
+ import { M as ModelName, P as PrismaOperation, H as HookTiming, B as BeforeHookCallback, A as AfterHookCallback, C as ColumnChangeCallback, a as ColumnChangeOptions } from './prisma.types-WBv5kOSl.js';
2
2
 
3
3
  /**
4
4
  * Configuration options for the hook system.
@@ -30,6 +30,7 @@ declare class HookRegistry {
30
30
  private fieldCache;
31
31
  private modelsWithColumnHooks;
32
32
  private config;
33
+ private disabledTags;
33
34
  constructor();
34
35
  /**
35
36
  * Configure the hook system.
@@ -52,8 +53,19 @@ declare class HookRegistry {
52
53
  * Get current configuration.
53
54
  */
54
55
  getConfig(): Readonly<HookConfig>;
55
- addHook(model: ModelName, action: PrismaOperation, timing: HookTiming, fn: BeforeHookCallback | AfterHookCallback): void;
56
+ addHook(model: ModelName, action: PrismaOperation, timing: HookTiming, fn: BeforeHookCallback | AfterHookCallback, tag?: string): void;
56
57
  addColumnHook(model: ModelName, column: string, fn: ColumnChangeCallback<any>, options?: ColumnChangeOptions<any>): void;
58
+ /**
59
+ * Disable all hooks with the given tag.
60
+ * @example hookRegistry.disable('changelog');
61
+ */
62
+ disable(tag: string): void;
63
+ /**
64
+ * Re-enable hooks with the given tag.
65
+ * @example hookRegistry.enable('changelog');
66
+ */
67
+ enable(tag: string): void;
68
+ private isEnabled;
57
69
  runHooks(timing: HookTiming, model: ModelName, action: PrismaOperation, args: any[], prisma: any): Promise<void>;
58
70
  runColumnHooks(model: ModelName, newData: any, prevData: any, prisma: any): Promise<void>;
59
71
  hasColumnHooks(model: ModelName): boolean;
package/dist/hooks.cjs CHANGED
@@ -72,6 +72,7 @@ var HookRegistry = class {
72
72
  this.fieldCache = {};
73
73
  this.modelsWithColumnHooks = /* @__PURE__ */ new Set();
74
74
  this.config = { ...DEFAULT_CONFIG };
75
+ this.disabledTags = /* @__PURE__ */ new Set();
75
76
  }
76
77
  /**
77
78
  * Configure the hook system.
@@ -98,30 +99,48 @@ var HookRegistry = class {
98
99
  getConfig() {
99
100
  return this.config;
100
101
  }
101
- addHook(model, action, timing, fn) {
102
+ addHook(model, action, timing, fn, tag) {
102
103
  const key = `${model}:${action}`;
103
104
  if (!this.hooks[timing][key]) {
104
105
  this.hooks[timing][key] = [];
105
106
  }
106
- this.hooks[timing][key].push(fn);
107
+ this.hooks[timing][key].push({ callback: fn, tag });
107
108
  }
108
109
  addColumnHook(model, column, fn, options) {
109
110
  const key = `${model}:${column}`;
110
111
  if (!this.columnHooks.afterChange[key]) {
111
112
  this.columnHooks.afterChange[key] = [];
112
113
  }
113
- this.columnHooks.afterChange[key].push({ callback: fn, options });
114
+ this.columnHooks.afterChange[key].push({ callback: fn, options, tag: options?.tag });
114
115
  this.modelsWithColumnHooks.add(model);
115
116
  delete this.fieldCache[model];
116
117
  }
118
+ /**
119
+ * Disable all hooks with the given tag.
120
+ * @example hookRegistry.disable('changelog');
121
+ */
122
+ disable(tag) {
123
+ this.disabledTags.add(tag);
124
+ }
125
+ /**
126
+ * Re-enable hooks with the given tag.
127
+ * @example hookRegistry.enable('changelog');
128
+ */
129
+ enable(tag) {
130
+ this.disabledTags.delete(tag);
131
+ }
132
+ isEnabled(tag) {
133
+ return !tag || !this.disabledTags.has(tag);
134
+ }
117
135
  async runHooks(timing, model, action, args, prisma) {
118
136
  const key = `${model}:${action}`;
119
- const hooks = this.hooks[timing]?.[key] ?? [];
137
+ const entries = this.hooks[timing]?.[key] ?? [];
138
+ const active = entries.filter((e) => this.isEnabled(e.tag));
120
139
  if (timing === "after") {
121
- await Promise.all(hooks.map((hook) => hook(...args, prisma)));
140
+ await Promise.all(active.map((e) => e.callback(...args, prisma)));
122
141
  } else {
123
- for (const hook of hooks) {
124
- await hook(...args, prisma);
142
+ for (const entry of active) {
143
+ await entry.callback(...args, prisma);
125
144
  }
126
145
  }
127
146
  }
@@ -132,7 +151,9 @@ var HookRegistry = class {
132
151
  const entries = this.columnHooks.afterChange[key];
133
152
  if (entries && !valuesEqual(newData[column], prevData[column])) {
134
153
  for (const entry of entries) {
135
- promises.push(entry.callback(prevData[column], newData[column], newData, prisma));
154
+ if (this.isEnabled(entry.tag)) {
155
+ promises.push(entry.callback(prevData[column], newData[column], newData, prisma));
156
+ }
136
157
  }
137
158
  }
138
159
  }
@@ -207,6 +228,7 @@ var HookRegistry = class {
207
228
  this.fieldCache = {};
208
229
  this.modelsWithColumnHooks.clear();
209
230
  this.config = { ...DEFAULT_CONFIG };
231
+ this.disabledTags.clear();
210
232
  }
211
233
  };
212
234
  var HOOK_REGISTRY_SYMBOL = /* @__PURE__ */ Symbol.for("prisma-flare.hookRegistry");
@@ -221,29 +243,29 @@ var hookRegistry_default = hookRegistry;
221
243
  function normalizeModelName(model) {
222
244
  return model.toLowerCase();
223
245
  }
224
- function beforeCreate(model, callback) {
225
- hookRegistry_default.addHook(normalizeModelName(model), "create", "before", callback);
246
+ function beforeCreate(model, callback, options) {
247
+ hookRegistry_default.addHook(normalizeModelName(model), "create", "before", callback, options?.tag);
226
248
  }
227
- function beforeDelete(model, callback) {
228
- hookRegistry_default.addHook(normalizeModelName(model), "delete", "before", callback);
249
+ function beforeDelete(model, callback, options) {
250
+ hookRegistry_default.addHook(normalizeModelName(model), "delete", "before", callback, options?.tag);
229
251
  }
230
- function afterCreate(model, callback) {
231
- hookRegistry_default.addHook(normalizeModelName(model), "create", "after", callback);
252
+ function afterCreate(model, callback, options) {
253
+ hookRegistry_default.addHook(normalizeModelName(model), "create", "after", callback, options?.tag);
232
254
  }
233
- function afterDelete(model, callback) {
234
- hookRegistry_default.addHook(normalizeModelName(model), "delete", "after", callback);
255
+ function afterDelete(model, callback, options) {
256
+ hookRegistry_default.addHook(normalizeModelName(model), "delete", "after", callback, options?.tag);
235
257
  }
236
- function beforeUpdate(model, callback) {
237
- hookRegistry_default.addHook(normalizeModelName(model), "update", "before", callback);
258
+ function beforeUpdate(model, callback, options) {
259
+ hookRegistry_default.addHook(normalizeModelName(model), "update", "before", callback, options?.tag);
238
260
  }
239
- function afterUpdate(model, callback) {
240
- hookRegistry_default.addHook(normalizeModelName(model), "update", "after", callback);
261
+ function afterUpdate(model, callback, options) {
262
+ hookRegistry_default.addHook(normalizeModelName(model), "update", "after", callback, options?.tag);
241
263
  }
242
264
  function afterChange(model, column, callback, options) {
243
265
  hookRegistry_default.addColumnHook(normalizeModelName(model), column, callback, options);
244
266
  }
245
- function afterUpsert(model, callback) {
246
- hookRegistry_default.addHook(normalizeModelName(model), "upsert", "after", callback);
267
+ function afterUpsert(model, callback, options) {
268
+ hookRegistry_default.addHook(normalizeModelName(model), "upsert", "after", callback, options?.tag);
247
269
  }
248
270
  // Annotate the CommonJS export names for ESM import in node:
249
271
  0 && (module.exports = {
package/dist/hooks.d.cts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { afterChange, afterCreate, afterDelete, afterUpdate, afterUpsert, beforeCreate, beforeDelete, beforeUpdate } from './core/hooks.cjs';
2
- export { h as hookRegistry } from './hookRegistry-CjujesJK.cjs';
3
- import './prisma.types-CIEFXVL-.cjs';
2
+ export { h as hookRegistry } from './hookRegistry-B8oyCNJ9.cjs';
3
+ import './prisma.types-WBv5kOSl.cjs';
4
4
  import '@prisma/client';
package/dist/hooks.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { afterChange, afterCreate, afterDelete, afterUpdate, afterUpsert, beforeCreate, beforeDelete, beforeUpdate } from './core/hooks.js';
2
- export { h as hookRegistry } from './hookRegistry--2l0ARPy.js';
3
- import './prisma.types-CIEFXVL-.js';
2
+ export { h as hookRegistry } from './hookRegistry-C2bTS4YN.js';
3
+ import './prisma.types-WBv5kOSl.js';
4
4
  import '@prisma/client';