json-fs-query 3.3.1 → 3.5.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.
- package/README.md +104 -2
- package/browser/jsonFsQuery.js +810 -3845
- package/browser/jsonFsQuery.min.js +1 -1
- package/dist/cli/chooseDatabase.d.ts +13 -0
- package/dist/cli/chooseDatabase.js +37 -0
- package/dist/cli/chooseDatabase.min.js +1 -0
- package/dist/cli/formatCsv.d.ts +9 -0
- package/dist/cli/formatCsv.js +53 -0
- package/dist/cli/formatCsv.min.js +1 -0
- package/dist/cli/formatResult.d.ts +30 -0
- package/dist/cli/formatResult.js +139 -0
- package/dist/cli/formatResult.min.js +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.js +52 -0
- package/dist/cli/index.min.js +2 -0
- package/dist/cli/interactive.d.ts +15 -0
- package/dist/cli/interactive.js +257 -0
- package/dist/cli/interactive.min.js +1 -0
- package/dist/cli/output.d.ts +31 -0
- package/dist/cli/output.js +64 -0
- package/dist/cli/output.min.js +1 -0
- package/dist/cli/runDirect.d.ts +11 -0
- package/dist/cli/runDirect.js +28 -0
- package/dist/cli/runDirect.min.js +1 -0
- package/dist/data/introspect/alter.js +2 -10
- package/dist/data/introspect/alter.min.js +1 -1
- package/dist/data/introspect/create.js +15 -4
- package/dist/data/introspect/create.min.js +1 -1
- package/dist/data/introspect/definitions/key.js +0 -2
- package/dist/data/introspect/definitions/key.min.js +1 -1
- package/dist/data/introspect/definitions/record.js +0 -2
- package/dist/data/introspect/definitions/record.min.js +1 -1
- package/dist/data/introspect/describe.js +2 -0
- package/dist/data/introspect/describe.min.js +1 -1
- package/dist/data/introspect/drop.js +3 -4
- package/dist/data/introspect/drop.min.js +1 -1
- package/dist/data/introspect/formatDatabase.js +0 -2
- package/dist/data/introspect/formatDatabase.min.js +1 -1
- package/dist/data/introspect/index.js +0 -4
- package/dist/data/introspect/index.min.js +1 -1
- package/dist/data/introspect/packDatabase.js +0 -19
- package/dist/data/introspect/packDatabase.min.js +1 -1
- package/dist/data/queries/createRecord.js +0 -2
- package/dist/data/queries/createRecord.min.js +1 -1
- package/dist/data/queries/databaseStatements.js +0 -3
- package/dist/data/queries/databaseStatements.min.js +1 -1
- package/dist/data/queries/deleteEntity.js +0 -20
- package/dist/data/queries/deleteEntity.min.js +1 -1
- package/dist/data/queries/dropRecord.js +0 -5
- package/dist/data/queries/dropRecord.min.js +1 -1
- package/dist/data/queries/groupBy.js +0 -16
- package/dist/data/queries/groupBy.min.js +1 -1
- package/dist/data/queries/insertEntity.js +0 -35
- package/dist/data/queries/insertEntity.min.js +1 -1
- package/dist/data/queries/joinEntity.js +0 -15
- package/dist/data/queries/joinEntity.min.js +1 -1
- package/dist/data/queries/parser.js +0 -2
- package/dist/data/queries/parser.min.js +1 -1
- package/dist/data/queries/selectFields.js +0 -3
- package/dist/data/queries/selectFields.min.js +1 -1
- package/dist/data/queries/showRecords.js +0 -2
- package/dist/data/queries/showRecords.min.js +1 -1
- package/dist/data/queries/updateEntity.js +0 -4
- package/dist/data/queries/updateEntity.min.js +1 -1
- package/dist/data/queries/where.js +0 -4
- package/dist/data/queries/where.min.js +1 -1
- package/dist/data/storage/databases.js +1 -2
- package/dist/data/storage/databases.min.js +1 -1
- package/dist/data/storage/listFiles.js +0 -2
- package/dist/data/storage/listFiles.min.js +1 -1
- package/dist/data/storage/readCache.js +0 -13
- package/dist/data/storage/readCache.min.js +1 -1
- package/dist/data/storage/readJson.js +2 -2
- package/dist/data/storage/readJson.min.js +1 -1
- package/dist/data/storage/storagePath.js +0 -1
- package/dist/data/storage/storagePath.min.js +1 -1
- package/dist/data/storage/writeSet.js +0 -32
- package/dist/data/storage/writeSet.min.js +1 -1
- package/dist/data/utilities/assertValidName.d.ts +14 -0
- package/dist/data/utilities/assertValidName.js +34 -0
- package/dist/data/utilities/assertValidName.min.js +1 -0
- package/dist/data/utilities/computeKeyValue.js +0 -2
- package/dist/data/utilities/computeKeyValue.min.js +1 -1
- package/dist/data/utilities/conditionEntities.js +0 -20
- package/dist/data/utilities/conditionEntities.min.js +1 -1
- package/dist/data/utilities/conditionTree.js +0 -3
- package/dist/data/utilities/conditionTree.min.js +1 -1
- package/dist/data/utilities/config.d.ts +11 -0
- package/dist/data/utilities/config.js +15 -1
- package/dist/data/utilities/config.min.js +1 -1
- package/dist/data/utilities/databaseLock.js +0 -14
- package/dist/data/utilities/databaseLock.min.js +1 -1
- package/dist/data/utilities/deregisterRecord.js +0 -2
- package/dist/data/utilities/deregisterRecord.min.js +1 -1
- package/dist/data/utilities/fieldType.js +0 -2
- package/dist/data/utilities/fieldType.min.js +1 -1
- package/dist/data/utilities/getConditionIndexedList.js +0 -20
- package/dist/data/utilities/getConditionIndexedList.min.js +1 -1
- package/dist/data/utilities/indexBuffer.js +0 -33
- package/dist/data/utilities/indexBuffer.min.js +1 -1
- package/dist/data/utilities/indexHas.js +0 -3
- package/dist/data/utilities/indexHas.min.js +1 -1
- package/dist/data/utilities/joinBases.js +0 -33
- package/dist/data/utilities/joinBases.min.js +1 -1
- package/dist/data/utilities/keyIndexFiles.js +0 -19
- package/dist/data/utilities/keyIndexFiles.min.js +1 -1
- package/dist/data/utilities/knownFields.js +0 -21
- package/dist/data/utilities/knownFields.min.js +1 -1
- package/dist/data/utilities/mergeJoin.js +0 -2
- package/dist/data/utilities/mergeJoin.min.js +1 -1
- package/dist/data/utilities/packedTable.js +0 -3
- package/dist/data/utilities/packedTable.min.js +1 -1
- package/dist/data/utilities/parsers/findConditions.js +0 -2
- package/dist/data/utilities/parsers/findConditions.min.js +1 -1
- package/dist/data/utilities/parsers/findGroupBy.js +0 -2
- package/dist/data/utilities/parsers/findGroupBy.min.js +1 -1
- package/dist/data/utilities/parsers/maskStrings.js +0 -3
- package/dist/data/utilities/parsers/maskStrings.min.js +1 -1
- package/dist/data/utilities/parsers/parseCreate.js +0 -21
- package/dist/data/utilities/parsers/parseCreate.min.js +1 -1
- package/dist/data/utilities/parsers/splitClauses.js +0 -16
- package/dist/data/utilities/parsers/splitClauses.min.js +1 -1
- package/dist/data/utilities/parsers/splitQueries.js +0 -3
- package/dist/data/utilities/parsers/splitQueries.min.js +1 -1
- package/dist/data/utilities/reconcileJoin.js +0 -4
- package/dist/data/utilities/reconcileJoin.min.js +1 -1
- package/dist/data/utilities/removeFromIndex.js +0 -3
- package/dist/data/utilities/removeFromIndex.min.js +1 -1
- package/dist/data/utilities/requireNode.js +0 -1
- package/dist/data/utilities/requireNode.min.js +1 -1
- package/dist/data/utilities/retrieveRecord.js +0 -1
- package/dist/data/utilities/retrieveRecord.min.js +1 -1
- package/dist/data/utilities/retrieveRecords.js +0 -16
- package/dist/data/utilities/retrieveRecords.min.js +1 -1
- package/dist/data/utilities/rowLookup.js +0 -15
- package/dist/data/utilities/rowLookup.min.js +1 -1
- package/dist/data/utilities/runQuery.js +0 -16
- package/dist/data/utilities/runQuery.min.js +1 -1
- package/dist/data/utilities/semiJoin.js +0 -19
- package/dist/data/utilities/semiJoin.min.js +1 -1
- package/dist/data/utilities/updateIndex.js +0 -2
- package/dist/data/utilities/updateIndex.min.js +1 -1
- package/dist/index.js +0 -4
- package/dist/index.min.js +1 -1
- package/package.json +9 -3
|
@@ -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")
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.updateEntity=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.updateEntity=void 0;var _retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFile=require("../utilities/retrieveFile"),_updateIndex=require("../utilities/updateIndex"),_removeFromIndex=require("../utilities/removeFromIndex"),_computeKeyValue=require("../utilities/computeKeyValue"),_fieldType=require("../utilities/fieldType"),_compareAs=require("../utilities/compareAs"),_keyUnique=require("../introspect/policies/keyUnique"),_typeCheck=require("../introspect/policies/typeCheck"),_foreignKeyExists=require("../introspect/policies/foreignKeyExists"),_hasDependents=require("../introspect/policies/hasDependents"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty"),_config=require("../utilities/config"),_keyIndexFiles=require("../utilities/keyIndexFiles"),_storage=require("../storage"),_packedTable=require("../utilities/packedTable"),_knownFields=require("../utilities/knownFields");const findEntryFile=async(e,t,i)=>{const r=(0,_fieldType.keyValueType)(e,t),o=async o=>(0,_compareAs.sameValue)(r,(0,_computeKeyValue.computeKeyValue)(t.fields,await(0,_retrieveFile.retrieveFile)(`${e.path}/${o}`)),i);for(const n of await(0,_keyIndexFiles.keyIndexFiles)(e,t,(e=>(0,_compareAs.sameValue)(r,e,i)))??[])if(await o(n))return n;for(const t of e.entries)if(await o(t))return t;return null},keyFieldsChanged=(e,t,i,r)=>t.fields.some((t=>Object.prototype.hasOwnProperty.call(r,t)&&!(0,_compareAs.sameValue)((0,_fieldType.fieldType)(e,t),r[t],i[t]))),assertUniqueForUpdate=async(e,t,i,r,o)=>{for(const n of t.keys){if("primary"!==n.type&&"unique"!==n.type||!keyFieldsChanged(t,n,i,o))continue;const s=n.fields.map((e=>r[e]));if(s.some((e=>null==e)))continue;if(!await(0,_keyUnique.keyUnique)(e,n.fields,s))throw new Error(`Duplicate value for ${n.type} key "${n.fields.join(", ")}" on ${e}`)}},assertForeignKeysForUpdate=async(e,t,i,r)=>{for(const o of t.keys){if("foreign"!==o.type||1!==o.fields.length||!o.references||1!==o.references.length)continue;const n=o.fields[0];if(!Object.prototype.hasOwnProperty.call(r,n)||null===r[n]||void 0===r[n]||(0,_compareAs.sameValue)((0,_fieldType.fieldType)(t,n),r[n],i[n]))continue;const{entity:s,property:a}=(0,_splitEntityProperty.splitEntityProperty)(o.references[0].fields[0]);if(!await(0,_foreignKeyExists.foreignKeyExists)(s,a,r[n]))throw new Error(`Foreign key "${n}" on ${e} references a nonexistent ${s}.${a} = ${r[n]}`)}},assertNoDependentsForUpdate=async(e,t,i,r,o)=>{if(!(0,_config.getSetting)("enforceForeignKeys",!0)||1!==i.fields.length||!keyFieldsChanged(t,i,r,o))return;const n=i.fields[0];if(await(0,_hasDependents.hasDependents)(e,n,r[n]))throw new Error(`Cannot update "${e}" where "${n}" = ${r[n]} - other records still reference it`)},reconcileIndexes=async(e,t,i,r,o)=>{for(const n of e.keys)keyFieldsChanged(e,n,t,r)&&(await(0,_removeFromIndex.removeFromIndex)(e.path,n,(0,_computeKeyValue.computeKeyValue)(n.fields,t),o,(0,_fieldType.keyValueType)(e,n)),await(0,_updateIndex.updateIndex)(e.path,n,(0,_computeKeyValue.computeKeyValue)(n.fields,i),o,(0,_fieldType.keyValueType)(e,n)))},assertUniqueWithinUpdate=(e,t,i,r)=>{for(const o of t.keys){if("primary"!==o.type&&"unique"!==o.type)continue;const n=[];for(const{oldData:s,newData:a}of i){if(!keyFieldsChanged(t,o,s,r)||o.fields.some((e=>null===a[e]||void 0===a[e])))continue;const i=(0,_computeKeyValue.computeKeyValue)(o.fields,a);if(n.some((e=>(0,_compareAs.sameValue)((0,_fieldType.keyValueType)(t,o),e,i))))throw new Error(`Duplicate value for ${o.type} key "${o.fields.join(", ")}" on ${e}`);n.push(i)}}},assertRequiredFields=(e,t,i)=>{for(const r of t.definition)if(!r.optional&&void 0===i[r.name])throw new Error(`Missing required field "${r.name}" for ${e}`)},applyFieldTypes=(e,t)=>{const i=Object.assign({},t);for(const t of e.definition)Object.prototype.hasOwnProperty.call(i,t.name)&&(i[t.name]=null===i[t.name]&&t.optional&&!t.nullable?void 0:(0,_typeCheck.typeCheck)(t.type,i[t.name],t.nullable));return i},withoutRemoved=(e,t)=>{const i=Object.assign({},e);for(const e of Object.keys(t))void 0===t[e]&&delete i[e];return i},updateEntity=async(e="",t={},i={})=>{const r=await(0,_retrieveRecord.retrieveRecord)(e),o=r.keys.find((e=>"primary"===e.type));if(!o)throw new Error(`Cannot update "${e}" without a primary key`);(0,_knownFields.assertFieldsDefined)(e,r,Object.keys(t||{}),"set");const n=applyFieldTypes(r,t);for(const t of o.fields)if(Object.prototype.hasOwnProperty.call(n,t)&&void 0===n[t])throw new Error(`Cannot clear "${t}" on ${e}: it's part of the primary key`);const s=[];for(const t of i[e]||[]){const i=await findEntryFile(r,o,(0,_computeKeyValue.computeKeyValue)(o.fields,t));if(!i)throw new Error(`Could not find entry for ${e} where "${o.fields.join(", ")}" = ${(0,_computeKeyValue.computeKeyValue)(o.fields,t)}`);if(s.some((e=>e.fileName===i)))continue;const a=await(0,_retrieveFile.retrieveFile)(`${r.path}/${i}`),l=withoutRemoved(Object.assign({},a,n),n);await assertUniqueForUpdate(e,r,a,l,n),await assertForeignKeysForUpdate(e,r,a,n),await assertNoDependentsForUpdate(e,r,o,a,n),assertRequiredFields(e,r,l),s.push({fileName:i,oldData:a,newData:l})}assertUniqueWithinUpdate(e,r,s,n),s.length&&await(0,_packedTable.discardPacked)(r.path);for(const{fileName:e,oldData:t,newData:i}of s)await reconcileIndexes(r,t,i,n,e),await(0,_storage.writeJson)(`${r.path}/${e}`,i);return i[e]=s.map((({newData:e})=>e)),i};exports.updateEntity=updateEntity;
|
|
@@ -5,10 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.whereTree = exports.where = exports.treeTruth = void 0;
|
|
7
7
|
require("core-js/modules/es.array.includes.js");
|
|
8
|
-
require("core-js/modules/esnext.iterator.constructor.js");
|
|
9
|
-
require("core-js/modules/esnext.iterator.filter.js");
|
|
10
|
-
require("core-js/modules/esnext.iterator.flat-map.js");
|
|
11
|
-
require("core-js/modules/esnext.iterator.some.js");
|
|
12
8
|
var _compareAs = require("../utilities/compareAs");
|
|
13
9
|
var _conditionTree = require("../utilities/conditionTree");
|
|
14
10
|
const likeMatch = (dataValue, pattern) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.whereTree=exports.where=exports.treeTruth=void 0,require("core-js/modules/es.array.includes.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.whereTree=exports.where=exports.treeTruth=void 0,require("core-js/modules/es.array.includes.js");var _compareAs=require("../utilities/compareAs"),_conditionTree=require("../utilities/conditionTree");const likeMatch=(e,r)=>{if("string"!=typeof e||"string"!=typeof r)return!1;const t=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${t}$`,"i").test(e)},makeCondition=(e,r,t,n,s=void 0)=>{const o=Object.prototype.hasOwnProperty.call(e,r);switch(t){case"exists":return o;case"does not exist":return!o;case"is null":return o&&null===e[r];case"is not null":return o&&null!==e[r]}if(!o||null===e[r]||null===n)return null;const c=e[r],i=(0,_compareAs.compareAs)(s,c);switch(t){case"=":return(0,_compareAs.sameValue)(s,c,n);case"!=":case"<>":return!(0,_compareAs.sameValue)(s,c,n);case">":return i>(0,_compareAs.compareAs)(s,n);case">=":return i>=(0,_compareAs.compareAs)(s,n);case"<":return i<(0,_compareAs.compareAs)(s,n);case"<=":return i<=(0,_compareAs.compareAs)(s,n);case"in":return!!Array.isArray(n)&&(!!(s?n.some((e=>null!==e&&(0,_compareAs.sameValue)(s,c,e))):n.includes(c))||!!n.includes(null)&&null);case"between":return!(!Array.isArray(n)||2!==n.length)&&(n.includes(null)?null:i>=(0,_compareAs.compareAs)(s,n[0])&&i<=(0,_compareAs.compareAs)(s,n[1]));case"like":return likeMatch(c,n)}return!1},conditionTruth=(e,{property:r="",joinEntity:t,comparator:n="=",value:s=null,type:o}={})=>makeCondition(e,t?`${t}.${r}`:r,n,s,o),where=(e=[],r={})=>e.filter((e=>!0===conditionTruth(e,r)));exports.where=where;const treeTruth=(e,r)=>{if((0,_conditionTree.isCondition)(r))return conditionTruth(e,r);if("not"in r){const t=treeTruth(e,r.not);return null===t?null:!t}const t=!("and"in r);let n=!t;for(const s of"and"in r?r.and:r.or){const r=treeTruth(e,s);if(r===t)return t;null===r&&(n=null)}return n};exports.treeTruth=treeTruth;const pairView=(e,r,t)=>{const n=Object.assign({},e);for(const e of Object.keys(t)){const s=e.includes(".")?e:`${r}.${e}`;Object.prototype.hasOwnProperty.call(n,s)||(n[s]=t[e])}return n},whereTree=(e=[],r=void 0,t=void 0)=>void 0===r?e:void 0===t?e.filter((e=>!0===treeTruth(e,r))):e.flatMap((e=>{const n=(Array.isArray(e[t])?e[t]:[]).filter((n=>!0===treeTruth(pairView(e,t,n),r)));return n.length?[Object.assign({},e,{[t]:n})]:[]}));exports.whereTree=whereTree;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
require("core-js/modules/esnext.weak-map.delete-all.js");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
@@ -31,7 +30,7 @@ const listLocation = () => databasesLocation('__DATABASES.json');
|
|
|
31
30
|
const readDatabaseList = async () => {
|
|
32
31
|
let text;
|
|
33
32
|
try {
|
|
34
|
-
text = jsEnv.isNode ? await (0, _nodeFiles.nodeFiles)().readFile(listLocation(), 'utf8') : await
|
|
33
|
+
text = jsEnv.isNode ? await (0, _nodeFiles.nodeFiles)().readFile(listLocation(), 'utf8') : await (0, _config.configuredFetch)(listLocation()).then(response => response.ok === false ? '[]' : response.text());
|
|
35
34
|
} catch (error) {
|
|
36
35
|
if (jsEnv.isNode && error?.code !== 'ENOENT') {
|
|
37
36
|
throw error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.writeDatabaseList=exports.removeDatabaseFolder=exports.readDatabaseList=exports.makeDatabaseFolder=exports.databasesLocation=exports.databaseFolderExists=void 0,require("core-js/modules/es.json.stringify.js");var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("../utilities/config"),_nodeFiles=require("./nodeFiles"),_readCache=require("./readCache"),_writeSet=require("./writeSet");function _interopRequireWildcard(a,t){if(!t&&a&&a.__esModule)return a;var s,r,o=Object.defineProperty,i={__proto__:null,default:a};if(Object(a)!==a)return i;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(a))return e.get(a);e.set(a,i)}for(r in a)"default"!==r&&{}.hasOwnProperty.call(a,r)&&((s=o&&Object.getOwnPropertyDescriptor(a,r))&&(s.get||s.set)?o(i,r,s):i[r]=a[r]);return i}const databasesLocation=(e="")=>`${jsEnv.isBrowser?(0,_config.getSetting)("relativePath",""):""}${(0,_config.databasesFolder)()}${e}`;exports.databasesLocation=databasesLocation;const listLocation=()=>databasesLocation("__DATABASES.json"),readDatabaseList=async()=>{let e;try{e=jsEnv.isNode?await(0,_nodeFiles.nodeFiles)().readFile(listLocation(),"utf8"):await(0,_config.configuredFetch)(listLocation()).then((e=>!1===e.ok?"[]":e.text()))}catch(e){if(jsEnv.isNode&&"ENOENT"!==e?.code)throw e;return[]}try{const a=JSON.parse(e);return Array.isArray(a)?a:[]}catch(e){if(!jsEnv.isNode)return[];throw new Error(`Could not read ${listLocation()}: ${e.message}`)}};exports.readDatabaseList=readDatabaseList;const writeDatabaseList=async e=>{await(0,_nodeFiles.nodeFiles)().mkdir(databasesLocation(),{recursive:!0}),await(0,_writeSet.writeAtomically)(listLocation(),JSON.stringify(e))};exports.writeDatabaseList=writeDatabaseList;const databaseFolderExists=e=>require("fs").existsSync(databasesLocation(e));exports.databaseFolderExists=databaseFolderExists;const makeDatabaseFolder=async e=>{await(0,_nodeFiles.nodeFiles)().mkdir(databasesLocation(e),{recursive:!0})};exports.makeDatabaseFolder=makeDatabaseFolder;const removeDatabaseFolder=async e=>{const a=databasesLocation(e);(0,_readCache.cacheRemove)(a,!0),await(0,_nodeFiles.nodeFiles)().rm(a,{recursive:!0,force:!0}),(0,_readCache.cacheRemove)(a,!0)};exports.removeDatabaseFolder=removeDatabaseFolder;
|
|
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.listFiles = void 0;
|
|
7
|
-
require("core-js/modules/esnext.iterator.constructor.js");
|
|
8
|
-
require("core-js/modules/esnext.iterator.map.js");
|
|
9
7
|
var _storagePath = require("./storagePath");
|
|
10
8
|
var _nodeFiles = require("./nodeFiles");
|
|
11
9
|
var _writeSet = require("./writeSet");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.listFiles=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.listFiles=void 0;var _storagePath=require("./storagePath"),_nodeFiles=require("./nodeFiles"),_writeSet=require("./writeSet");const walk=async e=>{let t;try{t=await(0,_nodeFiles.nodeFiles)().readdir((0,_storagePath.storagePath)(e),{withFileTypes:!0})}catch(e){if("ENOENT"===e?.code)return[];throw e}const s=[];for(const r of t)r.isDirectory()?s.push(...await walk(`${e}${r.name}/`)):r.isFile()&&s.push(`${e}${r.name}`);return s},listFiles=async(e="")=>{const t=e?`${e.replace(/\/+$/,"")}/`:"",s=(await walk(t)).map((e=>(0,_storagePath.storagePath)(e))),r=(0,_storagePath.storagePath)();return(0,_writeSet.pendingListing)((0,_storagePath.storagePath)(e),s).map((e=>e.slice(r.length))).sort()};exports.listFiles=listFiles;
|
|
@@ -4,19 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.withReadCache = exports.cachedRead = exports.cacheWrite = exports.cacheRemove = void 0;
|
|
7
|
-
require("core-js/modules/esnext.map.delete-all.js");
|
|
8
|
-
require("core-js/modules/esnext.map.every.js");
|
|
9
|
-
require("core-js/modules/esnext.map.filter.js");
|
|
10
|
-
require("core-js/modules/esnext.map.find.js");
|
|
11
|
-
require("core-js/modules/esnext.map.find-key.js");
|
|
12
|
-
require("core-js/modules/esnext.map.includes.js");
|
|
13
|
-
require("core-js/modules/esnext.map.key-of.js");
|
|
14
|
-
require("core-js/modules/esnext.map.map-keys.js");
|
|
15
|
-
require("core-js/modules/esnext.map.map-values.js");
|
|
16
|
-
require("core-js/modules/esnext.map.merge.js");
|
|
17
|
-
require("core-js/modules/esnext.map.reduce.js");
|
|
18
|
-
require("core-js/modules/esnext.map.some.js");
|
|
19
|
-
require("core-js/modules/esnext.map.update.js");
|
|
20
7
|
var _storagePath = require("./storagePath");
|
|
21
8
|
const scopes = new Map();
|
|
22
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.withReadCache=exports.cachedRead=exports.cacheWrite=exports.cacheRemove=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.withReadCache=exports.cachedRead=exports.cacheWrite=exports.cacheRemove=void 0;var _storagePath=require("./storagePath");const scopes=new Map,currentScope=()=>scopes.get((0,_storagePath.storagePath)()),withReadCache=async e=>{const t=(0,_storagePath.storagePath)(),s=scopes.get(t)||{calls:0,files:new Map};scopes.set(t,s),s.calls++,s.calls>1&&(s.files=new Map);try{return await e()}finally{s.calls--,s.calls||scopes.get(t)!==s||scopes.delete(t)}};exports.withReadCache=withReadCache;const cachedRead=(e,t)=>{const s=currentScope();if(!s)return t();const c=s.files.get(e);if(c)return c;const a=t();return s.files.set(e,a),a.catch((()=>{s.files.get(e)===a&&s.files.delete(e)})),a};exports.cachedRead=cachedRead;const cacheWrite=(e,t)=>{currentScope()?.files.set(e,Promise.resolve(t))};exports.cacheWrite=cacheWrite;const cacheRemove=(e,t=!1)=>{const s=currentScope();if(s&&(s.files.delete(e),t)){const t=e.endsWith("/")?e:`${e}/`;for(const e of[...s.files.keys()])e.startsWith(t)&&s.files.delete(e)}};exports.cacheRemove=cacheRemove;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
require("core-js/modules/esnext.weak-map.delete-all.js");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
@@ -10,6 +9,7 @@ var _storagePath = require("./storagePath");
|
|
|
10
9
|
var _nodeFiles = require("./nodeFiles");
|
|
11
10
|
var _readCache = require("./readCache");
|
|
12
11
|
var _writeSet = require("./writeSet");
|
|
12
|
+
var _config = require("../utilities/config");
|
|
13
13
|
var e;
|
|
14
14
|
function _interopRequireWildcard(t, r) { if (!r && t && t.__esModule) return t; var n, a, o = Object.defineProperty, f = { __proto__: null, default: t }; if (Object(t) !== t) return f; if (e || "function" != typeof WeakMap || (e = new WeakMap()), e) { if (e.has(t)) return e.get(t); e.set(t, f); } for (a in t) "default" !== a && {}.hasOwnProperty.call(t, a) && ((n = o && Object.getOwnPropertyDescriptor(t, a)) && (n.get || n.set) ? o(f, a, n) : f[a] = t[a]); return f; }
|
|
15
15
|
/**
|
|
@@ -24,7 +24,7 @@ const readText = async path => {
|
|
|
24
24
|
if (pending === null) {
|
|
25
25
|
throw new Error(`ENOENT: no such file or directory, open '${location}' (deleted by this statement)`);
|
|
26
26
|
}
|
|
27
|
-
return typeof pending === 'string' ? pending : (0, _readCache.cachedRead)(location, () => jsEnv.isNode ? (0, _nodeFiles.nodeFiles)().readFile(location, 'utf8') :
|
|
27
|
+
return typeof pending === 'string' ? pending : (0, _readCache.cachedRead)(location, () => jsEnv.isNode ? (0, _nodeFiles.nodeFiles)().readFile(location, 'utf8') : (0, _config.configuredFetch)(location).then(response => response.text()));
|
|
28
28
|
};
|
|
29
29
|
/**
|
|
30
30
|
* Read and parse one JSON file of the database: from disk in Node, over `fetch()` in a browser (see storagePath for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.readText=exports.readJson=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_storagePath=require("./storagePath"),_nodeFiles=require("./nodeFiles"),_readCache=require("./readCache"),_writeSet=require("./writeSet"),_config=require("../utilities/config");function _interopRequireWildcard(r,t){if(!t&&r&&r.__esModule)return r;var o,i,n=Object.defineProperty,a={__proto__:null,default:r};if(Object(r)!==r)return a;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(r))return e.get(r);e.set(r,a)}for(i in r)"default"!==i&&{}.hasOwnProperty.call(r,i)&&((o=n&&Object.getOwnPropertyDescriptor(r,i))&&(o.get||o.set)?n(a,i,o):a[i]=r[i]);return a}const readText=async e=>{const r=(0,_storagePath.storagePath)(e),t=(0,_writeSet.pendingFile)(r);if(null===t)throw new Error(`ENOENT: no such file or directory, open '${r}' (deleted by this statement)`);return"string"==typeof t?t:(0,_readCache.cachedRead)(r,(()=>jsEnv.isNode?(0,_nodeFiles.nodeFiles)().readFile(r,"utf8"):(0,_config.configuredFetch)(r).then((e=>e.text()))))};exports.readText=readText;const readJson=async e=>JSON.parse(await readText(e));exports.readJson=readJson;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.storagePath=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("../utilities/config");function _interopRequireWildcard(t,r){if(!r&&t&&t.__esModule)return t;var o,i,a=Object.defineProperty,n={__proto__:null,default:t};if(Object(t)!==t)return n;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(t))return e.get(t);e.set(t,n)}for(i in t)"default"!==i&&{}.hasOwnProperty.call(t,i)&&((o=a&&Object.getOwnPropertyDescriptor(t,i))&&(o.get||o.set)?a(n,i,o):n[i]=t[i]);return n}const storagePath=(e="")=>`${jsEnv.isBrowser?(0,_config.getSetting)("relativePath",""):""}${(0,_config.activeDatabasePath)()}${e}`;exports.storagePath=storagePath;
|
|
@@ -1,41 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
require("core-js/modules/esnext.weak-map.delete-all.js");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.writeAtomically = exports.withWriteSet = exports.stageWrite = exports.stageRemoveDirectory = exports.stageRemove = exports.stageMakeDirectory = exports.pendingListing = exports.pendingFile = exports.pendingExists = void 0;
|
|
8
|
-
require("core-js/modules/esnext.iterator.constructor.js");
|
|
9
|
-
require("core-js/modules/esnext.iterator.filter.js");
|
|
10
|
-
require("core-js/modules/esnext.map.delete-all.js");
|
|
11
|
-
require("core-js/modules/esnext.map.every.js");
|
|
12
|
-
require("core-js/modules/esnext.map.filter.js");
|
|
13
|
-
require("core-js/modules/esnext.map.find.js");
|
|
14
|
-
require("core-js/modules/esnext.map.find-key.js");
|
|
15
|
-
require("core-js/modules/esnext.map.includes.js");
|
|
16
|
-
require("core-js/modules/esnext.map.key-of.js");
|
|
17
|
-
require("core-js/modules/esnext.map.map-keys.js");
|
|
18
|
-
require("core-js/modules/esnext.map.map-values.js");
|
|
19
|
-
require("core-js/modules/esnext.map.merge.js");
|
|
20
|
-
require("core-js/modules/esnext.map.reduce.js");
|
|
21
|
-
require("core-js/modules/esnext.map.some.js");
|
|
22
|
-
require("core-js/modules/esnext.map.update.js");
|
|
23
|
-
require("core-js/modules/esnext.set.add-all.js");
|
|
24
|
-
require("core-js/modules/esnext.set.delete-all.js");
|
|
25
|
-
require("core-js/modules/esnext.set.difference.js");
|
|
26
|
-
require("core-js/modules/esnext.set.every.js");
|
|
27
|
-
require("core-js/modules/esnext.set.filter.js");
|
|
28
|
-
require("core-js/modules/esnext.set.find.js");
|
|
29
|
-
require("core-js/modules/esnext.set.intersection.js");
|
|
30
|
-
require("core-js/modules/esnext.set.is-disjoint-from.js");
|
|
31
|
-
require("core-js/modules/esnext.set.is-subset-of.js");
|
|
32
|
-
require("core-js/modules/esnext.set.is-superset-of.js");
|
|
33
|
-
require("core-js/modules/esnext.set.join.js");
|
|
34
|
-
require("core-js/modules/esnext.set.map.js");
|
|
35
|
-
require("core-js/modules/esnext.set.reduce.js");
|
|
36
|
-
require("core-js/modules/esnext.set.some.js");
|
|
37
|
-
require("core-js/modules/esnext.set.symmetric-difference.js");
|
|
38
|
-
require("core-js/modules/esnext.set.union.js");
|
|
39
7
|
var jsEnv = _interopRequireWildcard(require("browser-or-node"));
|
|
40
8
|
var _storagePath = require("./storagePath");
|
|
41
9
|
var _nodeFiles = require("./nodeFiles");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.writeAtomically=exports.withWriteSet=exports.stageWrite=exports.stageRemoveDirectory=exports.stageRemove=exports.stageMakeDirectory=exports.pendingListing=exports.pendingFile=exports.pendingExists=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_storagePath=require("./storagePath"),_nodeFiles=require("./nodeFiles"),_readCache=require("./readCache");function _interopRequireWildcard(t,r){if(!r&&t&&t.__esModule)return t;var s,i,o=Object.defineProperty,n={__proto__:null,default:t};if(Object(t)!==t)return n;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(t))return e.get(t);e.set(t,n)}for(i in t)"default"!==i&&{}.hasOwnProperty.call(t,i)&&((s=o&&Object.getOwnPropertyDescriptor(t,i))&&(s.get||s.set)?o(n,i,s):n[i]=t[i]);return n}const writeSets=new Map,currentWriteSet=()=>writeSets.get((0,_storagePath.storagePath)()),folderPrefix=e=>e.endsWith("/")?e:`${e}/`,insideAny=(e,t)=>{for(const r of t)if(e===r||e.startsWith(folderPrefix(r)))return!0;return!1},writeAtomically=async(e,t)=>{const r=`${e}.${crypto.randomUUID()}.tmp`,s=(0,_nodeFiles.nodeFiles)();try{await s.writeFile(r,t),await s.rename(r,e)}catch(e){throw await s.rm(r,{force:!0}).catch((()=>{})),e}};exports.writeAtomically=writeAtomically;const removeFolder=async e=>{(0,_readCache.cacheRemove)(e,!0),await(0,_nodeFiles.nodeFiles)().rm(e,{recursive:!0,force:!0}),(0,_readCache.cacheRemove)(e,!0)},commit=async e=>{const t=(0,_nodeFiles.nodeFiles)(),r=t=>{const r=folderPrefix(t);return[...e.madeFolders].some((e=>e===t||e.startsWith(r)))||[...e.files].some((([e,t])=>null!==t&&e.startsWith(r)))},s=[...e.removedFolders];for(const e of s.filter(r))await removeFolder(e);for(const r of e.madeFolders)await t.mkdir(r,{recursive:!0});for(const[t,r]of e.files)null!==r&&(await writeAtomically(t,r),(0,_readCache.cacheWrite)(t,r));for(const[r,s]of e.files)null===s&&((0,_readCache.cacheRemove)(r),await t.rm(r,{force:!0}),(0,_readCache.cacheRemove)(r));for(const e of s.filter((e=>!r(e))))await removeFolder(e)},withWriteSet=async e=>{const t=(0,_storagePath.storagePath)();if(!jsEnv.isNode||writeSets.has(t))return e();const r={files:new Map,madeFolders:new Set,removedFolders:new Set};let s;writeSets.set(t,r);try{s=await e()}finally{writeSets.delete(t)}return await commit(r),s};exports.withWriteSet=withWriteSet;const pendingFile=e=>{const t=currentWriteSet();if(t)return t.files.has(e)?t.files.get(e):insideAny(e,t.removedFolders)?null:void 0};exports.pendingFile=pendingFile;const pendingExists=e=>{const t=currentWriteSet();if(!t)return;if(t.files.has(e))return null!==t.files.get(e);const r=folderPrefix(e);return!(![...t.madeFolders].some((t=>t===e||t.startsWith(r)))&&![...t.files].some((([e,t])=>null!==t&&e.startsWith(r))))||!insideAny(e,t.removedFolders)&&void 0};exports.pendingExists=pendingExists;const pendingListing=(e,t)=>{const r=currentWriteSet();if(!r)return t;const s=folderPrefix(e),i=new Set(t.filter((e=>!insideAny(e,r.removedFolders))));for(const[e,t]of r.files)e.startsWith(s)&&(null===t?i.delete(e):i.add(e));return[...i]};exports.pendingListing=pendingListing;const stageWrite=(e,t)=>{const r=currentWriteSet();return!!r&&(r.files.delete(e),r.files.set(e,t),!0)};exports.stageWrite=stageWrite;const stageRemove=e=>{const t=currentWriteSet();return!!t&&(t.files.delete(e),t.files.set(e,null),!0)};exports.stageRemove=stageRemove;const stageMakeDirectory=e=>{const t=currentWriteSet();return!!t&&(t.madeFolders.add(e),!0)};exports.stageMakeDirectory=stageMakeDirectory;const stageRemoveDirectory=e=>{const t=currentWriteSet();if(!t)return!1;for(const r of[...t.files.keys()])insideAny(r,new Set([e]))&&t.files.delete(r);for(const r of[...t.madeFolders])insideAny(r,new Set([e]))&&t.madeFolders.delete(r);return t.removedFolders.add(e),!0};exports.stageRemoveDirectory=stageRemoveDirectory;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Throw unless this is a name the query language allows (letters, digits, `_` and `-`). Record and field names end up
|
|
3
|
+
* in file paths and row keys, so a name like `../x` from a direct JS call must be refused before it reaches storage.
|
|
4
|
+
* @param name
|
|
5
|
+
* @param where What is being named, for the error (e.g. `create()`).
|
|
6
|
+
*/
|
|
7
|
+
export declare const assertValidName: (name: unknown, where: string) => void;
|
|
8
|
+
/**
|
|
9
|
+
* Throw unless this is a valid index file name (`<name>.json`); an empty lookup (no index file) is allowed.
|
|
10
|
+
* @param lookup
|
|
11
|
+
* @param where
|
|
12
|
+
*/
|
|
13
|
+
export declare const assertValidLookup: (lookup: unknown, where: string) => void;
|
|
14
|
+
//# sourceMappingURL=assertValidName.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.assertValidName = exports.assertValidLookup = void 0;
|
|
7
|
+
require("core-js/modules/es.json.stringify.js");
|
|
8
|
+
var _parseCreate = require("./parsers/parseCreate");
|
|
9
|
+
/** An index file name: a name plus `.json`, as keyLookup makes them (e.g. `pk__id.json`). */
|
|
10
|
+
const lookupMatch = /^[a-z0-9_-]+\.json$/i;
|
|
11
|
+
/**
|
|
12
|
+
* Throw unless this is a name the query language allows (letters, digits, `_` and `-`). Record and field names end up
|
|
13
|
+
* in file paths and row keys, so a name like `../x` from a direct JS call must be refused before it reaches storage.
|
|
14
|
+
* @param name
|
|
15
|
+
* @param where What is being named, for the error (e.g. `create()`).
|
|
16
|
+
*/
|
|
17
|
+
const assertValidName = (name, where) => {
|
|
18
|
+
if (typeof name !== 'string' || !_parseCreate.nameMatch.test(name)) {
|
|
19
|
+
throw new Error(`Invalid name ${JSON.stringify(name) ?? 'undefined'} in ${where}: names use letters, digits, _ and - only`);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Throw unless this is a valid index file name (`<name>.json`); an empty lookup (no index file) is allowed.
|
|
24
|
+
* @param lookup
|
|
25
|
+
* @param where
|
|
26
|
+
*/
|
|
27
|
+
exports.assertValidName = assertValidName;
|
|
28
|
+
const assertValidLookup = (lookup, where) => {
|
|
29
|
+
if (lookup === '' || typeof lookup === 'undefined') return;
|
|
30
|
+
if (typeof lookup !== 'string' || !lookupMatch.test(lookup)) {
|
|
31
|
+
throw new Error(`Invalid index file ${JSON.stringify(lookup) ?? 'undefined'} in ${where}: use a name plus .json`);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.assertValidLookup = assertValidLookup;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.assertValidName=exports.assertValidLookup=void 0,require("core-js/modules/es.json.stringify.js");var _parseCreate=require("./parsers/parseCreate");const lookupMatch=/^[a-z0-9_-]+\.json$/i,assertValidName=(e,s)=>{if("string"!=typeof e||!_parseCreate.nameMatch.test(e))throw new Error(`Invalid name ${JSON.stringify(e)??"undefined"} in ${s}: names use letters, digits, _ and - only`)};exports.assertValidName=assertValidName;const assertValidLookup=(e,s)=>{if(""!==e&&void 0!==e&&("string"!=typeof e||!lookupMatch.test(e)))throw new Error(`Invalid index file ${JSON.stringify(e)??"undefined"} in ${s}: use a name plus .json`)};exports.assertValidLookup=assertValidLookup;
|
|
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.computeKeyValue = void 0;
|
|
7
7
|
require("core-js/modules/es.json.stringify.js");
|
|
8
|
-
require("core-js/modules/esnext.iterator.constructor.js");
|
|
9
|
-
require("core-js/modules/esnext.iterator.map.js");
|
|
10
8
|
/**
|
|
11
9
|
* The value a key (of any field count) indexes and checks uniqueness by. A single-field key uses
|
|
12
10
|
* the field's own raw value directly - this is the pre-existing, already-shipped index file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.computeKeyValue=void 0,require("core-js/modules/es.json.stringify.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.computeKeyValue=void 0,require("core-js/modules/es.json.stringify.js");const computeKeyValue=(e,t)=>1===e.length?t[e[0]]:JSON.stringify(e.map((e=>t[e])));exports.computeKeyValue=computeKeyValue;
|
|
@@ -4,26 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.conditionEntities = void 0;
|
|
7
|
-
require("core-js/modules/esnext.iterator.constructor.js");
|
|
8
|
-
require("core-js/modules/esnext.iterator.filter.js");
|
|
9
|
-
require("core-js/modules/esnext.iterator.flat-map.js");
|
|
10
|
-
require("core-js/modules/esnext.iterator.map.js");
|
|
11
|
-
require("core-js/modules/esnext.set.add-all.js");
|
|
12
|
-
require("core-js/modules/esnext.set.delete-all.js");
|
|
13
|
-
require("core-js/modules/esnext.set.difference.js");
|
|
14
|
-
require("core-js/modules/esnext.set.every.js");
|
|
15
|
-
require("core-js/modules/esnext.set.filter.js");
|
|
16
|
-
require("core-js/modules/esnext.set.find.js");
|
|
17
|
-
require("core-js/modules/esnext.set.intersection.js");
|
|
18
|
-
require("core-js/modules/esnext.set.is-disjoint-from.js");
|
|
19
|
-
require("core-js/modules/esnext.set.is-subset-of.js");
|
|
20
|
-
require("core-js/modules/esnext.set.is-superset-of.js");
|
|
21
|
-
require("core-js/modules/esnext.set.join.js");
|
|
22
|
-
require("core-js/modules/esnext.set.map.js");
|
|
23
|
-
require("core-js/modules/esnext.set.reduce.js");
|
|
24
|
-
require("core-js/modules/esnext.set.some.js");
|
|
25
|
-
require("core-js/modules/esnext.set.symmetric-difference.js");
|
|
26
|
-
require("core-js/modules/esnext.set.union.js");
|
|
27
7
|
var _isEntityProperty = require("./parsers/isEntityProperty");
|
|
28
8
|
var _splitEntityProperty = require("./parsers/splitEntityProperty");
|
|
29
9
|
var _conditionTree = require("./conditionTree");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.conditionEntities=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.conditionEntities=void 0;var _isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_conditionTree=require("./conditionTree");const conditionEntities=t=>{const i=t.entity,e=t.joinClauses.length?t.joinEntity:void 0,r=new Set([i,e]),o=new Set(t.mergeJoins.filter((t=>r.has((0,_splitEntityProperty.splitEntityProperty)(t.propertyA).entity))).map((t=>(0,_splitEntityProperty.splitEntityProperty)(t.propertyB).entity))),n=new Set(t.joinClauses.flatMap((t=>[t.propertyA,t.propertyB].map((t=>(0,_splitEntityProperty.splitEntityProperty)(t).entity)))).filter((t=>!r.has(t)&&!o.has(t)))),p="update"===t.command||"delete"===t.command;let s=!1;for(const r of(0,_conditionTree.conditionsOf)(t.where)){if(!(0,_isEntityProperty.isEntityProperty)(r.property))continue;const{entity:y,property:c}=(0,_splitEntityProperty.splitEntityProperty)(r.property);if(y===i){r.property=c;continue}if(p)throw new Error(`${t.command} can only use conditions on ${i}'s own fields, not ${r.property}`);if(y===e){s=!0;continue}if(o.has(y))continue;if(n.has(y))throw new Error(`${y} only links ${i} to ${e}: a condition can't use its fields (${r.property})`);const l=[i,e,...o].filter((t=>void 0!==t)).join(", ");throw new Error(`${y} is not part of this query (${r.property}): conditions can use the fields of ${l}`)}return s};exports.conditionEntities=conditionEntities;
|