@bedrockio/model 0.4.0 → 0.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/cjs/query.js +17 -0
- package/dist/cjs/search.js +13 -6
- package/package.json +1 -1
- package/src/query.js +13 -0
- package/src/search.js +11 -10
- package/types/load.d.ts +1 -67
- package/types/load.d.ts.map +1 -1
- package/types/query.d.ts +1 -0
- package/types/query.d.ts.map +1 -1
- package/types/schema.d.ts +3 -7
- package/types/schema.d.ts.map +1 -1
- package/types/search.d.ts.map +1 -1
- package/types/validation.d.ts +0 -1
- package/types/validation.d.ts.map +1 -1
package/dist/cjs/query.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.mergeQuery = mergeQuery;
|
|
6
7
|
exports.wrapQuery = wrapQuery;
|
|
7
8
|
// Wrapper that allows a mongoose query object to be returned
|
|
8
9
|
// to access chained methods while still resolving with a
|
|
@@ -18,4 +19,20 @@ function wrapQuery(query, fn) {
|
|
|
18
19
|
}
|
|
19
20
|
};
|
|
20
21
|
return query;
|
|
22
|
+
}
|
|
23
|
+
function mergeQuery(target, source) {
|
|
24
|
+
const result = Object.assign({}, target, source);
|
|
25
|
+
if (target.$or && source.$or) {
|
|
26
|
+
const {
|
|
27
|
+
$or
|
|
28
|
+
} = target;
|
|
29
|
+
result.$or = source.$or.map(conditions => {
|
|
30
|
+
return {
|
|
31
|
+
$and: [conditions, {
|
|
32
|
+
$or
|
|
33
|
+
}]
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
21
38
|
}
|
package/dist/cjs/search.js
CHANGED
|
@@ -25,10 +25,14 @@ const {
|
|
|
25
25
|
function applySearch(schema, definition) {
|
|
26
26
|
validateDefinition(definition);
|
|
27
27
|
applySearchCache(schema, definition);
|
|
28
|
+
const {
|
|
29
|
+
query: searchQuery,
|
|
30
|
+
fields: searchFields
|
|
31
|
+
} = definition.search || {};
|
|
28
32
|
schema.static('search', function search(body = {}) {
|
|
29
33
|
const options = {
|
|
30
34
|
..._const.SEARCH_DEFAULTS,
|
|
31
|
-
...
|
|
35
|
+
...searchQuery,
|
|
32
36
|
...body
|
|
33
37
|
};
|
|
34
38
|
const {
|
|
@@ -39,16 +43,19 @@ function applySearch(schema, definition) {
|
|
|
39
43
|
sort,
|
|
40
44
|
...rest
|
|
41
45
|
} = options;
|
|
42
|
-
|
|
46
|
+
let query = normalizeQuery(rest, schema.obj);
|
|
43
47
|
if (ids?.length) {
|
|
44
|
-
query
|
|
45
|
-
|
|
48
|
+
query = {
|
|
49
|
+
...query,
|
|
50
|
+
_id: {
|
|
51
|
+
$in: ids
|
|
52
|
+
}
|
|
46
53
|
};
|
|
47
54
|
}
|
|
48
55
|
if (keyword) {
|
|
49
|
-
|
|
56
|
+
const keywordQuery = buildKeywordQuery(schema, keyword, searchFields);
|
|
57
|
+
query = (0, _query.mergeQuery)(query, keywordQuery);
|
|
50
58
|
}
|
|
51
|
-
Object.assign(query, normalizeQuery(rest, schema.obj));
|
|
52
59
|
if (_env.debug) {
|
|
53
60
|
_logger.default.info(`Search query for ${this.modelName}:\n`, JSON.stringify(query, null, 2));
|
|
54
61
|
}
|
package/package.json
CHANGED
package/src/query.js
CHANGED
|
@@ -13,3 +13,16 @@ export function wrapQuery(query, fn) {
|
|
|
13
13
|
};
|
|
14
14
|
return query;
|
|
15
15
|
}
|
|
16
|
+
|
|
17
|
+
export function mergeQuery(target, source) {
|
|
18
|
+
const result = Object.assign({}, target, source);
|
|
19
|
+
if (target.$or && source.$or) {
|
|
20
|
+
const { $or } = target;
|
|
21
|
+
result.$or = source.$or.map((conditions) => {
|
|
22
|
+
return {
|
|
23
|
+
$and: [conditions, { $or }],
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
package/src/search.js
CHANGED
|
@@ -15,7 +15,7 @@ import { isDateField, isNumberField, getField } from './utils';
|
|
|
15
15
|
import { SEARCH_DEFAULTS } from './const';
|
|
16
16
|
import { OBJECT_ID_SCHEMA } from './validation';
|
|
17
17
|
import { debug } from './env';
|
|
18
|
-
import { wrapQuery } from './query';
|
|
18
|
+
import { mergeQuery, wrapQuery } from './query';
|
|
19
19
|
|
|
20
20
|
import warn from './warn';
|
|
21
21
|
|
|
@@ -26,30 +26,31 @@ export function applySearch(schema, definition) {
|
|
|
26
26
|
validateDefinition(definition);
|
|
27
27
|
applySearchCache(schema, definition);
|
|
28
28
|
|
|
29
|
+
const { query: searchQuery, fields: searchFields } = definition.search || {};
|
|
30
|
+
|
|
29
31
|
schema.static('search', function search(body = {}) {
|
|
30
32
|
const options = {
|
|
31
33
|
...SEARCH_DEFAULTS,
|
|
32
|
-
...
|
|
34
|
+
...searchQuery,
|
|
33
35
|
...body,
|
|
34
36
|
};
|
|
35
37
|
|
|
36
38
|
const { ids, keyword, skip = 0, limit, sort, ...rest } = options;
|
|
37
39
|
|
|
38
|
-
|
|
40
|
+
let query = normalizeQuery(rest, schema.obj);
|
|
39
41
|
|
|
40
42
|
if (ids?.length) {
|
|
41
|
-
query
|
|
43
|
+
query = {
|
|
44
|
+
...query,
|
|
45
|
+
_id: { $in: ids },
|
|
46
|
+
};
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
if (keyword) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
buildKeywordQuery(schema, keyword, definition.search?.fields)
|
|
48
|
-
);
|
|
50
|
+
const keywordQuery = buildKeywordQuery(schema, keyword, searchFields);
|
|
51
|
+
query = mergeQuery(query, keywordQuery);
|
|
49
52
|
}
|
|
50
53
|
|
|
51
|
-
Object.assign(query, normalizeQuery(rest, schema.obj));
|
|
52
|
-
|
|
53
54
|
if (debug) {
|
|
54
55
|
logger.info(
|
|
55
56
|
`Search query for ${this.modelName}:\n`,
|
package/types/load.d.ts
CHANGED
|
@@ -4,73 +4,7 @@
|
|
|
4
4
|
* @param {string} name
|
|
5
5
|
* @returns mongoose.Model
|
|
6
6
|
*/
|
|
7
|
-
export function loadModel(definition: object, name: string):
|
|
8
|
-
[x: string]: any;
|
|
9
|
-
}, {
|
|
10
|
-
autoIndex?: boolean;
|
|
11
|
-
autoCreate?: boolean;
|
|
12
|
-
bufferCommands?: boolean;
|
|
13
|
-
bufferTimeoutMS?: number;
|
|
14
|
-
capped?: number | boolean | {
|
|
15
|
-
size?: number;
|
|
16
|
-
max?: number;
|
|
17
|
-
autoIndexId?: boolean;
|
|
18
|
-
};
|
|
19
|
-
collation?: mongoose.mongo.CollationOptions;
|
|
20
|
-
collectionOptions?: mongoose.mongo.CreateCollectionOptions;
|
|
21
|
-
timeseries?: mongoose.mongo.TimeSeriesCollectionOptions;
|
|
22
|
-
expireAfterSeconds?: number;
|
|
23
|
-
expires?: string | number;
|
|
24
|
-
collection?: string;
|
|
25
|
-
discriminatorKey?: string;
|
|
26
|
-
excludeIndexes?: boolean;
|
|
27
|
-
id?: boolean;
|
|
28
|
-
_id?: boolean;
|
|
29
|
-
minimize?: boolean;
|
|
30
|
-
optimisticConcurrency?: boolean;
|
|
31
|
-
pluginTags?: string[];
|
|
32
|
-
read?: string;
|
|
33
|
-
writeConcern?: mongoose.mongo.WriteConcern;
|
|
34
|
-
safe?: boolean | {
|
|
35
|
-
w?: string | number;
|
|
36
|
-
wtimeout?: number;
|
|
37
|
-
j?: boolean;
|
|
38
|
-
};
|
|
39
|
-
shardKey?: Record<string, unknown>;
|
|
40
|
-
strict?: boolean | "throw";
|
|
41
|
-
strictQuery?: boolean | "throw";
|
|
42
|
-
toJSON: {
|
|
43
|
-
getters: boolean;
|
|
44
|
-
versionKey: boolean;
|
|
45
|
-
transform: (doc: any, ret: any, options: any) => void;
|
|
46
|
-
} | mongoose.ToObjectOptions<any>;
|
|
47
|
-
toObject: {
|
|
48
|
-
getters: boolean;
|
|
49
|
-
versionKey: boolean;
|
|
50
|
-
transform: (doc: any, ret: any, options: any) => void;
|
|
51
|
-
} | mongoose.ToObjectOptions<any>;
|
|
52
|
-
typeKey?: string;
|
|
53
|
-
validateBeforeSave?: boolean;
|
|
54
|
-
validateModifiedOnly?: boolean;
|
|
55
|
-
versionKey?: string | boolean;
|
|
56
|
-
selectPopulatedPaths?: boolean;
|
|
57
|
-
skipVersioning?: {
|
|
58
|
-
[key: string]: boolean;
|
|
59
|
-
};
|
|
60
|
-
storeSubdocValidationError?: boolean;
|
|
61
|
-
timestamps: boolean | mongoose.SchemaTimestampsConfig;
|
|
62
|
-
suppressReservedKeysWarning?: boolean;
|
|
63
|
-
statics?: {
|
|
64
|
-
[x: string]: any;
|
|
65
|
-
};
|
|
66
|
-
methods?: any;
|
|
67
|
-
query?: any;
|
|
68
|
-
castNonArrays?: boolean;
|
|
69
|
-
virtuals?: mongoose.SchemaOptionsVirtualsPropertyType<any, any, any>;
|
|
70
|
-
overwriteModels?: boolean;
|
|
71
|
-
}, any, any>> & {
|
|
72
|
-
[x: string]: any;
|
|
73
|
-
};
|
|
7
|
+
export function loadModel(definition: object, name: string): any;
|
|
74
8
|
/**
|
|
75
9
|
* Loads all model definitions in the given directory.
|
|
76
10
|
* Returns the full loaded model set.
|
package/types/load.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../src/load.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,sCAJW,MAAM,QACN,MAAM
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../src/load.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,sCAJW,MAAM,QACN,MAAM,OAahB;AAED;;;;GAIG;AACH,sCAFW,MAAM,mBAkBhB"}
|
package/types/query.d.ts
CHANGED
package/types/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.js"],"names":[],"mappings":"AAIA,oDAUC"}
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.js"],"names":[],"mappings":"AAIA,oDAUC;AAED,0DAWC"}
|
package/types/schema.d.ts
CHANGED
|
@@ -6,9 +6,7 @@
|
|
|
6
6
|
* @param {mongoose.SchemaOptions} options
|
|
7
7
|
* @returns mongoose.Schema
|
|
8
8
|
*/
|
|
9
|
-
export function createSchema(definition: object, options?: mongoose.SchemaOptions): mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, any, any, any, {
|
|
10
|
-
[x: string]: any;
|
|
11
|
-
}, {
|
|
9
|
+
export function createSchema(definition: object, options?: mongoose.SchemaOptions): mongoose.Schema<any, mongoose.Model<any, any, any, any, any, any>, any, any, any, any, {
|
|
12
10
|
autoIndex?: boolean;
|
|
13
11
|
autoCreate?: boolean;
|
|
14
12
|
bufferCommands?: boolean;
|
|
@@ -62,10 +60,8 @@ export function createSchema(definition: object, options?: mongoose.SchemaOption
|
|
|
62
60
|
storeSubdocValidationError?: boolean;
|
|
63
61
|
timestamps: boolean | mongoose.SchemaTimestampsConfig;
|
|
64
62
|
suppressReservedKeysWarning?: boolean;
|
|
65
|
-
statics?: {
|
|
66
|
-
|
|
67
|
-
};
|
|
68
|
-
methods?: any;
|
|
63
|
+
statics?: mongoose.AddThisParameter<any, mongoose.Model<any, {}, {}, {}, any, any>>;
|
|
64
|
+
methods?: mongoose.AddThisParameter<any, any> & mongoose.AnyObject;
|
|
69
65
|
query?: any;
|
|
70
66
|
castNonArrays?: boolean;
|
|
71
67
|
virtuals?: mongoose.SchemaOptionsVirtualsPropertyType<any, any, any>;
|
package/types/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.js"],"names":[],"mappings":"AAqBA;;;;;;;GAOG;AACH,yCAJW,MAAM,YACN,SAAS,aAAa
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.js"],"names":[],"mappings":"AAqBA;;;;;;;GAOG;AACH,yCAJW,MAAM,YACN,SAAS,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAwChC;AAED,iEAsBC"}
|
package/types/search.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.js"],"names":[],"mappings":"AAwBA,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.js"],"names":[],"mappings":"AAwBA,gEAwDC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBC"}
|
package/types/validation.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.js"],"names":[],"mappings":"AAkFA,kDAEC;AAED,oEA8FC;AAsBD,wEA2BC;AAmSD;;;EAEC;AAED;;;EAOC;AAjgBD
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.js"],"names":[],"mappings":"AAkFA,kDAEC;AAED,oEA8FC;AAsBD,wEA2BC;AAmSD;;;EAEC;AAED;;;EAOC;AAjgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQK"}
|