@point-hub/papi 0.5.26 → 0.5.27

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/lib/index.js CHANGED
@@ -73014,6 +73014,77 @@ class MongoDBHelper {
73014
73014
  }
73015
73015
  return val;
73016
73016
  }
73017
+ static buildPostData(rawInput) {
73018
+ const recursiveFilter = (obj) => {
73019
+ if (obj === null || obj === undefined) {
73020
+ return;
73021
+ }
73022
+ if (Array.isArray(obj)) {
73023
+ const cleanedArray = obj.map(recursiveFilter).filter((value) => value !== undefined);
73024
+ return cleanedArray.length > 0 ? cleanedArray : undefined;
73025
+ } else if (typeof obj === "object" && !isValid(obj) && !(obj instanceof import_mongodb.ObjectId)) {
73026
+ const cleanedObject = {};
73027
+ let hasContent = false;
73028
+ for (const key in obj) {
73029
+ if (!Object.prototype.hasOwnProperty.call(obj, key)) {
73030
+ continue;
73031
+ }
73032
+ const value = recursiveFilter(obj[key]);
73033
+ if (value !== undefined) {
73034
+ cleanedObject[key] = value;
73035
+ hasContent = true;
73036
+ }
73037
+ }
73038
+ return hasContent ? cleanedObject : undefined;
73039
+ } else {
73040
+ return obj;
73041
+ }
73042
+ };
73043
+ const result = recursiveFilter(rawInput);
73044
+ return typeof result === "object" && result !== null ? result : {};
73045
+ }
73046
+ static buildPostManyData(rawInput) {
73047
+ if (!Array.isArray(rawInput)) {
73048
+ return [];
73049
+ }
73050
+ const cleanedDocuments = rawInput.map((doc) => {
73051
+ return MongoDBHelper.buildPostData(doc);
73052
+ }).filter((cleanedDoc) => {
73053
+ return Object.keys(cleanedDoc).length > 0;
73054
+ });
73055
+ return cleanedDocuments;
73056
+ }
73057
+ static buildPatchData = (rawInput) => {
73058
+ const setOperations = {};
73059
+ const unsetOperations = {};
73060
+ const flattenAndSeparate = (obj, prefix = "") => {
73061
+ for (const key in obj) {
73062
+ if (!Object.prototype.hasOwnProperty.call(obj, key)) {
73063
+ continue;
73064
+ }
73065
+ const currentKey = prefix + key;
73066
+ const value = obj[key];
73067
+ if (value === undefined) {
73068
+ continue;
73069
+ } else if (value === null) {
73070
+ unsetOperations[currentKey] = true;
73071
+ } else if (typeof value === "object" && value !== null && !Array.isArray(value)) {
73072
+ flattenAndSeparate(value, currentKey + ".");
73073
+ } else {
73074
+ setOperations[currentKey] = value;
73075
+ }
73076
+ }
73077
+ };
73078
+ flattenAndSeparate(rawInput);
73079
+ const updateDoc = {};
73080
+ if (Object.keys(setOperations).length > 0) {
73081
+ updateDoc.$set = setOperations;
73082
+ }
73083
+ if (Object.keys(unsetOperations).length > 0) {
73084
+ updateDoc.$unset = unsetOperations;
73085
+ }
73086
+ return updateDoc;
73087
+ };
73017
73088
  }
73018
73089
 
73019
73090
  // src/database/mongodb/mongodb-querystring.ts
@@ -73182,7 +73253,8 @@ class MongoDBConnection {
73182
73253
  throw new Error("Collection not found");
73183
73254
  }
73184
73255
  const createOptions = options;
73185
- const response = await this._collection.insertOne(MongoDBHelper.stringToObjectId(document), createOptions);
73256
+ const buildPostData = MongoDBHelper.buildPostData(document);
73257
+ const response = await this._collection.insertOne(MongoDBHelper.stringToObjectId(buildPostData), createOptions);
73186
73258
  return {
73187
73259
  inserted_id: response.insertedId.toString()
73188
73260
  };
@@ -73192,7 +73264,8 @@ class MongoDBConnection {
73192
73264
  throw new Error("Collection not found");
73193
73265
  }
73194
73266
  const createManyOptions = options;
73195
- const response = await this._collection.insertMany(MongoDBHelper.stringToObjectId(documents), createManyOptions);
73267
+ const buildPostManyData = MongoDBHelper.buildPostManyData(documents);
73268
+ const response = await this._collection.insertMany(MongoDBHelper.stringToObjectId(buildPostManyData), createManyOptions);
73196
73269
  const insertedIds = [];
73197
73270
  Object.values(response.insertedIds).forEach((val) => {
73198
73271
  insertedIds.push(val.toString());
@@ -73243,7 +73316,8 @@ class MongoDBConnection {
73243
73316
  throw new Error("Collection not found");
73244
73317
  }
73245
73318
  const updateOptions = options;
73246
- const result = await this._collection.updateOne({ _id: new import_mongodb2.ObjectId(_id) }, MongoDBHelper.stringToObjectId(document), updateOptions);
73319
+ const buildPatchData = MongoDBHelper.buildPatchData(document);
73320
+ const result = await this._collection.updateOne({ _id: new import_mongodb2.ObjectId(_id) }, MongoDBHelper.stringToObjectId(buildPatchData), updateOptions);
73247
73321
  return {
73248
73322
  modified_count: result.modifiedCount,
73249
73323
  matched_count: result.matchedCount
@@ -73254,7 +73328,8 @@ class MongoDBConnection {
73254
73328
  throw new Error("Collection not found");
73255
73329
  }
73256
73330
  const updateManyOptions = options;
73257
- const result = await this._collection.updateMany(MongoDBHelper.stringToObjectId(filter2), MongoDBHelper.stringToObjectId(document), updateManyOptions);
73331
+ const buildPatchData = MongoDBHelper.buildPatchData(document);
73332
+ const result = await this._collection.updateMany(MongoDBHelper.stringToObjectId(filter2), MongoDBHelper.stringToObjectId(buildPatchData), updateManyOptions);
73258
73333
  return {
73259
73334
  matched_count: result.matchedCount,
73260
73335
  modified_count: result.modifiedCount
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../src/database/mongodb/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../src/database/mongodb/connection.ts"],"names":[],"mappings":"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"}
@@ -34,5 +34,30 @@ export declare class MongoDBHelper {
34
34
  isExists(name: string): Promise<boolean>;
35
35
  static stringToObjectId(val: any): any;
36
36
  static objectIdToString(val: any): any;
37
+ /**
38
+ * Deeply cleans an object by removing properties that are:
39
+ * 1. Undefined
40
+ * 2. Null
41
+ * 3. Empty objects ({})
42
+ * 4. Empty arrays ([])
43
+ * * @param rawInput The input data object.
44
+ * @returns The deeply filtered object, or an empty object if all content was filtered.
45
+ */
46
+ static buildPostData(rawInput: Record<string, any>): Record<string, any>;
47
+ /**
48
+ * Builds a clean array of documents for a MongoDB insertMany operation.
49
+ * It iterates over the array, applying deep filtering to each document.
50
+ * Documents that become empty after filtering are removed from the array.
51
+ */
52
+ static buildPostManyData(rawInput: Array<Record<string, any>>): Array<Record<string, any>>;
53
+ /**
54
+ * Builds safe MongoDB $set and $unset operations for a PATCH request.
55
+ * It flattens nested objects into dot notation and handles explicit null values for $unset.
56
+ * Undefined values are ignored.
57
+ */
58
+ static buildPatchData: (rawInput: Record<string, any>) => {
59
+ $set?: Record<string, any>;
60
+ $unset?: Record<string, true>;
61
+ };
37
62
  }
38
63
  //# sourceMappingURL=mongodb-helper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mongodb-helper.d.ts","sourceRoot":"","sources":["../../../../src/database/mongodb/mongodb-helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAY,MAAM,SAAS,CAAA;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAA;gBAEE,EAAE,EAAE,SAAS;IAIzB;;;;;;;;;;;;;;;OAeG;IACU,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAUhE;;OAEG;IACU,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAW5D,WAAW,CACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,kBAAkB,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAIH,QAAQ,CAAC,IAAI,EAAE,MAAM;WAQpB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;WAqB/B,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;CAuB9C"}
1
+ {"version":3,"file":"mongodb-helper.d.ts","sourceRoot":"","sources":["../../../../src/database/mongodb/mongodb-helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAY,MAAM,SAAS,CAAA;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAA;gBAEE,EAAE,EAAE,SAAS;IAIzB;;;;;;;;;;;;;;;OAeG;IACU,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAUhE;;OAEG;IACU,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAW5D,WAAW,CACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,kBAAkB,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAIH,QAAQ,CAAC,IAAI,EAAE,MAAM;WAQpB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;WAqB/B,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAwB7C;;;;;;;;OAQG;WACW,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA+C/E;;;;OAIG;WACW,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAmBjG;;;;OAIG;IACH,OAAc,cAAc,GAAI,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;KAAE,CAkD5H;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mongodb-helper.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb-helper.spec.d.ts","sourceRoot":"","sources":["../../../../src/database/mongodb/mongodb-helper.spec.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@point-hub/papi",
3
- "version": "0.5.26",
3
+ "version": "0.5.27",
4
4
  "description": "Point API Framework",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -42,11 +42,12 @@
42
42
  "@types/shelljs": "^0.8.17",
43
43
  "@types/validatorjs": "^3.15.5",
44
44
  "@typescript-eslint/eslint-plugin": "^8.46.2",
45
- "@typescript-eslint/parser": "^8.46.2",
45
+ "@typescript-eslint/parser": "^8.46.3",
46
46
  "bun-types": "^1.3.1",
47
47
  "cross-env": "^10.1.0",
48
48
  "eslint": "^9.39.0",
49
49
  "eslint-plugin-simple-import-sort": "^12.1.1",
50
+ "jiti": "^2.6.1",
50
51
  "shx": "^0.4.0",
51
52
  "typescript": "^5.9.3"
52
53
  },