@vibeorm/runtime 2.3.1 → 2.4.1

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.js CHANGED
@@ -12057,32 +12057,63 @@ function isPlainObject9(value) {
12057
12057
  const proto = Object.getPrototypeOf(value);
12058
12058
  return proto === Object.prototype || proto === null;
12059
12059
  }
12060
- function descend(params) {
12061
- const { ctx, model, key } = params;
12062
- const field = model.fieldByName.get(key);
12063
- if (field !== undefined)
12064
- return field.scalarType === "Json" ? "json" : model;
12065
- const relation = model.relationByName.get(key);
12066
- if (relation === undefined)
12067
- return model;
12068
- return ctx.meta.modelByName.get(relation.targetModel) ?? model;
12069
- }
12060
+ var STRUCTURAL_KEYWORDS = Object.freeze({
12061
+ where: { level: "fields", filter: true },
12062
+ having: { level: "fields", filter: true },
12063
+ some: { level: "fields", filter: true },
12064
+ every: { level: "fields", filter: true },
12065
+ none: { level: "fields", filter: true },
12066
+ is: { level: "fields", filter: true },
12067
+ isNot: { level: "fields", filter: true },
12068
+ deleteMany: { level: "fields", filter: true },
12069
+ data: { level: "fields", filter: false },
12070
+ create: { level: "fields", filter: false },
12071
+ set: { level: "fields", filter: false },
12072
+ connect: { level: "fields", filter: false },
12073
+ disconnect: { level: "fields", filter: false },
12074
+ delete: { level: "fields", filter: false },
12075
+ cursor: { level: "fields", filter: false },
12076
+ select: { level: "fields", filter: "inherit" },
12077
+ include: { level: "fields", filter: "inherit" },
12078
+ omit: { level: "fields", filter: "inherit" },
12079
+ orderBy: { level: "fields", filter: "inherit" },
12080
+ connectOrCreate: { level: "structural", filter: "inherit" },
12081
+ upsert: { level: "structural", filter: "inherit" },
12082
+ createMany: { level: "structural", filter: "inherit" },
12083
+ updateMany: { level: "structural", filter: "inherit" },
12084
+ _count: { level: "structural", filter: "inherit" },
12085
+ update: { level: "structural", filter: false }
12086
+ });
12087
+ var LOGICAL_KEYS = new Set(["AND", "OR", "NOT"]);
12070
12088
  function walkArray(params) {
12071
- const { ctx, model, value, path, filter } = params;
12089
+ const { ctx, model, value, path, level, filter } = params;
12072
12090
  let changed = false;
12073
12091
  const out = value.map((item, index) => {
12074
- const next = walkNode({ ctx, model, value: item, path: `${path}[${index}]`, filter });
12092
+ const next = walkNode({ ctx, model, value: item, path: `${path}[${index}]`, level, filter });
12075
12093
  if (next !== item)
12076
12094
  changed = true;
12077
12095
  return next;
12078
12096
  });
12079
12097
  return changed ? out : value;
12080
12098
  }
12099
+ function walkJsonOperators(params) {
12100
+ const { ctx, value, path } = params;
12101
+ let filtered = null;
12102
+ for (const operator of Object.keys(value)) {
12103
+ if (value[operator] === undefined) {
12104
+ throw explicitUndefined({ model: ctx.model, method: ctx.method, path: `${path}.${operator}` });
12105
+ }
12106
+ if (value[operator] === SKIP) {
12107
+ filtered ??= { ...value };
12108
+ delete filtered[operator];
12109
+ }
12110
+ }
12111
+ return filtered ?? value;
12112
+ }
12081
12113
  function walkNode(params) {
12082
- const { ctx, model, value, path } = params;
12083
- const filter = params.filter === true;
12114
+ const { ctx, model, value, path, level, filter } = params;
12084
12115
  if (Array.isArray(value))
12085
- return walkArray({ ctx, model, value, path, filter });
12116
+ return walkArray({ ctx, model, value, path, level, filter });
12086
12117
  if (!isPlainObject9(value))
12087
12118
  return value;
12088
12119
  let out = null;
@@ -12097,33 +12128,31 @@ function walkNode(params) {
12097
12128
  delete out[key];
12098
12129
  continue;
12099
12130
  }
12100
- const target = descend({ ctx, model, key });
12101
- if (target === "json") {
12102
- if (filter && isPlainObject9(child)) {
12103
- let filtered = null;
12104
- for (const operator of Object.keys(child)) {
12105
- if (child[operator] === undefined) {
12106
- throw explicitUndefined({ model: ctx.model, method: ctx.method, path: `${childPath}.${operator}` });
12107
- }
12108
- if (child[operator] === SKIP) {
12109
- filtered ??= { ...child };
12110
- delete filtered[operator];
12111
- }
12112
- }
12113
- if (filtered !== null) {
12114
- out ??= { ...value };
12115
- out[key] = filtered;
12116
- }
12131
+ let next;
12132
+ const keyword = level === "structural" ? STRUCTURAL_KEYWORDS[key] : undefined;
12133
+ if (keyword !== undefined) {
12134
+ next = walkNode({
12135
+ ctx,
12136
+ model,
12137
+ value: child,
12138
+ path: childPath,
12139
+ level: keyword.level,
12140
+ filter: keyword.filter === "inherit" ? filter : keyword.filter
12141
+ });
12142
+ } else if (LOGICAL_KEYS.has(key)) {
12143
+ next = walkNode({ ctx, model, value: child, path: childPath, level: "fields", filter });
12144
+ } else {
12145
+ const field = model.fieldByName.get(key);
12146
+ if (field !== undefined && field.scalarType === "Json") {
12147
+ next = filter && isPlainObject9(child) ? walkJsonOperators({ ctx, value: child, path: childPath }) : child;
12148
+ } else if (field !== undefined) {
12149
+ next = walkNode({ ctx, model, value: child, path: childPath, level: "fields", filter });
12150
+ } else {
12151
+ const relation = model.relationByName.get(key);
12152
+ const target = relation === undefined ? undefined : ctx.meta.modelByName.get(relation.targetModel);
12153
+ next = target === undefined ? walkNode({ ctx, model, value: child, path: childPath, level: "fields", filter }) : walkNode({ ctx, model: target, value: child, path: childPath, level: "structural", filter });
12117
12154
  }
12118
- continue;
12119
12155
  }
12120
- const next = walkNode({
12121
- ctx,
12122
- model: target,
12123
- value: child,
12124
- path: childPath,
12125
- filter: key === "where" || key === "having" ? true : key === "data" || key === "create" || key === "update" ? false : filter
12126
- });
12127
12156
  if (next !== child) {
12128
12157
  out ??= { ...value };
12129
12158
  out[key] = next;
@@ -12136,7 +12165,7 @@ function checkStrictArguments(params) {
12136
12165
  if (args === undefined)
12137
12166
  return;
12138
12167
  const ctx = { meta, model: model.clientName, method };
12139
- const walked = walkNode({ ctx, model, value: args, path: "args" });
12168
+ const walked = walkNode({ ctx, model, value: args, path: "args", level: "structural", filter: false });
12140
12169
  return walked;
12141
12170
  }
12142
12171
 
@@ -14210,11 +14239,12 @@ function makeMountContext(params) {
14210
14239
  meta: { extension }
14211
14240
  });
14212
14241
  }
14242
+ const checked = engine.options?.strictArguments !== false ? checkStrictArguments({ meta: engine.meta, model: target, method: `${extension}.compileWhere`, args: { where } }) : undefined;
14213
14243
  return compileWhere({
14214
14244
  dialect: engine.dialect,
14215
14245
  meta: engine.meta,
14216
14246
  model: target,
14217
- where,
14247
+ where: checked === undefined ? where : checked.where,
14218
14248
  ...qualify === undefined ? {} : { qualify }
14219
14249
  });
14220
14250
  }
@@ -14754,4 +14784,4 @@ export {
14754
14784
  validateWriteData
14755
14785
  };
14756
14786
 
14757
- //# debugId=28EC8E14B301CBEB64756E2164756E21
14787
+ //# debugId=BC9380E497613E8D64756E2164756E21