@cyberskill/shared 2.5.0 → 2.6.0

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./common/common.util.cjs"),t=require("./object/object.util.cjs"),a=require("./serializer/serializer.util.cjs"),e=require("./string/string.util.cjs"),i=require("./validate/validate.util.cjs");exports.mapEnvironment=r.mapEnvironment;exports.regexSearchMapper=r.regexSearchMapper;exports.removeAccent=r.removeAccent;exports.uniqueArray=r.uniqueArray;exports.deepMerge=t.deepMerge;exports.getNestedValue=t.getNestedValue;exports.isJSON=t.isJSON;exports.setNestedValue=t.setNestedValue;exports.serializer=a.serializer;exports.generateRandomPassword=e.generateRandomPassword;exports.generateShortId=e.generateShortId;exports.generateSlug=e.generateSlug;exports.getFileName=e.getFileName;exports.substringBetween=e.substringBetween;exports.validate=i.validate;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./common/common.util.cjs"),e=require("./object/object.util.cjs"),a=require("./serializer/serializer.util.cjs"),r=require("./string/string.util.cjs"),i=require("./validate/validate.util.cjs");exports.mapEnvironment=t.mapEnvironment;exports.regexSearchMapper=t.regexSearchMapper;exports.removeAccent=t.removeAccent;exports.uniqueArray=t.uniqueArray;exports.deepMerge=e.deepMerge;exports.getNestedValue=e.getNestedValue;exports.isJSON=e.isJSON;exports.normalizeMongoFilter=e.normalizeMongoFilter;exports.setNestedValue=e.setNestedValue;exports.serializer=a.serializer;exports.generateRandomPassword=r.generateRandomPassword;exports.generateShortId=r.generateShortId;exports.generateSlug=r.generateSlug;exports.getFileName=r.getFileName;exports.substringBetween=r.substringBetween;exports.validate=i.validate;
@@ -1,22 +1,23 @@
1
- import { mapEnvironment as t, regexSearchMapper as a, removeAccent as o, uniqueArray as n } from "./common/common.util.js";
2
- import { deepMerge as g, getNestedValue as p, isJSON as s, setNestedValue as i } from "./object/object.util.js";
3
- import { serializer as l } from "./serializer/serializer.util.js";
4
- import { generateRandomPassword as x, generateShortId as f, generateSlug as N, getFileName as S, substringBetween as c } from "./string/string.util.js";
1
+ import { mapEnvironment as t, regexSearchMapper as o, removeAccent as a, uniqueArray as n } from "./common/common.util.js";
2
+ import { deepMerge as g, getNestedValue as i, isJSON as p, normalizeMongoFilter as s, setNestedValue as l } from "./object/object.util.js";
3
+ import { serializer as u } from "./serializer/serializer.util.js";
4
+ import { generateRandomPassword as f, generateShortId as N, generateSlug as S, getFileName as c, substringBetween as v } from "./string/string.util.js";
5
5
  import { validate as h } from "./validate/validate.util.js";
6
6
  export {
7
7
  g as deepMerge,
8
- x as generateRandomPassword,
9
- f as generateShortId,
10
- N as generateSlug,
11
- S as getFileName,
12
- p as getNestedValue,
13
- s as isJSON,
8
+ f as generateRandomPassword,
9
+ N as generateShortId,
10
+ S as generateSlug,
11
+ c as getFileName,
12
+ i as getNestedValue,
13
+ p as isJSON,
14
14
  t as mapEnvironment,
15
- a as regexSearchMapper,
16
- o as removeAccent,
17
- l as serializer,
18
- i as setNestedValue,
19
- c as substringBetween,
15
+ s as normalizeMongoFilter,
16
+ o as regexSearchMapper,
17
+ a as removeAccent,
18
+ u as serializer,
19
+ l as setNestedValue,
20
+ v as substringBetween,
20
21
  n as uniqueArray,
21
22
  h as validate
22
23
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./object.util.cjs");exports.deepMerge=e.deepMerge;exports.getNestedValue=e.getNestedValue;exports.isJSON=e.isJSON;exports.setNestedValue=e.setNestedValue;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./object.util.cjs");exports.deepMerge=e.deepMerge;exports.getNestedValue=e.getNestedValue;exports.isJSON=e.isJSON;exports.normalizeMongoFilter=e.normalizeMongoFilter;exports.setNestedValue=e.setNestedValue;
@@ -1,7 +1,8 @@
1
- import { deepMerge as s, getNestedValue as d, isJSON as r, setNestedValue as N } from "./object.util.js";
1
+ import { deepMerge as o, getNestedValue as r, isJSON as l, normalizeMongoFilter as s, setNestedValue as a } from "./object.util.js";
2
2
  export {
3
- s as deepMerge,
4
- d as getNestedValue,
5
- r as isJSON,
6
- N as setNestedValue
3
+ o as deepMerge,
4
+ r as getNestedValue,
5
+ l as isJSON,
6
+ s as normalizeMongoFilter,
7
+ a as setNestedValue
7
8
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("lodash-es");var c=Object.defineProperty,y=Object.defineProperties,d=Object.getOwnPropertyDescriptors,u=Object.getOwnPropertySymbols,m=Object.prototype.hasOwnProperty,v=Object.prototype.propertyIsEnumerable,a=(t,e,n)=>e in t?c(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,l=(t,e)=>{for(var n in e||(e={}))m.call(e,n)&&a(t,n,e[n]);if(u)for(var n of u(e))v.call(e,n)&&a(t,n,e[n]);return t},f=(t,e)=>y(t,d(e));function g(t){try{return JSON.parse(t),!0}catch(e){return!1}}function _(t,e){return e.reduce((n,o)=>{if(n&&typeof n=="object"&&o in n)return n[o]},t)}function p(t,e,n){if(e.length===0)return t;const[o,...r]=e;if(r.length===0)return f(l({},t),{[o]:n});const i=t[o];return f(l({},t),{[o]:p(typeof i=="object"&&i!==null?i:{},r,n)})}function h(...t){if(t.length===0)return{};const e=t.filter(r=>r!=null).map(r=>typeof r!="object"?{}:r);if(e.length===0)return{};if(e.length===1)return e[0];if(e.every(s.isArray))return[].concat(...e);if(e.every(r=>typeof r=="object"&&r!==null&&!s.isArray(r)))return s.mergeWith({},...e,(r,i)=>{if(s.isArray(r)&&s.isArray(i))return r.concat(i)});if(e.every(r=>typeof r!="object"||r===null))throw new Error("deepMerge: Cannot merge primitive values. All arguments must be objects or arrays.");const n=e.some(s.isArray),o=e.some(r=>typeof r=="object"&&r!==null&&!s.isArray(r));throw n&&o?new Error("deepMerge: Cannot mix arrays and objects. All arguments must be either arrays or objects."):new Error("deepMerge: Invalid arguments provided. All arguments must be objects or arrays of the same type.")}exports.deepMerge=h;exports.getNestedValue=_;exports.isJSON=g;exports.setNestedValue=p;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("lodash-es");var m=Object.defineProperty,v=Object.defineProperties,b=Object.getOwnPropertyDescriptors,a=Object.getOwnPropertySymbols,g=Object.prototype.hasOwnProperty,O=Object.prototype.propertyIsEnumerable,u=(r,e,n)=>e in r?m(r,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):r[e]=n,l=(r,e)=>{for(var n in e||(e={}))g.call(e,n)&&u(r,n,e[n]);if(a)for(var n of a(e))O.call(e,n)&&u(r,n,e[n]);return r},c=(r,e)=>v(r,b(e));function _(r){try{return JSON.parse(r),!0}catch(e){return!1}}function h(r,e){return e.reduce((n,o)=>{if(n&&typeof n=="object"&&o in n)return n[o]},r)}function f(r,e,n){if(e.length===0)return r;const[o,...t]=e;if(t.length===0)return c(l({},r),{[o]:n});const s=r[o];return c(l({},r),{[o]:f(typeof s=="object"&&s!==null?s:{},t,n)})}function j(...r){if(r.length===0)return{};const e=r.filter(t=>t!=null).map(t=>typeof t!="object"?{}:t);if(e.length===0)return{};if(e.length===1)return e[0];if(e.every(i.isArray))return[].concat(...e);if(e.every(t=>typeof t=="object"&&t!==null&&!i.isArray(t)))return i.mergeWith({},...e,(t,s)=>{if(i.isArray(t)&&i.isArray(s))return t.concat(s)});if(e.every(t=>typeof t!="object"||t===null))throw new Error("deepMerge: Cannot merge primitive values. All arguments must be objects or arrays.");const n=e.some(i.isArray),o=e.some(t=>typeof t=="object"&&t!==null&&!i.isArray(t));throw n&&o?new Error("deepMerge: Cannot mix arrays and objects. All arguments must be either arrays or objects."):new Error("deepMerge: Invalid arguments provided. All arguments must be objects or arrays of the same type.")}function p(r){if(!r||typeof r!="object")return r;const e={};for(const[n,o]of Object.entries(r))if(o&&typeof o=="object"&&!Array.isArray(o)){const t=p(o);for(const[s,y]of Object.entries(t)){const d=`${n}.${s}`;e[d]=y}}else e[n]=o;return e}exports.deepMerge=j;exports.getNestedValue=h;exports.isJSON=_;exports.normalizeMongoFilter=p;exports.setNestedValue=f;
@@ -71,3 +71,20 @@ export declare function deepMerge<T extends Record<string, unknown>>(...args: (T
71
71
  * @returns The merged array.
72
72
  */
73
73
  export declare function deepMerge<T extends unknown[]>(...args: (T | null | undefined)[]): T;
74
+ /**
75
+ * Normalizes MongoDB filters to support both dot notation strings and nested objects.
76
+ * This function converts nested object filters to dot notation format to ensure
77
+ * consistent behavior across different filter input formats.
78
+ *
79
+ * @param filter - The filter object to normalize.
80
+ * @returns A normalized filter object with nested objects converted to dot notation.
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * // Both of these will work the same way:
85
+ * normalizeMongoFilter({ "location.countryId": "240" })
86
+ * normalizeMongoFilter({ location: { countryId: "240" } })
87
+ * // Both return: { "location.countryId": "240" }
88
+ * ```
89
+ */
90
+ export declare function normalizeMongoFilter<T extends Record<string, unknown>>(filter: T): T;
@@ -1,46 +1,46 @@
1
- import { isArray as i, mergeWith as l } from "lodash-es";
2
- var c = Object.defineProperty, d = Object.defineProperties, m = Object.getOwnPropertyDescriptors, u = Object.getOwnPropertySymbols, y = Object.prototype.hasOwnProperty, v = Object.prototype.propertyIsEnumerable, f = (t, e, n) => e in t ? c(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, a = (t, e) => {
1
+ import { isArray as i, mergeWith as y } from "lodash-es";
2
+ var d = Object.defineProperty, m = Object.defineProperties, v = Object.getOwnPropertyDescriptors, u = Object.getOwnPropertySymbols, b = Object.prototype.hasOwnProperty, _ = Object.prototype.propertyIsEnumerable, a = (r, e, n) => e in r ? d(r, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : r[e] = n, f = (r, e) => {
3
3
  for (var n in e || (e = {}))
4
- y.call(e, n) && f(t, n, e[n]);
4
+ b.call(e, n) && a(r, n, e[n]);
5
5
  if (u)
6
6
  for (var n of u(e))
7
- v.call(e, n) && f(t, n, e[n]);
8
- return t;
9
- }, p = (t, e) => d(t, m(e));
10
- function O(t) {
7
+ _.call(e, n) && a(r, n, e[n]);
8
+ return r;
9
+ }, c = (r, e) => m(r, v(e));
10
+ function j(r) {
11
11
  try {
12
- return JSON.parse(t), !0;
12
+ return JSON.parse(r), !0;
13
13
  } catch (e) {
14
14
  return !1;
15
15
  }
16
16
  }
17
- function b(t, e) {
17
+ function w(r, e) {
18
18
  return e.reduce((n, o) => {
19
19
  if (n && typeof n == "object" && o in n)
20
20
  return n[o];
21
- }, t);
21
+ }, r);
22
22
  }
23
- function _(t, e, n) {
23
+ function O(r, e, n) {
24
24
  if (e.length === 0)
25
- return t;
26
- const [o, ...r] = e;
27
- if (r.length === 0)
28
- return p(a({}, t), {
25
+ return r;
26
+ const [o, ...t] = e;
27
+ if (t.length === 0)
28
+ return c(f({}, r), {
29
29
  [o]: n
30
30
  });
31
- const s = t[o];
32
- return p(a({}, t), {
33
- [o]: _(
31
+ const s = r[o];
32
+ return c(f({}, r), {
33
+ [o]: O(
34
34
  typeof s == "object" && s !== null ? s : {},
35
- r,
35
+ t,
36
36
  n
37
37
  )
38
38
  });
39
39
  }
40
- function g(...t) {
41
- if (t.length === 0)
40
+ function P(...r) {
41
+ if (r.length === 0)
42
42
  return {};
43
- const e = t.filter((r) => r != null).map((r) => typeof r != "object" ? {} : r);
43
+ const e = r.filter((t) => t != null).map((t) => typeof t != "object" ? {} : t);
44
44
  if (e.length === 0)
45
45
  return {};
46
46
  if (e.length === 1)
@@ -48,18 +48,18 @@ function g(...t) {
48
48
  if (e.every(i))
49
49
  return [].concat(...e);
50
50
  if (e.every(
51
- (r) => typeof r == "object" && r !== null && !i(r)
51
+ (t) => typeof t == "object" && t !== null && !i(t)
52
52
  ))
53
- return l({}, ...e, (r, s) => {
54
- if (i(r) && i(s))
55
- return r.concat(s);
53
+ return y({}, ...e, (t, s) => {
54
+ if (i(t) && i(s))
55
+ return t.concat(s);
56
56
  });
57
- if (e.every((r) => typeof r != "object" || r === null))
57
+ if (e.every((t) => typeof t != "object" || t === null))
58
58
  throw new Error(
59
59
  "deepMerge: Cannot merge primitive values. All arguments must be objects or arrays."
60
60
  );
61
61
  const n = e.some(i), o = e.some(
62
- (r) => typeof r == "object" && r !== null && !i(r)
62
+ (t) => typeof t == "object" && t !== null && !i(t)
63
63
  );
64
64
  throw n && o ? new Error(
65
65
  "deepMerge: Cannot mix arrays and objects. All arguments must be either arrays or objects."
@@ -67,9 +67,25 @@ function g(...t) {
67
67
  "deepMerge: Invalid arguments provided. All arguments must be objects or arrays of the same type."
68
68
  );
69
69
  }
70
+ function h(r) {
71
+ if (!r || typeof r != "object")
72
+ return r;
73
+ const e = {};
74
+ for (const [n, o] of Object.entries(r))
75
+ if (o && typeof o == "object" && !Array.isArray(o)) {
76
+ const t = h(o);
77
+ for (const [s, l] of Object.entries(t)) {
78
+ const p = `${n}.${s}`;
79
+ e[p] = l;
80
+ }
81
+ } else
82
+ e[n] = o;
83
+ return e;
84
+ }
70
85
  export {
71
- g as deepMerge,
72
- b as getNestedValue,
73
- O as isJSON,
74
- _ as setNestedValue
86
+ P as deepMerge,
87
+ w as getNestedValue,
88
+ j as isJSON,
89
+ h as normalizeMongoFilter,
90
+ O as setNestedValue
75
91
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cyberskill/shared",
3
3
  "type": "module",
4
- "version": "2.5.0",
4
+ "version": "2.6.0",
5
5
  "description": "CyberSkill Shared",
6
6
  "author": "Stephen Cheng",
7
7
  "license": "MIT",
@@ -249,7 +249,7 @@
249
249
  "lodash-es": "4.17.21",
250
250
  "migrate-mongo": "12.1.3",
251
251
  "mongodb": "6.18.0",
252
- "mongoose": "8.16.5",
252
+ "mongoose": "8.17.0",
253
253
  "mongoose-aggregate-paginate-v2": "1.1.4",
254
254
  "mongoose-paginate-v2": "1.9.1",
255
255
  "next-intl": "4.3.4",