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.
- package/README.md +7 -1
- package/browser/jsonFsQuery.js +764 -3841
- package/browser/jsonFsQuery.min.js +1 -1
- package/dist/data/introspect/alter.js +0 -5
- package/dist/data/introspect/alter.min.js +1 -1
- package/dist/data/introspect/create.js +0 -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/drop.js +0 -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/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 +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")
|
|
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")
|
|
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
|
|
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
|
|
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";
|
|
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
|
|
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";
|
|
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")
|
|
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")
|
|
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";
|
|
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
|
|
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";
|
|
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")
|
|
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")
|
|
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");
|