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
@@ -6,11 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.alter = void 0;
7
7
  require("core-js/modules/es.array.includes.js");
8
8
  require("core-js/modules/es.json.stringify.js");
9
- require("core-js/modules/esnext.iterator.constructor.js");
10
- require("core-js/modules/esnext.iterator.filter.js");
11
- require("core-js/modules/esnext.iterator.find.js");
12
- require("core-js/modules/esnext.iterator.map.js");
13
- require("core-js/modules/esnext.iterator.some.js");
14
9
  var _field = require("./definitions/field");
15
10
  var _create = require("./create");
16
11
  var _parseCreate = require("../utilities/parsers/parseCreate");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.alter=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.map.js"),require("core-js/modules/esnext.iterator.some.js");var _field=require("./definitions/field"),_create=require("./create"),_parseCreate=require("../utilities/parsers/parseCreate"),_retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFiles=require("../utilities/retrieveFiles"),_retrieveRecords=require("../utilities/retrieveRecords"),_knownFields=require("../utilities/knownFields"),_packedTable=require("../utilities/packedTable"),_requireNode=require("../utilities/requireNode"),_showRecords=require("../queries/showRecords"),_updateEntity=require("../queries/updateEntity"),_typeCheck=require("./policies/typeCheck"),_storage=require("../storage");const rowsOf=async e=>(await(0,_retrieveFiles.retrieveFiles)(e.entries.map((t=>`${e.path}/${t}`)),_retrieveRecords.retrieveEntry)).map(((t,r)=>({fileName:e.entries[r],data:t}))),has=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),keysUsing=(e,t)=>e.keys.filter((e=>e.fields.includes(t))),describeKey=e=>`${e.type} key (${e.fields.join(", ")})`,referencesTo=async(e,t)=>{const r=[];for(const i of await(0,_showRecords.showRecords)()){const a=await(0,_retrieveRecord.retrieveRecord)(i);for(const o of a.keys)"foreign"===o.type&&(o.references||[]).some((r=>r.fields.includes(`${e}.${t}`)))&&r.push({entity:i,record:a,key:o})}return r},writeRecord=async(e,t)=>{(0,_create.assertValidDefinition)(e,t),await(0,_storage.writeJson)(`${e}.json`,t)},setField=async(e,t,r,i,a)=>{if(r.length)if(await(0,_packedTable.discardPacked)(t.path),keysUsing(t,i).length&&"function"!=typeof a){if(!t.keys.some((e=>"primary"===e.type)))throw new Error(`Can't change "${i}" on ${e}'s rows: a key uses it, and rows are found by the primary key, which ${e} doesn't have`);await(0,_updateEntity.updateEntity)(e,{[i]:void 0===a?null:a},{[e]:r.map((e=>e.data))})}else for(const e of r){const r=Object.assign({},e.data),o="function"==typeof a?a(e):a;void 0===o?delete r[i]:r[i]=o,await(0,_storage.writeJson)(`${t.path}/${e.fileName}`,r)}},addField=async(e,t,r)=>{if(t.definition.some((e=>e.name===r.name)))throw new Error(`Field "${r.name}" already exists on ${e}`);const i={...t,definition:[...t.definition,r]},a=await rowsOf(t);for(const t of a.filter((e=>has(e.data,r.name))))try{(0,_typeCheck.typeCheck)(r.type,t.data[r.name],r.nullable)}catch(i){throw new Error(`Can't add "${r.name}" to ${e}: row ${t.fileName} already holds a value for it that doesn't fit (${i.message})`)}const o=a.filter((e=>!has(e.data,r.name))),n=has(r,"default");if(o.length&&!r.optional&&!n&&!r.autoGenerate)throw new Error(`Can't add required field "${r.name}" to ${e}: its ${o.length} row(s) have no value for it (give it a default, or make it optional)`);return await writeRecord(e,i),r.autoGenerate?await setField(e,i,o,r.name,(()=>crypto.randomUUID())):n&&await setField(e,i,o,r.name,r.default),i},dropField=async(e,t,r)=>{(0,_knownFields.assertFieldsDefined)(e,t,[r],"alter");const i=keysUsing(t,r)[0];if(i)throw new Error(`Can't drop "${r}" from ${e}: its ${describeKey(i)} uses it`);const a=(await referencesTo(e,r))[0];if(a)throw new Error(`Can't drop "${r}" from ${e}: ${a.entity}'s foreign key "${a.key.fields[0]}" references it`);const o={...t,definition:t.definition.filter((e=>e.name!==r))};return await writeRecord(e,o),await setField(e,o,(await rowsOf(t)).filter((e=>has(e.data,r))),r,void 0),o},renameField=async(e,t,r,i)=>{if((0,_knownFields.assertFieldsDefined)(e,t,[r],"alter"),t.definition.some((e=>e.name===i)))throw new Error(`Can't rename "${r}" on ${e} to "${i}": a field of that name already exists`);const a=await referencesTo(e,r),o=t.keys.map((e=>{if(!e.fields.includes(r))return e;const t=e.fields.map((e=>e===r?i:e)),a=e.lookup&&e.lookup===(0,_parseCreate.keyLookup)(e.type,e.fields)?(0,_parseCreate.keyLookup)(e.type,t):e.lookup;return{...e,fields:t,lookup:a}})),n=t=>"foreign"!==t.type?t:{...t,references:(t.references||[]).map((t=>({...t,fields:t.fields.map((t=>t===`${e}.${r}`?`${e}.${i}`:t))})))},s={...t,definition:t.definition.map((e=>e.name===r?{...e,name:i}:e)),keys:o.map(n)};for(const[e,r]of t.keys.entries()){const i=o[e].lookup;r.lookup&&i!==r.lookup&&(0,_storage.fileExists)(`__indexes/${t.path}/${r.lookup}`)&&(await(0,_storage.writeJson)(`__indexes/${t.path}/${i}`,await(0,_storage.readJson)(`__indexes/${t.path}/${r.lookup}`)),await(0,_storage.removeFile)(`__indexes/${t.path}/${r.lookup}`))}await writeRecord(e,s);for(const t of a.filter((t=>t.entity!==e)))await(0,_storage.writeJson)(`${t.entity}.json`,{...t.record,keys:t.record.keys.map(n)});const d=(await rowsOf(t)).filter((e=>has(e.data,r)));d.length&&await(0,_packedTable.discardPacked)(t.path);for(const e of d){const a=Object.assign({},e.data);a[i]=a[r],delete a[r],await(0,_storage.writeJson)(`${t.path}/${e.fileName}`,a)}return s},modifyField=async(e,t,r)=>{(0,_knownFields.assertFieldsDefined)(e,t,[r.name],"alter");const i=t.definition.find((e=>e.name===r.name));if(i.type!==r.type)throw new Error(`Can't change the type of "${r.name}" on ${e} (${i.type} to ${r.type}): only optional, null and default can change`);if(Boolean(i.autoGenerate)!==Boolean(r.autoGenerate))throw new Error(`Can't change whether "${r.name}" on ${e} is auto: only optional, null and default can change`);const a={...t,definition:t.definition.map((e=>e.name===r.name?r:e))},o=await rowsOf(t),n=has(r,"default"),s=r.nullable?[]:o.filter((e=>null===e.data[r.name])),d=r.optional?[]:o.filter((e=>!has(e.data,r.name))),l=r.optional?[]:s;if((d.length||l.length)&&!n)throw d.length?new Error(`Can't make "${r.name}" required on ${e}: ${d.length} row(s) have no value for it (give it a default to fill them in)`):new Error(`Can't make "${r.name}" not null on ${e}: ${l.length} row(s) hold null (give it a default to fill them in, or make it optional)`);return await writeRecord(e,a),n&&await setField(e,a,[...d,...l],r.name,r.default),r.optional&&s.length&&await setField(e,a,s,r.name,void 0),a},alter=async(e,t)=>{if((0,_requireNode.requireNode)("alter"),"__RECORDS"===e)throw new Error("__RECORDS is reserved for the list of records");const r=[e,..."field"in t?[t.field?.name]:[],..."name"in t?[t.name]:[],..."to"in t?[t.to]:[]],i=r.findIndex((e=>"string"!=typeof e||!_parseCreate.nameMatch.test(e)));if(-1!==i)throw new Error(`Invalid name ${JSON.stringify(r[i])??"undefined"} in alter: names use letters, digits, _ and - only`);const a=await(0,_retrieveRecord.retrieveRecord)(e);switch(t.action){case"add":return(await addField(e,a,(0,_field.field)(t.field))).definition;case"drop":return(await dropField(e,a,t.name)).definition;case"rename":return(await renameField(e,a,t.name,t.to)).definition;case"modify":return(await modifyField(e,a,(0,_field.field)(t.field))).definition;default:throw new Error(`Unknown alter action: ${t.action}`)}};exports.alter=alter;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.alter=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js");var _field=require("./definitions/field"),_create=require("./create"),_parseCreate=require("../utilities/parsers/parseCreate"),_retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFiles=require("../utilities/retrieveFiles"),_retrieveRecords=require("../utilities/retrieveRecords"),_knownFields=require("../utilities/knownFields"),_packedTable=require("../utilities/packedTable"),_requireNode=require("../utilities/requireNode"),_showRecords=require("../queries/showRecords"),_updateEntity=require("../queries/updateEntity"),_typeCheck=require("./policies/typeCheck"),_storage=require("../storage");const rowsOf=async e=>(await(0,_retrieveFiles.retrieveFiles)(e.entries.map((t=>`${e.path}/${t}`)),_retrieveRecords.retrieveEntry)).map(((t,i)=>({fileName:e.entries[i],data:t}))),has=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),keysUsing=(e,t)=>e.keys.filter((e=>e.fields.includes(t))),describeKey=e=>`${e.type} key (${e.fields.join(", ")})`,referencesTo=async(e,t)=>{const i=[];for(const r of await(0,_showRecords.showRecords)()){const a=await(0,_retrieveRecord.retrieveRecord)(r);for(const n of a.keys)"foreign"===n.type&&(n.references||[]).some((i=>i.fields.includes(`${e}.${t}`)))&&i.push({entity:r,record:a,key:n})}return i},writeRecord=async(e,t)=>{(0,_create.assertValidDefinition)(e,t),await(0,_storage.writeJson)(`${e}.json`,t)},setField=async(e,t,i,r,a)=>{if(i.length)if(await(0,_packedTable.discardPacked)(t.path),keysUsing(t,r).length&&"function"!=typeof a){if(!t.keys.some((e=>"primary"===e.type)))throw new Error(`Can't change "${r}" on ${e}'s rows: a key uses it, and rows are found by the primary key, which ${e} doesn't have`);await(0,_updateEntity.updateEntity)(e,{[r]:void 0===a?null:a},{[e]:i.map((e=>e.data))})}else for(const e of i){const i=Object.assign({},e.data),n="function"==typeof a?a(e):a;void 0===n?delete i[r]:i[r]=n,await(0,_storage.writeJson)(`${t.path}/${e.fileName}`,i)}},addField=async(e,t,i)=>{if(t.definition.some((e=>e.name===i.name)))throw new Error(`Field "${i.name}" already exists on ${e}`);const r={...t,definition:[...t.definition,i]},a=await rowsOf(t);for(const t of a.filter((e=>has(e.data,i.name))))try{(0,_typeCheck.typeCheck)(i.type,t.data[i.name],i.nullable)}catch(r){throw new Error(`Can't add "${i.name}" to ${e}: row ${t.fileName} already holds a value for it that doesn't fit (${r.message})`)}const n=a.filter((e=>!has(e.data,i.name))),o=has(i,"default");if(n.length&&!i.optional&&!o&&!i.autoGenerate)throw new Error(`Can't add required field "${i.name}" to ${e}: its ${n.length} row(s) have no value for it (give it a default, or make it optional)`);return await writeRecord(e,r),i.autoGenerate?await setField(e,r,n,i.name,(()=>crypto.randomUUID())):o&&await setField(e,r,n,i.name,i.default),r},dropField=async(e,t,i)=>{(0,_knownFields.assertFieldsDefined)(e,t,[i],"alter");const r=keysUsing(t,i)[0];if(r)throw new Error(`Can't drop "${i}" from ${e}: its ${describeKey(r)} uses it`);const a=(await referencesTo(e,i))[0];if(a)throw new Error(`Can't drop "${i}" from ${e}: ${a.entity}'s foreign key "${a.key.fields[0]}" references it`);const n={...t,definition:t.definition.filter((e=>e.name!==i))};return await writeRecord(e,n),await setField(e,n,(await rowsOf(t)).filter((e=>has(e.data,i))),i,void 0),n},renameField=async(e,t,i,r)=>{if((0,_knownFields.assertFieldsDefined)(e,t,[i],"alter"),t.definition.some((e=>e.name===r)))throw new Error(`Can't rename "${i}" on ${e} to "${r}": a field of that name already exists`);const a=await referencesTo(e,i),n=t.keys.map((e=>{if(!e.fields.includes(i))return e;const t=e.fields.map((e=>e===i?r:e)),a=e.lookup&&e.lookup===(0,_parseCreate.keyLookup)(e.type,e.fields)?(0,_parseCreate.keyLookup)(e.type,t):e.lookup;return{...e,fields:t,lookup:a}})),o=t=>"foreign"!==t.type?t:{...t,references:(t.references||[]).map((t=>({...t,fields:t.fields.map((t=>t===`${e}.${i}`?`${e}.${r}`:t))})))},s={...t,definition:t.definition.map((e=>e.name===i?{...e,name:r}:e)),keys:n.map(o)};for(const[e,i]of t.keys.entries()){const r=n[e].lookup;i.lookup&&r!==i.lookup&&(0,_storage.fileExists)(`__indexes/${t.path}/${i.lookup}`)&&(await(0,_storage.writeJson)(`__indexes/${t.path}/${r}`,await(0,_storage.readJson)(`__indexes/${t.path}/${i.lookup}`)),await(0,_storage.removeFile)(`__indexes/${t.path}/${i.lookup}`))}await writeRecord(e,s);for(const t of a.filter((t=>t.entity!==e)))await(0,_storage.writeJson)(`${t.entity}.json`,{...t.record,keys:t.record.keys.map(o)});const d=(await rowsOf(t)).filter((e=>has(e.data,i)));d.length&&await(0,_packedTable.discardPacked)(t.path);for(const e of d){const a=Object.assign({},e.data);a[r]=a[i],delete a[i],await(0,_storage.writeJson)(`${t.path}/${e.fileName}`,a)}return s},modifyField=async(e,t,i)=>{(0,_knownFields.assertFieldsDefined)(e,t,[i.name],"alter");const r=t.definition.find((e=>e.name===i.name));if(r.type!==i.type)throw new Error(`Can't change the type of "${i.name}" on ${e} (${r.type} to ${i.type}): only optional, null and default can change`);if(Boolean(r.autoGenerate)!==Boolean(i.autoGenerate))throw new Error(`Can't change whether "${i.name}" on ${e} is auto: only optional, null and default can change`);const a={...t,definition:t.definition.map((e=>e.name===i.name?i:e))},n=await rowsOf(t),o=has(i,"default"),s=i.nullable?[]:n.filter((e=>null===e.data[i.name])),d=i.optional?[]:n.filter((e=>!has(e.data,i.name))),l=i.optional?[]:s;if((d.length||l.length)&&!o)throw d.length?new Error(`Can't make "${i.name}" required on ${e}: ${d.length} row(s) have no value for it (give it a default to fill them in)`):new Error(`Can't make "${i.name}" not null on ${e}: ${l.length} row(s) hold null (give it a default to fill them in, or make it optional)`);return await writeRecord(e,a),o&&await setField(e,a,[...d,...l],i.name,i.default),i.optional&&s.length&&await setField(e,a,s,i.name,void 0),a},alter=async(e,t)=>{if((0,_requireNode.requireNode)("alter"),"__RECORDS"===e)throw new Error("__RECORDS is reserved for the list of records");const i=[e,..."field"in t?[t.field?.name]:[],..."name"in t?[t.name]:[],..."to"in t?[t.to]:[]],r=i.findIndex((e=>"string"!=typeof e||!_parseCreate.nameMatch.test(e)));if(-1!==r)throw new Error(`Invalid name ${JSON.stringify(i[r])??"undefined"} in alter: names use letters, digits, _ and - only`);const a=await(0,_retrieveRecord.retrieveRecord)(e);switch(t.action){case"add":return(await addField(e,a,(0,_field.field)(t.field))).definition;case"drop":return(await dropField(e,a,t.name)).definition;case"rename":return(await renameField(e,a,t.name,t.to)).definition;case"modify":return(await modifyField(e,a,(0,_field.field)(t.field))).definition;default:throw new Error(`Unknown alter action: ${t.action}`)}};exports.alter=alter;
@@ -5,10 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.create = exports.assertValidDefinition = 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.find.js");
11
- require("core-js/modules/esnext.iterator.some.js");
12
8
  var _record = require("./definitions/record");
13
9
  var _registerRecord = require("../utilities/registerRecord");
14
10
  var _storage = require("../storage");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.create=exports.assertValidDefinition=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.find.js"),require("core-js/modules/esnext.iterator.some.js");var _record=require("./definitions/record"),_registerRecord=require("../utilities/registerRecord"),_storage=require("../storage"),_requireNode=require("../utilities/requireNode"),_typeCheck=require("./policies/typeCheck");const knownKeyProperties=["type","fields","lookup","references"],assertKnownKeyProperties=(e,r)=>{for(const o of r)for(const r of Object.keys(o))if(!knownKeyProperties.includes(r))throw new Error(`Unknown property "${r}" on ${o.type??"index"} key of ${e}; must be ${knownKeyProperties.join(", ")}`)},assertValidDefinition=(e,r)=>{for(const o of r.definition)if(Object.prototype.hasOwnProperty.call(o,"default"))try{(0,_typeCheck.typeCheck)(o.type,o.default,o.nullable)}catch(r){throw new Error(`Invalid default for field "${o.name}" of ${e}: ${r.message}`)}for(const o of r.keys){if(o.fields.length<1)throw new Error(`The ${o.type} key of ${e} must have at least one field`);for(const t of o.fields)if(!r.definition.some((e=>e.name===t)))throw new Error(`The ${o.type} key of ${e} names field "${t}", which isn't in the definition`)}const o=r.keys.find((e=>"primary"===e.type));for(const t of o?o.fields:[]){const o=r.definition.find((e=>e.name===t));if(o&&o.nullable)throw new Error(`Primary key field "${t}" of ${e} can't be nullable`);if(o&&o.optional&&!o.autoGenerate)throw new Error(`Primary key field "${t}" of ${e} can't be optional`)}};exports.assertValidDefinition=assertValidDefinition;const create=async(e,r=[],o=[])=>{if((0,_requireNode.requireNode)("create()"),"__RECORDS"===e)return null;if((0,_storage.fileExists)(`${e}.json`))return null;assertKnownKeyProperties(e,o);const t=(0,_record.record)({path:e,definition:r,keys:o});assertValidDefinition(e,t),await(0,_storage.makeDirectory)(),await(0,_storage.writeJson)(`${e}.json`,t),await(0,_storage.makeDirectory)(e);const i=t.keys.filter((e=>e.lookup));if(i.length){await(0,_storage.makeDirectory)(`__indexes/${e}`);for(const r of i)await(0,_storage.writeJson)(`__indexes/${e}/${r.lookup}`,[])}return await(0,_registerRecord.registerRecord)(e),t};exports.create=create;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.create=exports.assertValidDefinition=void 0,require("core-js/modules/es.array.includes.js");var _record=require("./definitions/record"),_registerRecord=require("../utilities/registerRecord"),_storage=require("../storage"),_requireNode=require("../utilities/requireNode"),_typeCheck=require("./policies/typeCheck");const knownKeyProperties=["type","fields","lookup","references"],assertKnownKeyProperties=(e,r)=>{for(const o of r)for(const r of Object.keys(o))if(!knownKeyProperties.includes(r))throw new Error(`Unknown property "${r}" on ${o.type??"index"} key of ${e}; must be ${knownKeyProperties.join(", ")}`)},assertValidDefinition=(e,r)=>{for(const o of r.definition)if(Object.prototype.hasOwnProperty.call(o,"default"))try{(0,_typeCheck.typeCheck)(o.type,o.default,o.nullable)}catch(r){throw new Error(`Invalid default for field "${o.name}" of ${e}: ${r.message}`)}for(const o of r.keys){if(o.fields.length<1)throw new Error(`The ${o.type} key of ${e} must have at least one field`);for(const t of o.fields)if(!r.definition.some((e=>e.name===t)))throw new Error(`The ${o.type} key of ${e} names field "${t}", which isn't in the definition`)}const o=r.keys.find((e=>"primary"===e.type));for(const t of o?o.fields:[]){const o=r.definition.find((e=>e.name===t));if(o&&o.nullable)throw new Error(`Primary key field "${t}" of ${e} can't be nullable`);if(o&&o.optional&&!o.autoGenerate)throw new Error(`Primary key field "${t}" of ${e} can't be optional`)}};exports.assertValidDefinition=assertValidDefinition;const create=async(e,r=[],o=[])=>{if((0,_requireNode.requireNode)("create()"),"__RECORDS"===e)return null;if((0,_storage.fileExists)(`${e}.json`))return null;assertKnownKeyProperties(e,o);const t=(0,_record.record)({path:e,definition:r,keys:o});assertValidDefinition(e,t),await(0,_storage.makeDirectory)(),await(0,_storage.writeJson)(`${e}.json`,t),await(0,_storage.makeDirectory)(e);const i=t.keys.filter((e=>e.lookup));if(i.length){await(0,_storage.makeDirectory)(`__indexes/${e}`);for(const r of i)await(0,_storage.writeJson)(`__indexes/${e}/${r.lookup}`,[])}return await(0,_registerRecord.registerRecord)(e),t};exports.create=create;
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.key = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.map.js");
9
7
  var _keyReference = require("./keyReference");
10
8
  /**
11
9
  * Create a field key.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.key=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js");var _keyReference=require("./keyReference");const key=({type:e="index",fields:r=[],lookup:t="",references:o=[]}={})=>{switch(e){case"primary":case"index":case"unique":o=[];break;case"multi":if(r.length<2)throw new Error("Multi key indicated with less than two fields");break;case"foreign":if(o.length<1)throw new Error("Foreign key must have one reference to an external record");break;default:throw new Error("Unrecognized key type; must be index, primary, unique, multi, or foreign")}const n={type:e,fields:r,lookup:t};return void 0!==o&&o.length>0&&(n.references=o.map(_keyReference.keyReference)),n};exports.key=key;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.key=void 0;var _keyReference=require("./keyReference");const key=({type:e="index",fields:r=[],lookup:n="",references:t=[]}={})=>{switch(e){case"primary":case"index":case"unique":t=[];break;case"multi":if(r.length<2)throw new Error("Multi key indicated with less than two fields");break;case"foreign":if(t.length<1)throw new Error("Foreign key must have one reference to an external record");break;default:throw new Error("Unrecognized key type; must be index, primary, unique, multi, or foreign")}const i={type:e,fields:r,lookup:n};return void 0!==t&&t.length>0&&(i.references=t.map(_keyReference.keyReference)),i};exports.key=key;
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.record = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.map.js");
9
7
  var _field = require("./field");
10
8
  var _key = require("./key");
11
9
  /**
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.record=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js");var _field=require("./field"),_key=require("./key");const record=({path:e="",definition:r=[],keys:t=[],entries:i=[]}={})=>({path:e,definition:r.map(_field.field),keys:t.map(_key.key),entries:i});exports.record=record;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.record=void 0;var _field=require("./field"),_key=require("./key");const record=({path:e="",definition:r=[],keys:i=[],entries:t=[]}={})=>({path:e,definition:r.map(_field.field),keys:i.map(_key.key),entries:t});exports.record=record;
@@ -1,9 +1,5 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/esnext.async-iterator.constructor.js");
4
- require("core-js/modules/esnext.async-iterator.drop.js");
5
- require("core-js/modules/esnext.iterator.constructor.js");
6
- require("core-js/modules/esnext.iterator.drop.js");
7
3
  Object.defineProperty(exports, "__esModule", {
8
4
  value: true
9
5
  });
@@ -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"),_requireNode=require("../utilities/requireNode"),_storage=require("../storage"),_packedTable=require("../utilities/packedTable");const drop=async e=>{if((0,_requireNode.requireNode)("drop()"),"__RECORDS"===e)return null;const r=await(0,_retrieveFile.retrieveFile)(`${e}.json`);for(const e of r.entries)await(0,_storage.removeFile)(`${r.path}/${e}`);await(0,_storage.removeDirectory)(r.path),await(0,_storage.removeDirectory)(`__indexes/${r.path}`),await(0,_packedTable.discardPacked)(r.path),await(0,_storage.removeFile)(`${e}.json`),await(0,_deregisterRecord.deregisterRecord)(e)};exports.drop=drop;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.drop=void 0;var _retrieveFile=require("../utilities/retrieveFile"),_deregisterRecord=require("../utilities/deregisterRecord"),_requireNode=require("../utilities/requireNode"),_storage=require("../storage"),_packedTable=require("../utilities/packedTable");const drop=async e=>{if((0,_requireNode.requireNode)("drop()"),"__RECORDS"===e)return null;const r=await(0,_retrieveFile.retrieveFile)(`${e}.json`);for(const e of r.entries)await(0,_storage.removeFile)(`${r.path}/${e}`);await(0,_storage.removeDirectory)(r.path),await(0,_storage.removeDirectory)(`__indexes/${r.path}`),await(0,_packedTable.discardPacked)(r.path),await(0,_storage.removeFile)(`${e}.json`),await(0,_deregisterRecord.deregisterRecord)(e)};exports.drop=drop;
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.formatDatabase = 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
  var _config = require("../utilities/config");
11
9
  var _requireNode = require("../utilities/requireNode");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatDatabase=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js");var _storage=require("../storage"),_config=require("../utilities/config"),_requireNode=require("../utilities/requireNode");const formatDatabase=async(e=(0,_config.getSetting)("format","compact"))=>{if((0,_requireNode.requireNode)("formatDatabase"),"compact"!==e&&"pretty"!==e)throw new Error(`Unknown format "${e}": use 'compact' or 'pretty'`);const t=(await(0,_storage.listFiles)()).filter((e=>e.endsWith(".json"))),r=[];for(const o of t){const t=await(0,_storage.readText)(o);let a;try{a=JSON.parse(t)}catch(e){throw new Error(`Could not format ${o}: ${e.message}`)}(0,_storage.jsonText)(a,e)!==t&&r.push({path:o,content:a})}for(const{path:t,content:o}of r)await(0,_storage.writeJson)(t,o,e);return{files:t.length,rewritten:r.length}};exports.formatDatabase=formatDatabase;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatDatabase=void 0;var _storage=require("../storage"),_config=require("../utilities/config"),_requireNode=require("../utilities/requireNode");const formatDatabase=async(t=(0,_config.getSetting)("format","compact"))=>{if((0,_requireNode.requireNode)("formatDatabase"),"compact"!==t&&"pretty"!==t)throw new Error(`Unknown format "${t}": use 'compact' or 'pretty'`);const e=(await(0,_storage.listFiles)()).filter((t=>t.endsWith(".json"))),r=[];for(const o of e){const e=await(0,_storage.readText)(o);let a;try{a=JSON.parse(e)}catch(t){throw new Error(`Could not format ${o}: ${t.message}`)}(0,_storage.jsonText)(a,t)!==e&&r.push({path:o,content:a})}for(const{path:e,content:o}of r)await(0,_storage.writeJson)(e,o,t);return{files:e.length,rewritten:r.length}};exports.formatDatabase=formatDatabase;
@@ -1,9 +1,5 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/esnext.async-iterator.constructor.js");
4
- require("core-js/modules/esnext.async-iterator.drop.js");
5
- require("core-js/modules/esnext.iterator.constructor.js");
6
- require("core-js/modules/esnext.iterator.drop.js");
7
3
  Object.defineProperty(exports, "__esModule", {
8
4
  value: true
9
5
  });
@@ -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.packDatabase=exports.formatDatabase=exports.drop=exports.describe=exports.create=exports.checkPacked=exports.alter=void 0;var _create=require("./create"),_drop=require("./drop"),_describe=require("./describe"),_formatDatabase=require("./formatDatabase"),_alter=require("./alter"),_packDatabase=require("./packDatabase"),_databaseLock=require("../utilities/databaseLock"),_storage=require("../storage");const create=(...e)=>(0,_databaseLock.withDatabaseLock)((()=>(0,_storage.withWriteSet)((()=>(0,_create.create)(...e)))));exports.create=create;const drop=(...e)=>(0,_databaseLock.withDatabaseLock)((()=>(0,_storage.withWriteSet)((()=>(0,_drop.drop)(...e)))));exports.drop=drop;const alter=(...e)=>(0,_databaseLock.withDatabaseLock)((()=>(0,_storage.withWriteSet)((()=>(0,_alter.alter)(...e)))));exports.alter=alter;const describe=(...e)=>(0,_databaseLock.withDatabaseLock)((()=>(0,_describe.describe)(...e)));exports.describe=describe;const formatDatabase=(...e)=>(0,_databaseLock.withDatabaseLock)((()=>(0,_storage.withWriteSet)((()=>(0,_formatDatabase.formatDatabase)(...e)))));exports.formatDatabase=formatDatabase;const packDatabase=()=>(0,_databaseLock.withDatabaseLock)((()=>(0,_storage.withWriteSet)((()=>(0,_packDatabase.packDatabase)()))));exports.packDatabase=packDatabase;const checkPacked=()=>(0,_databaseLock.withDatabaseLock)((()=>(0,_packDatabase.checkPacked)()));exports.checkPacked=checkPacked;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.packDatabase=exports.formatDatabase=exports.drop=exports.describe=exports.create=exports.checkPacked=exports.alter=void 0;var _create=require("./create"),_drop=require("./drop"),_describe=require("./describe"),_formatDatabase=require("./formatDatabase"),_alter=require("./alter"),_packDatabase=require("./packDatabase"),_databaseLock=require("../utilities/databaseLock"),_storage=require("../storage");const create=(...a)=>(0,_databaseLock.withDatabaseLock)((()=>(0,_storage.withWriteSet)((()=>(0,_create.create)(...a)))));exports.create=create;const drop=(...a)=>(0,_databaseLock.withDatabaseLock)((()=>(0,_storage.withWriteSet)((()=>(0,_drop.drop)(...a)))));exports.drop=drop;const alter=(...a)=>(0,_databaseLock.withDatabaseLock)((()=>(0,_storage.withWriteSet)((()=>(0,_alter.alter)(...a)))));exports.alter=alter;const describe=(...a)=>(0,_databaseLock.withDatabaseLock)((()=>(0,_describe.describe)(...a)));exports.describe=describe;const formatDatabase=(...a)=>(0,_databaseLock.withDatabaseLock)((()=>(0,_storage.withWriteSet)((()=>(0,_formatDatabase.formatDatabase)(...a)))));exports.formatDatabase=formatDatabase;const packDatabase=()=>(0,_databaseLock.withDatabaseLock)((()=>(0,_storage.withWriteSet)((()=>(0,_packDatabase.packDatabase)()))));exports.packDatabase=packDatabase;const checkPacked=()=>(0,_databaseLock.withDatabaseLock)((()=>(0,_packDatabase.checkPacked)()));exports.checkPacked=checkPacked;
@@ -5,25 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.packDatabase = exports.checkPacked = 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.filter.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
8
  var _storage = require("../storage");
28
9
  var _retrieveRecord = require("../utilities/retrieveRecord");
29
10
  var _retrieveFiles = require("../utilities/retrieveFiles");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.packDatabase=exports.checkPacked=void 0,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.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 _storage=require("../storage"),_retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFiles=require("../utilities/retrieveFiles"),_retrieveRecords=require("../utilities/retrieveRecords"),_packedTable=require("../utilities/packedTable"),_showRecords=require("../queries/showRecords"),_requireNode=require("../utilities/requireNode");const packedText=async e=>{const s=await(0,_retrieveRecord.retrieveRecord)(e),r=s.entries||[],t=await(0,_retrieveFiles.retrieveFiles)(r.map((e=>`${s.path}/${e}`)),_retrieveRecords.retrieveEntry),o={entries:r,rows:t};return{path:(0,_packedTable.packedPath)(s.path),text:(0,_storage.jsonText)(o,"compact"),rows:r.length}},orphanedPacks=async e=>{const s=new Set(e.map((e=>(0,_packedTable.packedPath)(e))));return(await(0,_storage.listFiles)("__packed")).filter((e=>!s.has(e)))},packDatabase=async()=>{(0,_requireNode.requireNode)("packDatabase");const e=await(0,_showRecords.showRecords)();let s=0;for(const r of e){const e=await packedText(r);await(0,_storage.makeDirectory)(e.path.slice(0,e.path.lastIndexOf("/"))),await(0,_storage.writeJson)(e.path,JSON.parse(e.text),"compact"),s+=e.rows}for(const s of await orphanedPacks(e))await(0,_storage.removeFile)(s);return{records:e.length,rows:s}};exports.packDatabase=packDatabase;const checkPacked=async()=>{(0,_requireNode.requireNode)("checkPacked");const e=await(0,_showRecords.showRecords)(),s=[];for(const r of e){const e=await packedText(r),t=(0,_storage.fileExists)(e.path)?await(0,_storage.readText)(e.path).catch((()=>{})):void 0;void 0!==t&&JSON.stringify(JSON.parse(t))===e.text||s.push(r)}return{stale:s,orphaned:await orphanedPacks(e)}};exports.checkPacked=checkPacked;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.packDatabase=exports.checkPacked=void 0,require("core-js/modules/es.json.stringify.js");var _storage=require("../storage"),_retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFiles=require("../utilities/retrieveFiles"),_retrieveRecords=require("../utilities/retrieveRecords"),_packedTable=require("../utilities/packedTable"),_showRecords=require("../queries/showRecords"),_requireNode=require("../utilities/requireNode");const packedText=async e=>{const r=await(0,_retrieveRecord.retrieveRecord)(e),t=r.entries||[],a=await(0,_retrieveFiles.retrieveFiles)(t.map((e=>`${r.path}/${e}`)),_retrieveRecords.retrieveEntry),s={entries:t,rows:a};return{path:(0,_packedTable.packedPath)(r.path),text:(0,_storage.jsonText)(s,"compact"),rows:t.length}},orphanedPacks=async e=>{const r=new Set(e.map((e=>(0,_packedTable.packedPath)(e))));return(await(0,_storage.listFiles)("__packed")).filter((e=>!r.has(e)))},packDatabase=async()=>{(0,_requireNode.requireNode)("packDatabase");const e=await(0,_showRecords.showRecords)();let r=0;for(const t of e){const e=await packedText(t);await(0,_storage.makeDirectory)(e.path.slice(0,e.path.lastIndexOf("/"))),await(0,_storage.writeJson)(e.path,JSON.parse(e.text),"compact"),r+=e.rows}for(const r of await orphanedPacks(e))await(0,_storage.removeFile)(r);return{records:e.length,rows:r}};exports.packDatabase=packDatabase;const checkPacked=async()=>{(0,_requireNode.requireNode)("checkPacked");const e=await(0,_showRecords.showRecords)(),r=[];for(const t of e){const e=await packedText(t),a=(0,_storage.fileExists)(e.path)?await(0,_storage.readText)(e.path).catch((()=>{})):void 0;void 0!==a&&JSON.stringify(JSON.parse(a))===e.text||r.push(t)}return{stale:r,orphaned:await orphanedPacks(e)}};exports.checkPacked=checkPacked;
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createRecord = 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.map.js");
10
8
  var _create = require("../introspect/create");
11
9
  var _retrieveRecord = require("../utilities/retrieveRecord");
12
10
  var _splitEntityProperty = require("../utilities/parsers/splitEntityProperty");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRecord=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js");var _create=require("../introspect/create"),_retrieveRecord=require("../utilities/retrieveRecord"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_recordExists=require("../utilities/recordExists");const assertReferencesExist=async(e,r)=>{for(const t of r.keys){if("foreign"!==t.type)continue;const{entity:i,property:s}=(0,_splitEntityProperty.splitEntityProperty)(t.references[0].fields[0]);let o=r.definition.map((e=>e.name));if(i!==e){if(!(0,_recordExists.recordExists)(i))throw new Error(`Foreign key "${t.fields[0]}" references "${i}", which doesn't exist`);o=(await(0,_retrieveRecord.retrieveRecord)(i)).definition.map((e=>e.name))}if(!o.includes(s))throw new Error(`Foreign key "${t.fields[0]}" references "${i}.${s}", which is not a field`)}},createRecord=async(e,r)=>{if((0,_recordExists.recordExists)(e)){if(r.ifNotExists)return null;throw new Error(`Record "${e}" already exists`)}return await assertReferencesExist(e,r),(0,_create.create)(e,r.definition,r.keys)};exports.createRecord=createRecord;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRecord=void 0,require("core-js/modules/es.array.includes.js");var _create=require("../introspect/create"),_retrieveRecord=require("../utilities/retrieveRecord"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_recordExists=require("../utilities/recordExists");const assertReferencesExist=async(e,r)=>{for(const t of r.keys){if("foreign"!==t.type)continue;const{entity:i,property:s}=(0,_splitEntityProperty.splitEntityProperty)(t.references[0].fields[0]);let o=r.definition.map((e=>e.name));if(i!==e){if(!(0,_recordExists.recordExists)(i))throw new Error(`Foreign key "${t.fields[0]}" references "${i}", which doesn't exist`);o=(await(0,_retrieveRecord.retrieveRecord)(i)).definition.map((e=>e.name))}if(!o.includes(s))throw new Error(`Foreign key "${t.fields[0]}" references "${i}.${s}", which is not a field`)}},createRecord=async(e,r)=>{if((0,_recordExists.recordExists)(e)){if(r.ifNotExists)return null;throw new Error(`Record "${e}" already exists`)}return await assertReferencesExist(e,r),(0,_create.create)(e,r.definition,r.keys)};exports.createRecord=createRecord;
@@ -1,13 +1,10 @@
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.useDatabase = exports.showDatabases = exports.dropDatabase = exports.createDatabase = void 0;
8
7
  require("core-js/modules/es.array.includes.js");
9
- require("core-js/modules/esnext.iterator.constructor.js");
10
- require("core-js/modules/esnext.iterator.filter.js");
11
8
  var jsEnv = _interopRequireWildcard(require("browser-or-node"));
12
9
  var _config = require("../utilities/config");
13
10
  var _requireNode = require("../utilities/requireNode");
@@ -1 +1 @@
1
- "use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.useDatabase=exports.showDatabases=exports.dropDatabase=exports.createDatabase=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");var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("../utilities/config"),_requireNode=require("../utilities/requireNode"),_databaseLock=require("../utilities/databaseLock"),_storage=require("../storage");function _interopRequireWildcard(a,t){if(!t&&a&&a.__esModule)return a;var s,r,i=Object.defineProperty,o={__proto__:null,default:a};if(Object(a)!==a)return o;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(a))return e.get(a);e.set(a,o)}for(r in a)"default"!==r&&{}.hasOwnProperty.call(a,r)&&((s=i&&Object.getOwnPropertyDescriptor(a,r))&&(s.get||s.set)?i(o,r,s):o[r]=a[r]);return o}const databaseExists=async e=>(await(0,_storage.readDatabaseList)()).includes(e)||jsEnv.isNode&&(0,_storage.databaseFolderExists)(e),createDatabase=async(e,a=!1)=>{(0,_requireNode.requireNode)('"create database"');const t=await(0,_storage.readDatabaseList)();if(t.includes(e)||(0,_storage.databaseFolderExists)(e)){if(!a)throw new Error(t.includes(e)?`Database "${e}" already exists`:`Database "${e}" already exists as a folder that isn't listed: create database if not exists ${e} lists it`);return t.includes(e)||await(0,_storage.writeDatabaseList)([...t,e]),null}return await(0,_storage.writeDatabaseList)([...t,e]),await(0,_storage.makeDatabaseFolder)(e),e};exports.createDatabase=createDatabase;const dropDatabase=async(e,a=!1)=>{if((0,_requireNode.requireNode)('"drop database"'),!await databaseExists(e)){if(a)return null;throw new Error(`Database "${e}" doesn't exist`)}if((0,_config.getSetting)("database",void 0)===e)throw new Error(`Can't drop the database in use ("${e}"): use another one first`);return await(0,_storage.writeDatabaseList)((await(0,_storage.readDatabaseList)()).filter((a=>a!==e))),await(0,_storage.removeDatabaseFolder)(e),e};exports.dropDatabase=dropDatabase;const useDatabase=async e=>{if(!jsEnv.isNode&&(0,_databaseLock.browserCallsRunning)()>1)throw new Error(`Can't use "${e}" while other calls are running in this page: await them first, or pick the database with configure({ database }) between calls`);if(!await databaseExists(e))throw new Error(`Database "${e}" doesn't exist${jsEnv.isNode?"":" (or isn't listed in __DATABASES.json)"}`);return(0,_config.switchDatabase)(e),e};exports.useDatabase=useDatabase;const showDatabases=async()=>(0,_storage.readDatabaseList)();exports.showDatabases=showDatabases;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useDatabase=exports.showDatabases=exports.dropDatabase=exports.createDatabase=void 0,require("core-js/modules/es.array.includes.js");var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("../utilities/config"),_requireNode=require("../utilities/requireNode"),_databaseLock=require("../utilities/databaseLock"),_storage=require("../storage");function _interopRequireWildcard(a,t){if(!t&&a&&a.__esModule)return a;var s,r,i=Object.defineProperty,o={__proto__:null,default:a};if(Object(a)!==a)return o;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(a))return e.get(a);e.set(a,o)}for(r in a)"default"!==r&&{}.hasOwnProperty.call(a,r)&&((s=i&&Object.getOwnPropertyDescriptor(a,r))&&(s.get||s.set)?i(o,r,s):o[r]=a[r]);return o}const databaseExists=async e=>(await(0,_storage.readDatabaseList)()).includes(e)||jsEnv.isNode&&(0,_storage.databaseFolderExists)(e),createDatabase=async(e,a=!1)=>{(0,_requireNode.requireNode)('"create database"');const t=await(0,_storage.readDatabaseList)();if(t.includes(e)||(0,_storage.databaseFolderExists)(e)){if(!a)throw new Error(t.includes(e)?`Database "${e}" already exists`:`Database "${e}" already exists as a folder that isn't listed: create database if not exists ${e} lists it`);return t.includes(e)||await(0,_storage.writeDatabaseList)([...t,e]),null}return await(0,_storage.writeDatabaseList)([...t,e]),await(0,_storage.makeDatabaseFolder)(e),e};exports.createDatabase=createDatabase;const dropDatabase=async(e,a=!1)=>{if((0,_requireNode.requireNode)('"drop database"'),!await databaseExists(e)){if(a)return null;throw new Error(`Database "${e}" doesn't exist`)}if((0,_config.getSetting)("database",void 0)===e)throw new Error(`Can't drop the database in use ("${e}"): use another one first`);return await(0,_storage.writeDatabaseList)((await(0,_storage.readDatabaseList)()).filter((a=>a!==e))),await(0,_storage.removeDatabaseFolder)(e),e};exports.dropDatabase=dropDatabase;const useDatabase=async e=>{if(!jsEnv.isNode&&(0,_databaseLock.browserCallsRunning)()>1)throw new Error(`Can't use "${e}" while other calls are running in this page: await them first, or pick the database with configure({ database }) between calls`);if(!await databaseExists(e))throw new Error(`Database "${e}" doesn't exist${jsEnv.isNode?"":" (or isn't listed in __DATABASES.json)"}`);return(0,_config.switchDatabase)(e),e};exports.useDatabase=useDatabase;const showDatabases=async()=>(0,_storage.readDatabaseList)();exports.showDatabases=showDatabases;
@@ -4,26 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.deleteEntity = 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.find.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 _retrieveRecord = require("../utilities/retrieveRecord");
28
8
  var _retrieveFile = require("../utilities/retrieveFile");
29
9
  var _removeFromIndex = require("../utilities/removeFromIndex");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deleteEntity=void 0,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.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 _retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFile=require("../utilities/retrieveFile"),_removeFromIndex=require("../utilities/removeFromIndex"),_computeKeyValue=require("../utilities/computeKeyValue"),_fieldType=require("../utilities/fieldType"),_hasDependents=require("../introspect/policies/hasDependents"),_config=require("../utilities/config"),_keyIndexFiles=require("../utilities/keyIndexFiles"),_storage=require("../storage"),_packedTable=require("../utilities/packedTable");const assertNoDependents=async(e,r,s)=>{if(!(0,_config.getSetting)("enforceForeignKeys",!0)||1!==r.fields.length)return;const t=r.fields[0];for(const r of s)if(await(0,_hasDependents.hasDependents)(e,t,r[t]))throw new Error(`Cannot delete from "${e}" where "${t}" = ${r[t]} - other records still reference it`)},removeMatchingEntries=async(e,r,s,t)=>{const i=new Set,o=new Set,n=async e=>{const n=await(0,_retrieveFile.retrieveFile)(`${r.path}/${e}`),u=(0,_computeKeyValue.computeKeyValue)(s.fields,n);if(t.has(u)){await(0,_storage.removeFile)(`${r.path}/${e}`);for(const s of r.keys)await(0,_removeFromIndex.removeFromIndex)(r.path,s,(0,_computeKeyValue.computeKeyValue)(s.fields,n),e,(0,_fieldType.keyValueType)(r,s));i.add(e),o.add(u)}};for(const e of await(0,_keyIndexFiles.keyIndexFiles)(r,s,(e=>t.has(e)))??[])await n(e);if(o.size<t.size)for(const e of r.entries.filter((e=>!i.has(e))))await n(e);return r.entries.filter((e=>!i.has(e)))},deleteEntity=async(e="",r={})=>{const s=await(0,_retrieveRecord.retrieveRecord)(e),t=s.keys.find((e=>"primary"===e.type));if(!t)throw new Error(`Cannot delete from "${e}" without a primary key`);const i=r[e]||[];if(!i.length)return r;await assertNoDependents(e,t,i);const o=new Set(i.map((e=>(0,_computeKeyValue.computeKeyValue)(t.fields,e)))),n=await removeMatchingEntries(0,s,t,o);return n.length!==s.entries.length&&await(0,_packedTable.discardPacked)(s.path),s.entries=n,await(0,_storage.writeJson)(`${s.path}.json`,s),r};exports.deleteEntity=deleteEntity;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deleteEntity=void 0;var _retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFile=require("../utilities/retrieveFile"),_removeFromIndex=require("../utilities/removeFromIndex"),_computeKeyValue=require("../utilities/computeKeyValue"),_fieldType=require("../utilities/fieldType"),_hasDependents=require("../introspect/policies/hasDependents"),_config=require("../utilities/config"),_keyIndexFiles=require("../utilities/keyIndexFiles"),_storage=require("../storage"),_packedTable=require("../utilities/packedTable");const assertNoDependents=async(e,t,i)=>{if(!(0,_config.getSetting)("enforceForeignKeys",!0)||1!==t.fields.length)return;const r=t.fields[0];for(const t of i)if(await(0,_hasDependents.hasDependents)(e,r,t[r]))throw new Error(`Cannot delete from "${e}" where "${r}" = ${t[r]} - other records still reference it`)},removeMatchingEntries=async(e,t,i,r)=>{const s=new Set,a=new Set,n=async e=>{const n=await(0,_retrieveFile.retrieveFile)(`${t.path}/${e}`),o=(0,_computeKeyValue.computeKeyValue)(i.fields,n);if(r.has(o)){await(0,_storage.removeFile)(`${t.path}/${e}`);for(const i of t.keys)await(0,_removeFromIndex.removeFromIndex)(t.path,i,(0,_computeKeyValue.computeKeyValue)(i.fields,n),e,(0,_fieldType.keyValueType)(t,i));s.add(e),a.add(o)}};for(const e of await(0,_keyIndexFiles.keyIndexFiles)(t,i,(e=>r.has(e)))??[])await n(e);if(a.size<r.size)for(const e of t.entries.filter((e=>!s.has(e))))await n(e);return t.entries.filter((e=>!s.has(e)))},deleteEntity=async(e="",t={})=>{const i=await(0,_retrieveRecord.retrieveRecord)(e),r=i.keys.find((e=>"primary"===e.type));if(!r)throw new Error(`Cannot delete from "${e}" without a primary key`);const s=t[e]||[];if(!s.length)return t;await assertNoDependents(e,r,s);const a=new Set(s.map((e=>(0,_computeKeyValue.computeKeyValue)(r.fields,e)))),n=await removeMatchingEntries(0,i,r,a);return n.length!==i.entries.length&&await(0,_packedTable.discardPacked)(i.path),i.entries=n,await(0,_storage.writeJson)(`${i.path}.json`,i),t};exports.deleteEntity=deleteEntity;
@@ -1,14 +1,9 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/esnext.async-iterator.constructor.js");
4
- require("core-js/modules/esnext.async-iterator.drop.js");
5
- require("core-js/modules/esnext.iterator.drop.js");
6
3
  Object.defineProperty(exports, "__esModule", {
7
4
  value: true
8
5
  });
9
6
  exports.dropRecord = void 0;
10
- require("core-js/modules/esnext.iterator.constructor.js");
11
- require("core-js/modules/esnext.iterator.some.js");
12
7
  var _drop = require("../introspect/drop");
13
8
  var _retrieveRecord = require("../utilities/retrieveRecord");
14
9
  var _recordExists = require("../utilities/recordExists");
@@ -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.drop.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.dropRecord=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.some.js");var _drop=require("../introspect/drop"),_retrieveRecord=require("../utilities/retrieveRecord"),_recordExists=require("../utilities/recordExists"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_config=require("../utilities/config");const assertNotReferenced=async e=>{if(!(0,_config.getSetting)("enforceForeignKeys",!0)||!(0,_recordExists.recordExists)("__RECORDS"))return;const r=await(0,_retrieveRecord.retrieveRecord)("__RECORDS");for(const t of r.entries){const r=t.replace(/\.json$/,"");if(r!==e&&(0,_recordExists.recordExists)(r))for(const t of(await(0,_retrieveRecord.retrieveRecord)(r)).keys)if("foreign"===t.type&&t.references&&t.references.some((r=>(0,_splitEntityProperty.splitEntityProperty)(r.fields[0]).entity===e)))throw new Error(`Cannot drop "${e}": ${r}.${t.fields.join(", ")} references it`)}},dropRecord=async(e,r)=>{if(!(0,_recordExists.recordExists)(e)){if(r)return null;throw new Error(`Record "${e}" doesn't exist`)}await assertNotReferenced(e);const t=await(0,_retrieveRecord.retrieveRecord)(e);return await(0,_drop.drop)(e),t};exports.dropRecord=dropRecord;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.dropRecord=void 0;var _drop=require("../introspect/drop"),_retrieveRecord=require("../utilities/retrieveRecord"),_recordExists=require("../utilities/recordExists"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_config=require("../utilities/config");const assertNotReferenced=async e=>{if(!(0,_config.getSetting)("enforceForeignKeys",!0)||!(0,_recordExists.recordExists)("__RECORDS"))return;const r=await(0,_retrieveRecord.retrieveRecord)("__RECORDS");for(const t of r.entries){const r=t.replace(/\.json$/,"");if(r!==e&&(0,_recordExists.recordExists)(r))for(const t of(await(0,_retrieveRecord.retrieveRecord)(r)).keys)if("foreign"===t.type&&t.references&&t.references.some((r=>(0,_splitEntityProperty.splitEntityProperty)(r.fields[0]).entity===e)))throw new Error(`Cannot drop "${e}": ${r}.${t.fields.join(", ")} references it`)}},dropRecord=async(e,r)=>{if(!(0,_recordExists.recordExists)(e)){if(r)return null;throw new Error(`Record "${e}" doesn't exist`)}await assertNotReferenced(e);const t=await(0,_retrieveRecord.retrieveRecord)(e);return await(0,_drop.drop)(e),t};exports.dropRecord=dropRecord;
@@ -5,22 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.groupBy = 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
- require("core-js/modules/esnext.iterator.reduce.js");
11
- require("core-js/modules/esnext.map.delete-all.js");
12
- require("core-js/modules/esnext.map.every.js");
13
- require("core-js/modules/esnext.map.filter.js");
14
- require("core-js/modules/esnext.map.find.js");
15
- require("core-js/modules/esnext.map.find-key.js");
16
- require("core-js/modules/esnext.map.includes.js");
17
- require("core-js/modules/esnext.map.key-of.js");
18
- require("core-js/modules/esnext.map.map-keys.js");
19
- require("core-js/modules/esnext.map.map-values.js");
20
- require("core-js/modules/esnext.map.merge.js");
21
- require("core-js/modules/esnext.map.reduce.js");
22
- require("core-js/modules/esnext.map.some.js");
23
- require("core-js/modules/esnext.map.update.js");
24
8
  // An object's keys in sorted order, at any depth, so { a, b } and { b, a } are the same value; arrays keep their order
25
9
  const sortedKeys = value => {
26
10
  if (Array.isArray(value)) {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.groupBy=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"),require("core-js/modules/esnext.iterator.reduce.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");const sortedKeys=e=>Array.isArray(e)?e.map(sortedKeys):null!==e&&"object"==typeof e?Object.keys(e).sort().reduce(((s,r)=>(s[r]=sortedKeys(e[r]),s)),{}):e,groupKey=(e,s)=>{if(!Object.prototype.hasOwnProperty.call(e,s))return"missing";const r=e[s];return null!==r&&"object"==typeof r?`json:${JSON.stringify(sortedKeys(r))}`:`${typeof r}:${String(r)}`},groupBy=(e=[],s=[])=>{if(!s.length)return e;const[r,...o]=s,t=new Map;for(const s of e){const e=groupKey(s,r);t.has(e)||t.set(e,"missing"===e?{field:r,missing:!0,rows:[]}:{field:r,value:s[r],rows:[]}),t.get(e).rows.push(s)}return[...t.values()].map((({rows:e,...s})=>o.length?{...s,groups:groupBy(e,o)}:{...s,rows:e}))};exports.groupBy=groupBy;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.groupBy=void 0,require("core-js/modules/es.json.stringify.js");const sortedKeys=e=>Array.isArray(e)?e.map(sortedKeys):null!==e&&"object"==typeof e?Object.keys(e).sort().reduce(((r,s)=>(r[s]=sortedKeys(e[s]),r)),{}):e,groupKey=(e,r)=>{if(!Object.prototype.hasOwnProperty.call(e,r))return"missing";const s=e[r];return null!==s&&"object"==typeof s?`json:${JSON.stringify(sortedKeys(s))}`:`${typeof s}:${String(s)}`},groupBy=(e=[],r=[])=>{if(!r.length)return e;const[s,...o]=r,t=new Map;for(const r of e){const e=groupKey(r,s);t.has(e)||t.set(e,"missing"===e?{field:s,missing:!0,rows:[]}:{field:s,value:r[s],rows:[]}),t.get(e).rows.push(r)}return[...t.values()].map((({rows:e,...r})=>o.length?{...r,groups:groupBy(e,o)}:{...r,rows:e}))};exports.groupBy=groupBy;
@@ -6,41 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.insertEntity = void 0;
7
7
  require("core-js/modules/es.array.includes.js");
8
8
  require("core-js/modules/es.json.stringify.js");
9
- require("core-js/modules/esnext.iterator.constructor.js");
10
- require("core-js/modules/esnext.iterator.every.js");
11
- require("core-js/modules/esnext.iterator.find.js");
12
- require("core-js/modules/esnext.iterator.for-each.js");
13
- require("core-js/modules/esnext.iterator.map.js");
14
- require("core-js/modules/esnext.iterator.some.js");
15
- require("core-js/modules/esnext.map.delete-all.js");
16
- require("core-js/modules/esnext.map.every.js");
17
- require("core-js/modules/esnext.map.filter.js");
18
- require("core-js/modules/esnext.map.find.js");
19
- require("core-js/modules/esnext.map.find-key.js");
20
- require("core-js/modules/esnext.map.includes.js");
21
- require("core-js/modules/esnext.map.key-of.js");
22
- require("core-js/modules/esnext.map.map-keys.js");
23
- require("core-js/modules/esnext.map.map-values.js");
24
- require("core-js/modules/esnext.map.merge.js");
25
- require("core-js/modules/esnext.map.reduce.js");
26
- require("core-js/modules/esnext.map.some.js");
27
- require("core-js/modules/esnext.map.update.js");
28
- require("core-js/modules/esnext.set.add-all.js");
29
- require("core-js/modules/esnext.set.delete-all.js");
30
- require("core-js/modules/esnext.set.difference.js");
31
- require("core-js/modules/esnext.set.every.js");
32
- require("core-js/modules/esnext.set.filter.js");
33
- require("core-js/modules/esnext.set.find.js");
34
- require("core-js/modules/esnext.set.intersection.js");
35
- require("core-js/modules/esnext.set.is-disjoint-from.js");
36
- require("core-js/modules/esnext.set.is-subset-of.js");
37
- require("core-js/modules/esnext.set.is-superset-of.js");
38
- require("core-js/modules/esnext.set.join.js");
39
- require("core-js/modules/esnext.set.map.js");
40
- require("core-js/modules/esnext.set.reduce.js");
41
- require("core-js/modules/esnext.set.some.js");
42
- require("core-js/modules/esnext.set.symmetric-difference.js");
43
- require("core-js/modules/esnext.set.union.js");
44
9
  var _retrieveRecord = require("../utilities/retrieveRecord");
45
10
  var _keyUnique = require("../introspect/policies/keyUnique");
46
11
  var _useDefault = require("../introspect/policies/useDefault");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.insertEntity=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.every.js"),require("core-js/modules/esnext.iterator.find.js"),require("core-js/modules/esnext.iterator.for-each.js"),require("core-js/modules/esnext.iterator.map.js"),require("core-js/modules/esnext.iterator.some.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 _retrieveRecord=require("../utilities/retrieveRecord"),_keyUnique=require("../introspect/policies/keyUnique"),_useDefault=require("../introspect/policies/useDefault"),_typeCheck=require("../introspect/policies/typeCheck"),_foreignKeyExists=require("../introspect/policies/foreignKeyExists"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_computeKeyValue=require("../utilities/computeKeyValue"),_fieldType=require("../utilities/fieldType"),_compareAs=require("../utilities/compareAs"),_retrieveRecords=require("../utilities/retrieveRecords"),_isSingleFieldKey=require("../utilities/isSingleFieldKey"),_indexBuffer=require("../utilities/indexBuffer"),_storage=require("../storage"),_packedTable=require("../utilities/packedTable"),_knownFields=require("../utilities/knownFields");class RowValues{constructor(e,s){this.seen=new Set,this.fields=s,this.types=s.map((s=>(0,_fieldType.fieldType)(e,s)))}static usable(e,s){return s.every((s=>_compareAs.comparableTypes.includes((0,_fieldType.fieldType)(e,s))))}keyOf(e){const s=[];for(let t=0;t<this.fields.length;t++){const r=e[this.fields[t]];if(null==r)return;const i=(0,_compareAs.compareAs)(this.types[t],r);if("object"==typeof i)return;s.push([typeof i,i])}return JSON.stringify(s)}add(e){const s=this.keyOf(e);void 0!==s&&this.seen.add(s)}has(e){const s=this.keyOf(e);return void 0!==s&&this.seen.has(s)}}class InsertStatement{constructor(e,s){this.rows=[],this.buffers=new Map,this.unreadable=new Set,this.otherLookups=new Map,this.scans=new Map,this.entity=e,this.record=s,this.hadEntries=(s.entries||[]).length>0}async load(){for(const e of this.record.keys){if(!e.lookup)continue;let s=[];try{s=await(0,_storage.readJson)(`__indexes/${this.record.path}/${e.lookup}`)}catch(s){this.unreadable.add(e)}this.buffers.set(e,new _indexBuffer.IndexBuffer(Array.isArray(s)?s:[],(0,_fieldType.keyValueType)(this.record,e)))}}ownLookup(e){const s=this.record.keys.find((s=>(0,_isSingleFieldKey.isSingleFieldKey)(s,e)&&s.lookup));if(!s||this.unreadable.has(s))return()=>{};const t=this.buffers.get(s);return e=>(this.hadEntries||this.rows.length>0)&&t.has(e)}otherLookup(e,s){const t=`${e}\0${s}`;return this.otherLookups.has(t)||this.otherLookups.set(t,(async()=>{const t=await(0,_retrieveRecord.retrieveRecord)(e),r=t.keys.find((e=>(0,_isSingleFieldKey.isSingleFieldKey)(e,s)&&e.lookup));if(!r)return()=>{};if(!(t.entries||[]).length)return()=>!1;let i;try{i=await(0,_storage.readJson)(`__indexes/${t.path}/${r.lookup}`)}catch(e){return()=>{}}const o=new _indexBuffer.IndexBuffer(Array.isArray(i)?i:[],(0,_fieldType.fieldType)(t,s));return e=>o.has(e)})()),this.otherLookups.get(t)}scan(e,s){const t=`${e}\0${s.join("\0")}`;return this.scans.has(t)||this.scans.set(t,(async()=>{const t=e===this.entity?this.record:await(0,_retrieveRecord.retrieveRecord)(e);if(!RowValues.usable(t,s))return;const r=new RowValues(t,s);for(const s of await(0,_retrieveRecords.retrieveRecords)(e))r.add(s);return e===this.entity&&this.rows.forEach((e=>r.add(e))),r})()),this.scans.get(t)}claimed(e,s){return this.rows.some((t=>e.every((e=>null!==t[e]&&void 0!==t[e]&&(0,_compareAs.sameValue)((0,_fieldType.fieldType)(this.record,e),t[e],s[e])))))}async isUnique(e,s){if(1===e.length){const t=this.ownLookup(e[0])(s[e[0]]);if(void 0!==t)return!t}const t=await this.scan(this.entity,e);return t?!t.has(s):await(0,_keyUnique.keyUnique)(this.entity,e,e.map((e=>s[e])))&&!this.claimed(e,s)}async exists(e,s,t){const r=e===this.entity,i=r?this.ownLookup(s)(t):(await this.otherLookup(e,s))(t);if(void 0!==i)return i;const o=await this.scan(e,[s]);return o?o.has({[s]:t}):await(0,_foreignKeyExists.foreignKeyExists)(e,s,t)||r&&this.claimed([s],{[s]:t})}async add(e,s){this.rows.push(e);for(const[s,t]of this.scans)s.startsWith(`${this.entity}\0`)&&(await t)?.add(e);this.record.entries.push(s);for(const[t,r]of this.buffers)r.add((0,_computeKeyValue.computeKeyValue)(t.fields,e),s)}async write(){await(0,_storage.writeJson)(`${this.record.path}.json`,this.record),this.buffers.size&&await(0,_storage.makeDirectory)(`__indexes/${this.record.path}`);for(const[e,s]of this.buffers)await(0,_storage.writeJson)(`__indexes/${this.record.path}/${e.lookup}`,s.entries)}}const generateKey=async(e,s)=>{let t;do{t=crypto.randomUUID()}while(!await e.isUnique([s],{[s]:t}));return t},buildEntityValues=async(e,s={})=>{const t={};for(const r of e.record.definition){let i=s[r.name];if(null===i&&r.optional&&!r.nullable&&(i=void 0),r.autoGenerate?null==i&&(i=await generateKey(e,r.name)):Object.prototype.hasOwnProperty.call(r,"default")&&(i=(0,_useDefault.useDefault)(r.default,i)),void 0!==i)t[r.name]=(0,_typeCheck.typeCheck)(r.type,i,r.nullable);else if(!r.optional)throw new Error(`Missing required field "${r.name}" for ${e.entity}`)}return t},assertUnique=async(e,s)=>{for(const t of e.record.keys)if(!("primary"!==t.type&&"unique"!==t.type||t.fields.some((e=>null===s[e]))||await e.isUnique(t.fields,s)))throw new Error(`Duplicate value for ${t.type} key "${t.fields.join(", ")}" on ${e.entity}`)},assertForeignKeys=async(e,s)=>{for(const t of e.record.keys){if("foreign"!==t.type||1!==t.fields.length||!t.references||1!==t.references.length)continue;const r=t.fields[0];if(!Object.prototype.hasOwnProperty.call(s,r)||null===s[r])continue;const{entity:i,property:o}=(0,_splitEntityProperty.splitEntityProperty)(t.references[0].fields[0]);if(!await e.exists(i,o,s[r]))throw new Error(`Foreign key "${r}" on ${e.entity} references a nonexistent ${i}.${o} = ${s[r]}`)}},insertEntity=async(e="",s=[],t={})=>{const r=await(0,_retrieveRecord.retrieveRecord)(e),i=r.keys.find((e=>"primary"===e.type&&1===e.fields.length));if(Object.prototype.hasOwnProperty.call(t,e)||(t[e]=[]),await(0,_storage.makeDirectory)(r.path),!s.length)return t;for(const t of s)(0,_knownFields.assertFieldsDefined)(e,r,Object.keys(t||{}),"insert");await(0,_packedTable.discardPacked)(r.path);const o=new InsertStatement(e,r);await o.load();for(const n of s){const s=await buildEntityValues(o,n);await assertUnique(o,s),await assertForeignKeys(o,s);const a=`${i?s[i.fields[0]]:crypto.randomUUID()}.json`;await(0,_storage.writeJson)(`${r.path}/${a}`,s),await o.add(s,a),t[e].push(s)}return await o.write(),t};exports.insertEntity=insertEntity;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.insertEntity=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js");var _retrieveRecord=require("../utilities/retrieveRecord"),_keyUnique=require("../introspect/policies/keyUnique"),_useDefault=require("../introspect/policies/useDefault"),_typeCheck=require("../introspect/policies/typeCheck"),_foreignKeyExists=require("../introspect/policies/foreignKeyExists"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_computeKeyValue=require("../utilities/computeKeyValue"),_fieldType=require("../utilities/fieldType"),_compareAs=require("../utilities/compareAs"),_retrieveRecords=require("../utilities/retrieveRecords"),_isSingleFieldKey=require("../utilities/isSingleFieldKey"),_indexBuffer=require("../utilities/indexBuffer"),_storage=require("../storage"),_packedTable=require("../utilities/packedTable"),_knownFields=require("../utilities/knownFields");class RowValues{constructor(e,t){this.seen=new Set,this.fields=t,this.types=t.map((t=>(0,_fieldType.fieldType)(e,t)))}static usable(e,t){return t.every((t=>_compareAs.comparableTypes.includes((0,_fieldType.fieldType)(e,t))))}keyOf(e){const t=[];for(let i=0;i<this.fields.length;i++){const s=e[this.fields[i]];if(null==s)return;const r=(0,_compareAs.compareAs)(this.types[i],s);if("object"==typeof r)return;t.push([typeof r,r])}return JSON.stringify(t)}add(e){const t=this.keyOf(e);void 0!==t&&this.seen.add(t)}has(e){const t=this.keyOf(e);return void 0!==t&&this.seen.has(t)}}class InsertStatement{constructor(e,t){this.rows=[],this.buffers=new Map,this.unreadable=new Set,this.otherLookups=new Map,this.scans=new Map,this.entity=e,this.record=t,this.hadEntries=(t.entries||[]).length>0}async load(){for(const e of this.record.keys){if(!e.lookup)continue;let t=[];try{t=await(0,_storage.readJson)(`__indexes/${this.record.path}/${e.lookup}`)}catch(t){this.unreadable.add(e)}this.buffers.set(e,new _indexBuffer.IndexBuffer(Array.isArray(t)?t:[],(0,_fieldType.keyValueType)(this.record,e)))}}ownLookup(e){const t=this.record.keys.find((t=>(0,_isSingleFieldKey.isSingleFieldKey)(t,e)&&t.lookup));if(!t||this.unreadable.has(t))return()=>{};const i=this.buffers.get(t);return e=>(this.hadEntries||this.rows.length>0)&&i.has(e)}otherLookup(e,t){const i=`${e}\0${t}`;return this.otherLookups.has(i)||this.otherLookups.set(i,(async()=>{const i=await(0,_retrieveRecord.retrieveRecord)(e),s=i.keys.find((e=>(0,_isSingleFieldKey.isSingleFieldKey)(e,t)&&e.lookup));if(!s)return()=>{};if(!(i.entries||[]).length)return()=>!1;let r;try{r=await(0,_storage.readJson)(`__indexes/${i.path}/${s.lookup}`)}catch(e){return()=>{}}const n=new _indexBuffer.IndexBuffer(Array.isArray(r)?r:[],(0,_fieldType.fieldType)(i,t));return e=>n.has(e)})()),this.otherLookups.get(i)}scan(e,t){const i=`${e}\0${t.join("\0")}`;return this.scans.has(i)||this.scans.set(i,(async()=>{const i=e===this.entity?this.record:await(0,_retrieveRecord.retrieveRecord)(e);if(!RowValues.usable(i,t))return;const s=new RowValues(i,t);for(const t of await(0,_retrieveRecords.retrieveRecords)(e))s.add(t);return e===this.entity&&this.rows.forEach((e=>s.add(e))),s})()),this.scans.get(i)}claimed(e,t){return this.rows.some((i=>e.every((e=>null!==i[e]&&void 0!==i[e]&&(0,_compareAs.sameValue)((0,_fieldType.fieldType)(this.record,e),i[e],t[e])))))}async isUnique(e,t){if(1===e.length){const i=this.ownLookup(e[0])(t[e[0]]);if(void 0!==i)return!i}const i=await this.scan(this.entity,e);return i?!i.has(t):await(0,_keyUnique.keyUnique)(this.entity,e,e.map((e=>t[e])))&&!this.claimed(e,t)}async exists(e,t,i){const s=e===this.entity,r=s?this.ownLookup(t)(i):(await this.otherLookup(e,t))(i);if(void 0!==r)return r;const n=await this.scan(e,[t]);return n?n.has({[t]:i}):await(0,_foreignKeyExists.foreignKeyExists)(e,t,i)||s&&this.claimed([t],{[t]:i})}async add(e,t){this.rows.push(e);for(const[t,i]of this.scans)t.startsWith(`${this.entity}\0`)&&(await i)?.add(e);this.record.entries.push(t);for(const[i,s]of this.buffers)s.add((0,_computeKeyValue.computeKeyValue)(i.fields,e),t)}async write(){await(0,_storage.writeJson)(`${this.record.path}.json`,this.record),this.buffers.size&&await(0,_storage.makeDirectory)(`__indexes/${this.record.path}`);for(const[e,t]of this.buffers)await(0,_storage.writeJson)(`__indexes/${this.record.path}/${e.lookup}`,t.entries)}}const generateKey=async(e,t)=>{let i;do{i=crypto.randomUUID()}while(!await e.isUnique([t],{[t]:i}));return i},buildEntityValues=async(e,t={})=>{const i={};for(const s of e.record.definition){let r=t[s.name];if(null===r&&s.optional&&!s.nullable&&(r=void 0),s.autoGenerate?null==r&&(r=await generateKey(e,s.name)):Object.prototype.hasOwnProperty.call(s,"default")&&(r=(0,_useDefault.useDefault)(s.default,r)),void 0!==r)i[s.name]=(0,_typeCheck.typeCheck)(s.type,r,s.nullable);else if(!s.optional)throw new Error(`Missing required field "${s.name}" for ${e.entity}`)}return i},assertUnique=async(e,t)=>{for(const i of e.record.keys)if(!("primary"!==i.type&&"unique"!==i.type||i.fields.some((e=>null===t[e]))||await e.isUnique(i.fields,t)))throw new Error(`Duplicate value for ${i.type} key "${i.fields.join(", ")}" on ${e.entity}`)},assertForeignKeys=async(e,t)=>{for(const i of e.record.keys){if("foreign"!==i.type||1!==i.fields.length||!i.references||1!==i.references.length)continue;const s=i.fields[0];if(!Object.prototype.hasOwnProperty.call(t,s)||null===t[s])continue;const{entity:r,property:n}=(0,_splitEntityProperty.splitEntityProperty)(i.references[0].fields[0]);if(!await e.exists(r,n,t[s]))throw new Error(`Foreign key "${s}" on ${e.entity} references a nonexistent ${r}.${n} = ${t[s]}`)}},insertEntity=async(e="",t=[],i={})=>{const s=await(0,_retrieveRecord.retrieveRecord)(e),r=s.keys.find((e=>"primary"===e.type&&1===e.fields.length));if(Object.prototype.hasOwnProperty.call(i,e)||(i[e]=[]),await(0,_storage.makeDirectory)(s.path),!t.length)return i;for(const i of t)(0,_knownFields.assertFieldsDefined)(e,s,Object.keys(i||{}),"insert");await(0,_packedTable.discardPacked)(s.path);const n=new InsertStatement(e,s);await n.load();for(const o of t){const t=await buildEntityValues(n,o);await assertUnique(n,t),await assertForeignKeys(n,t);const a=`${r?t[r.fields[0]]:crypto.randomUUID()}.json`;await(0,_storage.writeJson)(`${s.path}/${a}`,t),await n.add(t,a),i[e].push(t)}return await n.write(),i};exports.insertEntity=insertEntity;
@@ -4,21 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.joinEntity = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.map.js");
9
- require("core-js/modules/esnext.map.delete-all.js");
10
- require("core-js/modules/esnext.map.every.js");
11
- require("core-js/modules/esnext.map.filter.js");
12
- require("core-js/modules/esnext.map.find.js");
13
- require("core-js/modules/esnext.map.find-key.js");
14
- require("core-js/modules/esnext.map.includes.js");
15
- require("core-js/modules/esnext.map.key-of.js");
16
- require("core-js/modules/esnext.map.map-keys.js");
17
- require("core-js/modules/esnext.map.map-values.js");
18
- require("core-js/modules/esnext.map.merge.js");
19
- require("core-js/modules/esnext.map.reduce.js");
20
- require("core-js/modules/esnext.map.some.js");
21
- require("core-js/modules/esnext.map.update.js");
22
7
  var _readEntity = require("./readEntity");
23
8
  var _retrieveRecord = require("../utilities/retrieveRecord");
24
9
  var _splitEntityProperty = require("../utilities/parsers/splitEntityProperty");
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.joinEntity=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.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");var _readEntity=require("./readEntity"),_retrieveRecord=require("../utilities/retrieveRecord"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_fieldType=require("../utilities/fieldType"),_semiJoin=require("../utilities/semiJoin"),_joinBases=require("../utilities/joinBases");const joinSteps=async e=>{const t=[];for(const{propertyA:r,comparator:s,propertyB:i}of e){const{entity:e,property:o}=(0,_splitEntityProperty.splitEntityProperty)(r),{entity:n,property:p}=(0,_splitEntityProperty.splitEntityProperty)(i);t.push({entityA:e,propertyA:o,typeA:(0,_fieldType.fieldType)(await(0,_retrieveRecord.retrieveRecord)(e),o),comparator:s,entityB:n,propertyB:p,typeB:(0,_fieldType.fieldType)(await(0,_retrieveRecord.retrieveRecord)(n),p)})}return t},joinedRows=e=>e.map((e=>structuredClone(e))),joinEntity=async(e,t,r={},s=[],i=!1,o=!1)=>{if(i||(r=await(0,_readEntity.readEntity)(e,r)),!s.length)return r;const n=await joinSteps(s);if(!r[e].length)return r;const p=await(0,_joinBases.joinBases)(e,t,r,n,o);for(const s of r[e]){const r=new Map(p);r.set(e,{rows:[s]});for(const e of n)r.set(e.entityA,{rows:(0,_semiJoin.semiJoin)(r.get(e.entityA),r.get(e.entityB),e.propertyA,e.propertyB,e.comparator,e.typeA)}),r.set(e.entityB,{rows:(0,_semiJoin.semiJoin)(r.get(e.entityB),r.get(e.entityA),e.propertyB,e.propertyA,e.comparator,e.typeB)});s[t]=joinedRows(r.get(t).rows)}return r};exports.joinEntity=joinEntity;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.joinEntity=void 0;var _readEntity=require("./readEntity"),_retrieveRecord=require("../utilities/retrieveRecord"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_fieldType=require("../utilities/fieldType"),_semiJoin=require("../utilities/semiJoin"),_joinBases=require("../utilities/joinBases");const joinSteps=async t=>{const e=[];for(const{propertyA:r,comparator:i,propertyB:o}of t){const{entity:t,property:n}=(0,_splitEntityProperty.splitEntityProperty)(r),{entity:s,property:p}=(0,_splitEntityProperty.splitEntityProperty)(o);e.push({entityA:t,propertyA:n,typeA:(0,_fieldType.fieldType)(await(0,_retrieveRecord.retrieveRecord)(t),n),comparator:i,entityB:s,propertyB:p,typeB:(0,_fieldType.fieldType)(await(0,_retrieveRecord.retrieveRecord)(s),p)})}return e},joinedRows=t=>t.map((t=>structuredClone(t))),joinEntity=async(t,e,r={},i=[],o=!1,n=!1)=>{if(o||(r=await(0,_readEntity.readEntity)(t,r)),!i.length)return r;const s=await joinSteps(i);if(!r[t].length)return r;const p=await(0,_joinBases.joinBases)(t,e,r,s,n);for(const i of r[t]){const r=new Map(p);r.set(t,{rows:[i]});for(const t of s)r.set(t.entityA,{rows:(0,_semiJoin.semiJoin)(r.get(t.entityA),r.get(t.entityB),t.propertyA,t.propertyB,t.comparator,t.typeA)}),r.set(t.entityB,{rows:(0,_semiJoin.semiJoin)(r.get(t.entityB),r.get(t.entityA),t.propertyB,t.propertyA,t.comparator,t.typeB)});i[e]=joinedRows(r.get(e).rows)}return r};exports.joinEntity=joinEntity;
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.parser = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.map.js");
9
7
  var _splitQueries = require("../utilities/parsers/splitQueries");
10
8
  var _parseQuery = require("../utilities/parsers/parseQuery");
11
9
  const parser = (queries = '') => {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parser=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js");var _splitQueries=require("../utilities/parsers/splitQueries"),_parseQuery=require("../utilities/parsers/parseQuery");const parser=(e="")=>{const r=(0,_splitQueries.splitQueries)(e);return r.map(((e,s)=>{try{return(0,_parseQuery.parseQuery)(e)}catch(t){const i=r.length>1?` query ${s+1} of ${r.length}`:"";throw new Error(`Failed to interpret${i}: ${e} (${t.message})`)}}))};exports.parser=parser;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parser=void 0;var _splitQueries=require("../utilities/parsers/splitQueries"),_parseQuery=require("../utilities/parsers/parseQuery");const parser=(e="")=>{const r=(0,_splitQueries.splitQueries)(e);return r.map(((e,s)=>{try{return(0,_parseQuery.parseQuery)(e)}catch(t){const i=r.length>1?` query ${s+1} of ${r.length}`:"";throw new Error(`Failed to interpret${i}: ${e} (${t.message})`)}}))};exports.parser=parser;
@@ -4,9 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.selectFields = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.map.js");
9
- require("core-js/modules/esnext.iterator.reduce.js");
10
7
  /**
11
8
  * The value a select name picks from a row: the row's own key (a field, a merged record's `<record>.<field>`, or a
12
9
  * joined record's rows), or for `<queried record>.<field>`, the row's own field.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.selectFields=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js"),require("core-js/modules/esnext.iterator.reduce.js");const pick=(e,s,r)=>Object.prototype.hasOwnProperty.call(e,s)||void 0===r||!s.startsWith(`${r}.`)?e[s]:e[s.slice(r.length+1)],shapeRow=(e,s,r)=>s.reduce(((s,{property:o,alias:t})=>(s[t||o]=pick(e,o,r),s)),{}),shapeGroup=(e,s,r)=>e.groups?{...e,groups:e.groups.map((e=>shapeGroup(e,s,r)))}:{...e,rows:e.rows.map((e=>shapeRow(e,s,r)))},selectFields=(e=[],s=[],r=!1,o)=>s.length?r?e.map((e=>shapeGroup(e,s,o))):e.map((e=>shapeRow(e,s,o))):e;exports.selectFields=selectFields;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.selectFields=void 0;const pick=(e,s,p)=>Object.prototype.hasOwnProperty.call(e,s)||void 0===p||!s.startsWith(`${p}.`)?e[s]:e[s.slice(p.length+1)],shapeRow=(e,s,p)=>s.reduce(((s,{property:o,alias:t})=>(s[t||o]=pick(e,o,p),s)),{}),shapeGroup=(e,s,p)=>e.groups?{...e,groups:e.groups.map((e=>shapeGroup(e,s,p)))}:{...e,rows:e.rows.map((e=>shapeRow(e,s,p)))},selectFields=(e=[],s=[],p=!1,o)=>s.length?p?e.map((e=>shapeGroup(e,s,o))):e.map((e=>shapeRow(e,s,o))):e;exports.selectFields=selectFields;
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.showRecords = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.map.js");
9
7
  var _retrieveRecord = require("../utilities/retrieveRecord");
10
8
  var _recordExists = require("../utilities/recordExists");
11
9
  /**
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.showRecords=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js");var _retrieveRecord=require("../utilities/retrieveRecord"),_recordExists=require("../utilities/recordExists");const showRecords=async()=>(0,_recordExists.recordExists)("__RECORDS")?(await(0,_retrieveRecord.retrieveRecord)("__RECORDS")).entries.map((e=>e.replace(/\.json$/,""))):[];exports.showRecords=showRecords;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.showRecords=void 0;var _retrieveRecord=require("../utilities/retrieveRecord"),_recordExists=require("../utilities/recordExists");const showRecords=async()=>(0,_recordExists.recordExists)("__RECORDS")?(await(0,_retrieveRecord.retrieveRecord)("__RECORDS")).entries.map((e=>e.replace(/\.json$/,""))):[];exports.showRecords=showRecords;
@@ -4,10 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.updateEntity = void 0;
7
- require("core-js/modules/esnext.iterator.constructor.js");
8
- require("core-js/modules/esnext.iterator.find.js");
9
- require("core-js/modules/esnext.iterator.map.js");
10
- require("core-js/modules/esnext.iterator.some.js");
11
7
  var _retrieveRecord = require("../utilities/retrieveRecord");
12
8
  var _retrieveFile = require("../utilities/retrieveFile");
13
9
  var _updateIndex = require("../utilities/updateIndex");