json-fs-query 2.2.0 → 2.2.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.
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.runQuery = void 0;
7
7
  require("core-js/modules/esnext.iterator.constructor.js");
8
+ require("core-js/modules/esnext.iterator.find.js");
8
9
  require("core-js/modules/esnext.iterator.reduce.js");
9
10
  require("core-js/modules/esnext.set.add-all.js");
10
11
  require("core-js/modules/esnext.set.delete-all.js");
@@ -85,6 +86,16 @@ const runQuery = async parsed => {
85
86
  [parsed.entity]: await (0, _showRecords.showRecords)()
86
87
  };
87
88
  }
89
+ // update/delete apply their conditions before any join or merge runs, so a condition on another entity's field
90
+ // can't be checked there. An indexed one used to be dropped once its index had narrowed the joined rows, and the
91
+ // command then hit every row the other conditions allowed (`delete workouts.exercises on ... where
92
+ // exercises._id = 1` deleted every workout)
93
+ if (parsed.command === 'update' || parsed.command === 'delete') {
94
+ const other = parsed.conditions.find(condition => (0, _isEntityProperty.isEntityProperty)(condition.property) && (0, _splitEntityProperty.splitEntityProperty)(condition.property).entity !== parsed.entity);
95
+ if (other) {
96
+ throw new Error(`${parsed.command} can only use conditions on ${parsed.entity}'s own fields, not ${other.property}`);
97
+ }
98
+ }
88
99
  const recordData = {
89
100
  [parsed.entity]: await (0, _retrieveRecord.retrieveRecord)(parsed.entity)
90
101
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runQuery=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.reduce.js"),require("core-js/modules/esnext.set.add-all.js"),require("core-js/modules/esnext.set.delete-all.js"),require("core-js/modules/esnext.set.difference.js"),require("core-js/modules/esnext.set.every.js"),require("core-js/modules/esnext.set.filter.js"),require("core-js/modules/esnext.set.find.js"),require("core-js/modules/esnext.set.intersection.js"),require("core-js/modules/esnext.set.is-disjoint-from.js"),require("core-js/modules/esnext.set.is-subset-of.js"),require("core-js/modules/esnext.set.is-superset-of.js"),require("core-js/modules/esnext.set.join.js"),require("core-js/modules/esnext.set.map.js"),require("core-js/modules/esnext.set.reduce.js"),require("core-js/modules/esnext.set.some.js"),require("core-js/modules/esnext.set.symmetric-difference.js"),require("core-js/modules/esnext.set.union.js");var _deleteEntity=require("../queries/deleteEntity"),_insertEntity=require("../queries/insertEntity"),_readEntity=require("../queries/readEntity"),_updateEntity=require("../queries/updateEntity"),_createRecord=require("../queries/createRecord"),_dropRecord=require("../queries/dropRecord"),_describeRecord=require("../queries/describeRecord"),_showRecords=require("../queries/showRecords"),_joinEntity=require("../queries/joinEntity"),_mergeJoins=require("../queries/mergeJoins"),_where=require("../queries/where"),_sortBy=require("../queries/sortBy"),_groupBy=require("../queries/groupBy"),_limitOffset=require("../queries/limitOffset"),_selectFields=require("../queries/selectFields"),_retrieveRecord=require("./retrieveRecord"),_getConditionIndexedList=require("./getConditionIndexedList"),_getJoinIndexedList=require("./getJoinIndexedList"),_isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_fieldType=require("./fieldType");const typeClauses=async(e,t)=>{for(const r of[...e.conditions,...e.sortClauses]){let i=e.entity,s=r.property;(0,_isEntityProperty.isEntityProperty)(s)&&({entity:i,property:s}=(0,_splitEntityProperty.splitEntityProperty)(s)),Object.prototype.hasOwnProperty.call(t,i)||(t[i]=await(0,_retrieveRecord.retrieveRecord)(i)),r.type=(0,_fieldType.fieldType)(t[i],s)}},runQuery=async e=>{switch(e.command){case"create":return{[e.entity]:await(0,_createRecord.createRecord)(e.entity,e.create)};case"drop":return{[e.entity]:await(0,_dropRecord.dropRecord)(e.entity,e.ifExists)};case"describe":return{[e.entity]:await(0,_describeRecord.describeRecord)(e.entity)};case"show":return{[e.entity]:await(0,_showRecords.showRecords)()}}const t={[e.entity]:await(0,_retrieveRecord.retrieveRecord)(e.entity)};void 0!==e.joinEntity&&(t[e.joinEntity]=await(0,_retrieveRecord.retrieveRecord)(e.joinEntity)),await typeClauses(e,t);let r={[e.entity]:[]};const i=new Set;e=await(0,_getConditionIndexedList.getConditionIndexedList)(e,t,r,i);const s=i.has(e.entity);switch("delete"!==(e=await(0,_getJoinIndexedList.getJoinIndexedList)(e,t,r)).command&&"update"!==e.command||(s||(r=await(0,_readEntity.readEntity)(e.entity,r)),r[e.entity]=e.conditions.reduce(((e,t)=>(0,_where.where)(e,t)),r[e.entity])),e.command){case"delete":r=await(0,_deleteEntity.deleteEntity)(e.entity,r);break;case"insert":r=await(0,_insertEntity.insertEntity)(e.entity,e.insertValues,r);break;case"read":s||(r=await(0,_readEntity.readEntity)(e.entity,r));break;case"update":r=await(0,_updateEntity.updateEntity)(e.entity,e.updateValues,r);break;default:throw new Error(`Unknown command: ${e.command}`)}return r=await(0,_joinEntity.joinEntity)(e.entity,e.joinEntity,r,e.joinClauses,s),r=await(0,_mergeJoins.mergeJoins)(r,e.mergeJoins),"delete"!==e.command&&"update"!==e.command&&(r[e.entity]=e.conditions.reduce(((e,t)=>(0,_where.where)(e,t)),r[e.entity])),r[e.entity]=(0,_sortBy.sortBy)(r[e.entity],e.sortClauses),r[e.entity]=(0,_limitOffset.limitOffset)(r[e.entity],e.offset,e.limit),r[e.entity]=(0,_groupBy.groupBy)(r[e.entity],e.groupBy),r[e.entity]=(0,_selectFields.selectFields)(r[e.entity],e.selectClauses),r};exports.runQuery=runQuery;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runQuery=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js"),require("core-js/modules/esnext.iterator.reduce.js"),require("core-js/modules/esnext.set.add-all.js"),require("core-js/modules/esnext.set.delete-all.js"),require("core-js/modules/esnext.set.difference.js"),require("core-js/modules/esnext.set.every.js"),require("core-js/modules/esnext.set.filter.js"),require("core-js/modules/esnext.set.find.js"),require("core-js/modules/esnext.set.intersection.js"),require("core-js/modules/esnext.set.is-disjoint-from.js"),require("core-js/modules/esnext.set.is-subset-of.js"),require("core-js/modules/esnext.set.is-superset-of.js"),require("core-js/modules/esnext.set.join.js"),require("core-js/modules/esnext.set.map.js"),require("core-js/modules/esnext.set.reduce.js"),require("core-js/modules/esnext.set.some.js"),require("core-js/modules/esnext.set.symmetric-difference.js"),require("core-js/modules/esnext.set.union.js");var _deleteEntity=require("../queries/deleteEntity"),_insertEntity=require("../queries/insertEntity"),_readEntity=require("../queries/readEntity"),_updateEntity=require("../queries/updateEntity"),_createRecord=require("../queries/createRecord"),_dropRecord=require("../queries/dropRecord"),_describeRecord=require("../queries/describeRecord"),_showRecords=require("../queries/showRecords"),_joinEntity=require("../queries/joinEntity"),_mergeJoins=require("../queries/mergeJoins"),_where=require("../queries/where"),_sortBy=require("../queries/sortBy"),_groupBy=require("../queries/groupBy"),_limitOffset=require("../queries/limitOffset"),_selectFields=require("../queries/selectFields"),_retrieveRecord=require("./retrieveRecord"),_getConditionIndexedList=require("./getConditionIndexedList"),_getJoinIndexedList=require("./getJoinIndexedList"),_isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_fieldType=require("./fieldType");const typeClauses=async(e,t)=>{for(const r of[...e.conditions,...e.sortClauses]){let i=e.entity,s=r.property;(0,_isEntityProperty.isEntityProperty)(s)&&({entity:i,property:s}=(0,_splitEntityProperty.splitEntityProperty)(s)),Object.prototype.hasOwnProperty.call(t,i)||(t[i]=await(0,_retrieveRecord.retrieveRecord)(i)),r.type=(0,_fieldType.fieldType)(t[i],s)}},runQuery=async e=>{switch(e.command){case"create":return{[e.entity]:await(0,_createRecord.createRecord)(e.entity,e.create)};case"drop":return{[e.entity]:await(0,_dropRecord.dropRecord)(e.entity,e.ifExists)};case"describe":return{[e.entity]:await(0,_describeRecord.describeRecord)(e.entity)};case"show":return{[e.entity]:await(0,_showRecords.showRecords)()}}if("update"===e.command||"delete"===e.command){const t=e.conditions.find((t=>(0,_isEntityProperty.isEntityProperty)(t.property)&&(0,_splitEntityProperty.splitEntityProperty)(t.property).entity!==e.entity));if(t)throw new Error(`${e.command} can only use conditions on ${e.entity}'s own fields, not ${t.property}`)}const t={[e.entity]:await(0,_retrieveRecord.retrieveRecord)(e.entity)};void 0!==e.joinEntity&&(t[e.joinEntity]=await(0,_retrieveRecord.retrieveRecord)(e.joinEntity)),await typeClauses(e,t);let r={[e.entity]:[]};const i=new Set;e=await(0,_getConditionIndexedList.getConditionIndexedList)(e,t,r,i);const s=i.has(e.entity);switch("delete"!==(e=await(0,_getJoinIndexedList.getJoinIndexedList)(e,t,r)).command&&"update"!==e.command||(s||(r=await(0,_readEntity.readEntity)(e.entity,r)),r[e.entity]=e.conditions.reduce(((e,t)=>(0,_where.where)(e,t)),r[e.entity])),e.command){case"delete":r=await(0,_deleteEntity.deleteEntity)(e.entity,r);break;case"insert":r=await(0,_insertEntity.insertEntity)(e.entity,e.insertValues,r);break;case"read":s||(r=await(0,_readEntity.readEntity)(e.entity,r));break;case"update":r=await(0,_updateEntity.updateEntity)(e.entity,e.updateValues,r);break;default:throw new Error(`Unknown command: ${e.command}`)}return r=await(0,_joinEntity.joinEntity)(e.entity,e.joinEntity,r,e.joinClauses,s),r=await(0,_mergeJoins.mergeJoins)(r,e.mergeJoins),"delete"!==e.command&&"update"!==e.command&&(r[e.entity]=e.conditions.reduce(((e,t)=>(0,_where.where)(e,t)),r[e.entity])),r[e.entity]=(0,_sortBy.sortBy)(r[e.entity],e.sortClauses),r[e.entity]=(0,_limitOffset.limitOffset)(r[e.entity],e.offset,e.limit),r[e.entity]=(0,_groupBy.groupBy)(r[e.entity],e.groupBy),r[e.entity]=(0,_selectFields.selectFields)(r[e.entity],e.selectClauses),r};exports.runQuery=runQuery;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "json-fs-query",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "Use json files to manage and read data.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",