json-fs-query 2.0.0 → 2.1.1
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 +32 -1
- package/browser/jsonFsQuery.js +641 -394
- package/browser/jsonFsQuery.min.js +1 -1
- package/dist/data/introspect/policies/typeCheck.js +4 -0
- package/dist/data/introspect/policies/typeCheck.min.js +1 -1
- package/dist/data/queries/sortBy.js +14 -1
- package/dist/data/queries/sortBy.min.js +1 -1
- package/dist/data/queries/where.js +20 -2
- package/dist/data/queries/where.min.js +1 -1
- package/dist/data/utilities/getConditionIndexedList.d.ts +13 -1
- package/dist/data/utilities/getConditionIndexedList.js +46 -11
- package/dist/data/utilities/getConditionIndexedList.min.js +1 -1
- package/dist/data/utilities/getMatchingIndexes.js +2 -2
- package/dist/data/utilities/getMatchingIndexes.min.js +1 -1
- package/dist/data/utilities/isSingleFieldKey.d.ts +10 -0
- package/dist/data/utilities/isSingleFieldKey.js +15 -0
- package/dist/data/utilities/isSingleFieldKey.min.js +1 -0
- package/dist/data/utilities/parsers/findConditions.d.ts +4 -3
- package/dist/data/utilities/parsers/findConditions.js +26 -9
- package/dist/data/utilities/parsers/findConditions.min.js +1 -1
- package/dist/data/utilities/parsers/findInsertValues.js +2 -2
- package/dist/data/utilities/parsers/findInsertValues.min.js +1 -1
- package/dist/data/utilities/parsers/findJoinEntity.js +3 -1
- package/dist/data/utilities/parsers/findJoinEntity.min.js +1 -1
- package/dist/data/utilities/parsers/findUpdateValues.js +2 -2
- package/dist/data/utilities/parsers/findUpdateValues.min.js +1 -1
- package/dist/data/utilities/parsers/maskStrings.js +5 -1
- package/dist/data/utilities/parsers/maskStrings.min.js +1 -1
- package/dist/data/utilities/parsers/parseCreate.js +4 -2
- package/dist/data/utilities/parsers/parseCreate.min.js +1 -1
- package/dist/data/utilities/parsers/parseLiteralValue.d.ts +16 -0
- package/dist/data/utilities/parsers/parseLiteralValue.js +28 -2
- package/dist/data/utilities/parsers/parseLiteralValue.min.js +1 -1
- package/dist/data/utilities/retrieveIndexes.js +2 -2
- package/dist/data/utilities/retrieveIndexes.min.js +1 -1
- package/dist/data/utilities/runQuery.js +28 -11
- package/dist/data/utilities/runQuery.min.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseLiteralValue=void 0;var _maskStrings=require("./maskStrings");const parseLiteralValue=(e,r)=>void 0!==e[r]?(0,_maskStrings.fromPlaceholder)(e[r]):void 0!==e[r+1]?
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseNumber=exports.parseLiteralValue=exports.numberSource=void 0;var _maskStrings=require("./maskStrings");const numberSource=exports.numberSource="-?[0-9]+(?:\\.[0-9]+)?(?:e[+-]?[0-9]+)?",parseNumber=e=>{const r=Number(e);if(!Number.isFinite(r))throw new Error(`${e} is too large`);if(Number.isInteger(r)&&!Number.isSafeInteger(r))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 r};exports.parseNumber=parseNumber;const parseLiteralValue=(e,r)=>void 0!==e[r]?(0,_maskStrings.fromPlaceholder)(e[r]):void 0!==e[r+1]?parseNumber(e[r+1]):void 0!==e[r+2]?JSON.parse((0,_maskStrings.fromPlaceholder)(e[r+2])):void 0!==e[r+3]?null:void 0!==e[r+4];exports.parseLiteralValue=parseLiteralValue;
|
|
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.retrieveIndexes = void 0;
|
|
7
|
-
require("core-js/modules/es.array.includes.js");
|
|
8
7
|
var _retrieveFile = require("./retrieveFile");
|
|
9
8
|
var _retrieveRecord = require("./retrieveRecord");
|
|
9
|
+
var _isSingleFieldKey = require("./isSingleFieldKey");
|
|
10
10
|
const retrieveIndexes = async (entity = '', properties = [], recordData = {}) => {
|
|
11
11
|
if (!Object.prototype.hasOwnProperty.call(recordData, entity)) {
|
|
12
12
|
recordData[entity] = await (0, _retrieveRecord.retrieveRecord)(entity);
|
|
@@ -14,7 +14,7 @@ const retrieveIndexes = async (entity = '', properties = [], recordData = {}) =>
|
|
|
14
14
|
const indexSet = {};
|
|
15
15
|
for (const property of properties) {
|
|
16
16
|
for (const key of recordData[entity].keys) {
|
|
17
|
-
if (
|
|
17
|
+
if ((0, _isSingleFieldKey.isSingleFieldKey)(key, property)) {
|
|
18
18
|
indexSet[property] = await (0, _retrieveFile.retrieveFile)(`__indexes/${entity}/${key.lookup}`);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveIndexes=void 0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveIndexes=void 0;var _retrieveFile=require("./retrieveFile"),_retrieveRecord=require("./retrieveRecord"),_isSingleFieldKey=require("./isSingleFieldKey");const retrieveIndexes=async(e="",r=[],i={})=>{Object.prototype.hasOwnProperty.call(i,e)||(i[e]=await(0,_retrieveRecord.retrieveRecord)(e));const t={};for(const o of r)for(const r of i[e].keys)(0,_isSingleFieldKey.isSingleFieldKey)(r,o)&&(t[o]=await(0,_retrieveFile.retrieveFile)(`__indexes/${e}/${r.lookup}`));return t};exports.retrieveIndexes=retrieveIndexes;
|
|
@@ -6,6 +6,22 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.runQuery = void 0;
|
|
7
7
|
require("core-js/modules/esnext.iterator.constructor.js");
|
|
8
8
|
require("core-js/modules/esnext.iterator.reduce.js");
|
|
9
|
+
require("core-js/modules/esnext.set.add-all.js");
|
|
10
|
+
require("core-js/modules/esnext.set.delete-all.js");
|
|
11
|
+
require("core-js/modules/esnext.set.difference.js");
|
|
12
|
+
require("core-js/modules/esnext.set.every.js");
|
|
13
|
+
require("core-js/modules/esnext.set.filter.js");
|
|
14
|
+
require("core-js/modules/esnext.set.find.js");
|
|
15
|
+
require("core-js/modules/esnext.set.intersection.js");
|
|
16
|
+
require("core-js/modules/esnext.set.is-disjoint-from.js");
|
|
17
|
+
require("core-js/modules/esnext.set.is-subset-of.js");
|
|
18
|
+
require("core-js/modules/esnext.set.is-superset-of.js");
|
|
19
|
+
require("core-js/modules/esnext.set.join.js");
|
|
20
|
+
require("core-js/modules/esnext.set.map.js");
|
|
21
|
+
require("core-js/modules/esnext.set.reduce.js");
|
|
22
|
+
require("core-js/modules/esnext.set.some.js");
|
|
23
|
+
require("core-js/modules/esnext.set.symmetric-difference.js");
|
|
24
|
+
require("core-js/modules/esnext.set.union.js");
|
|
9
25
|
var _deleteEntity = require("../queries/deleteEntity");
|
|
10
26
|
var _insertEntity = require("../queries/insertEntity");
|
|
11
27
|
var _readEntity = require("../queries/readEntity");
|
|
@@ -79,21 +95,22 @@ const runQuery = async parsed => {
|
|
|
79
95
|
let dataSet = {
|
|
80
96
|
[parsed.entity]: []
|
|
81
97
|
};
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
98
|
+
// An indexed condition that matches nothing leaves dataSet[entity] at [] - the same state it starts in before
|
|
99
|
+
// anything has looked at it at all. readEntity() (below) can't tell those two states apart on its own (it reloads
|
|
100
|
+
// whenever the array is empty), so getConditionIndexedList reports which entities it resolved: once any indexed
|
|
101
|
+
// condition has narrowed entity's rows, they are final (the conditions left over are applied to them below) and
|
|
102
|
+
// must not be reloaded. This used to ask whether EVERY condition was indexed, so `where date = 'none' and where
|
|
103
|
+
// reps = 10` reloaded every row and returned, updated or deleted all rows with reps 10.
|
|
104
|
+
const resolved = new Set();
|
|
105
|
+
parsed = await (0, _getConditionIndexedList.getConditionIndexedList)(parsed, recordData, dataSet, resolved);
|
|
106
|
+
const entityResolved = resolved.has(parsed.entity);
|
|
90
107
|
parsed = await (0, _getJoinIndexedList.getJoinIndexedList)(parsed, recordData, dataSet);
|
|
91
108
|
// delete/update act on whatever is already in dataSet[entity] - unlike read, which loads
|
|
92
109
|
// everything and lets the where-reduce below narrow it down afterward, they never get a second
|
|
93
110
|
// pass. So the matching rows have to be fully resolved (indexed conditions already are, via
|
|
94
111
|
// getConditionIndexedList above; anything left in parsed.conditions is not) before either runs.
|
|
95
112
|
if (parsed.command === 'delete' || parsed.command === 'update') {
|
|
96
|
-
if (!
|
|
113
|
+
if (!entityResolved) {
|
|
97
114
|
dataSet = await (0, _readEntity.readEntity)(parsed.entity, dataSet);
|
|
98
115
|
}
|
|
99
116
|
dataSet[parsed.entity] = parsed.conditions.reduce((remainingData, condition) => (0, _where.where)(remainingData, condition), dataSet[parsed.entity]);
|
|
@@ -106,7 +123,7 @@ const runQuery = async parsed => {
|
|
|
106
123
|
dataSet = await (0, _insertEntity.insertEntity)(parsed.entity, parsed.insertValues, dataSet);
|
|
107
124
|
break;
|
|
108
125
|
case 'read':
|
|
109
|
-
if (!
|
|
126
|
+
if (!entityResolved) {
|
|
110
127
|
dataSet = await (0, _readEntity.readEntity)(parsed.entity, dataSet);
|
|
111
128
|
}
|
|
112
129
|
break;
|
|
@@ -116,7 +133,7 @@ const runQuery = async parsed => {
|
|
|
116
133
|
default:
|
|
117
134
|
throw new Error(`Unknown command: ${parsed.command}`);
|
|
118
135
|
}
|
|
119
|
-
dataSet = await (0, _joinEntity.joinEntity)(parsed.entity, parsed.joinEntity, dataSet, parsed.joinClauses,
|
|
136
|
+
dataSet = await (0, _joinEntity.joinEntity)(parsed.entity, parsed.joinEntity, dataSet, parsed.joinClauses, entityResolved);
|
|
120
137
|
dataSet = await (0, _mergeJoins.mergeJoins)(dataSet, parsed.mergeJoins);
|
|
121
138
|
// delete/update already had parsed.conditions applied above, before they ran. Re-applying the
|
|
122
139
|
// same conditions here would be wrong, not just redundant, for update specifically: if the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runQuery=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.reduce.js");var _deleteEntity=require("../queries/deleteEntity"),_insertEntity=require("../queries/insertEntity"),_readEntity=require("../queries/readEntity"),_updateEntity=require("../queries/updateEntity"),_createRecord=require("../queries/createRecord"),_dropRecord=require("../queries/dropRecord"),_describeRecord=require("../queries/describeRecord"),_showRecords=require("../queries/showRecords"),_joinEntity=require("../queries/joinEntity"),_mergeJoins=require("../queries/mergeJoins"),_where=require("../queries/where"),_sortBy=require("../queries/sortBy"),_groupBy=require("../queries/groupBy"),_limitOffset=require("../queries/limitOffset"),_selectFields=require("../queries/selectFields"),_retrieveRecord=require("./retrieveRecord"),_getConditionIndexedList=require("./getConditionIndexedList"),_getJoinIndexedList=require("./getJoinIndexedList"),_isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_fieldType=require("./fieldType");const typeConditions=async(e,t)=>{for(const r of e.conditions){let i=e.entity,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runQuery=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.reduce.js"),require("core-js/modules/esnext.set.add-all.js"),require("core-js/modules/esnext.set.delete-all.js"),require("core-js/modules/esnext.set.difference.js"),require("core-js/modules/esnext.set.every.js"),require("core-js/modules/esnext.set.filter.js"),require("core-js/modules/esnext.set.find.js"),require("core-js/modules/esnext.set.intersection.js"),require("core-js/modules/esnext.set.is-disjoint-from.js"),require("core-js/modules/esnext.set.is-subset-of.js"),require("core-js/modules/esnext.set.is-superset-of.js"),require("core-js/modules/esnext.set.join.js"),require("core-js/modules/esnext.set.map.js"),require("core-js/modules/esnext.set.reduce.js"),require("core-js/modules/esnext.set.some.js"),require("core-js/modules/esnext.set.symmetric-difference.js"),require("core-js/modules/esnext.set.union.js");var _deleteEntity=require("../queries/deleteEntity"),_insertEntity=require("../queries/insertEntity"),_readEntity=require("../queries/readEntity"),_updateEntity=require("../queries/updateEntity"),_createRecord=require("../queries/createRecord"),_dropRecord=require("../queries/dropRecord"),_describeRecord=require("../queries/describeRecord"),_showRecords=require("../queries/showRecords"),_joinEntity=require("../queries/joinEntity"),_mergeJoins=require("../queries/mergeJoins"),_where=require("../queries/where"),_sortBy=require("../queries/sortBy"),_groupBy=require("../queries/groupBy"),_limitOffset=require("../queries/limitOffset"),_selectFields=require("../queries/selectFields"),_retrieveRecord=require("./retrieveRecord"),_getConditionIndexedList=require("./getConditionIndexedList"),_getJoinIndexedList=require("./getJoinIndexedList"),_isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_fieldType=require("./fieldType");const typeConditions=async(e,t)=>{for(const r of e.conditions){let i=e.entity,s=r.property;(0,_isEntityProperty.isEntityProperty)(s)&&({entity:i,property:s}=(0,_splitEntityProperty.splitEntityProperty)(s)),Object.prototype.hasOwnProperty.call(t,i)||(t[i]=await(0,_retrieveRecord.retrieveRecord)(i)),r.type=(0,_fieldType.fieldType)(t[i],s)}},runQuery=async e=>{switch(e.command){case"create":return{[e.entity]:await(0,_createRecord.createRecord)(e.entity,e.create)};case"drop":return{[e.entity]:await(0,_dropRecord.dropRecord)(e.entity,e.ifExists)};case"describe":return{[e.entity]:await(0,_describeRecord.describeRecord)(e.entity)};case"show":return{[e.entity]:await(0,_showRecords.showRecords)()}}const t={[e.entity]:await(0,_retrieveRecord.retrieveRecord)(e.entity)};void 0!==e.joinEntity&&(t[e.joinEntity]=await(0,_retrieveRecord.retrieveRecord)(e.joinEntity)),await typeConditions(e,t);let r={[e.entity]:[]};const i=new Set;e=await(0,_getConditionIndexedList.getConditionIndexedList)(e,t,r,i);const s=i.has(e.entity);switch("delete"!==(e=await(0,_getJoinIndexedList.getJoinIndexedList)(e,t,r)).command&&"update"!==e.command||(s||(r=await(0,_readEntity.readEntity)(e.entity,r)),r[e.entity]=e.conditions.reduce(((e,t)=>(0,_where.where)(e,t)),r[e.entity])),e.command){case"delete":r=await(0,_deleteEntity.deleteEntity)(e.entity,r);break;case"insert":r=await(0,_insertEntity.insertEntity)(e.entity,e.insertValues,r);break;case"read":s||(r=await(0,_readEntity.readEntity)(e.entity,r));break;case"update":r=await(0,_updateEntity.updateEntity)(e.entity,e.updateValues,r);break;default:throw new Error(`Unknown command: ${e.command}`)}return r=await(0,_joinEntity.joinEntity)(e.entity,e.joinEntity,r,e.joinClauses,s),r=await(0,_mergeJoins.mergeJoins)(r,e.mergeJoins),"delete"!==e.command&&"update"!==e.command&&(r[e.entity]=e.conditions.reduce(((e,t)=>(0,_where.where)(e,t)),r[e.entity])),r[e.entity]=(0,_sortBy.sortBy)(r[e.entity],e.sortClauses),r[e.entity]=(0,_limitOffset.limitOffset)(r[e.entity],e.offset,e.limit),r[e.entity]=(0,_groupBy.groupBy)(r[e.entity],e.groupBy),r[e.entity]=(0,_selectFields.selectFields)(r[e.entity],e.selectClauses),r};exports.runQuery=runQuery;
|