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
|
@@ -5,39 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.IndexBuffer = 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.find.js");
|
|
10
|
-
require("core-js/modules/esnext.iterator.some.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
|
-
require("core-js/modules/esnext.set.add-all.js");
|
|
25
|
-
require("core-js/modules/esnext.set.delete-all.js");
|
|
26
|
-
require("core-js/modules/esnext.set.difference.js");
|
|
27
|
-
require("core-js/modules/esnext.set.every.js");
|
|
28
|
-
require("core-js/modules/esnext.set.filter.js");
|
|
29
|
-
require("core-js/modules/esnext.set.find.js");
|
|
30
|
-
require("core-js/modules/esnext.set.intersection.js");
|
|
31
|
-
require("core-js/modules/esnext.set.is-disjoint-from.js");
|
|
32
|
-
require("core-js/modules/esnext.set.is-subset-of.js");
|
|
33
|
-
require("core-js/modules/esnext.set.is-superset-of.js");
|
|
34
|
-
require("core-js/modules/esnext.set.join.js");
|
|
35
|
-
require("core-js/modules/esnext.set.map.js");
|
|
36
|
-
require("core-js/modules/esnext.set.reduce.js");
|
|
37
|
-
require("core-js/modules/esnext.set.some.js");
|
|
38
|
-
require("core-js/modules/esnext.set.symmetric-difference.js");
|
|
39
|
-
require("core-js/modules/esnext.set.union.js");
|
|
40
|
-
require("core-js/modules/esnext.weak-map.delete-all.js");
|
|
41
8
|
var _compareAs = require("./compareAs");
|
|
42
9
|
const unkeyed = Symbol('unkeyed');
|
|
43
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.IndexBuffer=void 0,require("core-js/modules/es.array.includes.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.IndexBuffer=void 0,require("core-js/modules/es.array.includes.js");var _compareAs=require("./compareAs");const unkeyed=Symbol("unkeyed"),keyOf=(e,s)=>{if(!_compareAs.comparableTypes.includes(e))return unkeyed;const t=(0,_compareAs.compareAs)(e,s);return"object"==typeof t&&null!==t?unkeyed:t};class IndexBuffer{constructor(e,s){this.byKey=new Map,this.listed=new WeakMap,this.entries=e,this.type=s;for(const t of e){const e=keyOf(s,t.value);e===unkeyed||this.byKey.has(e)||this.byKey.set(e,t)}}find(e){const s=keyOf(this.type,e);return s===unkeyed?this.entries.find((s=>(0,_compareAs.sameValue)(this.type,s.value,e))):this.byKey.get(s)}has(e){if(null==e)return!1;const s=e=>Boolean(e&&Array.isArray(e.record)&&e.record.length),t=this.find(e);return!t||s(t)?s(t):this.entries.some((t=>(0,_compareAs.sameValue)(this.type,t.value,e)&&s(t)))}add(e,s){const t=this.find(e);if(t){this.listed.has(t)||this.listed.set(t,new Set(t.record));const e=this.listed.get(t);return void(e.has(s)||(e.add(s),t.record.push(s)))}const r={value:e,record:[s]};this.entries.push(r),this.listed.set(r,new Set(r.record));const n=keyOf(this.type,e);n!==unkeyed&&this.byKey.set(n,r)}}exports.IndexBuffer=IndexBuffer;
|
|
@@ -4,9 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.indexHas = 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.some.js");
|
|
10
7
|
var _storage = require("../storage");
|
|
11
8
|
var _where = require("../queries/where");
|
|
12
9
|
var _retrieveRecord = require("./retrieveRecord");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.indexHas=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.indexHas=void 0;var _storage=require("../storage"),_where=require("../queries/where"),_retrieveRecord=require("./retrieveRecord"),_isSingleFieldKey=require("./isSingleFieldKey"),_fieldType=require("./fieldType");const indexHas=async(e,r,i)=>{const t=await(0,_retrieveRecord.retrieveRecord)(e),s=t.keys.find((e=>(0,_isSingleFieldKey.isSingleFieldKey)(e,r)&&e.lookup));if(!s)return;if(!(t.entries||[]).length)return!1;let o;try{o=await(0,_storage.readJson)(`__indexes/${t.path}/${s.lookup}`)}catch(e){return}return(0,_where.where)(o,{property:"value",comparator:"=",value:i,type:(0,_fieldType.fieldType)(t,r)}).some((e=>Array.isArray(e.record)&&e.record.length>0))};exports.indexHas=indexHas;
|
|
@@ -4,39 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.joinBases = 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.for-each.js");
|
|
10
|
-
require("core-js/modules/esnext.iterator.map.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
|
-
require("core-js/modules/esnext.set.add-all.js");
|
|
25
|
-
require("core-js/modules/esnext.set.delete-all.js");
|
|
26
|
-
require("core-js/modules/esnext.set.difference.js");
|
|
27
|
-
require("core-js/modules/esnext.set.every.js");
|
|
28
|
-
require("core-js/modules/esnext.set.filter.js");
|
|
29
|
-
require("core-js/modules/esnext.set.find.js");
|
|
30
|
-
require("core-js/modules/esnext.set.intersection.js");
|
|
31
|
-
require("core-js/modules/esnext.set.is-disjoint-from.js");
|
|
32
|
-
require("core-js/modules/esnext.set.is-subset-of.js");
|
|
33
|
-
require("core-js/modules/esnext.set.is-superset-of.js");
|
|
34
|
-
require("core-js/modules/esnext.set.join.js");
|
|
35
|
-
require("core-js/modules/esnext.set.map.js");
|
|
36
|
-
require("core-js/modules/esnext.set.reduce.js");
|
|
37
|
-
require("core-js/modules/esnext.set.some.js");
|
|
38
|
-
require("core-js/modules/esnext.set.symmetric-difference.js");
|
|
39
|
-
require("core-js/modules/esnext.set.union.js");
|
|
40
7
|
var _readEntity = require("../queries/readEntity");
|
|
41
8
|
var _retrieveRecord = require("./retrieveRecord");
|
|
42
9
|
var _retrieveRecords = require("./retrieveRecords");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.joinBases=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.joinBases=void 0;var _readEntity=require("../queries/readEntity"),_retrieveRecord=require("./retrieveRecord"),_retrieveRecords=require("./retrieveRecords"),_retrieveIndexes=require("./retrieveIndexes"),_joinKey=require("./joinKey"),_rowLookup=require("./rowLookup");const indexedRows=async(e,r,t,o,i)=>{const n=(await(0,_retrieveIndexes.retrieveIndexes)(e,[r],{}))[r];if(!n)return;const s=new Set(o.map((e=>(0,_joinKey.joinKey)(t,e[i]))).filter((e=>void 0!==e))),a=new Set;for(const e of n)s.has((0,_joinKey.joinKey)(t,e.value))&&e.record.forEach((e=>a.add(e)));const y=await(0,_retrieveRecord.retrieveRecord)(e);return(0,_retrieveRecords.retrieveEntryRows)(y,y.entries.filter((e=>a.has(e))))},joinBases=async(e,r,t,o,i)=>{const n=new Map,s=(e,r)=>n.set(e,{rows:r,lookups:new _rowLookup.RowLookups(r)});s(e,t[e]),i&&s(r,t[r]);const a=async e=>(await(0,_readEntity.readEntity)(e,t))[e];for(const e of o){const r=[{name:e.entityA,property:e.propertyA,other:e.entityB,otherProperty:e.propertyB},{name:e.entityB,property:e.propertyB,other:e.entityA,otherProperty:e.propertyA}];for(const{name:t,property:o,other:i,otherProperty:y}of r){if(n.has(t))continue;s(t,("="===e.comparator&&e.typeA===e.typeB&&(0,_joinKey.isKeyedType)(e.typeA)&&n.has(i)?await indexedRows(t,o,e.typeA,n.get(i).rows,y):void 0)??await a(t))}}return n.has(r)||s(r,await a(r)),n};exports.joinBases=joinBases;
|
|
@@ -4,25 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.keyIndexFiles = 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.for-each.js");
|
|
10
|
-
require("core-js/modules/esnext.set.add-all.js");
|
|
11
|
-
require("core-js/modules/esnext.set.delete-all.js");
|
|
12
|
-
require("core-js/modules/esnext.set.difference.js");
|
|
13
|
-
require("core-js/modules/esnext.set.every.js");
|
|
14
|
-
require("core-js/modules/esnext.set.filter.js");
|
|
15
|
-
require("core-js/modules/esnext.set.find.js");
|
|
16
|
-
require("core-js/modules/esnext.set.intersection.js");
|
|
17
|
-
require("core-js/modules/esnext.set.is-disjoint-from.js");
|
|
18
|
-
require("core-js/modules/esnext.set.is-subset-of.js");
|
|
19
|
-
require("core-js/modules/esnext.set.is-superset-of.js");
|
|
20
|
-
require("core-js/modules/esnext.set.join.js");
|
|
21
|
-
require("core-js/modules/esnext.set.map.js");
|
|
22
|
-
require("core-js/modules/esnext.set.reduce.js");
|
|
23
|
-
require("core-js/modules/esnext.set.some.js");
|
|
24
|
-
require("core-js/modules/esnext.set.symmetric-difference.js");
|
|
25
|
-
require("core-js/modules/esnext.set.union.js");
|
|
26
7
|
var _storage = require("../storage");
|
|
27
8
|
/**
|
|
28
9
|
* The entry files a key's index lists for the values `matches` accepts, in the record's own order (the order its rows
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keyIndexFiles=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keyIndexFiles=void 0;var _storage=require("../storage");const keyIndexFiles=async(e,r,t)=>{if(!r.lookup)return;if(!(e.entries||[]).length)return[];let s;try{s=await(0,_storage.readJson)(`__indexes/${e.path}/${r.lookup}`)}catch(e){return}const o=new Set;for(const e of Array.isArray(s)?s:[])Array.isArray(e.record)&&t(e.value)&&e.record.forEach((e=>o.add(e)));return e.entries.filter((e=>o.has(e)))};exports.keyIndexFiles=keyIndexFiles;
|
|
@@ -4,27 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.assertKnownFields = exports.assertFieldsDefined = 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.flat-map.js");
|
|
11
|
-
require("core-js/modules/esnext.iterator.map.js");
|
|
12
|
-
require("core-js/modules/esnext.set.add-all.js");
|
|
13
|
-
require("core-js/modules/esnext.set.delete-all.js");
|
|
14
|
-
require("core-js/modules/esnext.set.difference.js");
|
|
15
|
-
require("core-js/modules/esnext.set.every.js");
|
|
16
|
-
require("core-js/modules/esnext.set.filter.js");
|
|
17
|
-
require("core-js/modules/esnext.set.find.js");
|
|
18
|
-
require("core-js/modules/esnext.set.intersection.js");
|
|
19
|
-
require("core-js/modules/esnext.set.is-disjoint-from.js");
|
|
20
|
-
require("core-js/modules/esnext.set.is-subset-of.js");
|
|
21
|
-
require("core-js/modules/esnext.set.is-superset-of.js");
|
|
22
|
-
require("core-js/modules/esnext.set.join.js");
|
|
23
|
-
require("core-js/modules/esnext.set.map.js");
|
|
24
|
-
require("core-js/modules/esnext.set.reduce.js");
|
|
25
|
-
require("core-js/modules/esnext.set.some.js");
|
|
26
|
-
require("core-js/modules/esnext.set.symmetric-difference.js");
|
|
27
|
-
require("core-js/modules/esnext.set.union.js");
|
|
28
7
|
var _retrieveRecord = require("./retrieveRecord");
|
|
29
8
|
var _isEntityProperty = require("./parsers/isEntityProperty");
|
|
30
9
|
var _splitEntityProperty = require("./parsers/splitEntityProperty");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.assertKnownFields=exports.assertFieldsDefined=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.assertKnownFields=exports.assertFieldsDefined=void 0;var _retrieveRecord=require("./retrieveRecord"),_isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_conditionTree=require("./conditionTree");const fieldList=e=>e.definition.map((e=>e.name)).join(", "),assertFieldsDefined=(e,r,t,s)=>{const o=new Set(r.definition.map((e=>e.name))),i=t.find((e=>!o.has(e)));if(void 0!==i)throw new Error(`Unknown field "${i}" in ${s}: ${e} has ${fieldList(r)}`)};exports.assertFieldsDefined=assertFieldsDefined;const assertKnownFields=async(e,r)=>{const t=new Set((e.mergeJoins||[]).map((e=>(0,_splitEntityProperty.splitEntityProperty)(e.propertyB).entity))),s=[...(0,_conditionTree.conditionsOf)(e.where).map((e=>({property:e.property,clause:"where"}))),...(e.sortClauses||[]).map((e=>({property:e.property,clause:"sort"}))),...(e.groupBy||[]).map((e=>({property:e,clause:"group by"}))),...(e.selectClauses||[]).filter((r=>r.property!==e.joinEntity)).map((e=>({property:e.property,clause:"select"}))),...(e.insertValues||[]).flatMap((e=>Object.keys(e||{}).map((e=>({property:e,clause:"insert",own:!0}))))),...Object.keys(e.updateValues||{}).map((e=>({property:e,clause:"set",own:!0}))),...(e.joinClauses||[]).flatMap((e=>[{property:e.propertyA,clause:"on"},{property:e.propertyB,clause:"on"}])),...(e.mergeJoins||[]).flatMap((e=>[{property:e.propertyA,clause:"merge"},{property:e.propertyB,clause:"merge"}]))];for(const{property:o,clause:i,own:p}of s){if("string"!=typeof o)continue;let s=e.entity,n=o;if(!p&&(0,_isEntityProperty.isEntityProperty)(o)&&({entity:s,property:n}=(0,_splitEntityProperty.splitEntityProperty)(o)),"select"===i&&s!==e.entity&&!t.has(s))throw new Error(`Can't select "${o}": a joined record's rows are a list under its name (select ${s}), and its fields are on each row only when merged (merge ... with ${s}.<field>)`);Object.prototype.hasOwnProperty.call(r,s)||(r[s]=await(0,_retrieveRecord.retrieveRecord)(s)),assertFieldsDefined(s,r[s],[n],i)}};exports.assertKnownFields=assertKnownFields;
|
|
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.mergeJoin = void 0;
|
|
7
|
-
require("core-js/modules/esnext.iterator.constructor.js");
|
|
8
|
-
require("core-js/modules/esnext.iterator.map.js");
|
|
9
7
|
var _readEntity = require("../queries/readEntity");
|
|
10
8
|
var _splitEntityProperty = require("./parsers/splitEntityProperty");
|
|
11
9
|
var _where = require("../queries/where");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.mergeJoin=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.mergeJoin=void 0;var _readEntity=require("../queries/readEntity"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_where=require("../queries/where"),_retrieveRecord=require("./retrieveRecord"),_fieldType=require("./fieldType");const mergeJoin=async(e="",r="",t={})=>{const{entity:i,property:o}=(0,_splitEntityProperty.splitEntityProperty)(e),{entity:n,property:p}=(0,_splitEntityProperty.splitEntityProperty)(r);t=await(0,_readEntity.readEntity)(i,t),t=await(0,_readEntity.readEntity)(n,t);const y=(0,_fieldType.fieldType)(await(0,_retrieveRecord.retrieveRecord)(n),p);return t[i]=t[i].map((e=>{const r=(0,_where.where)(t[n],{property:p,comparator:"=",value:e[o],type:y});if(!r.length)return e;const i=r[0];for(const r in i)r!==p&&(e[`${n}.${r}`]=i[r]);return e})),t};exports.mergeJoin=mergeJoin;
|
|
@@ -1,12 +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.usesPackedReads = exports.retrievePacked = exports.packedPath = exports.discardPacked = void 0;
|
|
8
|
-
require("core-js/modules/esnext.iterator.constructor.js");
|
|
9
|
-
require("core-js/modules/esnext.iterator.some.js");
|
|
10
7
|
var jsEnv = _interopRequireWildcard(require("browser-or-node"));
|
|
11
8
|
var _storage = require("../storage");
|
|
12
9
|
var _config = require("./config");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.usesPackedReads=exports.retrievePacked=exports.packedPath=exports.discardPacked=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_storage=require("../storage"),_config=require("./config");function _interopRequireWildcard(r,t){if(!t&&r&&r.__esModule)return r;var a,s,d=Object.defineProperty,c={__proto__:null,default:r};if(Object(r)!==r)return c;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(r))return e.get(r);e.set(r,c)}for(s in r)"default"!==s&&{}.hasOwnProperty.call(r,s)&&((a=d&&Object.getOwnPropertyDescriptor(r,s))&&(a.get||a.set)?d(c,s,a):c[s]=r[s]);return c}const packedPath=e=>`__packed/${e}.json`;exports.packedPath=packedPath;const usesPackedReads=()=>(0,_config.getSetting)("packedReads",!jsEnv.isNode);exports.usesPackedReads=usesPackedReads;const retrievePacked=async e=>{if(!usesPackedReads())return;let r;try{r=await(0,_storage.readJson)(packedPath(e.path))}catch(e){return}const t=e.entries||[];return r&&Array.isArray(r.entries)&&Array.isArray(r.rows)&&r.entries.length===t.length&&r.rows.length===t.length&&!r.entries.some(((e,r)=>e!==t[r]))?r:void 0};exports.retrievePacked=retrievePacked;const discardPacked=async e=>{(0,_storage.fileExists)(packedPath(e))&&await(0,_storage.removeFile)(packedPath(e))};exports.discardPacked=discardPacked;
|
|
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.findConditions = 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.flat-map.js");
|
|
10
8
|
var _parseLiteralValue = require("./parseLiteralValue");
|
|
11
9
|
var _conditionTree = require("../conditionTree");
|
|
12
10
|
var _maskStrings = require("./maskStrings");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.findConditions=void 0,require("core-js/modules/es.array.includes.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.findConditions=void 0,require("core-js/modules/es.array.includes.js");var _parseLiteralValue=require("./parseLiteralValue"),_conditionTree=require("../conditionTree"),_maskStrings=require("./maskStrings"),_splitClauses=require("./splitClauses");const wordEnd="(?![a-z0-9_.-])",keyword=e=>new RegExp(`^(?:${e})${wordEnd}`,"i"),conditionMatch=new RegExp(`^([a-z0-9_-]+\\.?[a-z0-9_-]*)\\s+(?:(is\\s+not\\s+null|is\\s+null|exists|does\\s+not\\s+exist)${wordEnd}|(<>|!=|>=|<=|=|>|<|in|between|like)\\s+(${_maskStrings.placeholderSource}|(${_parseLiteralValue.numberSource})|${_maskStrings.arraySource}|(null)|(true)|(false)))`,"i"),readCondition=e=>{const r=e[1];if(void 0!==e[2])return{property:r,comparator:e[2].toLowerCase().replace(/\s+/g," "),value:null};const n=e[3].toLowerCase(),t=(0,_parseLiteralValue.parseLiteralValue)(e,5);if(null===t)throw new Error(`\`${r} ${n} null\` never matches (null equals nothing, as in SQL): use \`${r} is null\` or \`${r} is not null\``);if("between"===n&&Array.isArray(t)&&t.includes(null))throw new Error(`\`${r} between\` can't have a null bound: it would never match`);return{property:r,comparator:n,value:t}},join=(e,r)=>{const n=r.flatMap((r=>!(0,_conditionTree.isCondition)(r)&&e in r?r[e]:[r]));return 1===n.length?n[0]:"and"===e?{and:n}:{or:n}},readExpression=e=>{let r=0;const n=()=>e.slice(r),t=()=>{r+=n().length-n().trimStart().length},o=e=>{t();const o=n().match(e);if(o)return r+=o[0].length,o[0]},i=()=>(0,_maskStrings.unmaskStrings)(n().trim(),"'"),s=e=>{t();const a=n().match(conditionMatch);if(a)return r+=a[0].length,readCondition(a);if(("and"===e||"or"===e)&&keyword("where").test(n()))throw new Error(`"${e} where" is no longer supported: ${_splitClauses.whereHint}`);if(o(keyword("not")))return{not:s("not")};if(o(/^\(/)){if(t(),n().startsWith(")"))throw new Error("Empty brackets in a where clause");const e=l("(");if(!o(/^\)/))throw new Error("Missing ) "+(n().trim()?`before: ${i()}`:"at the end of the where clause"));return e}throw new Error(`Missing a condition after ${e}${n().trim()?`: ${i()}`:""}`)},a=e=>{const r=[s(e)];for(;;){const e=o(keyword("and"));if(!e)break;r.push(s(e.toLowerCase().replace(/\s+/g," ")))}return join("and",r)},l=e=>{const r=[a(e)];for(;;){const e=o(keyword("or"));if(!e)break;r.push(a(e.toLowerCase().replace(/\s+/g," ")))}return join("or",r)},u=l("where");if(t(),n().startsWith(")"))throw new Error(`Unexpected ) in a where clause: ${i()}`);if(conditionMatch.test(n()))throw new Error(`Missing and/or before: ${i()}`);return{node:u,end:r}},findConditions=(e,r)=>{const{node:n,end:t}=readExpression(r);return e.where=n,r.slice(t).trim()};exports.findConditions=findConditions;
|
|
@@ -4,8 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.findGroupBy = void 0;
|
|
7
|
-
require("core-js/modules/esnext.iterator.constructor.js");
|
|
8
|
-
require("core-js/modules/esnext.iterator.find.js");
|
|
9
7
|
const groupMatch = /^[a-z0-9._-]+(?:\s*,\s*[a-z0-9._-]+)*/i;
|
|
10
8
|
/**
|
|
11
9
|
* Read a group by clause body (`a, b`, see splitClauses).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.findGroupBy=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.findGroupBy=void 0;const groupMatch=/^[a-z0-9._-]+(?:\s*,\s*[a-z0-9._-]+)*/i,findGroupBy=(r,t)=>{const o=t.match(groupMatch);if(o){const e=o[0].split(/\s*,\s*/),i=e.find(((r,t)=>e.indexOf(r)!==t));if(i)throw new Error(`"${i}" is in group by twice`);return r.groupBy=e,t.slice(o[0].length).trim()}return t};exports.findGroupBy=findGroupBy;
|
|
@@ -5,9 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.unmaskStrings = exports.placeholderSource = exports.maskStrings = exports.maskArrays = exports.fromPlaceholder = exports.arraySource = 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.some.js");
|
|
11
8
|
var _scanQuery = require("./scanQuery");
|
|
12
9
|
/**
|
|
13
10
|
* Regex source matching one placeholder from maskStrings, with the hex-encoded value as its only group. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unmaskStrings=exports.placeholderSource=exports.maskStrings=exports.maskArrays=exports.fromPlaceholder=exports.arraySource=void 0,require("core-js/modules/es.json.stringify.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unmaskStrings=exports.placeholderSource=exports.maskStrings=exports.maskArrays=exports.fromPlaceholder=exports.arraySource=void 0,require("core-js/modules/es.json.stringify.js");var _scanQuery=require("./scanQuery");const placeholderSource=exports.placeholderSource="\\u0000([0-9a-f]*)\\u0000",placeholderMatch=new RegExp(placeholderSource,"g"),arraySource=exports.arraySource="\\u0001([0-9a-f]*)\\u0001",arrayMatch=new RegExp(arraySource,"g"),toHex=r=>r.split("").map((r=>r.charCodeAt(0).toString(16).padStart(4,"0"))).join(""),fromPlaceholder=r=>(r.match(/.{4}/g)||[]).map((r=>String.fromCharCode(parseInt(r,16)))).join("");exports.fromPlaceholder=fromPlaceholder;const maskStrings=r=>{const{strings:e}=(0,_scanQuery.assertClosed)((0,_scanQuery.scanQuery)(r));for(const[s,t]of[["\0","NUL"],["","SOH"]])for(let o=r.indexOf(s);-1!==o;o=r.indexOf(s,o+1))if(!e.some((({start:r,end:e})=>r<o&&o<e)))throw new Error(`Unexpected ${t} character at position ${o}`);const s=[];let t=0;for(const{start:o,end:a,value:n}of e)s.push(r.slice(t,o),`\0${toHex(n)}\0`),t=a;return s.push(r.slice(t)),s.join("")};exports.maskStrings=maskStrings;const unmaskStrings=(r,e="json")=>r.replace(placeholderMatch,((r,s)=>{const t=fromPlaceholder(s);return"json"===e?JSON.stringify(t):`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}'`})).replace(arrayMatch,((r,e)=>fromPlaceholder(e)));exports.unmaskStrings=unmaskStrings;const arrayJson=r=>{try{return JSON.stringify(JSON.parse(unmaskStrings(r),((r,e)=>{if("number"==typeof e&&!Number.isFinite(e))throw new Error(`${e} is too large`);if(Number.isInteger(e)&&!Number.isSafeInteger(e))throw new Error(`${e} is too large to store exactly (the largest whole number is ${Number.MAX_SAFE_INTEGER}): quote it to keep it as text`);return e})))}catch(e){throw new Error(`Invalid array ${unmaskStrings(r,"'")}: ${e.message}`)}},maskArrays=r=>{let e="",s=0,t=0;for(let o=0;o<r.length;o++){const a=r[o];if("["===a)0===s&&(t=o),s++;else if("]"===a&&s>0&&(s--,0===s)){e+=`${toHex(arrayJson(r.slice(t,o+1)))}`;continue}0===s&&(e+=a)}return s>0?e+r.slice(t):e};exports.maskArrays=maskArrays;
|
|
@@ -5,27 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.parseField = exports.parseCreate = exports.nameSource = exports.nameMatch = exports.keyLookup = exports.fieldMatch = exports.createMatch = 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.map.js");
|
|
12
|
-
require("core-js/modules/esnext.iterator.some.js");
|
|
13
|
-
require("core-js/modules/esnext.set.add-all.js");
|
|
14
|
-
require("core-js/modules/esnext.set.delete-all.js");
|
|
15
|
-
require("core-js/modules/esnext.set.difference.js");
|
|
16
|
-
require("core-js/modules/esnext.set.every.js");
|
|
17
|
-
require("core-js/modules/esnext.set.filter.js");
|
|
18
|
-
require("core-js/modules/esnext.set.find.js");
|
|
19
|
-
require("core-js/modules/esnext.set.intersection.js");
|
|
20
|
-
require("core-js/modules/esnext.set.is-disjoint-from.js");
|
|
21
|
-
require("core-js/modules/esnext.set.is-subset-of.js");
|
|
22
|
-
require("core-js/modules/esnext.set.is-superset-of.js");
|
|
23
|
-
require("core-js/modules/esnext.set.join.js");
|
|
24
|
-
require("core-js/modules/esnext.set.map.js");
|
|
25
|
-
require("core-js/modules/esnext.set.reduce.js");
|
|
26
|
-
require("core-js/modules/esnext.set.some.js");
|
|
27
|
-
require("core-js/modules/esnext.set.symmetric-difference.js");
|
|
28
|
-
require("core-js/modules/esnext.set.union.js");
|
|
29
8
|
var _typeCheck = require("../../introspect/policies/typeCheck");
|
|
30
9
|
var _maskStrings = require("./maskStrings");
|
|
31
10
|
var _parseLiteralValue = require("./parseLiteralValue");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseField=exports.parseCreate=exports.nameSource=exports.nameMatch=exports.keyLookup=exports.fieldMatch=exports.createMatch=void 0,require("core-js/modules/es.array.includes.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseField=exports.parseCreate=exports.nameSource=exports.nameMatch=exports.keyLookup=exports.fieldMatch=exports.createMatch=void 0,require("core-js/modules/es.array.includes.js");var _typeCheck=require("../../introspect/policies/typeCheck"),_maskStrings=require("./maskStrings"),_parseLiteralValue=require("./parseLiteralValue"),_startsQuery=require("./startsQuery");const createMatch=exports.createMatch=/^\s*create(?![a-z0-9_-])/i,headMatch=/^\s*create\s+(if\s+not\s+exists\s+)?([a-z0-9_-]+)\s*\(/i,nameSource=exports.nameSource="[a-z0-9_-]+",nameMatch=exports.nameMatch=new RegExp(`^${nameSource}$`,"i"),numberMatch=new RegExp(`^${_parseLiteralValue.numberSource}$`,"i"),fieldMatch=exports.fieldMatch=new RegExp(`^(${nameSource})\\s+(${nameSource})((?:\\s[\\s\\S]*)?)$`,"i"),primaryMatch=/^primary\s+key\s*\(([^()]*)\)$/i,uniqueMatch=/^unique\s*\(([^()]*)\)$/i,indexMatch=/^index\s*\(([^()]*)\)$/i,foreignMatch=new RegExp(`^foreign\\s+key\\s*\\(([^()]*)\\)\\s*references\\s+(${nameSource})\\s*\\(([^()]*)\\)$`,"i"),stringLiteral=new RegExp(`^${_maskStrings.placeholderSource}$`),arrayLiteral=new RegExp(`^${_maskStrings.arraySource}$`),lookupPrefix={primary:"pk",unique:"unique",index:"index",foreign:"fk"},keyLookup=(e,r)=>`${lookupPrefix[e]}_${r.join("_")}.json`;exports.keyLookup=keyLookup;const shown=e=>(0,_maskStrings.unmaskStrings)(e.trim(),"'"),findClose=(e,r)=>{let t=0;for(let s=r;s<e.length;s++)if("("===e[s])t++;else if(")"===e[s]&&(t--,0===t))return s;return-1},splitItems=e=>{const r=[];let t=0,s=0;for(let n=0;n<e.length;n++)"("===e[n]?t++:")"===e[n]?t--:","===e[n]&&0===t&&(r.push(e.slice(s,n)),s=n+1);return r.push(e.slice(s)),r.map((e=>e.trim()))},parseNames=(e,r)=>{const t=e.split(",").map((e=>e.trim()));if(t.some((e=>!nameMatch.test(e))))throw new Error(`Expected field names separated by commas in: ${shown(r)}`);if(new Set(t).size!==t.length)throw new Error(`The same field is named twice in: ${shown(r)}`);return t},parseDefault=e=>{if(void 0===e)throw new Error("Missing a value after default");const r=e.match(stringLiteral);if(r)return(0,_maskStrings.fromPlaceholder)(r[1]);const t=e.match(arrayLiteral);if(t)return JSON.parse((0,_maskStrings.fromPlaceholder)(t[1]));if(numberMatch.test(e))return(0,_parseLiteralValue.parseNumber)(e);switch(e.toLowerCase()){case"null":return null;case"true":return!0;case"false":return!1}throw new Error(`Unrecognized default value: ${shown(e)}`)},parseField=e=>{const[r,t,s,n]=e,i=s.toLowerCase();if(!_typeCheck.fieldTypes.includes(i))throw new Error(`Unknown type "${s}" for field "${t}" (expected ${_typeCheck.fieldTypes.join(", ")})`);const a={name:t,type:i,optional:!1,autoGenerate:!1},o=new Set,l=e=>{if(o.has(e))throw new Error(`"${e}" is given twice for field "${t}"`);o.add(e)},c=""===n.trim()?[]:n.trim().split(/\s+/);for(let e=0;e<c.length;e++){const s=c[e].toLowerCase();if("optional"===s)l("optional"),a.optional=!0;else if("auto"===s)l("auto"),a.autoGenerate=!0;else if("null"===s)l("null"),a.nullable=!0;else if("not"===s&&"null"===(c[e+1]||"").toLowerCase())l("null"),a.nullable=!1,e++;else{if("default"!==s)throw new Error(`Unrecognized "${shown(c[e])}" for field "${t}" in: ${shown(r)}`);l("default"),a.useDefault=!0,a.defaultValue=parseDefault(c[++e])}}if(a.autoGenerate&&a.useDefault)throw new Error(`Field "${t}" can't be both auto and have a default`);if(a.autoGenerate&&"string"!==i)throw new Error(`Field "${t}" is auto, which generates a UUID, so its type must be string`);return a};exports.parseField=parseField;const parseKey=e=>{let r=e.match(primaryMatch);if(r)return{type:"primary",fields:parseNames(r[1],e)};if(r=e.match(uniqueMatch),r)return{type:"unique",fields:parseNames(r[1],e)};if(r=e.match(indexMatch),r)return{type:"index",fields:parseNames(r[1],e)};if(r=e.match(foreignMatch),r){const t=parseNames(r[1],e),s=parseNames(r[3],e);if(1!==t.length||1!==s.length)throw new Error(`Only single-field foreign keys are supported so far: ${shown(e)}`);return{type:"foreign",fields:t,references:[{fields:[`${r[2]}.${s[0]}`],lookup:`${r[2]}.json`}]}}return null},finishKeys=(e,r)=>{const t=e.map((e=>e.name));if(r.filter((e=>"primary"===e.type)).length>1)throw new Error("Only one primary key is allowed");const s=new Set;return r.map((e=>{const r=e.fields.find((e=>!t.includes(e)));if(r)throw new Error(`The ${e.type} key (${e.fields.join(", ")}) names "${r}", which is not a field`);const n=keyLookup(e.type,e.fields);if(s.has(n))throw new Error(`The same ${e.type} key on "${e.fields.join(", ")}" is given twice`);return s.add(n),Object.assign({type:e.type,fields:e.fields,lookup:n},e.references?{references:e.references}:{})}))},parseCreate=e=>{const r=e.match(headMatch);if(!r)throw new Error("Expected: create [if not exists] <name> (<fields and keys>)");const t=r[2];if("__RECORDS"===t)throw new Error("__RECORDS is reserved for the list of records");const s=r[0].length-1,n=findClose(e,s);if(-1===n)throw new Error("Missing ) at the end of the field list");const i=e.slice(n+1).trim();if(i){if(_startsQuery.startsQueryMatch.test(i))throw new Error(`Missing ; before: ${shown(i)}`);throw new Error(`Unrecognized query value: ${shown(i)}`)}const a=e.slice(s+1,n),o=[],l=[];if(a.trim())for(const e of splitItems(a)){if(!e)throw new Error("Empty item in the field list (an extra comma?)");const r=parseKey(e);if(r){l.push(r);continue}const t=e.match(fieldMatch);if(!t)throw new Error(`Expected a field (<name> <type> ...) or a key in: ${shown(e)}`);const s=parseField(t);if(o.some((e=>e.name===s.name)))throw new Error(`Field "${s.name}" is given twice`);o.push(s)}return{entity:t,create:{ifNotExists:Boolean(r[1]),definition:o,keys:finishKeys(o,l)}}};exports.parseCreate=parseCreate;
|
|
@@ -5,22 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.whereHint = exports.splitClauses = exports.clauseOrder = void 0;
|
|
7
7
|
require("core-js/modules/es.array.includes.js");
|
|
8
|
-
require("core-js/modules/esnext.set.add-all.js");
|
|
9
|
-
require("core-js/modules/esnext.set.delete-all.js");
|
|
10
|
-
require("core-js/modules/esnext.set.difference.js");
|
|
11
|
-
require("core-js/modules/esnext.set.every.js");
|
|
12
|
-
require("core-js/modules/esnext.set.filter.js");
|
|
13
|
-
require("core-js/modules/esnext.set.find.js");
|
|
14
|
-
require("core-js/modules/esnext.set.intersection.js");
|
|
15
|
-
require("core-js/modules/esnext.set.is-disjoint-from.js");
|
|
16
|
-
require("core-js/modules/esnext.set.is-subset-of.js");
|
|
17
|
-
require("core-js/modules/esnext.set.is-superset-of.js");
|
|
18
|
-
require("core-js/modules/esnext.set.join.js");
|
|
19
|
-
require("core-js/modules/esnext.set.map.js");
|
|
20
|
-
require("core-js/modules/esnext.set.reduce.js");
|
|
21
|
-
require("core-js/modules/esnext.set.some.js");
|
|
22
|
-
require("core-js/modules/esnext.set.symmetric-difference.js");
|
|
23
|
-
require("core-js/modules/esnext.set.union.js");
|
|
24
8
|
var _maskStrings = require("./maskStrings");
|
|
25
9
|
/**
|
|
26
10
|
* The clauses each command allows, in the order they must come. create, drop, describe and show have their own
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.whereHint=exports.splitClauses=exports.clauseOrder=void 0,require("core-js/modules/es.array.includes.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.whereHint=exports.splitClauses=exports.clauseOrder=void 0,require("core-js/modules/es.array.includes.js");var _maskStrings=require("./maskStrings");const clauseOrder=exports.clauseOrder={read:["select","on","merge","where","group by","sort","limit","offset"],insert:["values"],update:["set","where"],delete:["where"]},clauseWords=[...new Set(Object.values(clauseOrder).flat())],headMatch=/^\s*(delete|insert|read|update)\s+([a-z0-9_-]+(\s*\.[a-z0-9_-]+)?)/i,tokenMatch=new RegExp(`${_maskStrings.placeholderSource}|${_maskStrings.arraySource}|[a-z0-9_.-]+|<>|!=|>=|<=|\\S`,"gi"),conditionWords=["=","!=","<>",">","<",">=","<=","in","between","like","is","exists","does"],continues={on:e=>"and"===e,merge:()=>!0},whereHint=exports.whereHint="use and / or inside one where clause (where a = 1 and b = 2)",splitClauses=e=>{const r=e.match(headMatch);if(!r)return;const t=r[1].toLowerCase(),s=clauseOrder[t],o=/^[aeiou]/.test(t)?"an":"a";if(r[3]&&"read"!==t)throw new Error(`A joined record (${r[2]}) isn't allowed in ${o} ${t} query`);const n=[...e.slice(r[0].length).matchAll(tokenMatch)].map((({0:e,index:t})=>({text:e,lower:e.toLowerCase(),start:r[0].length+t}))),a=[];let i=0,l=!1;for(let e=0;e<n.length;e++){const{lower:r,start:d}=n[e],c=n[e-1]?.lower,u=n[e+1]?.lower;"("!==r&&")"!==r||(i+="("===r?1:-1);const w="group"===r&&"by"===u?"group by":r,h=l||","===c||"as"===c||conditionWords.includes(u);if(l=!1,i>0||"by"===w||!clauseWords.includes(w)||h)continue;const p=a[a.length-1]?.keyword;if(p===w&&continues[w]?.(c))continue;const g=a.some((e=>"where"===e.keyword));if("where"===w&&g&&("and"===c||"or"===c))throw new Error(`"${c} where" is no longer supported: ${whereHint}`);if(!s.includes(w))throw new Error(`"${w}" isn't allowed in ${o} ${t} query (allowed: ${s.join(", ")})`);if(p&&s.indexOf(w)<s.indexOf(p))throw new Error(`"${w}" can't come after "${p}" (order: ${s.join(", ")})`);if(a.some((e=>e.keyword===w)))throw new Error(`Only one "${w}" clause is allowed${"where"===w?`: ${whereHint}`:""}`);"group by"===w&&e++,a.push({keyword:w,start:d,end:n[e].start+n[e].text.length}),l=!0}return{command:t,head:r[0].trim(),leading:e.slice(r[0].length,a[0]?.start??e.length).trim(),clauses:a.map((({keyword:r,end:t},s)=>({keyword:r,body:e.slice(t,a[s+1]?.start??e.length).trim()})))}};exports.splitClauses=splitClauses;
|
|
@@ -4,9 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.splitQueries = 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.reduce.js");
|
|
10
7
|
var _scanQuery = require("./scanQuery");
|
|
11
8
|
/**
|
|
12
9
|
* Split a string of queries into one query each, on the `;` between them. A `;` inside a string or a comment does
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.splitQueries=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.splitQueries=void 0;var _scanQuery=require("./scanQuery");const splitQueries=(e="")=>{const{comments:s,semicolons:r}=(0,_scanQuery.assertClosed)((0,_scanQuery.scanQuery)(e)),t=s.reduce(((e,{start:s,end:r})=>`${e.slice(0,s)}${" ".repeat(r-s)}${e.slice(r)}`),e);return[...r,t.length].map(((e,s)=>t.slice(0===s?0:r[s-1]+1,e).trim())).filter((e=>e.length>0))};exports.splitQueries=splitQueries;
|
|
@@ -5,10 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.reconcileJoin = 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.every.js");
|
|
10
|
-
require("core-js/modules/esnext.iterator.find.js");
|
|
11
|
-
require("core-js/modules/esnext.iterator.for-each.js");
|
|
12
8
|
/**
|
|
13
9
|
* The same row's value of a field, compared as JSON (rows are JSON data, so this is a deep comparison).
|
|
14
10
|
* @param a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.reconcileJoin=void 0,require("core-js/modules/es.json.stringify.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.reconcileJoin=void 0,require("core-js/modules/es.json.stringify.js");const sameValue=(e,r)=>e===r||JSON.stringify(e)===JSON.stringify(r),reconcileJoin=(e,r,o,s,t)=>{const i=e[r][o];return Object.prototype.hasOwnProperty.call(i,s)&&Array.isArray(i[s])&&Array.isArray(e[s])&&i[s].forEach(((i,n)=>{if(!i||!Object.prototype.hasOwnProperty.call(i,t))return;const c=Object.keys(i),a=e[s].find((e=>c.every((r=>sameValue(e[r],i[r])))));a&&(e[r][o][s][n]=a)})),e};exports.reconcileJoin=reconcileJoin;
|
|
@@ -4,9 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.removeFromIndex = 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.map.js");
|
|
10
7
|
var _compareAs = require("./compareAs");
|
|
11
8
|
var _storage = require("../storage");
|
|
12
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.removeFromIndex=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.removeFromIndex=void 0;var _compareAs=require("./compareAs"),_storage=require("../storage");const removeFromIndex=async(e="",r=null,o=void 0,t="",a=void 0)=>{if(!r||!r.lookup)return null;const s=`__indexes/${e}/${r.lookup}`;let l=[];try{l=await(0,_storage.readJson)(s)}catch(e){return null}return l=l.map((e=>(0,_compareAs.sameValue)(a,e.value,o)?{value:e.value,record:e.record.filter((e=>e!==t))}:e)).filter((e=>e.record.length)),await(0,_storage.writeJson)(s,l),l};exports.removeFromIndex=removeFromIndex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.requireNode=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node"));function _interopRequireWildcard(r,o){if(!o&&r&&r.__esModule)return r;var t,n,i=Object.defineProperty,s={__proto__:null,default:r};if(Object(r)!==r)return s;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(r))return e.get(r);e.set(r,s)}for(n in r)"default"!==n&&{}.hasOwnProperty.call(r,n)&&((t=i&&Object.getOwnPropertyDescriptor(r,n))&&(t.get||t.set)?i(s,n,t):s[n]=r[n]);return s}const requireNode=e=>{if(!jsEnv.isNode)throw new Error(`${e} only works in Node: in a browser, json-fs-query can only read the database (over fetch())`)};exports.requireNode=requireNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveRecord=void 0;var e,jsEnv=_interopRequireWildcard(require("browser-or-node")),_retrieveFile=require("./retrieveFile"),_recordExists=require("./recordExists");function _interopRequireWildcard(r,t){if(!t&&r&&r.__esModule)return r;var o,i,s=Object.defineProperty,n={__proto__:null,default:r};if(Object(r)!==r)return n;if(e||"function"!=typeof WeakMap||(e=new WeakMap),e){if(e.has(r))return e.get(r);e.set(r,n)}for(i in r)"default"!==i&&{}.hasOwnProperty.call(r,i)&&((o=s&&Object.getOwnPropertyDescriptor(r,i))&&(o.get||o.set)?s(n,i,o):n[i]=r[i]);return n}const retrieveRecord=async(e="")=>{if(jsEnv.isNode&&!(0,_recordExists.recordExists)(e))throw new Error(`Record "${e}" doesn't exist`);try{return await(0,_retrieveFile.retrieveFile)(`${e}.json`)}catch(r){if(!jsEnv.isNode)throw new Error(`Record "${e}" doesn't exist, or ${e}.json can't be read`);throw r}};exports.retrieveRecord=retrieveRecord;
|
|
@@ -4,22 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.retrieveRecords = exports.retrieveEntryRows = exports.retrieveEntry = 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.map.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
7
|
var _retrieveFile = require("./retrieveFile");
|
|
24
8
|
var _retrieveRecord = require("./retrieveRecord");
|
|
25
9
|
var _retrieveFiles = require("./retrieveFiles");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveRecords=exports.retrieveEntryRows=exports.retrieveEntry=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveRecords=exports.retrieveEntryRows=exports.retrieveEntry=void 0;var _retrieveFile=require("./retrieveFile"),_retrieveRecord=require("./retrieveRecord"),_retrieveFiles=require("./retrieveFiles"),_packedTable=require("./packedTable"),_config=require("./config");const retrieveEntry=async e=>{const r=await(0,_retrieveFile.retrieveFile)(e).catch((e=>console.error(e)));if(!r)throw new Error(`Could not read entity ${e.slice(e.lastIndexOf("/")+1)}`);return r};exports.retrieveEntry=retrieveEntry;const retrieveEntryRows=async(e,r,t=retrieveEntry)=>{const i=r.length>(0,_config.getSetting)("readConcurrency",16)?await(0,_packedTable.retrievePacked)(e):void 0;if(!i)return(0,_retrieveFiles.retrieveFiles)(r.map((r=>`${e.path}/${r}`)),t);const o=new Map(i.entries.map(((e,r)=>[e,r]))),s=r.filter((e=>!o.has(e))),n=s.length?await(0,_retrieveFiles.retrieveFiles)(s.map((r=>`${e.path}/${r}`)),t):[],a=new Map(s.map(((e,r)=>[e,n[r]])));return r.map((e=>o.has(e)?i.rows[o.get(e)]:a.get(e)))};exports.retrieveEntryRows=retrieveEntryRows;const retrieveRecords=async(e="")=>{const r=await(0,_retrieveRecord.retrieveRecord)(e);return retrieveEntryRows(r,r.entries)};exports.retrieveRecords=retrieveRecords;
|