@bedrockio/model 0.12.0 → 0.12.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/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.12.1
2
+
3
+ - Allow range-based search on string fields.
4
+
1
5
  ## 0.12.0
2
6
 
3
7
  - Handle aggregate pipelines in search.
@@ -360,11 +360,12 @@ function isEmptyArrayQuery(schema, key, value) {
360
360
  return !isMongoOperator(key) && (0, _utils.isArrayField)(schema, key) && value === null;
361
361
  }
362
362
  function isRangeQuery(schema, key, value) {
363
- // Range queries only allowed on Date and Number fields.
364
- if (!(0, _utils.isDateField)(schema, key) && !(0, _utils.isNumberField)(schema, key)) {
363
+ if (!(0, _lodash.isPlainObject)(value)) {
365
364
  return false;
366
365
  }
367
- return typeof value === 'object' && !!value;
366
+
367
+ // Range queries allowed on Date, Number, and String fields.
368
+ return (0, _utils.isDateField)(schema, key) || (0, _utils.isNumberField)(schema, key) || (0, _utils.isStringField)(schema, key);
368
369
  }
369
370
  function mapOperatorQuery(obj) {
370
371
  const query = {};
package/dist/cjs/utils.js CHANGED
@@ -12,6 +12,7 @@ exports.isMongooseSchema = isMongooseSchema;
12
12
  exports.isNumberField = isNumberField;
13
13
  exports.isReferenceField = isReferenceField;
14
14
  exports.isSchemaTypedef = isSchemaTypedef;
15
+ exports.isStringField = isStringField;
15
16
  exports.resolveRefPath = resolveRefPath;
16
17
  var _mongoose = _interopRequireDefault(require("mongoose"));
17
18
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -50,6 +51,9 @@ function isDateField(obj, path) {
50
51
  function isNumberField(obj, path) {
51
52
  return isType(obj, path, 'Number');
52
53
  }
54
+ function isStringField(obj, path) {
55
+ return isType(obj, path, 'String');
56
+ }
53
57
  function isArrayField(obj, path) {
54
58
  const field = getField(obj, path);
55
59
  return Array.isArray(field?.type);
@@ -23,7 +23,7 @@ const DATE_TAGS = {
23
23
  'x-schema': 'DateTime',
24
24
  'x-description': 'A `string` in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.'
25
25
  };
26
- const OBJECT_ID_SCHEMA = exports.OBJECT_ID_SCHEMA = _yada.default.string().mongo().message('Must be an id.').tag({
26
+ const OBJECT_ID_SCHEMA = exports.OBJECT_ID_SCHEMA = _yada.default.string().mongo().message('Must be a valid object id.').tag({
27
27
  'x-schema': 'ObjectId',
28
28
  'x-description': 'A 24 character hexadecimal string representing a Mongo [ObjectId](https://bit.ly/3YPtGlU).'
29
29
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bedrockio/model",
3
- "version": "0.12.0",
3
+ "version": "0.12.1",
4
4
  "description": "Bedrock utilities for model creation.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -39,7 +39,7 @@
39
39
  "@babel/preset-env": "^7.26.0",
40
40
  "@bedrockio/eslint-plugin": "^1.1.7",
41
41
  "@bedrockio/prettier-config": "^1.0.2",
42
- "@bedrockio/yada": "^1.4.1",
42
+ "@bedrockio/yada": "^1.4.2",
43
43
  "@shelf/jest-mongodb": "^5.1.0",
44
44
  "eslint": "^9.19.0",
45
45
  "jest": "^29.7.0",
package/src/search.js CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  isArrayField,
9
9
  isDateField,
10
10
  isNumberField,
11
+ isStringField,
11
12
  resolveRefPath,
12
13
  } from './utils';
13
14
 
@@ -407,11 +408,16 @@ function isEmptyArrayQuery(schema, key, value) {
407
408
  }
408
409
 
409
410
  function isRangeQuery(schema, key, value) {
410
- // Range queries only allowed on Date and Number fields.
411
- if (!isDateField(schema, key) && !isNumberField(schema, key)) {
411
+ if (!isPlainObject(value)) {
412
412
  return false;
413
413
  }
414
- return typeof value === 'object' && !!value;
414
+
415
+ // Range queries allowed on Date, Number, and String fields.
416
+ return (
417
+ isDateField(schema, key) ||
418
+ isNumberField(schema, key) ||
419
+ isStringField(schema, key)
420
+ );
415
421
  }
416
422
 
417
423
  function mapOperatorQuery(obj) {
package/src/utils.js CHANGED
@@ -38,6 +38,10 @@ export function isNumberField(obj, path) {
38
38
  return isType(obj, path, 'Number');
39
39
  }
40
40
 
41
+ export function isStringField(obj, path) {
42
+ return isType(obj, path, 'String');
43
+ }
44
+
41
45
  export function isArrayField(obj, path) {
42
46
  const field = getField(obj, path);
43
47
  return Array.isArray(field?.type);
package/src/validation.js CHANGED
@@ -19,7 +19,7 @@ const DATE_TAGS = {
19
19
  export const OBJECT_ID_SCHEMA = yd
20
20
  .string()
21
21
  .mongo()
22
- .message('Must be an id.')
22
+ .message('Must be a valid object id.')
23
23
  .tag({
24
24
  'x-schema': 'ObjectId',
25
25
  'x-description':
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.js"],"names":[],"mappings":"AAsBA,gEAaC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA4CyD,CAAC;;;;;;;;;;;;;;;;;EAnBzD"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.js"],"names":[],"mappings":"AAuBA,gEAaC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA4CwC,CAAC;;;;;;;;;;;;;;;;;EAnBxC"}
package/types/utils.d.ts CHANGED
@@ -3,6 +3,7 @@ export function isMongooseSchema(obj: any): obj is mongoose.Schema<any, any, any
3
3
  export function isReferenceField(obj: any, path: any): boolean;
4
4
  export function isDateField(obj: any, path: any): boolean;
5
5
  export function isNumberField(obj: any, path: any): boolean;
6
+ export function isStringField(obj: any, path: any): boolean;
6
7
  export function isArrayField(obj: any, path: any): boolean;
7
8
  export function isSchemaTypedef(arg: any): boolean;
8
9
  export function getField(obj: any, path: any): any;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.js"],"names":[],"mappings":"AAQA,iDAcC;AAED,gHAEC;AAED,+DAEC;AAED,0DAEC;AAED,4DAEC;AAED,2DAGC;AAOD,mDAGC;AAuBD,mDAYC;AAKD;;;;EAoBC;AAKD,wDAEC;qBAxHoB,UAAU"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.js"],"names":[],"mappings":"AAQA,iDAcC;AAED,gHAEC;AAED,+DAEC;AAED,0DAEC;AAED,4DAEC;AAED,4DAEC;AAED,2DAGC;AAOD,mDAGC;AAuBD,mDAYC;AAKD;;;;EAoBC;AAKD,wDAEC;qBA5HoB,UAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.js"],"names":[],"mappings":"AAoFA,kDAEC;AAED,oEAkFC;AAsBD,wEAoBC;AAgWD;;;EAEC;AAED;;;EAOC;AA7iBD;;;;;;;;;;;;;;;;eAwBoB,CAAC;;;;;;;;;;;;iBAenB,CAAA;kBAEA,CAAF;kBAA4B,CAAC;oBACA,CAAC;oBAE5B,CAAC;;;wBAkBc,CAAC;8BAIjB,CAAC;oBAA+B,CAAC;oBACV,CAAC;oCAGG,CAAC;uBACpB,CAAC;8BAEH,CAAC;uBAAmC,CAAA;iBACrB,CAAC;;;mBAkBX,CAAC;yBAAoC,CAAC;0BACpB,CAAC;yBAEvB,CAAN;sBACW,CAAC;yBAEN,CAAJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA9CC,CAAC;;;;;;;;;;;;;;;;;;EA5CD"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.js"],"names":[],"mappings":"AAoFA,kDAEC;AAED,oEAkFC;AAsBD,wEAoBC;AAgWD;;;EAEC;AAED;;;EAOC;AA7iBD;;;;;;;;;;;;;;;;eAwBQ,CAAC;;;;;;;;;;;;iBAcmC,CAAC;kBAC3B,CAAC;kBAEH,CAAC;oBACA,CAAC;oBACF,CAAC;;;wBAmBZ,CAAC;8BACe,CAAC;oBAGD,CAAC;oBACV,CAAC;oCAGG,CAAC;uBAAmC,CAAA;8BAE9B,CAAC;uBACO,CAAC;iBACrB,CAAC;;;mBAkBL,CAAL;yBAAoC,CAAC;0BACpB,CAAC;yBACT,CAAC;sBAEH,CAAN;yBACc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA9CQ,CAAC;;;;;;;;;;;;;;;;;;EA3CrB"}