@prisma/client-engine-runtime 6.7.0-dev.16 → 6.7.0-dev.18

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.
@@ -36,6 +36,8 @@ export type Fragment = {
36
36
  type: 'parameter';
37
37
  } | {
38
38
  type: 'parameterTuple';
39
+ } | {
40
+ type: 'parameterTupleList';
39
41
  };
40
42
  export interface PlaceholderFormat {
41
43
  prefix: string;
package/dist/index.d.mts CHANGED
@@ -17,6 +17,8 @@ export declare type Fragment = {
17
17
  type: 'parameter';
18
18
  } | {
19
19
  type: 'parameterTuple';
20
+ } | {
21
+ type: 'parameterTupleList';
20
22
  };
21
23
 
22
24
  export declare function isPrismaValueGenerator(value: unknown): value is PrismaValueGenerator;
package/dist/index.d.ts CHANGED
@@ -17,6 +17,8 @@ export declare type Fragment = {
17
17
  type: 'parameter';
18
18
  } | {
19
19
  type: 'parameterTuple';
20
+ } | {
21
+ type: 'parameterTupleList';
20
22
  };
21
23
 
22
24
  export declare function isPrismaValueGenerator(value: unknown): value is PrismaValueGenerator;
package/dist/index.js CHANGED
@@ -224,6 +224,7 @@ var GeneratorRegistry = class {
224
224
  this.register("cuid", new CuidGenerator());
225
225
  this.register("ulid", new UlidGenerator());
226
226
  this.register("nanoid", new NanoIdGenerator());
227
+ this.register("product", new ProductGenerator());
227
228
  }
228
229
  /**
229
230
  * Returns a snapshot of the generator registry. It's 'frozen' in time at the moment of this
@@ -286,6 +287,22 @@ var NanoIdGenerator = class {
286
287
  }
287
288
  }
288
289
  };
290
+ var ProductGenerator = class {
291
+ generate(lhs, rhs) {
292
+ if (lhs === void 0 || rhs === void 0) {
293
+ throw new Error("Invalid Product generator arguments");
294
+ }
295
+ if (Array.isArray(lhs) && Array.isArray(rhs)) {
296
+ return lhs.flatMap((l) => rhs.map((r) => [l, r]));
297
+ } else if (Array.isArray(lhs)) {
298
+ return lhs.map((l) => [l, rhs]);
299
+ } else if (Array.isArray(rhs)) {
300
+ return rhs.map((r) => [lhs, r]);
301
+ } else {
302
+ return [[lhs, rhs]];
303
+ }
304
+ }
305
+ };
289
306
 
290
307
  // src/QueryPlan.ts
291
308
  function isPrismaValuePlaceholder(value) {
@@ -300,36 +317,44 @@ function renderQuery(dbQuery, scope, generators) {
300
317
  const queryType = dbQuery.type;
301
318
  switch (queryType) {
302
319
  case "rawSql":
303
- return renderRawSql(dbQuery.sql, substituteParams(dbQuery.params, scope, generators));
320
+ return renderRawSql(dbQuery.sql, evaluateParams(dbQuery.params, scope, generators));
304
321
  case "templateSql":
305
322
  return renderTemplateSql(
306
323
  dbQuery.fragments,
307
324
  dbQuery.placeholderFormat,
308
- substituteParams(dbQuery.params, scope, generators)
325
+ evaluateParams(dbQuery.params, scope, generators)
309
326
  );
310
327
  default:
311
328
  assertNever(queryType, `Invalid query type`);
312
329
  }
313
330
  }
314
- function substituteParams(params, scope, generators) {
315
- return params.map((param) => {
316
- if (isPrismaValueGenerator(param)) {
317
- const { name, args } = param.prisma__value;
331
+ function evaluateParams(params, scope, generators) {
332
+ return params.map((param) => evaluateParam(param, scope, generators));
333
+ }
334
+ function evaluateParam(param, scope, generators) {
335
+ let value = param;
336
+ while (doesRequireEvaluation(value)) {
337
+ if (isPrismaValuePlaceholder(value)) {
338
+ const found = scope[value.prisma__value.name];
339
+ if (found === void 0) {
340
+ throw new Error(`Missing value for query variable ${value.prisma__value.name}`);
341
+ }
342
+ value = found;
343
+ } else if (isPrismaValueGenerator(value)) {
344
+ const { name, args } = value.prisma__value;
318
345
  const generator = generators[name];
319
346
  if (!generator) {
320
347
  throw new Error(`Encountered an unknown generator '${name}'`);
321
348
  }
322
- return generator.generate(...args);
323
- }
324
- if (!isPrismaValuePlaceholder(param)) {
325
- return param;
326
- }
327
- const value = scope[param.prisma__value.name];
328
- if (value === void 0) {
329
- throw new Error(`Missing value for query variable ${param.prisma__value.name}`);
349
+ value = generator.generate(...args.map((arg) => evaluateParam(arg, scope, generators)));
350
+ } else {
351
+ assertNever(value, `Unexpected unevaluated value type: ${value}`);
330
352
  }
331
- return value;
332
- });
353
+ }
354
+ if (Array.isArray(value)) {
355
+ value = value.map((el) => evaluateParam(el, scope, generators));
356
+ }
357
+ return value;
333
358
  }
334
359
  function renderTemplateSql(fragments, placeholderFormat, params) {
335
360
  let paramIndex = 0;
@@ -358,6 +383,29 @@ function renderTemplateSql(fragments, placeholderFormat, params) {
358
383
  }).join(",");
359
384
  return `(${placeholders})`;
360
385
  }
386
+ case "parameterTupleList": {
387
+ if (paramIndex >= params.length) {
388
+ throw new Error(`Malformed query template. Fragments attempt to read over ${params.length} parameters.`);
389
+ }
390
+ const paramValue = params[paramIndex++];
391
+ if (!Array.isArray(paramValue)) {
392
+ throw new Error(`Malformed query template. Tuple list expected.`);
393
+ }
394
+ if (paramValue.length === 0) {
395
+ throw new Error(`Malformed query template. Tuple list cannot be empty.`);
396
+ }
397
+ const tupleList = paramValue.map((tuple) => {
398
+ if (!Array.isArray(tuple)) {
399
+ throw new Error(`Malformed query template. Tuple expected.`);
400
+ }
401
+ const elements = tuple.map((value) => {
402
+ flattenedParams.push(value);
403
+ return formatPlaceholder(placeholderFormat, placeholderNumber++);
404
+ }).join(",");
405
+ return `(${elements})`;
406
+ }).join(",");
407
+ return tupleList;
408
+ }
361
409
  default:
362
410
  assertNever(fragmentType, "Invalid fragment type");
363
411
  }
@@ -416,6 +464,9 @@ function placeholderTypeToArgType(type) {
416
464
  }
417
465
  return mappedType;
418
466
  }
467
+ function doesRequireEvaluation(param) {
468
+ return isPrismaValuePlaceholder(param) || isPrismaValueGenerator(param);
469
+ }
419
470
 
420
471
  // src/interpreter/serialize.ts
421
472
  function serialize(resultSet) {
package/dist/index.mjs CHANGED
@@ -182,6 +182,7 @@ var GeneratorRegistry = class {
182
182
  this.register("cuid", new CuidGenerator());
183
183
  this.register("ulid", new UlidGenerator());
184
184
  this.register("nanoid", new NanoIdGenerator());
185
+ this.register("product", new ProductGenerator());
185
186
  }
186
187
  /**
187
188
  * Returns a snapshot of the generator registry. It's 'frozen' in time at the moment of this
@@ -244,6 +245,22 @@ var NanoIdGenerator = class {
244
245
  }
245
246
  }
246
247
  };
248
+ var ProductGenerator = class {
249
+ generate(lhs, rhs) {
250
+ if (lhs === void 0 || rhs === void 0) {
251
+ throw new Error("Invalid Product generator arguments");
252
+ }
253
+ if (Array.isArray(lhs) && Array.isArray(rhs)) {
254
+ return lhs.flatMap((l) => rhs.map((r) => [l, r]));
255
+ } else if (Array.isArray(lhs)) {
256
+ return lhs.map((l) => [l, rhs]);
257
+ } else if (Array.isArray(rhs)) {
258
+ return rhs.map((r) => [lhs, r]);
259
+ } else {
260
+ return [[lhs, rhs]];
261
+ }
262
+ }
263
+ };
247
264
 
248
265
  // src/QueryPlan.ts
249
266
  function isPrismaValuePlaceholder(value) {
@@ -258,36 +275,44 @@ function renderQuery(dbQuery, scope, generators) {
258
275
  const queryType = dbQuery.type;
259
276
  switch (queryType) {
260
277
  case "rawSql":
261
- return renderRawSql(dbQuery.sql, substituteParams(dbQuery.params, scope, generators));
278
+ return renderRawSql(dbQuery.sql, evaluateParams(dbQuery.params, scope, generators));
262
279
  case "templateSql":
263
280
  return renderTemplateSql(
264
281
  dbQuery.fragments,
265
282
  dbQuery.placeholderFormat,
266
- substituteParams(dbQuery.params, scope, generators)
283
+ evaluateParams(dbQuery.params, scope, generators)
267
284
  );
268
285
  default:
269
286
  assertNever(queryType, `Invalid query type`);
270
287
  }
271
288
  }
272
- function substituteParams(params, scope, generators) {
273
- return params.map((param) => {
274
- if (isPrismaValueGenerator(param)) {
275
- const { name, args } = param.prisma__value;
289
+ function evaluateParams(params, scope, generators) {
290
+ return params.map((param) => evaluateParam(param, scope, generators));
291
+ }
292
+ function evaluateParam(param, scope, generators) {
293
+ let value = param;
294
+ while (doesRequireEvaluation(value)) {
295
+ if (isPrismaValuePlaceholder(value)) {
296
+ const found = scope[value.prisma__value.name];
297
+ if (found === void 0) {
298
+ throw new Error(`Missing value for query variable ${value.prisma__value.name}`);
299
+ }
300
+ value = found;
301
+ } else if (isPrismaValueGenerator(value)) {
302
+ const { name, args } = value.prisma__value;
276
303
  const generator = generators[name];
277
304
  if (!generator) {
278
305
  throw new Error(`Encountered an unknown generator '${name}'`);
279
306
  }
280
- return generator.generate(...args);
281
- }
282
- if (!isPrismaValuePlaceholder(param)) {
283
- return param;
284
- }
285
- const value = scope[param.prisma__value.name];
286
- if (value === void 0) {
287
- throw new Error(`Missing value for query variable ${param.prisma__value.name}`);
307
+ value = generator.generate(...args.map((arg) => evaluateParam(arg, scope, generators)));
308
+ } else {
309
+ assertNever(value, `Unexpected unevaluated value type: ${value}`);
288
310
  }
289
- return value;
290
- });
311
+ }
312
+ if (Array.isArray(value)) {
313
+ value = value.map((el) => evaluateParam(el, scope, generators));
314
+ }
315
+ return value;
291
316
  }
292
317
  function renderTemplateSql(fragments, placeholderFormat, params) {
293
318
  let paramIndex = 0;
@@ -316,6 +341,29 @@ function renderTemplateSql(fragments, placeholderFormat, params) {
316
341
  }).join(",");
317
342
  return `(${placeholders})`;
318
343
  }
344
+ case "parameterTupleList": {
345
+ if (paramIndex >= params.length) {
346
+ throw new Error(`Malformed query template. Fragments attempt to read over ${params.length} parameters.`);
347
+ }
348
+ const paramValue = params[paramIndex++];
349
+ if (!Array.isArray(paramValue)) {
350
+ throw new Error(`Malformed query template. Tuple list expected.`);
351
+ }
352
+ if (paramValue.length === 0) {
353
+ throw new Error(`Malformed query template. Tuple list cannot be empty.`);
354
+ }
355
+ const tupleList = paramValue.map((tuple) => {
356
+ if (!Array.isArray(tuple)) {
357
+ throw new Error(`Malformed query template. Tuple expected.`);
358
+ }
359
+ const elements = tuple.map((value) => {
360
+ flattenedParams.push(value);
361
+ return formatPlaceholder(placeholderFormat, placeholderNumber++);
362
+ }).join(",");
363
+ return `(${elements})`;
364
+ }).join(",");
365
+ return tupleList;
366
+ }
319
367
  default:
320
368
  assertNever(fragmentType, "Invalid fragment type");
321
369
  }
@@ -374,6 +422,9 @@ function placeholderTypeToArgType(type) {
374
422
  }
375
423
  return mappedType;
376
424
  }
425
+ function doesRequireEvaluation(param) {
426
+ return isPrismaValuePlaceholder(param) || isPrismaValueGenerator(param);
427
+ }
377
428
 
378
429
  // src/interpreter/serialize.ts
379
430
  function serialize(resultSet) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/client-engine-runtime",
3
- "version": "6.7.0-dev.16",
3
+ "version": "6.7.0-dev.18",
4
4
  "description": "This package is intended for Prisma's internal use",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -30,8 +30,8 @@
30
30
  "nanoid": "5.1.5",
31
31
  "ulid": "3.0.0",
32
32
  "uuid": "11.1.0",
33
- "@prisma/debug": "6.7.0-dev.16",
34
- "@prisma/driver-adapter-utils": "6.7.0-dev.16"
33
+ "@prisma/debug": "6.7.0-dev.18",
34
+ "@prisma/driver-adapter-utils": "6.7.0-dev.18"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/jest": "29.5.14",