@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 +79 -4
- package/lib/src/database/mongodb/connection.d.ts.map +1 -1
- package/lib/src/database/mongodb/mongodb-helper.d.ts +25 -0
- package/lib/src/database/mongodb/mongodb-helper.d.ts.map +1 -1
- package/lib/src/database/mongodb/mongodb-helper.spec.d.ts +2 -0
- package/lib/src/database/mongodb/mongodb-helper.spec.d.ts.map +1 -0
- package/package.json +3 -2
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
|
|
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
|
|
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
|
|
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
|
|
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":"AAEA,OAAO,KAAK,EAGV,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,EAAE,EACF,SAAS,EAGT,kBAAkB,EAInB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,WAAW,EAAY,MAAM,SAAS,CAAA;AAE/C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACd,MAAM,aAAa,CAAA;AAIpB,qBAAa,iBAAkB,YAAW,SAAS;IAQxC,YAAY,EAAE,MAAM;IAPtB,MAAM,EAAE,WAAW,CAAA;IACnB,SAAS,EAAE,EAAE,GAAG,SAAS,CAAA;IACzB,WAAW,EAAE,UAAU,GAAG,SAAS,CAAA;IACnC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAA;gBAGvC,gBAAgB,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM;IAWhB,IAAI;IAIJ,KAAK;IAIX,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;IAK1C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB;IAS9C,eAAe,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAQ9C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1D,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,YAAY;IAKN,UAAU;IAIhB,gBAAgB;IAIV,iBAAiB;IAIjB,gBAAgB;IAIhB,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../src/database/mongodb/connection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,EAAE,EACF,SAAS,EAGT,kBAAkB,EAInB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,WAAW,EAAY,MAAM,SAAS,CAAA;AAE/C,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACd,MAAM,aAAa,CAAA;AAIpB,qBAAa,iBAAkB,YAAW,SAAS;IAQxC,YAAY,EAAE,MAAM;IAPtB,MAAM,EAAE,WAAW,CAAA;IACnB,SAAS,EAAE,EAAE,GAAG,SAAS,CAAA;IACzB,WAAW,EAAE,UAAU,GAAG,SAAS,CAAA;IACnC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAA;gBAGvC,gBAAgB,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM;IAWhB,IAAI;IAIJ,KAAK;IAIX,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;IAK1C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB;IAS9C,eAAe,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAQ9C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1D,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,YAAY;IAKN,UAAU;IAIhB,gBAAgB;IAIV,iBAAiB;IAIjB,gBAAgB;IAIhB,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAetE,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsBjF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkCtE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC;IAiB9D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;IAoB/E,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoB7F,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;IAiB1D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmBrE,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAYpD,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAmDxG"}
|
|
@@ -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;
|
|
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 @@
|
|
|
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.
|
|
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.
|
|
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
|
},
|