blixify-server 0.3.26 → 0.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"mongoWrapper.d.ts","sourceRoot":"","sources":["../../src/apis/mongoWrapper.ts"],"names":[],"mappings":"AASA,OAAO,cAAc,MAAM,yBAAyB,CAAC;AAGrD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AA6JD;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,EAAE,GAAG,CAAM;IAClB,UAAU,SAAM;IAChB,MAAM,UAAS;IACf,MAAM,EAAE,cAAc,CAQpB;IACF,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,SAAM;IACb,KAAK,SAAM;IACX,WAAW,EAAE,GAAG,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,KAAK,EAAE,GAAG,CAAC;IAEX,YAAY,QAAS,GAAG,aAEtB;gBAGA,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,EACrD,GAAG,EAAE,UAAU,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACzC,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI;IAgB3D,UAAU,SAAU,GAAG,SAIrB;IAEF,aAAa,YACF,GAAG,QACN,QAAQ,GAAG,QAAQ,GAAG,QAAQ,OAC/B,GAAG,UACA;QACN,GAAG,CAAC,EAAE,GAAG,CAAC;QACV,GAAG,CAAC,EAAE,GAAG,CAAC;KACX,mBA4DD;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBAqF5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAkDtC;IAEF,OAAO,QAAe,GAAG,OAAO,GAAG;;mBAuCjC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAqKtC;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAqGtC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBAsJ5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAwCtC;IAEF,mBAAmB,CAAC,GAAG,EAAE,GAAG;IAmT5B,QAAQ,QAAe,GAAG,OAAO,GAAG;;;;;mBAkYlC;IAEF,IAAI,YAkFF;CACH"}
1
+ {"version":3,"file":"mongoWrapper.d.ts","sourceRoot":"","sources":["../../src/apis/mongoWrapper.ts"],"names":[],"mappings":"AASA,OAAO,cAAc,MAAM,yBAAyB,CAAC;AAGrD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AA6JD;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,EAAE,GAAG,CAAM;IAClB,UAAU,SAAM;IAChB,MAAM,UAAS;IACf,MAAM,EAAE,cAAc,CAQpB;IACF,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,SAAM;IACb,KAAK,SAAM;IACX,WAAW,EAAE,GAAG,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,KAAK,EAAE,GAAG,CAAC;IAEX,YAAY,QAAS,GAAG,aAEtB;gBAGA,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,EACrD,GAAG,EAAE,UAAU,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACzC,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI;IAgB3D,UAAU,SAAU,GAAG,SAIrB;IAEF,aAAa,YACF,GAAG,QACN,QAAQ,GAAG,QAAQ,GAAG,QAAQ,OAC/B,GAAG,UACA;QACN,GAAG,CAAC,EAAE,GAAG,CAAC;QACV,GAAG,CAAC,EAAE,GAAG,CAAC;KACX,mBA4DD;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBAqF5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAkDtC;IAEF,OAAO,QAAe,GAAG,OAAO,GAAG;;mBAuCjC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAqKtC;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAqGtC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBAsJ5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAwCtC;IAEF,mBAAmB,CAAC,GAAG,EAAE,GAAG;IAiT5B,QAAQ,QAAe,GAAG,OAAO,GAAG;;;;;mBA+ZlC;IAEF,IAAI,YAiFF;CACH"}
@@ -835,9 +835,13 @@ class MongoWrapper {
835
835
  let queryFilter = {};
836
836
  // INFO : Step 1 - Query
837
837
  queryFilter = handleParseQueryFilter(queryList);
838
- if (unionCollections && Array.isArray(unionCollections) && unionCollections.length > 0) {
838
+ if (unionCollections &&
839
+ Array.isArray(unionCollections) &&
840
+ unionCollections.length > 0) {
839
841
  if (aggregate) {
840
- res.status(400).json({ err: "Union operations cannot be combined with aggregate" });
842
+ res.status(400).json({
843
+ err: "Union operations cannot be combined with aggregate",
844
+ });
841
845
  return;
842
846
  }
843
847
  const sort = (_v = req.body.sort) !== null && _v !== void 0 ? _v : { date: -1 };
@@ -847,14 +851,19 @@ class MongoWrapper {
847
851
  // Build unionWith pipeline
848
852
  unionCollections.forEach((collectionConfig, index) => {
849
853
  const projectStage = {
850
- $project: Object.assign({ _id: 1 }, collectionConfig.projection)
854
+ $project: Object.assign({ _id: 1 }, collectionConfig.projection),
851
855
  };
852
- // Handle dynamic source field
856
+ // INFO: sourceLogic can be a string literal or a MongoDB expression object
853
857
  if (collectionConfig.sourceLogic) {
854
- projectStage.$project.source = collectionConfig.sourceLogic;
858
+ projectStage.$project.source =
859
+ typeof collectionConfig.sourceLogic === "string"
860
+ ? { $literal: collectionConfig.sourceLogic }
861
+ : collectionConfig.sourceLogic;
855
862
  }
856
863
  else {
857
- projectStage.$project.source = { $literal: collectionConfig.source };
864
+ projectStage.$project.source = {
865
+ $literal: collectionConfig.source,
866
+ };
858
867
  }
859
868
  if (index === 0) {
860
869
  if (queryList && queryList.length > 0) {
@@ -864,8 +873,13 @@ class MongoWrapper {
864
873
  const collectionQueryFilter = handleParseQueryFilter(collectionConfig.query);
865
874
  pipeline.push({ $match: collectionQueryFilter });
866
875
  }
867
- else if (collectionConfig.match) {
868
- pipeline.push({ $match: collectionConfig.match });
876
+ // INFO: addFields must be before $project so computed fields are available for sorting
877
+ if (collectionConfig.addFields) {
878
+ pipeline.push({ $addFields: collectionConfig.addFields });
879
+ // INFO: also include addFields keys in projection so they survive the $project stage
880
+ Object.keys(collectionConfig.addFields).forEach((key) => {
881
+ projectStage.$project[key] = 1;
882
+ });
869
883
  }
870
884
  pipeline.push(projectStage);
871
885
  }
@@ -875,15 +889,20 @@ class MongoWrapper {
875
889
  const collectionQueryFilter = handleParseQueryFilter(collectionConfig.query);
876
890
  unionPipeline.push({ $match: collectionQueryFilter });
877
891
  }
878
- else if (collectionConfig.match) {
879
- unionPipeline.push({ $match: collectionConfig.match });
892
+ // INFO: addFields must be before $project so computed fields are available for sorting
893
+ if (collectionConfig.addFields) {
894
+ unionPipeline.push({ $addFields: collectionConfig.addFields });
895
+ // INFO: also include addFields keys in projection so they survive the $project stage
896
+ Object.keys(collectionConfig.addFields).forEach((key) => {
897
+ projectStage.$project[key] = 1;
898
+ });
880
899
  }
881
900
  unionPipeline.push(projectStage);
882
901
  const unionStage = {
883
902
  $unionWith: {
884
903
  coll: collectionConfig.collection,
885
- pipeline: unionPipeline
886
- }
904
+ pipeline: unionPipeline,
905
+ },
887
906
  };
888
907
  pipeline.push(unionStage);
889
908
  }
@@ -893,7 +912,8 @@ class MongoWrapper {
893
912
  if (Array.isArray(sort)) {
894
913
  sort.forEach((sortItem) => {
895
914
  if (sortItem.sortId) {
896
- sortStage.$sort[sortItem.sortId] = sortItem.type === "asc" ? 1 : -1;
915
+ sortStage.$sort[sortItem.sortId] =
916
+ sortItem.type === "asc" ? 1 : -1;
897
917
  }
898
918
  });
899
919
  }
@@ -920,7 +940,9 @@ class MongoWrapper {
920
940
  return stageKey !== "$skip" && stageKey !== "$limit";
921
941
  });
922
942
  countPipeline.push({ $count: "total" });
923
- const countResult = yield mongoCollection.aggregate(countPipeline).toArray();
943
+ const countResult = yield mongoCollection
944
+ .aggregate(countPipeline)
945
+ .toArray();
924
946
  const count = ((_y = countResult[0]) === null || _y === void 0 ? void 0 : _y.total) || 0;
925
947
  let validOpsConfig = true;
926
948
  dataList.map((eachData) => {
@@ -1260,7 +1282,8 @@ class MongoWrapper {
1260
1282
  };
1261
1283
  if (condition && condition.length > 0) {
1262
1284
  condition.forEach((cond) => {
1263
- lookupStage.$lookup.let[`local_${cond.fromColumnId}`] = `$${cond.fromColumnId}`;
1285
+ lookupStage.$lookup.let[`local_${cond.fromColumnId}`] =
1286
+ `$${cond.fromColumnId}`;
1264
1287
  });
1265
1288
  const matchStage = {
1266
1289
  $match: { $expr: { $and: [] } },
@@ -1339,7 +1362,8 @@ class MongoWrapper {
1339
1362
  },
1340
1363
  });
1341
1364
  referenceSpaceLabel.forEach((field) => {
1342
- addFieldsStage.$addFields[`${defaultReferenceAs}_${field}`] = `$${defaultReferenceAs}.${field}`;
1365
+ addFieldsStage.$addFields[`${defaultReferenceAs}_${field}`] =
1366
+ `$${defaultReferenceAs}.${field}`;
1343
1367
  });
1344
1368
  }
1345
1369
  else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blixify-server",
3
- "version": "0.3.26",
3
+ "version": "0.3.27",
4
4
  "license": "MIT",
5
5
  "main": "dist/apis/index.js",
6
6
  "private": false,