json-fs-query 3.3.1 → 3.4.0

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.
Files changed (119) hide show
  1. package/README.md +7 -1
  2. package/browser/jsonFsQuery.js +764 -3841
  3. package/browser/jsonFsQuery.min.js +1 -1
  4. package/dist/data/introspect/alter.js +0 -5
  5. package/dist/data/introspect/alter.min.js +1 -1
  6. package/dist/data/introspect/create.js +0 -4
  7. package/dist/data/introspect/create.min.js +1 -1
  8. package/dist/data/introspect/definitions/key.js +0 -2
  9. package/dist/data/introspect/definitions/key.min.js +1 -1
  10. package/dist/data/introspect/definitions/record.js +0 -2
  11. package/dist/data/introspect/definitions/record.min.js +1 -1
  12. package/dist/data/introspect/drop.js +0 -4
  13. package/dist/data/introspect/drop.min.js +1 -1
  14. package/dist/data/introspect/formatDatabase.js +0 -2
  15. package/dist/data/introspect/formatDatabase.min.js +1 -1
  16. package/dist/data/introspect/index.js +0 -4
  17. package/dist/data/introspect/index.min.js +1 -1
  18. package/dist/data/introspect/packDatabase.js +0 -19
  19. package/dist/data/introspect/packDatabase.min.js +1 -1
  20. package/dist/data/queries/createRecord.js +0 -2
  21. package/dist/data/queries/createRecord.min.js +1 -1
  22. package/dist/data/queries/databaseStatements.js +0 -3
  23. package/dist/data/queries/databaseStatements.min.js +1 -1
  24. package/dist/data/queries/deleteEntity.js +0 -20
  25. package/dist/data/queries/deleteEntity.min.js +1 -1
  26. package/dist/data/queries/dropRecord.js +0 -5
  27. package/dist/data/queries/dropRecord.min.js +1 -1
  28. package/dist/data/queries/groupBy.js +0 -16
  29. package/dist/data/queries/groupBy.min.js +1 -1
  30. package/dist/data/queries/insertEntity.js +0 -35
  31. package/dist/data/queries/insertEntity.min.js +1 -1
  32. package/dist/data/queries/joinEntity.js +0 -15
  33. package/dist/data/queries/joinEntity.min.js +1 -1
  34. package/dist/data/queries/parser.js +0 -2
  35. package/dist/data/queries/parser.min.js +1 -1
  36. package/dist/data/queries/selectFields.js +0 -3
  37. package/dist/data/queries/selectFields.min.js +1 -1
  38. package/dist/data/queries/showRecords.js +0 -2
  39. package/dist/data/queries/showRecords.min.js +1 -1
  40. package/dist/data/queries/updateEntity.js +0 -4
  41. package/dist/data/queries/updateEntity.min.js +1 -1
  42. package/dist/data/queries/where.js +0 -4
  43. package/dist/data/queries/where.min.js +1 -1
  44. package/dist/data/storage/databases.js +1 -2
  45. package/dist/data/storage/databases.min.js +1 -1
  46. package/dist/data/storage/listFiles.js +0 -2
  47. package/dist/data/storage/listFiles.min.js +1 -1
  48. package/dist/data/storage/readCache.js +0 -13
  49. package/dist/data/storage/readCache.min.js +1 -1
  50. package/dist/data/storage/readJson.js +2 -2
  51. package/dist/data/storage/readJson.min.js +1 -1
  52. package/dist/data/storage/storagePath.js +0 -1
  53. package/dist/data/storage/storagePath.min.js +1 -1
  54. package/dist/data/storage/writeSet.js +0 -32
  55. package/dist/data/storage/writeSet.min.js +1 -1
  56. package/dist/data/utilities/computeKeyValue.js +0 -2
  57. package/dist/data/utilities/computeKeyValue.min.js +1 -1
  58. package/dist/data/utilities/conditionEntities.js +0 -20
  59. package/dist/data/utilities/conditionEntities.min.js +1 -1
  60. package/dist/data/utilities/conditionTree.js +0 -3
  61. package/dist/data/utilities/conditionTree.min.js +1 -1
  62. package/dist/data/utilities/config.d.ts +11 -0
  63. package/dist/data/utilities/config.js +15 -1
  64. package/dist/data/utilities/config.min.js +1 -1
  65. package/dist/data/utilities/databaseLock.js +0 -14
  66. package/dist/data/utilities/databaseLock.min.js +1 -1
  67. package/dist/data/utilities/deregisterRecord.js +0 -2
  68. package/dist/data/utilities/deregisterRecord.min.js +1 -1
  69. package/dist/data/utilities/fieldType.js +0 -2
  70. package/dist/data/utilities/fieldType.min.js +1 -1
  71. package/dist/data/utilities/getConditionIndexedList.js +0 -20
  72. package/dist/data/utilities/getConditionIndexedList.min.js +1 -1
  73. package/dist/data/utilities/indexBuffer.js +0 -33
  74. package/dist/data/utilities/indexBuffer.min.js +1 -1
  75. package/dist/data/utilities/indexHas.js +0 -3
  76. package/dist/data/utilities/indexHas.min.js +1 -1
  77. package/dist/data/utilities/joinBases.js +0 -33
  78. package/dist/data/utilities/joinBases.min.js +1 -1
  79. package/dist/data/utilities/keyIndexFiles.js +0 -19
  80. package/dist/data/utilities/keyIndexFiles.min.js +1 -1
  81. package/dist/data/utilities/knownFields.js +0 -21
  82. package/dist/data/utilities/knownFields.min.js +1 -1
  83. package/dist/data/utilities/mergeJoin.js +0 -2
  84. package/dist/data/utilities/mergeJoin.min.js +1 -1
  85. package/dist/data/utilities/packedTable.js +0 -3
  86. package/dist/data/utilities/packedTable.min.js +1 -1
  87. package/dist/data/utilities/parsers/findConditions.js +0 -2
  88. package/dist/data/utilities/parsers/findConditions.min.js +1 -1
  89. package/dist/data/utilities/parsers/findGroupBy.js +0 -2
  90. package/dist/data/utilities/parsers/findGroupBy.min.js +1 -1
  91. package/dist/data/utilities/parsers/maskStrings.js +0 -3
  92. package/dist/data/utilities/parsers/maskStrings.min.js +1 -1
  93. package/dist/data/utilities/parsers/parseCreate.js +0 -21
  94. package/dist/data/utilities/parsers/parseCreate.min.js +1 -1
  95. package/dist/data/utilities/parsers/splitClauses.js +0 -16
  96. package/dist/data/utilities/parsers/splitClauses.min.js +1 -1
  97. package/dist/data/utilities/parsers/splitQueries.js +0 -3
  98. package/dist/data/utilities/parsers/splitQueries.min.js +1 -1
  99. package/dist/data/utilities/reconcileJoin.js +0 -4
  100. package/dist/data/utilities/reconcileJoin.min.js +1 -1
  101. package/dist/data/utilities/removeFromIndex.js +0 -3
  102. package/dist/data/utilities/removeFromIndex.min.js +1 -1
  103. package/dist/data/utilities/requireNode.js +0 -1
  104. package/dist/data/utilities/requireNode.min.js +1 -1
  105. package/dist/data/utilities/retrieveRecord.js +0 -1
  106. package/dist/data/utilities/retrieveRecord.min.js +1 -1
  107. package/dist/data/utilities/retrieveRecords.js +0 -16
  108. package/dist/data/utilities/retrieveRecords.min.js +1 -1
  109. package/dist/data/utilities/rowLookup.js +0 -15
  110. package/dist/data/utilities/rowLookup.min.js +1 -1
  111. package/dist/data/utilities/runQuery.js +0 -16
  112. package/dist/data/utilities/runQuery.min.js +1 -1
  113. package/dist/data/utilities/semiJoin.js +0 -19
  114. package/dist/data/utilities/semiJoin.min.js +1 -1
  115. package/dist/data/utilities/updateIndex.js +0 -2
  116. package/dist/data/utilities/updateIndex.min.js +1 -1
  117. package/dist/index.js +0 -4
  118. package/dist/index.min.js +1 -1
  119. package/package.json +3 -3
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.updateEntity=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js"),require("core-js/modules/esnext.iterator.map.js"),require("core-js/modules/esnext.iterator.some.js");var _retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFile=require("../utilities/retrieveFile"),_updateIndex=require("../utilities/updateIndex"),_removeFromIndex=require("../utilities/removeFromIndex"),_computeKeyValue=require("../utilities/computeKeyValue"),_fieldType=require("../utilities/fieldType"),_compareAs=require("../utilities/compareAs"),_keyUnique=require("../introspect/policies/keyUnique"),_typeCheck=require("../introspect/policies/typeCheck"),_foreignKeyExists=require("../introspect/policies/foreignKeyExists"),_hasDependents=require("../introspect/policies/hasDependents"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_config=require("../utilities/config"),_keyIndexFiles=require("../utilities/keyIndexFiles"),_storage=require("../storage"),_packedTable=require("../utilities/packedTable"),_knownFields=require("../utilities/knownFields");const findEntryFile=async(e,t,i)=>{const r=(0,_fieldType.keyValueType)(e,t),o=async o=>(0,_compareAs.sameValue)(r,(0,_computeKeyValue.computeKeyValue)(t.fields,await(0,_retrieveFile.retrieveFile)(`${e.path}/${o}`)),i);for(const s of await(0,_keyIndexFiles.keyIndexFiles)(e,t,(e=>(0,_compareAs.sameValue)(r,e,i)))??[])if(await o(s))return s;for(const t of e.entries)if(await o(t))return t;return null},keyFieldsChanged=(e,t,i,r)=>t.fields.some((t=>Object.prototype.hasOwnProperty.call(r,t)&&!(0,_compareAs.sameValue)((0,_fieldType.fieldType)(e,t),r[t],i[t]))),assertUniqueForUpdate=async(e,t,i,r,o)=>{for(const s of t.keys){if("primary"!==s.type&&"unique"!==s.type||!keyFieldsChanged(t,s,i,o))continue;const n=s.fields.map((e=>r[e]));if(n.some((e=>null==e)))continue;if(!await(0,_keyUnique.keyUnique)(e,s.fields,n))throw new Error(`Duplicate value for ${s.type} key "${s.fields.join(", ")}" on ${e}`)}},assertForeignKeysForUpdate=async(e,t,i,r)=>{for(const o of t.keys){if("foreign"!==o.type||1!==o.fields.length||!o.references||1!==o.references.length)continue;const s=o.fields[0];if(!Object.prototype.hasOwnProperty.call(r,s)||null===r[s]||void 0===r[s]||(0,_compareAs.sameValue)((0,_fieldType.fieldType)(t,s),r[s],i[s]))continue;const{entity:n,property:a}=(0,_splitEntityProperty.splitEntityProperty)(o.references[0].fields[0]);if(!await(0,_foreignKeyExists.foreignKeyExists)(n,a,r[s]))throw new Error(`Foreign key "${s}" on ${e} references a nonexistent ${n}.${a} = ${r[s]}`)}},assertNoDependentsForUpdate=async(e,t,i,r,o)=>{if(!(0,_config.getSetting)("enforceForeignKeys",!0)||1!==i.fields.length||!keyFieldsChanged(t,i,r,o))return;const s=i.fields[0];if(await(0,_hasDependents.hasDependents)(e,s,r[s]))throw new Error(`Cannot update "${e}" where "${s}" = ${r[s]} - other records still reference it`)},reconcileIndexes=async(e,t,i,r,o)=>{for(const s of e.keys)keyFieldsChanged(e,s,t,r)&&(await(0,_removeFromIndex.removeFromIndex)(e.path,s,(0,_computeKeyValue.computeKeyValue)(s.fields,t),o,(0,_fieldType.keyValueType)(e,s)),await(0,_updateIndex.updateIndex)(e.path,s,(0,_computeKeyValue.computeKeyValue)(s.fields,i),o,(0,_fieldType.keyValueType)(e,s)))},assertUniqueWithinUpdate=(e,t,i,r)=>{for(const o of t.keys){if("primary"!==o.type&&"unique"!==o.type)continue;const s=[];for(const{oldData:n,newData:a}of i){if(!keyFieldsChanged(t,o,n,r)||o.fields.some((e=>null===a[e]||void 0===a[e])))continue;const i=(0,_computeKeyValue.computeKeyValue)(o.fields,a);if(s.some((e=>(0,_compareAs.sameValue)((0,_fieldType.keyValueType)(t,o),e,i))))throw new Error(`Duplicate value for ${o.type} key "${o.fields.join(", ")}" on ${e}`);s.push(i)}}},assertRequiredFields=(e,t,i)=>{for(const r of t.definition)if(!r.optional&&void 0===i[r.name])throw new Error(`Missing required field "${r.name}" for ${e}`)},applyFieldTypes=(e,t)=>{const i=Object.assign({},t);for(const t of e.definition)Object.prototype.hasOwnProperty.call(i,t.name)&&(i[t.name]=null===i[t.name]&&t.optional&&!t.nullable?void 0:(0,_typeCheck.typeCheck)(t.type,i[t.name],t.nullable));return i},withoutRemoved=(e,t)=>{const i=Object.assign({},e);for(const e of Object.keys(t))void 0===t[e]&&delete i[e];return i},updateEntity=async(e="",t={},i={})=>{const r=await(0,_retrieveRecord.retrieveRecord)(e),o=r.keys.find((e=>"primary"===e.type));if(!o)throw new Error(`Cannot update "${e}" without a primary key`);(0,_knownFields.assertFieldsDefined)(e,r,Object.keys(t||{}),"set");const s=applyFieldTypes(r,t);for(const t of o.fields)if(Object.prototype.hasOwnProperty.call(s,t)&&void 0===s[t])throw new Error(`Cannot clear "${t}" on ${e}: it's part of the primary key`);const n=[];for(const t of i[e]||[]){const i=await findEntryFile(r,o,(0,_computeKeyValue.computeKeyValue)(o.fields,t));if(!i)throw new Error(`Could not find entry for ${e} where "${o.fields.join(", ")}" = ${(0,_computeKeyValue.computeKeyValue)(o.fields,t)}`);if(n.some((e=>e.fileName===i)))continue;const a=await(0,_retrieveFile.retrieveFile)(`${r.path}/${i}`),l=withoutRemoved(Object.assign({},a,s),s);await assertUniqueForUpdate(e,r,a,l,s),await assertForeignKeysForUpdate(e,r,a,s),await assertNoDependentsForUpdate(e,r,o,a,s),assertRequiredFields(e,r,l),n.push({fileName:i,oldData:a,newData:l})}assertUniqueWithinUpdate(e,r,n,s),n.length&&await(0,_packedTable.discardPacked)(r.path);for(const{fileName:e,oldData:t,newData:i}of n)await reconcileIndexes(r,t,i,s,e),await(0,_storage.writeJson)(`${r.path}/${e}`,i);return i[e]=n.map((({newData:e})=>e)),i};exports.updateEntity=updateEntity;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.updateEntity=void 0;var _retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFile=require("../utilities/retrieveFile"),_updateIndex=require("../utilities/updateIndex"),_removeFromIndex=require("../utilities/removeFromIndex"),_computeKeyValue=require("../utilities/computeKeyValue"),_fieldType=require("../utilities/fieldType"),_compareAs=require("../utilities/compareAs"),_keyUnique=require("../introspect/policies/keyUnique"),_typeCheck=require("../introspect/policies/typeCheck"),_foreignKeyExists=require("../introspect/policies/foreignKeyExists"),_hasDependents=require("../introspect/policies/hasDependents"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_config=require("../utilities/config"),_keyIndexFiles=require("../utilities/keyIndexFiles"),_storage=require("../storage"),_packedTable=require("../utilities/packedTable"),_knownFields=require("../utilities/knownFields");const findEntryFile=async(e,t,i)=>{const r=(0,_fieldType.keyValueType)(e,t),o=async o=>(0,_compareAs.sameValue)(r,(0,_computeKeyValue.computeKeyValue)(t.fields,await(0,_retrieveFile.retrieveFile)(`${e.path}/${o}`)),i);for(const n of await(0,_keyIndexFiles.keyIndexFiles)(e,t,(e=>(0,_compareAs.sameValue)(r,e,i)))??[])if(await o(n))return n;for(const t of e.entries)if(await o(t))return t;return null},keyFieldsChanged=(e,t,i,r)=>t.fields.some((t=>Object.prototype.hasOwnProperty.call(r,t)&&!(0,_compareAs.sameValue)((0,_fieldType.fieldType)(e,t),r[t],i[t]))),assertUniqueForUpdate=async(e,t,i,r,o)=>{for(const n of t.keys){if("primary"!==n.type&&"unique"!==n.type||!keyFieldsChanged(t,n,i,o))continue;const s=n.fields.map((e=>r[e]));if(s.some((e=>null==e)))continue;if(!await(0,_keyUnique.keyUnique)(e,n.fields,s))throw new Error(`Duplicate value for ${n.type} key "${n.fields.join(", ")}" on ${e}`)}},assertForeignKeysForUpdate=async(e,t,i,r)=>{for(const o of t.keys){if("foreign"!==o.type||1!==o.fields.length||!o.references||1!==o.references.length)continue;const n=o.fields[0];if(!Object.prototype.hasOwnProperty.call(r,n)||null===r[n]||void 0===r[n]||(0,_compareAs.sameValue)((0,_fieldType.fieldType)(t,n),r[n],i[n]))continue;const{entity:s,property:a}=(0,_splitEntityProperty.splitEntityProperty)(o.references[0].fields[0]);if(!await(0,_foreignKeyExists.foreignKeyExists)(s,a,r[n]))throw new Error(`Foreign key "${n}" on ${e} references a nonexistent ${s}.${a} = ${r[n]}`)}},assertNoDependentsForUpdate=async(e,t,i,r,o)=>{if(!(0,_config.getSetting)("enforceForeignKeys",!0)||1!==i.fields.length||!keyFieldsChanged(t,i,r,o))return;const n=i.fields[0];if(await(0,_hasDependents.hasDependents)(e,n,r[n]))throw new Error(`Cannot update "${e}" where "${n}" = ${r[n]} - other records still reference it`)},reconcileIndexes=async(e,t,i,r,o)=>{for(const n of e.keys)keyFieldsChanged(e,n,t,r)&&(await(0,_removeFromIndex.removeFromIndex)(e.path,n,(0,_computeKeyValue.computeKeyValue)(n.fields,t),o,(0,_fieldType.keyValueType)(e,n)),await(0,_updateIndex.updateIndex)(e.path,n,(0,_computeKeyValue.computeKeyValue)(n.fields,i),o,(0,_fieldType.keyValueType)(e,n)))},assertUniqueWithinUpdate=(e,t,i,r)=>{for(const o of t.keys){if("primary"!==o.type&&"unique"!==o.type)continue;const n=[];for(const{oldData:s,newData:a}of i){if(!keyFieldsChanged(t,o,s,r)||o.fields.some((e=>null===a[e]||void 0===a[e])))continue;const i=(0,_computeKeyValue.computeKeyValue)(o.fields,a);if(n.some((e=>(0,_compareAs.sameValue)((0,_fieldType.keyValueType)(t,o),e,i))))throw new Error(`Duplicate value for ${o.type} key "${o.fields.join(", ")}" on ${e}`);n.push(i)}}},assertRequiredFields=(e,t,i)=>{for(const r of t.definition)if(!r.optional&&void 0===i[r.name])throw new Error(`Missing required field "${r.name}" for ${e}`)},applyFieldTypes=(e,t)=>{const i=Object.assign({},t);for(const t of e.definition)Object.prototype.hasOwnProperty.call(i,t.name)&&(i[t.name]=null===i[t.name]&&t.optional&&!t.nullable?void 0:(0,_typeCheck.typeCheck)(t.type,i[t.name],t.nullable));return i},withoutRemoved=(e,t)=>{const i=Object.assign({},e);for(const e of Object.keys(t))void 0===t[e]&&delete i[e];return i},updateEntity=async(e="",t={},i={})=>{const r=await(0,_retrieveRecord.retrieveRecord)(e),o=r.keys.find((e=>"primary"===e.type));if(!o)throw new Error(`Cannot update "${e}" without a primary key`);(0,_knownFields.assertFieldsDefined)(e,r,Object.keys(t||{}),"set");const n=applyFieldTypes(r,t);for(const t of o.fields)if(Object.prototype.hasOwnProperty.call(n,t)&&void 0===n[t])throw new Error(`Cannot clear "${t}" on ${e}: it's part of the primary key`);const s=[];for(const t of i[e]||[]){const i=await findEntryFile(r,o,(0,_computeKeyValue.computeKeyValue)(o.fields,t));if(!i)throw new Error(`Could not find entry for ${e} where "${o.fields.join(", ")}" = ${(0,_computeKeyValue.computeKeyValue)(o.fields,t)}`);if(s.some((e=>e.fileName===i)))continue;const a=await(0,_retrieveFile.retrieveFile)(`${r.path}/${i}`),l=withoutRemoved(Object.assign({},a,n),n);await assertUniqueForUpdate(e,r,a,l,n),await assertForeignKeysForUpdate(e,r,a,n),await assertNoDependentsForUpdate(e,r,o,a,n),assertRequiredFields(e,r,l),s.push({fileName:i,oldData:a,newData:l})}assertUniqueWithinUpdate(e,r,s,n),s.length&&await(0,_packedTable.discardPacked)(r.path);for(const{fileName:e,oldData:t,newData:i}of s)await reconcileIndexes(r,t,i,n,e),await(0,_storage.writeJson)(`${r.path}/${e}`,i);return i[e]=s.map((({newData:e})=>e)),i};exports.updateEntity=updateEntity;
@@ -5,10 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.whereTree = exports.where = exports.treeTruth = void 0;
7
7
  require("core-js/modules/es.array.includes.js");
8
- require("core-js/modules/esnext.iterator.constructor.js");
9
- require("core-js/modules/esnext.iterator.filter.js");
10
- require("core-js/modules/esnext.iterator.flat-map.js");
11
- require("core-js/modules/esnext.iterator.some.js");
12
8
  var _compareAs = require("../utilities/compareAs");
13
9
  var _conditionTree = require("../utilities/conditionTree");
14
10
  const likeMatch = (dataValue, pattern) => {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.whereTree=exports.where=exports.treeTruth=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.iterator.flat-map.js"),require("core-js/modules/esnext.iterator.some.js");var _compareAs=require("../utilities/compareAs"),_conditionTree=require("../utilities/conditionTree");const likeMatch=(e,r)=>{if("string"!=typeof e||"string"!=typeof r)return!1;const t=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${t}$`,"i").test(e)},makeCondition=(e,r,t,s,n=void 0)=>{const o=Object.prototype.hasOwnProperty.call(e,r);switch(t){case"exists":return o;case"does not exist":return!o;case"is null":return o&&null===e[r];case"is not null":return o&&null!==e[r]}if(!o||null===e[r]||null===s)return null;const i=e[r],c=(0,_compareAs.compareAs)(n,i);switch(t){case"=":return(0,_compareAs.sameValue)(n,i,s);case"!=":case"<>":return!(0,_compareAs.sameValue)(n,i,s);case">":return c>(0,_compareAs.compareAs)(n,s);case">=":return c>=(0,_compareAs.compareAs)(n,s);case"<":return c<(0,_compareAs.compareAs)(n,s);case"<=":return c<=(0,_compareAs.compareAs)(n,s);case"in":return!!Array.isArray(s)&&(!!(n?s.some((e=>null!==e&&(0,_compareAs.sameValue)(n,i,e))):s.includes(i))||!!s.includes(null)&&null);case"between":return!(!Array.isArray(s)||2!==s.length)&&(s.includes(null)?null:c>=(0,_compareAs.compareAs)(n,s[0])&&c<=(0,_compareAs.compareAs)(n,s[1]));case"like":return likeMatch(i,s)}return!1},conditionTruth=(e,{property:r="",joinEntity:t,comparator:s="=",value:n=null,type:o}={})=>makeCondition(e,t?`${t}.${r}`:r,s,n,o),where=(e=[],r={})=>e.filter((e=>!0===conditionTruth(e,r)));exports.where=where;const treeTruth=(e,r)=>{if((0,_conditionTree.isCondition)(r))return conditionTruth(e,r);if("not"in r){const t=treeTruth(e,r.not);return null===t?null:!t}const t=!("and"in r);let s=!t;for(const n of"and"in r?r.and:r.or){const r=treeTruth(e,n);if(r===t)return t;null===r&&(s=null)}return s};exports.treeTruth=treeTruth;const pairView=(e,r,t)=>{const s=Object.assign({},e);for(const e of Object.keys(t)){const n=e.includes(".")?e:`${r}.${e}`;Object.prototype.hasOwnProperty.call(s,n)||(s[n]=t[e])}return s},whereTree=(e=[],r=void 0,t=void 0)=>void 0===r?e:void 0===t?e.filter((e=>!0===treeTruth(e,r))):e.flatMap((e=>{const s=(Array.isArray(e[t])?e[t]:[]).filter((s=>!0===treeTruth(pairView(e,t,s),r)));return s.length?[Object.assign({},e,{[t]:s})]:[]}));exports.whereTree=whereTree;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.whereTree=exports.where=exports.treeTruth=void 0,require("core-js/modules/es.array.includes.js");var _compareAs=require("../utilities/compareAs"),_conditionTree=require("../utilities/conditionTree");const likeMatch=(e,r)=>{if("string"!=typeof e||"string"!=typeof r)return!1;const t=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${t}$`,"i").test(e)},makeCondition=(e,r,t,n,s=void 0)=>{const o=Object.prototype.hasOwnProperty.call(e,r);switch(t){case"exists":return o;case"does not exist":return!o;case"is null":return o&&null===e[r];case"is not null":return o&&null!==e[r]}if(!o||null===e[r]||null===n)return null;const c=e[r],i=(0,_compareAs.compareAs)(s,c);switch(t){case"=":return(0,_compareAs.sameValue)(s,c,n);case"!=":case"<>":return!(0,_compareAs.sameValue)(s,c,n);case">":return i>(0,_compareAs.compareAs)(s,n);case">=":return i>=(0,_compareAs.compareAs)(s,n);case"<":return i<(0,_compareAs.compareAs)(s,n);case"<=":return i<=(0,_compareAs.compareAs)(s,n);case"in":return!!Array.isArray(n)&&(!!(s?n.some((e=>null!==e&&(0,_compareAs.sameValue)(s,c,e))):n.includes(c))||!!n.includes(null)&&null);case"between":return!(!Array.isArray(n)||2!==n.length)&&(n.includes(null)?null:i>=(0,_compareAs.compareAs)(s,n[0])&&i<=(0,_compareAs.compareAs)(s,n[1]));case"like":return likeMatch(c,n)}return!1},conditionTruth=(e,{property:r="",joinEntity:t,comparator:n="=",value:s=null,type:o}={})=>makeCondition(e,t?`${t}.${r}`:r,n,s,o),where=(e=[],r={})=>e.filter((e=>!0===conditionTruth(e,r)));exports.where=where;const treeTruth=(e,r)=>{if((0,_conditionTree.isCondition)(r))return conditionTruth(e,r);if("not"in r){const t=treeTruth(e,r.not);return null===t?null:!t}const t=!("and"in r);let n=!t;for(const s of"and"in r?r.and:r.or){const r=treeTruth(e,s);if(r===t)return t;null===r&&(n=null)}return n};exports.treeTruth=treeTruth;const pairView=(e,r,t)=>{const n=Object.assign({},e);for(const e of Object.keys(t)){const s=e.includes(".")?e:`${r}.${e}`;Object.prototype.hasOwnProperty.call(n,s)||(n[s]=t[e])}return n},whereTree=(e=[],r=void 0,t=void 0)=>void 0===r?e:void 0===t?e.filter((e=>!0===treeTruth(e,r))):e.flatMap((e=>{const n=(Array.isArray(e[t])?e[t]:[]).filter((n=>!0===treeTruth(pairView(e,t,n),r)));return n.length?[Object.assign({},e,{[t]:n})]:[]}));exports.whereTree=whereTree;
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/esnext.weak-map.delete-all.js");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
@@ -31,7 +30,7 @@ const listLocation = () => databasesLocation('__DATABASES.json');
31
30
  const readDatabaseList = async () => {
32
31
  let text;
33
32
  try {
34
- text = jsEnv.isNode ? await (0, _nodeFiles.nodeFiles)().readFile(listLocation(), 'utf8') : await fetch(listLocation()).then(response => response.ok === false ? '[]' : response.text());
33
+ text = jsEnv.isNode ? await (0, _nodeFiles.nodeFiles)().readFile(listLocation(), 'utf8') : await (0, _config.configuredFetch)(listLocation()).then(response => response.ok === false ? '[]' : response.text());
35
34
  } catch (error) {
36
35
  if (jsEnv.isNode && error?.code !== 'ENOENT') {
37
36
  throw error;
@@ -1 +1 @@
1
- "use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.writeDatabaseList=exports.removeDatabaseFolder=exports.readDatabaseList=exports.makeDatabaseFolder=exports.databasesLocation=exports.databaseFolderExists=void 0,require("core-js/modules/es.json.stringify.js");var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("../utilities/config"),_nodeFiles=require("./nodeFiles"),_readCache=require("./readCache"),_writeSet=require("./writeSet");function _interopRequireWildcard(a,t){if(!t&&a&&a.__esModule)return a;var s,r,o=Object.defineProperty,i={__proto__:null,default:a};if(Object(a)!==a)return i;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(a))return e.get(a);e.set(a,i)}for(r in a)"default"!==r&&{}.hasOwnProperty.call(a,r)&&((s=o&&Object.getOwnPropertyDescriptor(a,r))&&(s.get||s.set)?o(i,r,s):i[r]=a[r]);return i}const databasesLocation=(e="")=>`${jsEnv.isBrowser?(0,_config.getSetting)("relativePath",""):""}${(0,_config.databasesFolder)()}${e}`;exports.databasesLocation=databasesLocation;const listLocation=()=>databasesLocation("__DATABASES.json"),readDatabaseList=async()=>{let e;try{e=jsEnv.isNode?await(0,_nodeFiles.nodeFiles)().readFile(listLocation(),"utf8"):await fetch(listLocation()).then((e=>!1===e.ok?"[]":e.text()))}catch(e){if(jsEnv.isNode&&"ENOENT"!==e?.code)throw e;return[]}try{const a=JSON.parse(e);return Array.isArray(a)?a:[]}catch(e){if(!jsEnv.isNode)return[];throw new Error(`Could not read ${listLocation()}: ${e.message}`)}};exports.readDatabaseList=readDatabaseList;const writeDatabaseList=async e=>{await(0,_nodeFiles.nodeFiles)().mkdir(databasesLocation(),{recursive:!0}),await(0,_writeSet.writeAtomically)(listLocation(),JSON.stringify(e))};exports.writeDatabaseList=writeDatabaseList;const databaseFolderExists=e=>require("fs").existsSync(databasesLocation(e));exports.databaseFolderExists=databaseFolderExists;const makeDatabaseFolder=async e=>{await(0,_nodeFiles.nodeFiles)().mkdir(databasesLocation(e),{recursive:!0})};exports.makeDatabaseFolder=makeDatabaseFolder;const removeDatabaseFolder=async e=>{const a=databasesLocation(e);(0,_readCache.cacheRemove)(a,!0),await(0,_nodeFiles.nodeFiles)().rm(a,{recursive:!0,force:!0}),(0,_readCache.cacheRemove)(a,!0)};exports.removeDatabaseFolder=removeDatabaseFolder;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.writeDatabaseList=exports.removeDatabaseFolder=exports.readDatabaseList=exports.makeDatabaseFolder=exports.databasesLocation=exports.databaseFolderExists=void 0,require("core-js/modules/es.json.stringify.js");var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("../utilities/config"),_nodeFiles=require("./nodeFiles"),_readCache=require("./readCache"),_writeSet=require("./writeSet");function _interopRequireWildcard(a,t){if(!t&&a&&a.__esModule)return a;var s,r,o=Object.defineProperty,i={__proto__:null,default:a};if(Object(a)!==a)return i;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(a))return e.get(a);e.set(a,i)}for(r in a)"default"!==r&&{}.hasOwnProperty.call(a,r)&&((s=o&&Object.getOwnPropertyDescriptor(a,r))&&(s.get||s.set)?o(i,r,s):i[r]=a[r]);return i}const databasesLocation=(e="")=>`${jsEnv.isBrowser?(0,_config.getSetting)("relativePath",""):""}${(0,_config.databasesFolder)()}${e}`;exports.databasesLocation=databasesLocation;const listLocation=()=>databasesLocation("__DATABASES.json"),readDatabaseList=async()=>{let e;try{e=jsEnv.isNode?await(0,_nodeFiles.nodeFiles)().readFile(listLocation(),"utf8"):await(0,_config.configuredFetch)(listLocation()).then((e=>!1===e.ok?"[]":e.text()))}catch(e){if(jsEnv.isNode&&"ENOENT"!==e?.code)throw e;return[]}try{const a=JSON.parse(e);return Array.isArray(a)?a:[]}catch(e){if(!jsEnv.isNode)return[];throw new Error(`Could not read ${listLocation()}: ${e.message}`)}};exports.readDatabaseList=readDatabaseList;const writeDatabaseList=async e=>{await(0,_nodeFiles.nodeFiles)().mkdir(databasesLocation(),{recursive:!0}),await(0,_writeSet.writeAtomically)(listLocation(),JSON.stringify(e))};exports.writeDatabaseList=writeDatabaseList;const databaseFolderExists=e=>require("fs").existsSync(databasesLocation(e));exports.databaseFolderExists=databaseFolderExists;const makeDatabaseFolder=async e=>{await(0,_nodeFiles.nodeFiles)().mkdir(databasesLocation(e),{recursive:!0})};exports.makeDatabaseFolder=makeDatabaseFolder;const removeDatabaseFolder=async e=>{const a=databasesLocation(e);(0,_readCache.cacheRemove)(a,!0),await(0,_nodeFiles.nodeFiles)().rm(a,{recursive:!0,force:!0}),(0,_readCache.cacheRemove)(a,!0)};exports.removeDatabaseFolder=removeDatabaseFolder;
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.listFiles = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.map.js");
9
7
  var _storagePath = require("./storagePath");
10
8
  var _nodeFiles = require("./nodeFiles");
11
9
  var _writeSet = require("./writeSet");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.listFiles=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js");var _storagePath=require("./storagePath"),_nodeFiles=require("./nodeFiles"),_writeSet=require("./writeSet");const walk=async e=>{let t;try{t=await(0,_nodeFiles.nodeFiles)().readdir((0,_storagePath.storagePath)(e),{withFileTypes:!0})}catch(e){if("ENOENT"===e?.code)return[];throw e}const r=[];for(const s of t)s.isDirectory()?r.push(...await walk(`${e}${s.name}/`)):s.isFile()&&r.push(`${e}${s.name}`);return r},listFiles=async(e="")=>{const t=e?`${e.replace(/\/+$/,"")}/`:"",r=(await walk(t)).map((e=>(0,_storagePath.storagePath)(e))),s=(0,_storagePath.storagePath)();return(0,_writeSet.pendingListing)((0,_storagePath.storagePath)(e),r).map((e=>e.slice(s.length))).sort()};exports.listFiles=listFiles;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.listFiles=void 0;var _storagePath=require("./storagePath"),_nodeFiles=require("./nodeFiles"),_writeSet=require("./writeSet");const walk=async e=>{let t;try{t=await(0,_nodeFiles.nodeFiles)().readdir((0,_storagePath.storagePath)(e),{withFileTypes:!0})}catch(e){if("ENOENT"===e?.code)return[];throw e}const s=[];for(const r of t)r.isDirectory()?s.push(...await walk(`${e}${r.name}/`)):r.isFile()&&s.push(`${e}${r.name}`);return s},listFiles=async(e="")=>{const t=e?`${e.replace(/\/+$/,"")}/`:"",s=(await walk(t)).map((e=>(0,_storagePath.storagePath)(e))),r=(0,_storagePath.storagePath)();return(0,_writeSet.pendingListing)((0,_storagePath.storagePath)(e),s).map((e=>e.slice(r.length))).sort()};exports.listFiles=listFiles;
@@ -4,19 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.withReadCache = exports.cachedRead = exports.cacheWrite = exports.cacheRemove = void 0;
7
- require("core-js/modules/esnext.map.delete-all.js");
8
- require("core-js/modules/esnext.map.every.js");
9
- require("core-js/modules/esnext.map.filter.js");
10
- require("core-js/modules/esnext.map.find.js");
11
- require("core-js/modules/esnext.map.find-key.js");
12
- require("core-js/modules/esnext.map.includes.js");
13
- require("core-js/modules/esnext.map.key-of.js");
14
- require("core-js/modules/esnext.map.map-keys.js");
15
- require("core-js/modules/esnext.map.map-values.js");
16
- require("core-js/modules/esnext.map.merge.js");
17
- require("core-js/modules/esnext.map.reduce.js");
18
- require("core-js/modules/esnext.map.some.js");
19
- require("core-js/modules/esnext.map.update.js");
20
7
  var _storagePath = require("./storagePath");
21
8
  const scopes = new Map();
22
9
  /**
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.withReadCache=exports.cachedRead=exports.cacheWrite=exports.cacheRemove=void 0,require("core-js/modules/esnext.map.delete-all.js"),require("core-js/modules/esnext.map.every.js"),require("core-js/modules/esnext.map.filter.js"),require("core-js/modules/esnext.map.find.js"),require("core-js/modules/esnext.map.find-key.js"),require("core-js/modules/esnext.map.includes.js"),require("core-js/modules/esnext.map.key-of.js"),require("core-js/modules/esnext.map.map-keys.js"),require("core-js/modules/esnext.map.map-values.js"),require("core-js/modules/esnext.map.merge.js"),require("core-js/modules/esnext.map.reduce.js"),require("core-js/modules/esnext.map.some.js"),require("core-js/modules/esnext.map.update.js");var _storagePath=require("./storagePath");const scopes=new Map,currentScope=()=>scopes.get((0,_storagePath.storagePath)()),withReadCache=async e=>{const s=(0,_storagePath.storagePath)(),r=scopes.get(s)||{calls:0,files:new Map};scopes.set(s,r),r.calls++,r.calls>1&&(r.files=new Map);try{return await e()}finally{r.calls--,r.calls||scopes.get(s)!==r||scopes.delete(s)}};exports.withReadCache=withReadCache;const cachedRead=(e,s)=>{const r=currentScope();if(!r)return s();const t=r.files.get(e);if(t)return t;const c=s();return r.files.set(e,c),c.catch((()=>{r.files.get(e)===c&&r.files.delete(e)})),c};exports.cachedRead=cachedRead;const cacheWrite=(e,s)=>{currentScope()?.files.set(e,Promise.resolve(s))};exports.cacheWrite=cacheWrite;const cacheRemove=(e,s=!1)=>{const r=currentScope();if(r&&(r.files.delete(e),s)){const s=e.endsWith("/")?e:`${e}/`;for(const e of[...r.files.keys()])e.startsWith(s)&&r.files.delete(e)}};exports.cacheRemove=cacheRemove;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.withReadCache=exports.cachedRead=exports.cacheWrite=exports.cacheRemove=void 0;var _storagePath=require("./storagePath");const scopes=new Map,currentScope=()=>scopes.get((0,_storagePath.storagePath)()),withReadCache=async e=>{const t=(0,_storagePath.storagePath)(),s=scopes.get(t)||{calls:0,files:new Map};scopes.set(t,s),s.calls++,s.calls>1&&(s.files=new Map);try{return await e()}finally{s.calls--,s.calls||scopes.get(t)!==s||scopes.delete(t)}};exports.withReadCache=withReadCache;const cachedRead=(e,t)=>{const s=currentScope();if(!s)return t();const c=s.files.get(e);if(c)return c;const a=t();return s.files.set(e,a),a.catch((()=>{s.files.get(e)===a&&s.files.delete(e)})),a};exports.cachedRead=cachedRead;const cacheWrite=(e,t)=>{currentScope()?.files.set(e,Promise.resolve(t))};exports.cacheWrite=cacheWrite;const cacheRemove=(e,t=!1)=>{const s=currentScope();if(s&&(s.files.delete(e),t)){const t=e.endsWith("/")?e:`${e}/`;for(const e of[...s.files.keys()])e.startsWith(t)&&s.files.delete(e)}};exports.cacheRemove=cacheRemove;
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/esnext.weak-map.delete-all.js");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
@@ -10,6 +9,7 @@ var _storagePath = require("./storagePath");
10
9
  var _nodeFiles = require("./nodeFiles");
11
10
  var _readCache = require("./readCache");
12
11
  var _writeSet = require("./writeSet");
12
+ var _config = require("../utilities/config");
13
13
  var e;
14
14
  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; }
15
15
  /**
@@ -24,7 +24,7 @@ const readText = async path => {
24
24
  if (pending === null) {
25
25
  throw new Error(`ENOENT: no such file or directory, open '${location}' (deleted by this statement)`);
26
26
  }
27
- return typeof pending === 'string' ? pending : (0, _readCache.cachedRead)(location, () => jsEnv.isNode ? (0, _nodeFiles.nodeFiles)().readFile(location, 'utf8') : fetch(location).then(response => response.text()));
27
+ return typeof pending === 'string' ? pending : (0, _readCache.cachedRead)(location, () => jsEnv.isNode ? (0, _nodeFiles.nodeFiles)().readFile(location, 'utf8') : (0, _config.configuredFetch)(location).then(response => response.text()));
28
28
  };
29
29
  /**
30
30
  * Read and parse one JSON file of the database: from disk in Node, over `fetch()` in a browser (see storagePath for
@@ -1 +1 @@
1
- "use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.readText=exports.readJson=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_storagePath=require("./storagePath"),_nodeFiles=require("./nodeFiles"),_readCache=require("./readCache"),_writeSet=require("./writeSet");function _interopRequireWildcard(r,t){if(!t&&r&&r.__esModule)return r;var a,o,n=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(o in r)"default"!==o&&{}.hasOwnProperty.call(r,o)&&((a=n&&Object.getOwnPropertyDescriptor(r,o))&&(a.get||a.set)?n(s,o,a):s[o]=r[o]);return s}const readText=async e=>{const r=(0,_storagePath.storagePath)(e),t=(0,_writeSet.pendingFile)(r);if(null===t)throw new Error(`ENOENT: no such file or directory, open '${r}' (deleted by this statement)`);return"string"==typeof t?t:(0,_readCache.cachedRead)(r,(()=>jsEnv.isNode?(0,_nodeFiles.nodeFiles)().readFile(r,"utf8"):fetch(r).then((e=>e.text()))))};exports.readText=readText;const readJson=async e=>JSON.parse(await readText(e));exports.readJson=readJson;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.readText=exports.readJson=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_storagePath=require("./storagePath"),_nodeFiles=require("./nodeFiles"),_readCache=require("./readCache"),_writeSet=require("./writeSet"),_config=require("../utilities/config");function _interopRequireWildcard(r,t){if(!t&&r&&r.__esModule)return r;var o,i,n=Object.defineProperty,a={__proto__:null,default:r};if(Object(r)!==r)return a;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(r))return e.get(r);e.set(r,a)}for(i in r)"default"!==i&&{}.hasOwnProperty.call(r,i)&&((o=n&&Object.getOwnPropertyDescriptor(r,i))&&(o.get||o.set)?n(a,i,o):a[i]=r[i]);return a}const readText=async e=>{const r=(0,_storagePath.storagePath)(e),t=(0,_writeSet.pendingFile)(r);if(null===t)throw new Error(`ENOENT: no such file or directory, open '${r}' (deleted by this statement)`);return"string"==typeof t?t:(0,_readCache.cachedRead)(r,(()=>jsEnv.isNode?(0,_nodeFiles.nodeFiles)().readFile(r,"utf8"):(0,_config.configuredFetch)(r).then((e=>e.text()))))};exports.readText=readText;const readJson=async e=>JSON.parse(await readText(e));exports.readJson=readJson;
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/esnext.weak-map.delete-all.js");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
@@ -1 +1 @@
1
- "use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.storagePath=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("../utilities/config");function _interopRequireWildcard(t,r){if(!r&&t&&t.__esModule)return t;var o,a,i=Object.defineProperty,s={__proto__:null,default:t};if(Object(t)!==t)return s;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(t))return e.get(t);e.set(t,s)}for(a in t)"default"!==a&&{}.hasOwnProperty.call(t,a)&&((o=i&&Object.getOwnPropertyDescriptor(t,a))&&(o.get||o.set)?i(s,a,o):s[a]=t[a]);return s}const storagePath=(e="")=>`${jsEnv.isBrowser?(0,_config.getSetting)("relativePath",""):""}${(0,_config.activeDatabasePath)()}${e}`;exports.storagePath=storagePath;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.storagePath=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("../utilities/config");function _interopRequireWildcard(t,r){if(!r&&t&&t.__esModule)return t;var o,i,a=Object.defineProperty,n={__proto__:null,default:t};if(Object(t)!==t)return n;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(t))return e.get(t);e.set(t,n)}for(i in t)"default"!==i&&{}.hasOwnProperty.call(t,i)&&((o=a&&Object.getOwnPropertyDescriptor(t,i))&&(o.get||o.set)?a(n,i,o):n[i]=t[i]);return n}const storagePath=(e="")=>`${jsEnv.isBrowser?(0,_config.getSetting)("relativePath",""):""}${(0,_config.activeDatabasePath)()}${e}`;exports.storagePath=storagePath;
@@ -1,41 +1,9 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/esnext.weak-map.delete-all.js");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.writeAtomically = exports.withWriteSet = exports.stageWrite = exports.stageRemoveDirectory = exports.stageRemove = exports.stageMakeDirectory = exports.pendingListing = exports.pendingFile = exports.pendingExists = void 0;
8
- require("core-js/modules/esnext.iterator.constructor.js");
9
- require("core-js/modules/esnext.iterator.filter.js");
10
- require("core-js/modules/esnext.map.delete-all.js");
11
- require("core-js/modules/esnext.map.every.js");
12
- require("core-js/modules/esnext.map.filter.js");
13
- require("core-js/modules/esnext.map.find.js");
14
- require("core-js/modules/esnext.map.find-key.js");
15
- require("core-js/modules/esnext.map.includes.js");
16
- require("core-js/modules/esnext.map.key-of.js");
17
- require("core-js/modules/esnext.map.map-keys.js");
18
- require("core-js/modules/esnext.map.map-values.js");
19
- require("core-js/modules/esnext.map.merge.js");
20
- require("core-js/modules/esnext.map.reduce.js");
21
- require("core-js/modules/esnext.map.some.js");
22
- require("core-js/modules/esnext.map.update.js");
23
- require("core-js/modules/esnext.set.add-all.js");
24
- require("core-js/modules/esnext.set.delete-all.js");
25
- require("core-js/modules/esnext.set.difference.js");
26
- require("core-js/modules/esnext.set.every.js");
27
- require("core-js/modules/esnext.set.filter.js");
28
- require("core-js/modules/esnext.set.find.js");
29
- require("core-js/modules/esnext.set.intersection.js");
30
- require("core-js/modules/esnext.set.is-disjoint-from.js");
31
- require("core-js/modules/esnext.set.is-subset-of.js");
32
- require("core-js/modules/esnext.set.is-superset-of.js");
33
- require("core-js/modules/esnext.set.join.js");
34
- require("core-js/modules/esnext.set.map.js");
35
- require("core-js/modules/esnext.set.reduce.js");
36
- require("core-js/modules/esnext.set.some.js");
37
- require("core-js/modules/esnext.set.symmetric-difference.js");
38
- require("core-js/modules/esnext.set.union.js");
39
7
  var jsEnv = _interopRequireWildcard(require("browser-or-node"));
40
8
  var _storagePath = require("./storagePath");
41
9
  var _nodeFiles = require("./nodeFiles");
@@ -1 +1 @@
1
- "use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.writeAtomically=exports.withWriteSet=exports.stageWrite=exports.stageRemoveDirectory=exports.stageRemove=exports.stageMakeDirectory=exports.pendingListing=exports.pendingFile=exports.pendingExists=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.map.delete-all.js"),require("core-js/modules/esnext.map.every.js"),require("core-js/modules/esnext.map.filter.js"),require("core-js/modules/esnext.map.find.js"),require("core-js/modules/esnext.map.find-key.js"),require("core-js/modules/esnext.map.includes.js"),require("core-js/modules/esnext.map.key-of.js"),require("core-js/modules/esnext.map.map-keys.js"),require("core-js/modules/esnext.map.map-values.js"),require("core-js/modules/esnext.map.merge.js"),require("core-js/modules/esnext.map.reduce.js"),require("core-js/modules/esnext.map.some.js"),require("core-js/modules/esnext.map.update.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 e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_storagePath=require("./storagePath"),_nodeFiles=require("./nodeFiles"),_readCache=require("./readCache");function _interopRequireWildcard(r,s){if(!s&&r&&r.__esModule)return r;var t,o,i=Object.defineProperty,n={__proto__:null,default:r};if(Object(r)!==r)return n;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(r))return e.get(r);e.set(r,n)}for(o in r)"default"!==o&&{}.hasOwnProperty.call(r,o)&&((t=i&&Object.getOwnPropertyDescriptor(r,o))&&(t.get||t.set)?i(n,o,t):n[o]=r[o]);return n}const writeSets=new Map,currentWriteSet=()=>writeSets.get((0,_storagePath.storagePath)()),folderPrefix=e=>e.endsWith("/")?e:`${e}/`,insideAny=(e,r)=>{for(const s of r)if(e===s||e.startsWith(folderPrefix(s)))return!0;return!1},writeAtomically=async(e,r)=>{const s=`${e}.${crypto.randomUUID()}.tmp`,t=(0,_nodeFiles.nodeFiles)();try{await t.writeFile(s,r),await t.rename(s,e)}catch(e){throw await t.rm(s,{force:!0}).catch((()=>{})),e}};exports.writeAtomically=writeAtomically;const removeFolder=async e=>{(0,_readCache.cacheRemove)(e,!0),await(0,_nodeFiles.nodeFiles)().rm(e,{recursive:!0,force:!0}),(0,_readCache.cacheRemove)(e,!0)},commit=async e=>{const r=(0,_nodeFiles.nodeFiles)(),s=r=>{const s=folderPrefix(r);return[...e.madeFolders].some((e=>e===r||e.startsWith(s)))||[...e.files].some((([e,r])=>null!==r&&e.startsWith(s)))},t=[...e.removedFolders];for(const e of t.filter(s))await removeFolder(e);for(const s of e.madeFolders)await r.mkdir(s,{recursive:!0});for(const[r,s]of e.files)null!==s&&(await writeAtomically(r,s),(0,_readCache.cacheWrite)(r,s));for(const[s,t]of e.files)null===t&&((0,_readCache.cacheRemove)(s),await r.rm(s,{force:!0}),(0,_readCache.cacheRemove)(s));for(const e of t.filter((e=>!s(e))))await removeFolder(e)},withWriteSet=async e=>{const r=(0,_storagePath.storagePath)();if(!jsEnv.isNode||writeSets.has(r))return e();const s={files:new Map,madeFolders:new Set,removedFolders:new Set};let t;writeSets.set(r,s);try{t=await e()}finally{writeSets.delete(r)}return await commit(s),t};exports.withWriteSet=withWriteSet;const pendingFile=e=>{const r=currentWriteSet();if(r)return r.files.has(e)?r.files.get(e):insideAny(e,r.removedFolders)?null:void 0};exports.pendingFile=pendingFile;const pendingExists=e=>{const r=currentWriteSet();if(!r)return;if(r.files.has(e))return null!==r.files.get(e);const s=folderPrefix(e);return!(![...r.madeFolders].some((r=>r===e||r.startsWith(s)))&&![...r.files].some((([e,r])=>null!==r&&e.startsWith(s))))||!insideAny(e,r.removedFolders)&&void 0};exports.pendingExists=pendingExists;const pendingListing=(e,r)=>{const s=currentWriteSet();if(!s)return r;const t=folderPrefix(e),o=new Set(r.filter((e=>!insideAny(e,s.removedFolders))));for(const[e,r]of s.files)e.startsWith(t)&&(null===r?o.delete(e):o.add(e));return[...o]};exports.pendingListing=pendingListing;const stageWrite=(e,r)=>{const s=currentWriteSet();return!!s&&(s.files.delete(e),s.files.set(e,r),!0)};exports.stageWrite=stageWrite;const stageRemove=e=>{const r=currentWriteSet();return!!r&&(r.files.delete(e),r.files.set(e,null),!0)};exports.stageRemove=stageRemove;const stageMakeDirectory=e=>{const r=currentWriteSet();return!!r&&(r.madeFolders.add(e),!0)};exports.stageMakeDirectory=stageMakeDirectory;const stageRemoveDirectory=e=>{const r=currentWriteSet();if(!r)return!1;for(const s of[...r.files.keys()])insideAny(s,new Set([e]))&&r.files.delete(s);for(const s of[...r.madeFolders])insideAny(s,new Set([e]))&&r.madeFolders.delete(s);return r.removedFolders.add(e),!0};exports.stageRemoveDirectory=stageRemoveDirectory;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.writeAtomically=exports.withWriteSet=exports.stageWrite=exports.stageRemoveDirectory=exports.stageRemove=exports.stageMakeDirectory=exports.pendingListing=exports.pendingFile=exports.pendingExists=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_storagePath=require("./storagePath"),_nodeFiles=require("./nodeFiles"),_readCache=require("./readCache");function _interopRequireWildcard(t,r){if(!r&&t&&t.__esModule)return t;var s,i,o=Object.defineProperty,n={__proto__:null,default:t};if(Object(t)!==t)return n;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(t))return e.get(t);e.set(t,n)}for(i in t)"default"!==i&&{}.hasOwnProperty.call(t,i)&&((s=o&&Object.getOwnPropertyDescriptor(t,i))&&(s.get||s.set)?o(n,i,s):n[i]=t[i]);return n}const writeSets=new Map,currentWriteSet=()=>writeSets.get((0,_storagePath.storagePath)()),folderPrefix=e=>e.endsWith("/")?e:`${e}/`,insideAny=(e,t)=>{for(const r of t)if(e===r||e.startsWith(folderPrefix(r)))return!0;return!1},writeAtomically=async(e,t)=>{const r=`${e}.${crypto.randomUUID()}.tmp`,s=(0,_nodeFiles.nodeFiles)();try{await s.writeFile(r,t),await s.rename(r,e)}catch(e){throw await s.rm(r,{force:!0}).catch((()=>{})),e}};exports.writeAtomically=writeAtomically;const removeFolder=async e=>{(0,_readCache.cacheRemove)(e,!0),await(0,_nodeFiles.nodeFiles)().rm(e,{recursive:!0,force:!0}),(0,_readCache.cacheRemove)(e,!0)},commit=async e=>{const t=(0,_nodeFiles.nodeFiles)(),r=t=>{const r=folderPrefix(t);return[...e.madeFolders].some((e=>e===t||e.startsWith(r)))||[...e.files].some((([e,t])=>null!==t&&e.startsWith(r)))},s=[...e.removedFolders];for(const e of s.filter(r))await removeFolder(e);for(const r of e.madeFolders)await t.mkdir(r,{recursive:!0});for(const[t,r]of e.files)null!==r&&(await writeAtomically(t,r),(0,_readCache.cacheWrite)(t,r));for(const[r,s]of e.files)null===s&&((0,_readCache.cacheRemove)(r),await t.rm(r,{force:!0}),(0,_readCache.cacheRemove)(r));for(const e of s.filter((e=>!r(e))))await removeFolder(e)},withWriteSet=async e=>{const t=(0,_storagePath.storagePath)();if(!jsEnv.isNode||writeSets.has(t))return e();const r={files:new Map,madeFolders:new Set,removedFolders:new Set};let s;writeSets.set(t,r);try{s=await e()}finally{writeSets.delete(t)}return await commit(r),s};exports.withWriteSet=withWriteSet;const pendingFile=e=>{const t=currentWriteSet();if(t)return t.files.has(e)?t.files.get(e):insideAny(e,t.removedFolders)?null:void 0};exports.pendingFile=pendingFile;const pendingExists=e=>{const t=currentWriteSet();if(!t)return;if(t.files.has(e))return null!==t.files.get(e);const r=folderPrefix(e);return!(![...t.madeFolders].some((t=>t===e||t.startsWith(r)))&&![...t.files].some((([e,t])=>null!==t&&e.startsWith(r))))||!insideAny(e,t.removedFolders)&&void 0};exports.pendingExists=pendingExists;const pendingListing=(e,t)=>{const r=currentWriteSet();if(!r)return t;const s=folderPrefix(e),i=new Set(t.filter((e=>!insideAny(e,r.removedFolders))));for(const[e,t]of r.files)e.startsWith(s)&&(null===t?i.delete(e):i.add(e));return[...i]};exports.pendingListing=pendingListing;const stageWrite=(e,t)=>{const r=currentWriteSet();return!!r&&(r.files.delete(e),r.files.set(e,t),!0)};exports.stageWrite=stageWrite;const stageRemove=e=>{const t=currentWriteSet();return!!t&&(t.files.delete(e),t.files.set(e,null),!0)};exports.stageRemove=stageRemove;const stageMakeDirectory=e=>{const t=currentWriteSet();return!!t&&(t.madeFolders.add(e),!0)};exports.stageMakeDirectory=stageMakeDirectory;const stageRemoveDirectory=e=>{const t=currentWriteSet();if(!t)return!1;for(const r of[...t.files.keys()])insideAny(r,new Set([e]))&&t.files.delete(r);for(const r of[...t.madeFolders])insideAny(r,new Set([e]))&&t.madeFolders.delete(r);return t.removedFolders.add(e),!0};exports.stageRemoveDirectory=stageRemoveDirectory;
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.computeKeyValue = void 0;
7
7
  require("core-js/modules/es.json.stringify.js");
8
- require("core-js/modules/esnext.iterator.constructor.js");
9
- require("core-js/modules/esnext.iterator.map.js");
10
8
  /**
11
9
  * The value a key (of any field count) indexes and checks uniqueness by. A single-field key uses
12
10
  * the field's own raw value directly - this is the pre-existing, already-shipped index file
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.computeKeyValue=void 0,require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js");const computeKeyValue=(e,r)=>1===e.length?r[e[0]]:JSON.stringify(e.map((e=>r[e])));exports.computeKeyValue=computeKeyValue;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.computeKeyValue=void 0,require("core-js/modules/es.json.stringify.js");const computeKeyValue=(e,t)=>1===e.length?t[e[0]]:JSON.stringify(e.map((e=>t[e])));exports.computeKeyValue=computeKeyValue;
@@ -4,26 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.conditionEntities = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.filter.js");
9
- require("core-js/modules/esnext.iterator.flat-map.js");
10
- require("core-js/modules/esnext.iterator.map.js");
11
- require("core-js/modules/esnext.set.add-all.js");
12
- require("core-js/modules/esnext.set.delete-all.js");
13
- require("core-js/modules/esnext.set.difference.js");
14
- require("core-js/modules/esnext.set.every.js");
15
- require("core-js/modules/esnext.set.filter.js");
16
- require("core-js/modules/esnext.set.find.js");
17
- require("core-js/modules/esnext.set.intersection.js");
18
- require("core-js/modules/esnext.set.is-disjoint-from.js");
19
- require("core-js/modules/esnext.set.is-subset-of.js");
20
- require("core-js/modules/esnext.set.is-superset-of.js");
21
- require("core-js/modules/esnext.set.join.js");
22
- require("core-js/modules/esnext.set.map.js");
23
- require("core-js/modules/esnext.set.reduce.js");
24
- require("core-js/modules/esnext.set.some.js");
25
- require("core-js/modules/esnext.set.symmetric-difference.js");
26
- require("core-js/modules/esnext.set.union.js");
27
7
  var _isEntityProperty = require("./parsers/isEntityProperty");
28
8
  var _splitEntityProperty = require("./parsers/splitEntityProperty");
29
9
  var _conditionTree = require("./conditionTree");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.conditionEntities=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.iterator.flat-map.js"),require("core-js/modules/esnext.iterator.map.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 _isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_conditionTree=require("./conditionTree");const conditionEntities=e=>{const t=e.entity,r=e.joinClauses.length?e.joinEntity:void 0,s=new Set([t,r]),o=new Set(e.mergeJoins.filter((e=>s.has((0,_splitEntityProperty.splitEntityProperty)(e.propertyA).entity))).map((e=>(0,_splitEntityProperty.splitEntityProperty)(e.propertyB).entity))),i=new Set(e.joinClauses.flatMap((e=>[e.propertyA,e.propertyB].map((e=>(0,_splitEntityProperty.splitEntityProperty)(e).entity)))).filter((e=>!s.has(e)&&!o.has(e)))),n="update"===e.command||"delete"===e.command;let u=!1;for(const s of(0,_conditionTree.conditionsOf)(e.where)){if(!(0,_isEntityProperty.isEntityProperty)(s.property))continue;const{entity:p,property:c}=(0,_splitEntityProperty.splitEntityProperty)(s.property);if(p===t){s.property=c;continue}if(n)throw new Error(`${e.command} can only use conditions on ${t}'s own fields, not ${s.property}`);if(p===r){u=!0;continue}if(o.has(p))continue;if(i.has(p))throw new Error(`${p} only links ${t} to ${r}: a condition can't use its fields (${s.property})`);const l=[t,r,...o].filter((e=>void 0!==e)).join(", ");throw new Error(`${p} is not part of this query (${s.property}): conditions can use the fields of ${l}`)}return u};exports.conditionEntities=conditionEntities;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.conditionEntities=void 0;var _isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_conditionTree=require("./conditionTree");const conditionEntities=t=>{const i=t.entity,e=t.joinClauses.length?t.joinEntity:void 0,r=new Set([i,e]),o=new Set(t.mergeJoins.filter((t=>r.has((0,_splitEntityProperty.splitEntityProperty)(t.propertyA).entity))).map((t=>(0,_splitEntityProperty.splitEntityProperty)(t.propertyB).entity))),n=new Set(t.joinClauses.flatMap((t=>[t.propertyA,t.propertyB].map((t=>(0,_splitEntityProperty.splitEntityProperty)(t).entity)))).filter((t=>!r.has(t)&&!o.has(t)))),p="update"===t.command||"delete"===t.command;let s=!1;for(const r of(0,_conditionTree.conditionsOf)(t.where)){if(!(0,_isEntityProperty.isEntityProperty)(r.property))continue;const{entity:y,property:c}=(0,_splitEntityProperty.splitEntityProperty)(r.property);if(y===i){r.property=c;continue}if(p)throw new Error(`${t.command} can only use conditions on ${i}'s own fields, not ${r.property}`);if(y===e){s=!0;continue}if(o.has(y))continue;if(n.has(y))throw new Error(`${y} only links ${i} to ${e}: a condition can't use its fields (${r.property})`);const l=[i,e,...o].filter((t=>void 0!==t)).join(", ");throw new Error(`${y} is not part of this query (${r.property}): conditions can use the fields of ${l}`)}return s};exports.conditionEntities=conditionEntities;
@@ -4,9 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.requiredConditions = exports.isCondition = exports.conditionsOf = exports.allOf = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.filter.js");
9
- require("core-js/modules/esnext.iterator.flat-map.js");
10
7
  /**
11
8
  * Whether a node is a single condition rather than `and` / `or` / `not`.
12
9
  * @param node
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.requiredConditions=exports.isCondition=exports.conditionsOf=exports.allOf=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.iterator.flat-map.js");const isCondition=o=>!("and"in o)&&!("or"in o)&&!("not"in o);exports.isCondition=isCondition;const allOf=o=>{if(o.length)return 1===o.length?o[0]:{and:o}};exports.allOf=allOf;const conditionsOf=o=>void 0===o?[]:isCondition(o)?[o]:"not"in o?conditionsOf(o.not):("and"in o?o.and:o.or).flatMap(conditionsOf);exports.conditionsOf=conditionsOf;const requiredConditions=o=>void 0===o?[]:isCondition(o)?[o]:"and"in o?o.and.filter(isCondition):[];exports.requiredConditions=requiredConditions;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.requiredConditions=exports.isCondition=exports.conditionsOf=exports.allOf=void 0;const isCondition=i=>!("and"in i)&&!("or"in i)&&!("not"in i);exports.isCondition=isCondition;const allOf=i=>{if(i.length)return 1===i.length?i[0]:{and:i}};exports.allOf=allOf;const conditionsOf=i=>void 0===i?[]:isCondition(i)?[i]:"not"in i?conditionsOf(i.not):("and"in i?i.and:i.or).flatMap(conditionsOf);exports.conditionsOf=conditionsOf;const requiredConditions=i=>void 0===i?[]:isCondition(i)?[i]:"and"in i?i.and.filter(isCondition):[];exports.requiredConditions=requiredConditions;
@@ -7,6 +7,7 @@ export type RuntimeSettings = {
7
7
  packedReads?: boolean;
8
8
  databasesPath?: string;
9
9
  database?: string;
10
+ fetchOptions?: RequestInit;
10
11
  };
11
12
  /**
12
13
  * The folder of the database in use: `<databasesPath>/<database>/` once both are configured (see configure and the
@@ -62,6 +63,10 @@ export declare const trackDatabaseCall: () => (() => void);
62
63
  * packedReads (default: true in a browser, false in Node) is whether reads use a record's packed file (see
63
64
  * packDatabase) when it has one that matches the record, instead of reading each entry file.
64
65
  *
66
+ * fetchOptions (default none) is passed to every fetch() a browser read makes, as fetch's second argument: for example
67
+ * { cache: 'no-cache' }, so a page whose data a local server writes always checks for a newer file instead of reading
68
+ * one from the browser's cache. Not used in Node.
69
+ *
65
70
  * Changing databasePath while calls are still running or queued throws (see trackDatabaseCall): await them first.
66
71
  * @param newSettings
67
72
  * @throws {Error} When databasePath would point to another folder while database calls are in progress.
@@ -76,5 +81,11 @@ export declare const configure: (newSettings: Partial<RuntimeSettings>) => void;
76
81
  * @param key
77
82
  * @param defaultValue
78
83
  */
84
+ /**
85
+ * fetch() with the configured fetchOptions as its second argument, or with none when they aren't set (so a call is
86
+ * exactly what it was before the setting existed).
87
+ * @param location
88
+ */
89
+ export declare const configuredFetch: (location: string) => Promise<Response>;
79
90
  export declare const getSetting: <K extends keyof RuntimeSettings>(key: K, defaultValue: RuntimeSettings[K]) => RuntimeSettings[K];
80
91
  //# sourceMappingURL=config.d.ts.map
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.trackDatabaseCall = exports.switchDatabase = exports.resolveDatabasePath = exports.lockPath = exports.getSetting = exports.databasesFolder = exports.configure = exports.activeDatabasePath = void 0;
6
+ exports.trackDatabaseCall = exports.switchDatabase = exports.resolveDatabasePath = exports.lockPath = exports.getSetting = exports.databasesFolder = exports.configuredFetch = exports.configure = exports.activeDatabasePath = void 0;
7
7
  require("core-js/modules/es.json.stringify.js");
8
8
  const defaults = {
9
9
  databasePath: 'database/',
@@ -96,6 +96,10 @@ const trackDatabaseCall = () => {
96
96
  * packedReads (default: true in a browser, false in Node) is whether reads use a record's packed file (see
97
97
  * packDatabase) when it has one that matches the record, instead of reading each entry file.
98
98
  *
99
+ * fetchOptions (default none) is passed to every fetch() a browser read makes, as fetch's second argument: for example
100
+ * { cache: 'no-cache' }, so a page whose data a local server writes always checks for a newer file instead of reading
101
+ * one from the browser's cache. Not used in Node.
102
+ *
99
103
  * Changing databasePath while calls are still running or queued throws (see trackDatabaseCall): await them first.
100
104
  * @param newSettings
101
105
  * @throws {Error} When databasePath would point to another folder while database calls are in progress.
@@ -140,7 +144,17 @@ const configure = newSettings => {
140
144
  * @param key
141
145
  * @param defaultValue
142
146
  */
147
+ /**
148
+ * fetch() with the configured fetchOptions as its second argument, or with none when they aren't set (so a call is
149
+ * exactly what it was before the setting existed).
150
+ * @param location
151
+ */
143
152
  exports.configure = configure;
153
+ const configuredFetch = location => {
154
+ const options = getSetting('fetchOptions', undefined);
155
+ return options ? fetch(location, options) : fetch(location);
156
+ };
157
+ exports.configuredFetch = configuredFetch;
144
158
  const getSetting = (key, defaultValue) => {
145
159
  return typeof settings[key] !== 'undefined' ? settings[key] : defaultValue;
146
160
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.trackDatabaseCall=exports.switchDatabase=exports.resolveDatabasePath=exports.lockPath=exports.getSetting=exports.databasesFolder=exports.configure=exports.activeDatabasePath=void 0,require("core-js/modules/es.json.stringify.js");const defaults={databasePath:"database/",relativePath:"",enforceForeignKeys:!0,readConcurrency:16,format:"compact"};let settings={...defaults},activeCalls=0;const databaseNameMatch=/^[a-z0-9_-]+$/i,withSlash=a=>a.endsWith("/")?a:`${a}/`,activeDatabasePath=()=>settings.databasesPath&&settings.database?`${withSlash(settings.databasesPath)}${settings.database}/`:getSetting("databasePath","database/");exports.activeDatabasePath=activeDatabasePath;const lockPath=()=>settings.databasesPath?withSlash(settings.databasesPath):activeDatabasePath();exports.lockPath=lockPath;const databasesFolder=()=>{if(!settings.databasesPath)throw new Error("Several databases need a folder to hold them: configure({ databasesPath: 'databases/' }) first");return withSlash(settings.databasesPath)};exports.databasesFolder=databasesFolder;const switchDatabase=a=>{settings={...settings,database:a}};exports.switchDatabase=switchDatabase;const resolveDatabasePath=a=>require("path").resolve(a);exports.resolveDatabasePath=resolveDatabasePath;const trackDatabaseCall=()=>{activeCalls++;let a=!1;return()=>{a||(a=!0,activeCalls--)}};exports.trackDatabaseCall=trackDatabaseCall;const configure=a=>{if(void 0!==a.format&&"compact"!==a.format&&"pretty"!==a.format)throw new Error(`Unknown format "${a.format}": use 'compact' or 'pretty'`);if(void 0!==a.database&&null!==a.database&&!databaseNameMatch.test(a.database))throw new Error(`Invalid database name ${JSON.stringify(a.database)}: names use letters, digits, _ and - only`);const t={...settings,...a};if(t.database&&!t.databasesPath)throw new Error("A database name needs the folder that holds the databases: configure({ databasesPath: 'databases/', database: '...' })");if(activeCalls>0){const e={active:resolveDatabasePath(activeDatabasePath()),lock:resolveDatabasePath(lockPath())},s=settings;settings=t;const o=resolveDatabasePath(activeDatabasePath())!==e.active||resolveDatabasePath(lockPath())!==e.lock;if(settings=s,o){const t=["databasePath","databasesPath","database"].filter((t=>void 0!==a[t])).join(" / ");throw new Error(`Can't change ${t} while ${activeCalls} database call(s) are still running or queued: await them first`)}}settings=t};exports.configure=configure;const getSetting=(a,t)=>void 0!==settings[a]?settings[a]:t;exports.getSetting=getSetting;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.trackDatabaseCall=exports.switchDatabase=exports.resolveDatabasePath=exports.lockPath=exports.getSetting=exports.databasesFolder=exports.configuredFetch=exports.configure=exports.activeDatabasePath=void 0,require("core-js/modules/es.json.stringify.js");const defaults={databasePath:"database/",relativePath:"",enforceForeignKeys:!0,readConcurrency:16,format:"compact"};let settings={...defaults},activeCalls=0;const databaseNameMatch=/^[a-z0-9_-]+$/i,withSlash=a=>a.endsWith("/")?a:`${a}/`,activeDatabasePath=()=>settings.databasesPath&&settings.database?`${withSlash(settings.databasesPath)}${settings.database}/`:getSetting("databasePath","database/");exports.activeDatabasePath=activeDatabasePath;const lockPath=()=>settings.databasesPath?withSlash(settings.databasesPath):activeDatabasePath();exports.lockPath=lockPath;const databasesFolder=()=>{if(!settings.databasesPath)throw new Error("Several databases need a folder to hold them: configure({ databasesPath: 'databases/' }) first");return withSlash(settings.databasesPath)};exports.databasesFolder=databasesFolder;const switchDatabase=a=>{settings={...settings,database:a}};exports.switchDatabase=switchDatabase;const resolveDatabasePath=a=>require("path").resolve(a);exports.resolveDatabasePath=resolveDatabasePath;const trackDatabaseCall=()=>{activeCalls++;let a=!1;return()=>{a||(a=!0,activeCalls--)}};exports.trackDatabaseCall=trackDatabaseCall;const configure=a=>{if(void 0!==a.format&&"compact"!==a.format&&"pretty"!==a.format)throw new Error(`Unknown format "${a.format}": use 'compact' or 'pretty'`);if(void 0!==a.database&&null!==a.database&&!databaseNameMatch.test(a.database))throw new Error(`Invalid database name ${JSON.stringify(a.database)}: names use letters, digits, _ and - only`);const t={...settings,...a};if(t.database&&!t.databasesPath)throw new Error("A database name needs the folder that holds the databases: configure({ databasesPath: 'databases/', database: '...' })");if(activeCalls>0){const e={active:resolveDatabasePath(activeDatabasePath()),lock:resolveDatabasePath(lockPath())},s=settings;settings=t;const o=resolveDatabasePath(activeDatabasePath())!==e.active||resolveDatabasePath(lockPath())!==e.lock;if(settings=s,o){const t=["databasePath","databasesPath","database"].filter((t=>void 0!==a[t])).join(" / ");throw new Error(`Can't change ${t} while ${activeCalls} database call(s) are still running or queued: await them first`)}}settings=t};exports.configure=configure;const configuredFetch=a=>{const t=getSetting("fetchOptions",void 0);return t?fetch(a,t):fetch(a)};exports.configuredFetch=configuredFetch;const getSetting=(a,t)=>void 0!==settings[a]?settings[a]:t;exports.getSetting=getSetting;
@@ -1,23 +1,9 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/esnext.weak-map.delete-all.js");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.withDatabaseLock = exports.browserCallsRunning = void 0;
8
- require("core-js/modules/esnext.map.delete-all.js");
9
- require("core-js/modules/esnext.map.every.js");
10
- require("core-js/modules/esnext.map.filter.js");
11
- require("core-js/modules/esnext.map.find.js");
12
- require("core-js/modules/esnext.map.find-key.js");
13
- require("core-js/modules/esnext.map.includes.js");
14
- require("core-js/modules/esnext.map.key-of.js");
15
- require("core-js/modules/esnext.map.map-keys.js");
16
- require("core-js/modules/esnext.map.map-values.js");
17
- require("core-js/modules/esnext.map.merge.js");
18
- require("core-js/modules/esnext.map.reduce.js");
19
- require("core-js/modules/esnext.map.some.js");
20
- require("core-js/modules/esnext.map.update.js");
21
7
  var jsEnv = _interopRequireWildcard(require("browser-or-node"));
22
8
  var _config = require("./config");
23
9
  var _storage = require("../storage");
@@ -1 +1 @@
1
- "use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.withDatabaseLock=exports.browserCallsRunning=void 0,require("core-js/modules/esnext.map.delete-all.js"),require("core-js/modules/esnext.map.every.js"),require("core-js/modules/esnext.map.filter.js"),require("core-js/modules/esnext.map.find.js"),require("core-js/modules/esnext.map.find-key.js"),require("core-js/modules/esnext.map.includes.js"),require("core-js/modules/esnext.map.key-of.js"),require("core-js/modules/esnext.map.map-keys.js"),require("core-js/modules/esnext.map.map-values.js"),require("core-js/modules/esnext.map.merge.js"),require("core-js/modules/esnext.map.reduce.js"),require("core-js/modules/esnext.map.some.js"),require("core-js/modules/esnext.map.update.js");var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("./config"),_storage=require("../storage");function _interopRequireWildcard(r,s){if(!s&&r&&r.__esModule)return r;var t,o,a=Object.defineProperty,n={__proto__:null,default:r};if(Object(r)!==r)return n;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(r))return e.get(r);e.set(r,n)}for(o in r)"default"!==o&&{}.hasOwnProperty.call(r,o)&&((t=a&&Object.getOwnPropertyDescriptor(r,o))&&(t.get||t.set)?a(n,o,t):n[o]=r[o]);return n}const queues=new Map;let browserCalls=0;const browserCallsRunning=()=>browserCalls;exports.browserCallsRunning=browserCallsRunning;const withDatabaseLock=async e=>{if(!jsEnv.isNode){browserCalls++;try{return await(0,_storage.withReadCache)(e)}finally{browserCalls--}}const r=(0,_config.resolveDatabasePath)((0,_config.lockPath)()),s=(0,_config.trackDatabaseCall)(),t=queues.get(r)||Promise.resolve();let o;const a=new Promise((e=>{o=e})),n=t.then((()=>a));queues.set(r,n),await t;try{return await(0,_storage.withReadCache)(e)}finally{s(),o(),queues.get(r)===n&&queues.delete(r)}};exports.withDatabaseLock=withDatabaseLock;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.withDatabaseLock=exports.browserCallsRunning=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("./config"),_storage=require("../storage");function _interopRequireWildcard(r,t){if(!t&&r&&r.__esModule)return r;var a,s,o=Object.defineProperty,n={__proto__:null,default:r};if(Object(r)!==r)return n;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(r))return e.get(r);e.set(r,n)}for(s in r)"default"!==s&&{}.hasOwnProperty.call(r,s)&&((a=o&&Object.getOwnPropertyDescriptor(r,s))&&(a.get||a.set)?o(n,s,a):n[s]=r[s]);return n}const queues=new Map;let browserCalls=0;const browserCallsRunning=()=>browserCalls;exports.browserCallsRunning=browserCallsRunning;const withDatabaseLock=async e=>{if(!jsEnv.isNode){browserCalls++;try{return await(0,_storage.withReadCache)(e)}finally{browserCalls--}}const r=(0,_config.resolveDatabasePath)((0,_config.lockPath)()),t=(0,_config.trackDatabaseCall)(),a=queues.get(r)||Promise.resolve();let s;const o=new Promise((e=>{s=e})),n=a.then((()=>o));queues.set(r,n),await a;try{return await(0,_storage.withReadCache)(e)}finally{t(),s(),queues.get(r)===n&&queues.delete(r)}};exports.withDatabaseLock=withDatabaseLock;
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.deregisterRecord = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.filter.js");
9
7
  var _storage = require("../storage");
10
8
  /**
11
9
  * Remove a record's filename from the __RECORDS registry. A missing registry file is left
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deregisterRecord=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js");var _storage=require("../storage");const deregisterRecord=async e=>{const r="__RECORDS.json";let t;try{t=await(0,_storage.readJson)(r)}catch(e){return null}const s=`${e}.json`;return t.entries=t.entries.filter((e=>e!==s)),await(0,_storage.writeJson)(r,t),t};exports.deregisterRecord=deregisterRecord;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deregisterRecord=void 0;var _storage=require("../storage");const deregisterRecord=async e=>{const r="__RECORDS.json";let t;try{t=await(0,_storage.readJson)(r)}catch(e){return null}const s=`${e}.json`;return t.entries=t.entries.filter((e=>e!==s)),await(0,_storage.writeJson)(r,t),t};exports.deregisterRecord=deregisterRecord;
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.keyValueType = exports.fieldType = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.find.js");
9
7
  /**
10
8
  * The declared type of one of a record's fields, or undefined when the record or field is unknown.
11
9
  * @param record
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keyValueType=exports.fieldType=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js");const fieldType=(e,t)=>e?.definition?.find((e=>e.name===t))?.type;exports.fieldType=fieldType;const keyValueType=(e,t)=>1===t.fields.length?fieldType(e,t.fields[0]):void 0;exports.keyValueType=keyValueType;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keyValueType=exports.fieldType=void 0;const fieldType=(e,p)=>e?.definition?.find((e=>e.name===p))?.type;exports.fieldType=fieldType;const keyValueType=(e,p)=>1===p.fields.length?fieldType(e,p.fields[0]):void 0;exports.keyValueType=keyValueType;
@@ -4,26 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.getConditionIndexedList = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.flat-map.js");
9
- require("core-js/modules/esnext.iterator.for-each.js");
10
- require("core-js/modules/esnext.iterator.some.js");
11
- require("core-js/modules/esnext.set.add-all.js");
12
- require("core-js/modules/esnext.set.delete-all.js");
13
- require("core-js/modules/esnext.set.difference.js");
14
- require("core-js/modules/esnext.set.every.js");
15
- require("core-js/modules/esnext.set.filter.js");
16
- require("core-js/modules/esnext.set.find.js");
17
- require("core-js/modules/esnext.set.intersection.js");
18
- require("core-js/modules/esnext.set.is-disjoint-from.js");
19
- require("core-js/modules/esnext.set.is-subset-of.js");
20
- require("core-js/modules/esnext.set.is-superset-of.js");
21
- require("core-js/modules/esnext.set.join.js");
22
- require("core-js/modules/esnext.set.map.js");
23
- require("core-js/modules/esnext.set.reduce.js");
24
- require("core-js/modules/esnext.set.some.js");
25
- require("core-js/modules/esnext.set.symmetric-difference.js");
26
- require("core-js/modules/esnext.set.union.js");
27
7
  var _isEntityProperty = require("./parsers/isEntityProperty");
28
8
  var _splitEntityProperty = require("./parsers/splitEntityProperty");
29
9
  var _retrieveRecord = require("./retrieveRecord");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getConditionIndexedList=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.flat-map.js"),require("core-js/modules/esnext.iterator.for-each.js"),require("core-js/modules/esnext.iterator.some.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 _isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_retrieveRecord=require("./retrieveRecord"),_where=require("../queries/where"),_retrieveRecords=require("./retrieveRecords"),_retrieveFile=require("./retrieveFile"),_retrieveIndexes=require("./retrieveIndexes"),_isSingleFieldKey=require("./isSingleFieldKey"),_conditionTree=require("./conditionTree");const conditionField=(e,r)=>(0,_isEntityProperty.isEntityProperty)(e.property)?(0,_splitEntityProperty.splitEntityProperty)(e.property):{entity:r,property:e.property},indexedFiles=async(e,r,t,i,s)=>{if(Object.prototype.hasOwnProperty.call(i,e)||(i[e]=await(0,_retrieveRecord.retrieveRecord)(e)),i[e].keys.some((e=>(0,_isSingleFieldKey.isSingleFieldKey)(e,r))))return s[e]=s[e]||{},Object.prototype.hasOwnProperty.call(s[e],r)||(s[e][r]=(await(0,_retrieveIndexes.retrieveIndexes)(e,[r],i))[r]),new Set((0,_where.where)(s[e][r],{property:"value",comparator:t.comparator,value:t.value,type:t.type}).flatMap((e=>e.record)))},candidatesOf=async(e,r,t,i)=>{if((0,_conditionTree.isCondition)(e)){const{entity:s,property:o}=conditionField(e,r);return s===r?await indexedFiles(s,o,e,t,i):void 0}if("not"in e)return;if("or"in e){const s=new Set;for(const o of e.or){const e=await candidatesOf(o,r,t,i);if(void 0===e)return;e.forEach((e=>s.add(e)))}return s}let s;for(const o of e.and){const e=await candidatesOf(o,r,t,i);void 0!==e&&(s=void 0===s?e:new Set([...s].filter((r=>e.has(r)))))}return s},getConditionIndexedList=async(e,r,t,i=new Set)=>{const s={},o={};if(void 0!==e.where){const t=await candidatesOf(e.where,e.entity,r,o);void 0!==t&&(s[e.entity]=t)}for(const t of(0,_conditionTree.requiredConditions)(e.where)){const{entity:i,property:n}=conditionField(t,e.entity);if(i===e.entity)continue;const d=await indexedFiles(i,n,t,r,o);void 0!==d&&(s[i]=Object.prototype.hasOwnProperty.call(s,i)?new Set([...s[i]].filter((e=>d.has(e)))):d)}for(const e of Object.keys(s)){i.add(e);const o=r[e]||await(0,_retrieveRecord.retrieveRecord)(e);t[e]=await(0,_retrieveRecords.retrieveEntryRows)(o,[...s[e]],_retrieveFile.retrieveFile)}return e};exports.getConditionIndexedList=getConditionIndexedList;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getConditionIndexedList=void 0;var _isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_retrieveRecord=require("./retrieveRecord"),_where=require("../queries/where"),_retrieveRecords=require("./retrieveRecords"),_retrieveFile=require("./retrieveFile"),_retrieveIndexes=require("./retrieveIndexes"),_isSingleFieldKey=require("./isSingleFieldKey"),_conditionTree=require("./conditionTree");const conditionField=(e,t)=>(0,_isEntityProperty.isEntityProperty)(e.property)?(0,_splitEntityProperty.splitEntityProperty)(e.property):{entity:t,property:e.property},indexedFiles=async(e,t,r,i,o)=>{if(Object.prototype.hasOwnProperty.call(i,e)||(i[e]=await(0,_retrieveRecord.retrieveRecord)(e)),i[e].keys.some((e=>(0,_isSingleFieldKey.isSingleFieldKey)(e,t))))return o[e]=o[e]||{},Object.prototype.hasOwnProperty.call(o[e],t)||(o[e][t]=(await(0,_retrieveIndexes.retrieveIndexes)(e,[t],i))[t]),new Set((0,_where.where)(o[e][t],{property:"value",comparator:r.comparator,value:r.value,type:r.type}).flatMap((e=>e.record)))},candidatesOf=async(e,t,r,i)=>{if((0,_conditionTree.isCondition)(e)){const{entity:o,property:n}=conditionField(e,t);return o===t?await indexedFiles(o,n,e,r,i):void 0}if("not"in e)return;if("or"in e){const o=new Set;for(const n of e.or){const e=await candidatesOf(n,t,r,i);if(void 0===e)return;e.forEach((e=>o.add(e)))}return o}let o;for(const n of e.and){const e=await candidatesOf(n,t,r,i);void 0!==e&&(o=void 0===o?e:new Set([...o].filter((t=>e.has(t)))))}return o},getConditionIndexedList=async(e,t,r,i=new Set)=>{const o={},n={};if(void 0!==e.where){const r=await candidatesOf(e.where,e.entity,t,n);void 0!==r&&(o[e.entity]=r)}for(const r of(0,_conditionTree.requiredConditions)(e.where)){const{entity:i,property:d}=conditionField(r,e.entity);if(i===e.entity)continue;const s=await indexedFiles(i,d,r,t,n);void 0!==s&&(o[i]=Object.prototype.hasOwnProperty.call(o,i)?new Set([...o[i]].filter((e=>s.has(e)))):s)}for(const e of Object.keys(o)){i.add(e);const n=t[e]||await(0,_retrieveRecord.retrieveRecord)(e);r[e]=await(0,_retrieveRecords.retrieveEntryRows)(n,[...o[e]],_retrieveFile.retrieveFile)}return e};exports.getConditionIndexedList=getConditionIndexedList;