Skip to content
This repository was archived by the owner on Sep 2, 2025. It is now read-only.

Commit 946bc83

Browse files
author
Dekel Barzilay
committed
Added $mergeEager to merge an eager expression to $eager
1 parent b79ac49 commit 946bc83

File tree

5 files changed

+35
-12
lines changed

5 files changed

+35
-12
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,10 @@ Note that all this eager related options are optional.
164164
`JoinEagerAlgorithm`. See
165165
[`$joinEager`](https://vincit.github.io/objection.js/api/query-builder/eager-methods.html#joineager)
166166
documentation.
167-
- **`$modifyEager`** - filter relation based on a relation's field.
167+
- **`$modifyEager`** - filter relation based on a relation's field,
168168
e.g. `companies.find({ query: { $eager: 'employees', $modifyEager: { employees: { name: 'John' } } } })`
169+
- **`$mergeEager`** - merge an eager expression to `$eager`,
170+
e.g. `ccompanies.find({ query: { $eager: 'employees', $mergeEager: 'ceos' } })`
169171
- **`$pick`** - pick properties from result models. See
170172
[`pick`](https://vincit.github.io/objection.js/api/query-builder/other-methods.html#pick) documentation.
171173

package-lock.json

Lines changed: 15 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "feathers-objection",
33
"description": "A service plugin for ObjectionJS an ORM based on KnexJS",
4-
"version": "4.6.1",
4+
"version": "4.6.2",
55
"homepage": "https://github.com/feathersjs-ecosystem/feathers-objection",
66
"keywords": [
77
"feathers",
@@ -49,7 +49,7 @@
4949
"compile": "rimraf lib/ && babel -d lib/ src/",
5050
"watch": "babel --watch -d lib/ src/",
5151
"lint": "semistandard --fix src/**/*.js test/**/*.js --config",
52-
"dtslint": "dtslint types",
52+
"dtslint": "dtslint --localTs node_modules/typescript/lib types",
5353
"mocha": "nyc mocha --opts mocha.opts",
5454
"coverage": "nyc report --reporter=text-lcov | coveralls",
5555
"test": "npm run compile && npm run lint && npm run dtslint && npm run mocha",

src/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ class Service extends AdapterService {
161161
if (params.$joinEager) { delete params.$joinEager; }
162162
if (params.$joinRelation) { delete params.$joinRelation; }
163163
if (params.$modifyEager) { delete params.$modifyEager; }
164+
if (params.$mergeEager) { delete params.$mergeEager; }
164165
if (params.$pick) { delete params.$pick; }
165166
if (params.$noSelect) { delete params.$noSelect; }
166167

@@ -288,6 +289,12 @@ class Service extends AdapterService {
288289
delete query.$joinRelation;
289290
}
290291

292+
if (query && query.$mergeEager) {
293+
q.mergeEager(query.$mergeEager);
294+
295+
delete query.$mergeEager;
296+
}
297+
291298
// apply eager filters if specified
292299
if (this.eagerFilters) {
293300
const eagerFilters = Array.isArray(this.eagerFilters) ? this.eagerFilters : [this.eagerFilters];

test/index.test.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ const app = feathers()
134134
model: Company,
135135
id: 'id',
136136
multi: ['create', 'remove', 'patch'],
137-
whitelist: ['$eager', '$modifyEager', '$pick', '$between', '$notBetween', '$containsKey', '$contains', '$contained', '$any', '$all', '$noSelect', '$like'],
137+
whitelist: ['$eager', '$modifyEager', '$mergeEager', '$pick', '$between', '$notBetween', '$containsKey', '$contains', '$contained', '$any', '$all', '$noSelect', '$like'],
138138
allowedEager: '[ceos, clients]',
139139
namedEagerFilters: {
140140
notSnoop (builder) {
@@ -779,6 +779,13 @@ describe('Feathers Objection Service', () => {
779779
});
780780
});
781781

782+
it('allows mergeEager queries', () => {
783+
return companies.find({ query: { $eager: 'employees', $mergeEager: 'ceos' }, mergeAllowEager: '[employees, ceos]' }).then(data => {
784+
expect(data[0].employees).to.be.ok;
785+
expect(data[0].ceos).to.be.ok;
786+
});
787+
});
788+
782789
it('allows modifyEager queries', () => {
783790
return companies.find({ query: { $eager: 'employees', $modifyEager: { employees: { name: 'John' } } }, mergeAllowEager: 'employees' }).then(data => {
784791
expect(data[0].employees.length).to.equal(2);

0 commit comments

Comments
 (0)