@mikro-orm/knex 6.6.8-dev.4 → 6.6.8-dev.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/knex",
3
- "version": "6.6.8-dev.4",
3
+ "version": "6.6.8-dev.6",
4
4
  "description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
5
5
  "main": "index.js",
6
6
  "module": "index.mjs",
@@ -66,7 +66,7 @@
66
66
  "@mikro-orm/core": "^6.6.7"
67
67
  },
68
68
  "peerDependencies": {
69
- "@mikro-orm/core": "6.6.8-dev.4",
69
+ "@mikro-orm/core": "6.6.8-dev.6",
70
70
  "better-sqlite3": "*",
71
71
  "libsql": "*",
72
72
  "mariadb": "*"
@@ -137,7 +137,13 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
137
137
  shouldInline(payload) {
138
138
  const customExpression = core_1.RawQueryFragment.isKnownFragment(this.key);
139
139
  const scalar = core_1.Utils.isPrimaryKey(payload) || payload instanceof RegExp || payload instanceof Date || customExpression;
140
- const operator = core_1.Utils.isObject(payload) && Object.keys(payload).every(k => core_1.Utils.isOperator(k, false));
140
+ const operator = core_1.Utils.isObject(payload) && Object.keys(payload).every(k => {
141
+ if (k === '$not' && core_1.Utils.isPlainObject(payload[k])) {
142
+ // $not wrapping non-operator conditions (entity props) should be inlined
143
+ return Object.keys(payload[k]).every(ik => core_1.Utils.isOperator(ik, false));
144
+ }
145
+ return core_1.Utils.isOperator(k, false);
146
+ });
141
147
  return !!this.prop && this.prop.kind !== core_1.ReferenceKind.SCALAR && !scalar && !operator;
142
148
  }
143
149
  getChildKey(k, prop, childAlias, alias) {
@@ -158,7 +164,11 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
158
164
  inlineChildPayload(o, payload, field, alias, childAlias) {
159
165
  const prop = this.metadata.find(this.entityName).properties[field];
160
166
  for (const k of Object.keys(payload)) {
161
- if (core_1.Utils.isOperator(k, false)) {
167
+ if (k === '$not' && core_1.Utils.isPlainObject(payload[k]) && Object.keys(payload[k]).some(ik => !core_1.Utils.isOperator(ik, false))) {
168
+ // $not wraps entity conditions (from auto-join), inline at current level
169
+ this.inlineCondition(k, o, payload[k]);
170
+ }
171
+ else if (core_1.Utils.isOperator(k, false)) {
162
172
  const tmp = payload[k];
163
173
  delete payload[k];
164
174
  o[this.aliased(field, alias)] = { [k]: tmp, ...o[this.aliased(field, alias)] };
@@ -207,7 +217,17 @@ class ObjectCriteriaNode extends CriteriaNode_1.CriteriaNode {
207
217
  const meta = this.metadata.find(this.entityName);
208
218
  const embeddable = this.prop.kind === core_1.ReferenceKind.EMBEDDED;
209
219
  const knownKey = [core_1.ReferenceKind.SCALAR, core_1.ReferenceKind.MANY_TO_ONE, core_1.ReferenceKind.EMBEDDED].includes(this.prop.kind) || (this.prop.kind === core_1.ReferenceKind.ONE_TO_ONE && this.prop.owner);
210
- const operatorKeys = knownKey && keys.every(key => core_1.Utils.isOperator(key, false));
220
+ const operatorKeys = knownKey && keys.every(key => {
221
+ if (key === '$not') {
222
+ // $not wraps conditions like $and/$or, check if it wraps entity property conditions (needs auto-join)
223
+ // vs simple operator conditions on the FK (doesn't need auto-join)
224
+ const childPayload = this.payload[key].payload;
225
+ if (core_1.Utils.isPlainObject(childPayload)) {
226
+ return Object.keys(childPayload).every(k => core_1.Utils.isOperator(k, false));
227
+ }
228
+ }
229
+ return core_1.Utils.isOperator(key, false);
230
+ });
211
231
  const primaryKeys = knownKey && keys.every(key => {
212
232
  if (!meta.primaryKeys.includes(key)) {
213
233
  return false;