json-fs-query 3.1.1 → 3.1.3

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.
@@ -7,11 +7,13 @@ exports.create = void 0;
7
7
  require("core-js/modules/es.array.includes.js");
8
8
  require("core-js/modules/es.json.stringify.js");
9
9
  require("core-js/modules/esnext.iterator.constructor.js");
10
+ require("core-js/modules/esnext.iterator.filter.js");
10
11
  require("core-js/modules/esnext.iterator.find.js");
11
12
  require("core-js/modules/esnext.iterator.some.js");
12
13
  var _record = require("./definitions/record");
13
14
  var _registerRecord = require("../utilities/registerRecord");
14
15
  var _config = require("../utilities/config");
16
+ var _requireNode = require("../utilities/requireNode");
15
17
  var _typeCheck = require("./policies/typeCheck");
16
18
  const knownKeyProperties = ['type', 'fields', 'lookup', 'references'];
17
19
  /**
@@ -73,6 +75,7 @@ const assertValidDefinition = (recordName, recordContent) => {
73
75
  * @param keys
74
76
  */
75
77
  const create = async (recordName, definition = [], keys = []) => {
78
+ (0, _requireNode.requireNode)('create()');
76
79
  const {
77
80
  writeFile,
78
81
  mkdir
@@ -101,6 +104,17 @@ const create = async (recordName, definition = [], keys = []) => {
101
104
  await mkdir(`${databasePath}${recordName}`, {
102
105
  recursive: true
103
106
  });
107
+ // Each indexed key starts with an empty index, so the new record reads like any other before its first insert
108
+ // (a where on a key used to fail with "Could not read __indexes/...", since the file only appeared with the first row)
109
+ const indexedKeys = recordContent.keys.filter(key => key.lookup);
110
+ if (indexedKeys.length) {
111
+ await mkdir(`${databasePath}__indexes/${recordName}`, {
112
+ recursive: true
113
+ });
114
+ for (const key of indexedKeys) {
115
+ await writeFile(`${databasePath}__indexes/${recordName}/${key.lookup}`, '[]');
116
+ }
117
+ }
104
118
  await (0, _registerRecord.registerRecord)(recordName);
105
119
  return recordContent;
106
120
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.create=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js"),require("core-js/modules/esnext.iterator.some.js");var _record=require("./definitions/record"),_registerRecord=require("../utilities/registerRecord"),_config=require("../utilities/config"),_typeCheck=require("./policies/typeCheck");const knownKeyProperties=["type","fields","lookup","references"],assertKnownKeyProperties=(e,r)=>{for(const t of r)for(const r of Object.keys(t))if(!knownKeyProperties.includes(r))throw new Error(`Unknown property "${r}" on ${t.type??"index"} key of ${e}; must be ${knownKeyProperties.join(", ")}`)},assertValidDefinition=(e,r)=>{for(const t of r.definition)if(Object.prototype.hasOwnProperty.call(t,"default"))try{(0,_typeCheck.typeCheck)(t.type,t.default,t.nullable)}catch(r){throw new Error(`Invalid default for field "${t.name}" of ${e}: ${r.message}`)}for(const t of r.keys){if(t.fields.length<1)throw new Error(`The ${t.type} key of ${e} must have at least one field`);for(const i of t.fields)if(!r.definition.some((e=>e.name===i)))throw new Error(`The ${t.type} key of ${e} names field "${i}", which isn't in the definition`)}const t=r.keys.find((e=>"primary"===e.type));for(const i of t?t.fields:[])if(r.definition.some((e=>e.name===i&&e.nullable)))throw new Error(`Primary key field "${i}" of ${e} can't be nullable`)},create=async(e,r=[],t=[])=>{const{writeFile:i,mkdir:o}=require("fs/promises"),{existsSync:s}=require("fs"),n=(0,_config.getSetting)("databasePath","database/");if("__RECORDS"===e)return null;if(s(`${n}${e}.json`))return null;assertKnownKeyProperties(e,t);const a=(0,_record.record)({path:e,definition:r,keys:t});return assertValidDefinition(e,a),await o(n,{recursive:!0}),await i(`${n}${e}.json`,JSON.stringify(a,null,2)),await o(`${n}${e}`,{recursive:!0}),await(0,_registerRecord.registerRecord)(e),a};exports.create=create;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.create=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.iterator.find.js"),require("core-js/modules/esnext.iterator.some.js");var _record=require("./definitions/record"),_registerRecord=require("../utilities/registerRecord"),_config=require("../utilities/config"),_requireNode=require("../utilities/requireNode"),_typeCheck=require("./policies/typeCheck");const knownKeyProperties=["type","fields","lookup","references"],assertKnownKeyProperties=(e,r)=>{for(const i of r)for(const r of Object.keys(i))if(!knownKeyProperties.includes(r))throw new Error(`Unknown property "${r}" on ${i.type??"index"} key of ${e}; must be ${knownKeyProperties.join(", ")}`)},assertValidDefinition=(e,r)=>{for(const i of r.definition)if(Object.prototype.hasOwnProperty.call(i,"default"))try{(0,_typeCheck.typeCheck)(i.type,i.default,i.nullable)}catch(r){throw new Error(`Invalid default for field "${i.name}" of ${e}: ${r.message}`)}for(const i of r.keys){if(i.fields.length<1)throw new Error(`The ${i.type} key of ${e} must have at least one field`);for(const t of i.fields)if(!r.definition.some((e=>e.name===t)))throw new Error(`The ${i.type} key of ${e} names field "${t}", which isn't in the definition`)}const i=r.keys.find((e=>"primary"===e.type));for(const t of i?i.fields:[])if(r.definition.some((e=>e.name===t&&e.nullable)))throw new Error(`Primary key field "${t}" of ${e} can't be nullable`)},create=async(e,r=[],i=[])=>{(0,_requireNode.requireNode)("create()");const{writeFile:t,mkdir:o}=require("fs/promises"),{existsSync:s}=require("fs"),n=(0,_config.getSetting)("databasePath","database/");if("__RECORDS"===e)return null;if(s(`${n}${e}.json`))return null;assertKnownKeyProperties(e,i);const a=(0,_record.record)({path:e,definition:r,keys:i});assertValidDefinition(e,a),await o(n,{recursive:!0}),await t(`${n}${e}.json`,JSON.stringify(a,null,2)),await o(`${n}${e}`,{recursive:!0});const f=a.keys.filter((e=>e.lookup));if(f.length){await o(`${n}__indexes/${e}`,{recursive:!0});for(const r of f)await t(`${n}__indexes/${e}/${r.lookup}`,"[]")}return await(0,_registerRecord.registerRecord)(e),a};exports.create=create;
@@ -11,10 +11,12 @@ exports.drop = void 0;
11
11
  var _retrieveFile = require("../utilities/retrieveFile");
12
12
  var _deregisterRecord = require("../utilities/deregisterRecord");
13
13
  var _config = require("../utilities/config");
14
+ var _requireNode = require("../utilities/requireNode");
14
15
  const {
15
16
  rm
16
17
  } = require('fs/promises');
17
18
  const drop = async record => {
19
+ (0, _requireNode.requireNode)('drop()');
18
20
  const databasePath = (0, _config.getSetting)('databasePath', 'database/');
19
21
  if (record === '__RECORDS') {
20
22
  return null;
@@ -1 +1 @@
1
- "use strict";require("core-js/modules/esnext.async-iterator.constructor.js"),require("core-js/modules/esnext.async-iterator.drop.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.drop.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.drop=void 0;var _retrieveFile=require("../utilities/retrieveFile"),_deregisterRecord=require("../utilities/deregisterRecord"),_config=require("../utilities/config");const{rm:rm}=require("fs/promises"),drop=async e=>{const r=(0,_config.getSetting)("databasePath","database/");if("__RECORDS"===e)return null;const t=await(0,_retrieveFile.retrieveFile)(`${e}.json`);for(const e of t.entries)await rm(`${r}${t.path}/${e}`);await rm(`${r}${t.path}`,{recursive:!0,force:!0}),await rm(`${r}__indexes/${t.path}`,{recursive:!0,force:!0}),await rm(`${r}${e}.json`),await(0,_deregisterRecord.deregisterRecord)(e)};exports.drop=drop;
1
+ "use strict";require("core-js/modules/esnext.async-iterator.constructor.js"),require("core-js/modules/esnext.async-iterator.drop.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.drop.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.drop=void 0;var _retrieveFile=require("../utilities/retrieveFile"),_deregisterRecord=require("../utilities/deregisterRecord"),_config=require("../utilities/config"),_requireNode=require("../utilities/requireNode");const{rm:rm}=require("fs/promises"),drop=async e=>{(0,_requireNode.requireNode)("drop()");const r=(0,_config.getSetting)("databasePath","database/");if("__RECORDS"===e)return null;const i=await(0,_retrieveFile.retrieveFile)(`${e}.json`);for(const e of i.entries)await rm(`${r}${i.path}/${e}`);await rm(`${r}${i.path}`,{recursive:!0,force:!0}),await rm(`${r}__indexes/${i.path}`,{recursive:!0,force:!0}),await rm(`${r}${e}.json`),await(0,_deregisterRecord.deregisterRecord)(e)};exports.drop=drop;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Throw a clear error when `action` is attempted outside Node. In a browser json-fs-query reads the database over
3
+ * fetch(), and nothing can be written: without this check a write reached the missing `fs` functions and failed with
4
+ * an unhelpful "... is not a function".
5
+ * @param action What was attempted, for the message (for example "insert" or "create()").
6
+ * @throws {Error} Outside Node.
7
+ */
8
+ export declare const requireNode: (action: string) => void;
9
+ //# sourceMappingURL=requireNode.d.ts.map
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/esnext.weak-map.delete-all.js");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.requireNode = void 0;
8
+ var jsEnv = _interopRequireWildcard(require("browser-or-node"));
9
+ var e;
10
+ function _interopRequireWildcard(t, r) { if (!r && t && t.__esModule) return t; var n, a, o = Object.defineProperty, f = { __proto__: null, default: t }; if (Object(t) !== t) return f; if (e || "function" != typeof WeakMap || (e = new WeakMap()), e) { if (e.has(t)) return e.get(t); e.set(t, f); } for (a in t) "default" !== a && {}.hasOwnProperty.call(t, a) && ((n = o && Object.getOwnPropertyDescriptor(t, a)) && (n.get || n.set) ? o(f, a, n) : f[a] = t[a]); return f; }
11
+ /**
12
+ * Throw a clear error when `action` is attempted outside Node. In a browser json-fs-query reads the database over
13
+ * fetch(), and nothing can be written: without this check a write reached the missing `fs` functions and failed with
14
+ * an unhelpful "... is not a function".
15
+ * @param action What was attempted, for the message (for example "insert" or "create()").
16
+ * @throws {Error} Outside Node.
17
+ */
18
+ const requireNode = action => {
19
+ if (!jsEnv.isNode) {
20
+ throw new Error(`${action} only works in Node: in a browser, json-fs-query can only read the database (over fetch())`);
21
+ }
22
+ };
23
+ exports.requireNode = requireNode;
@@ -0,0 +1 @@
1
+ "use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.requireNode=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node"));function _interopRequireWildcard(r,o){if(!o&&r&&r.__esModule)return r;var t,n,i=Object.defineProperty,s={__proto__:null,default:r};if(Object(r)!==r)return s;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(r))return e.get(r);e.set(r,s)}for(n in r)"default"!==n&&{}.hasOwnProperty.call(r,n)&&((t=i&&Object.getOwnPropertyDescriptor(r,n))&&(t.get||t.set)?i(s,n,t):s[n]=r[n]);return s}const requireNode=e=>{if(!jsEnv.isNode)throw new Error(`${e} only works in Node: in a browser, json-fs-query can only read the database (over fetch())`)};exports.requireNode=requireNode;
@@ -15,7 +15,9 @@ const retrieveIndexes = async (entity = '', properties = [], recordData = {}) =>
15
15
  for (const property of properties) {
16
16
  for (const key of recordData[entity].keys) {
17
17
  if ((0, _isSingleFieldKey.isSingleFieldKey)(key, property)) {
18
- indexSet[property] = await (0, _retrieveFile.retrieveFile)(`__indexes/${entity}/${key.lookup}`);
18
+ // A record with no entries has nothing indexed: read it as an empty index rather than asking for a file that
19
+ // databases made before create() wrote empty indexes never got
20
+ indexSet[property] = (recordData[entity].entries || []).length ? await (0, _retrieveFile.retrieveFile)(`__indexes/${entity}/${key.lookup}`) : [];
19
21
  }
20
22
  }
21
23
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveIndexes=void 0;var _retrieveFile=require("./retrieveFile"),_retrieveRecord=require("./retrieveRecord"),_isSingleFieldKey=require("./isSingleFieldKey");const retrieveIndexes=async(e="",r=[],i={})=>{Object.prototype.hasOwnProperty.call(i,e)||(i[e]=await(0,_retrieveRecord.retrieveRecord)(e));const t={};for(const o of r)for(const r of i[e].keys)(0,_isSingleFieldKey.isSingleFieldKey)(r,o)&&(t[o]=await(0,_retrieveFile.retrieveFile)(`__indexes/${e}/${r.lookup}`));return t};exports.retrieveIndexes=retrieveIndexes;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveIndexes=void 0;var _retrieveFile=require("./retrieveFile"),_retrieveRecord=require("./retrieveRecord"),_isSingleFieldKey=require("./isSingleFieldKey");const retrieveIndexes=async(e="",r=[],i={})=>{Object.prototype.hasOwnProperty.call(i,e)||(i[e]=await(0,_retrieveRecord.retrieveRecord)(e));const t={};for(const o of r)for(const r of i[e].keys)(0,_isSingleFieldKey.isSingleFieldKey)(r,o)&&(t[o]=(i[e].entries||[]).length?await(0,_retrieveFile.retrieveFile)(`__indexes/${e}/${r.lookup}`):[]);return t};exports.retrieveIndexes=retrieveIndexes;
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.runQuery = void 0;
7
+ require("core-js/modules/es.array.includes.js");
7
8
  require("core-js/modules/esnext.set.add-all.js");
8
9
  require("core-js/modules/esnext.set.delete-all.js");
9
10
  require("core-js/modules/esnext.set.difference.js");
@@ -43,6 +44,7 @@ var _splitEntityProperty = require("./parsers/splitEntityProperty");
43
44
  var _fieldType = require("./fieldType");
44
45
  var _conditionTree = require("./conditionTree");
45
46
  var _conditionEntities = require("./conditionEntities");
47
+ var _requireNode = require("./requireNode");
46
48
  /**
47
49
  * Give each condition and sort clause its field's declared type, so where and sortBy compare by it
48
50
  * (a joined entity's field is looked up on that entity's record).
@@ -68,6 +70,10 @@ const typeClauses = async (parsed, recordData) => {
68
70
  const runQuery = async parsed => {
69
71
  // Checked before anything is read: which entity each condition is on, and whether it needs per-pair evaluation
70
72
  const perPair = typeof parsed.where !== 'undefined' && (0, _conditionEntities.conditionEntities)(parsed);
73
+ // Writes and schema changes need the filesystem; say so plainly in a browser
74
+ if (['insert', 'update', 'delete', 'create', 'drop'].includes(parsed.command)) {
75
+ (0, _requireNode.requireNode)(`"${parsed.command}"`);
76
+ }
71
77
  // Schema statements act on the database, not on entries (for create there is no record to read yet)
72
78
  switch (parsed.command) {
73
79
  case 'create':
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runQuery=void 0,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"),_conditionTree=require("./conditionTree"),_conditionEntities=require("./conditionEntities");const typeClauses=async(e,t)=>{for(const r of[...(0,_conditionTree.conditionsOf)(e.where),...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=>{const t=void 0!==e.where&&(0,_conditionEntities.conditionEntities)(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 r={[e.entity]:await(0,_retrieveRecord.retrieveRecord)(e.entity)};void 0!==e.joinEntity&&(r[e.joinEntity]=await(0,_retrieveRecord.retrieveRecord)(e.joinEntity)),await typeClauses(e,r);let i={[e.entity]:[]};const s=new Set;e=await(0,_getConditionIndexedList.getConditionIndexedList)(e,r,i,s);const n=s.has(e.entity);switch("delete"!==(e=await(0,_getJoinIndexedList.getJoinIndexedList)(e,r,i)).command&&"update"!==e.command||(n||(i=await(0,_readEntity.readEntity)(e.entity,i)),i[e.entity]=(0,_where.whereTree)(i[e.entity],e.where)),e.command){case"delete":i=await(0,_deleteEntity.deleteEntity)(e.entity,i);break;case"insert":i=await(0,_insertEntity.insertEntity)(e.entity,e.insertValues,i);break;case"read":n||(i=await(0,_readEntity.readEntity)(e.entity,i));break;case"update":i=await(0,_updateEntity.updateEntity)(e.entity,e.updateValues,i);break;default:throw new Error(`Unknown command: ${e.command}`)}return i=await(0,_joinEntity.joinEntity)(e.entity,e.joinEntity,i,e.joinClauses,n,s.has(e.joinEntity)),i=await(0,_mergeJoins.mergeJoins)(i,e.mergeJoins),"delete"!==e.command&&"update"!==e.command&&(i[e.entity]=(0,_where.whereTree)(i[e.entity],e.where,t?e.joinEntity:void 0)),i[e.entity]=(0,_sortBy.sortBy)(i[e.entity],e.sortClauses),i[e.entity]=(0,_groupBy.groupBy)(i[e.entity],e.groupBy),i[e.entity]=(0,_limitOffset.limitOffset)(i[e.entity],e.offset,e.limit),i[e.entity]=(0,_selectFields.selectFields)(i[e.entity],e.selectClauses,Boolean(e.groupBy?.length)),i};exports.runQuery=runQuery;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runQuery=void 0,require("core-js/modules/es.array.includes.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"),_conditionTree=require("./conditionTree"),_conditionEntities=require("./conditionEntities"),_requireNode=require("./requireNode");const typeClauses=async(e,t)=>{for(const r of[...(0,_conditionTree.conditionsOf)(e.where),...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=>{const t=void 0!==e.where&&(0,_conditionEntities.conditionEntities)(e);switch(["insert","update","delete","create","drop"].includes(e.command)&&(0,_requireNode.requireNode)(`"${e.command}"`),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 r={[e.entity]:await(0,_retrieveRecord.retrieveRecord)(e.entity)};void 0!==e.joinEntity&&(r[e.joinEntity]=await(0,_retrieveRecord.retrieveRecord)(e.joinEntity)),await typeClauses(e,r);let i={[e.entity]:[]};const s=new Set;e=await(0,_getConditionIndexedList.getConditionIndexedList)(e,r,i,s);const n=s.has(e.entity);switch("delete"!==(e=await(0,_getJoinIndexedList.getJoinIndexedList)(e,r,i)).command&&"update"!==e.command||(n||(i=await(0,_readEntity.readEntity)(e.entity,i)),i[e.entity]=(0,_where.whereTree)(i[e.entity],e.where)),e.command){case"delete":i=await(0,_deleteEntity.deleteEntity)(e.entity,i);break;case"insert":i=await(0,_insertEntity.insertEntity)(e.entity,e.insertValues,i);break;case"read":n||(i=await(0,_readEntity.readEntity)(e.entity,i));break;case"update":i=await(0,_updateEntity.updateEntity)(e.entity,e.updateValues,i);break;default:throw new Error(`Unknown command: ${e.command}`)}return i=await(0,_joinEntity.joinEntity)(e.entity,e.joinEntity,i,e.joinClauses,n,s.has(e.joinEntity)),i=await(0,_mergeJoins.mergeJoins)(i,e.mergeJoins),"delete"!==e.command&&"update"!==e.command&&(i[e.entity]=(0,_where.whereTree)(i[e.entity],e.where,t?e.joinEntity:void 0)),i[e.entity]=(0,_sortBy.sortBy)(i[e.entity],e.sortClauses),i[e.entity]=(0,_groupBy.groupBy)(i[e.entity],e.groupBy),i[e.entity]=(0,_limitOffset.limitOffset)(i[e.entity],e.offset,e.limit),i[e.entity]=(0,_selectFields.selectFields)(i[e.entity],e.selectClauses,Boolean(e.groupBy?.length)),i};exports.runQuery=runQuery;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "json-fs-query",
3
- "version": "3.1.1",
3
+ "version": "3.1.3",
4
4
  "description": "Use json files to manage and read data.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",