json-fs-query 2.3.1 → 3.0.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 +77 -6
- package/browser/jsonFsQuery.js +485 -208
- package/browser/jsonFsQuery.min.js +1 -1
- package/dist/data/queries/groupBy.d.ts +20 -1
- package/dist/data/queries/groupBy.js +71 -9
- package/dist/data/queries/groupBy.min.js +1 -1
- package/dist/data/queries/limitOffset.d.ts +1 -1
- package/dist/data/queries/limitOffset.js +1 -1
- package/dist/data/queries/selectFields.d.ts +6 -4
- package/dist/data/queries/selectFields.js +15 -10
- package/dist/data/queries/selectFields.min.js +1 -1
- package/dist/data/utilities/parsers/findCommand.d.ts +2 -1
- package/dist/data/utilities/parsers/findCommand.js +4 -4
- package/dist/data/utilities/parsers/findCommand.min.js +1 -1
- package/dist/data/utilities/parsers/findConditions.d.ts +8 -9
- package/dist/data/utilities/parsers/findConditions.js +29 -41
- package/dist/data/utilities/parsers/findConditions.min.js +1 -1
- package/dist/data/utilities/parsers/findGroupBy.d.ts +6 -4
- package/dist/data/utilities/parsers/findGroupBy.js +17 -9
- package/dist/data/utilities/parsers/findGroupBy.min.js +1 -1
- package/dist/data/utilities/parsers/findInsertValues.d.ts +4 -3
- package/dist/data/utilities/parsers/findInsertValues.js +9 -9
- package/dist/data/utilities/parsers/findInsertValues.min.js +1 -1
- package/dist/data/utilities/parsers/findJoinClauses.d.ts +4 -3
- package/dist/data/utilities/parsers/findJoinClauses.js +20 -13
- package/dist/data/utilities/parsers/findJoinClauses.min.js +1 -1
- package/dist/data/utilities/parsers/findJoinEntity.d.ts +1 -1
- package/dist/data/utilities/parsers/findJoinEntity.js +3 -5
- package/dist/data/utilities/parsers/findJoinEntity.min.js +1 -1
- package/dist/data/utilities/parsers/findLimit.d.ts +4 -3
- package/dist/data/utilities/parsers/findLimit.js +8 -8
- package/dist/data/utilities/parsers/findLimit.min.js +1 -1
- package/dist/data/utilities/parsers/findMergeJoins.d.ts +4 -3
- package/dist/data/utilities/parsers/findMergeJoins.js +19 -12
- package/dist/data/utilities/parsers/findMergeJoins.min.js +1 -1
- package/dist/data/utilities/parsers/findOffset.d.ts +4 -3
- package/dist/data/utilities/parsers/findOffset.js +8 -8
- package/dist/data/utilities/parsers/findOffset.min.js +1 -1
- package/dist/data/utilities/parsers/findSelects.d.ts +4 -3
- package/dist/data/utilities/parsers/findSelects.js +13 -14
- package/dist/data/utilities/parsers/findSelects.min.js +1 -1
- package/dist/data/utilities/parsers/findSortClauses.d.ts +4 -3
- package/dist/data/utilities/parsers/findSortClauses.js +12 -12
- package/dist/data/utilities/parsers/findSortClauses.min.js +1 -1
- package/dist/data/utilities/parsers/findUpdateValues.d.ts +5 -7
- package/dist/data/utilities/parsers/findUpdateValues.js +10 -13
- package/dist/data/utilities/parsers/findUpdateValues.min.js +1 -1
- package/dist/data/utilities/parsers/parseQuery.js +83 -9
- package/dist/data/utilities/parsers/parseQuery.min.js +1 -1
- package/dist/data/utilities/parsers/splitClauses.d.ts +29 -0
- package/dist/data/utilities/parsers/splitClauses.js +139 -0
- package/dist/data/utilities/parsers/splitClauses.min.js +1 -0
- package/dist/data/utilities/runQuery.js +5 -4
- package/dist/data/utilities/runQuery.min.js +1 -1
- package/package.json +1 -1
- package/dist/data/utilities/parsers/removeFromQuery.d.ts +0 -2
- package/dist/data/utilities/parsers/removeFromQuery.js +0 -8
- package/dist/data/utilities/parsers/removeFromQuery.min.js +0 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.whereHint = exports.splitClauses = exports.clauseOrder = void 0;
|
|
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
|
+
var _maskStrings = require("./maskStrings");
|
|
25
|
+
/**
|
|
26
|
+
* The clauses each command allows, in the order they must come. create, drop, describe and show have their own
|
|
27
|
+
* parsers and never get here.
|
|
28
|
+
*/
|
|
29
|
+
const clauseOrder = exports.clauseOrder = {
|
|
30
|
+
read: ['select', 'on', 'merge', 'where', 'group by', 'sort', 'limit', 'offset'],
|
|
31
|
+
insert: ['values'],
|
|
32
|
+
update: ['set', 'where'],
|
|
33
|
+
delete: ['where']
|
|
34
|
+
};
|
|
35
|
+
const clauseWords = [...new Set(Object.values(clauseOrder).flat())];
|
|
36
|
+
// The command, the record name and an optional joined record (`read workouts.exercises`, or `read workouts .exercises`)
|
|
37
|
+
const headMatch = /^\s*(delete|insert|read|update)\s+([a-z0-9_-]+(\s*\.[a-z0-9_-]+)?)/i;
|
|
38
|
+
// Placeholders (see maskStrings) as one token each, so their hex can't read as a word; words; then the two-character
|
|
39
|
+
// comparators before any other single character
|
|
40
|
+
const tokenMatch = new RegExp(`${_maskStrings.placeholderSource}|${_maskStrings.arraySource}|[a-z0-9_.-]+|<>|!=|>=|<=|\\S`, 'gi');
|
|
41
|
+
// What can follow a field in a condition: a clause word followed by one of these is a field (`where limit = 1`)
|
|
42
|
+
const conditionWords = ['=', '!=', '<>', '>', '<', '>=', '<=', 'in', 'between', 'like', 'is', 'exists', 'does'];
|
|
43
|
+
// `and on` carries on the on clause instead of starting another; so does a merge straight after another
|
|
44
|
+
// (`merge a.x with b.y merge c.z with d.w`, with or without `and`)
|
|
45
|
+
const continues = {
|
|
46
|
+
on: previous => previous === 'and',
|
|
47
|
+
merge: () => true
|
|
48
|
+
};
|
|
49
|
+
// What a second where clause should have been: its conditions joined with and / or inside the first
|
|
50
|
+
const whereHint = exports.whereHint = 'use and / or inside one where clause (where a = 1 and b = 2)';
|
|
51
|
+
/**
|
|
52
|
+
* Split a masked query (see maskStrings) into its clauses, reading its top-level words once, left to right. A clause
|
|
53
|
+
* word counts only as a whole word outside brackets, and not where it must be a name: as a clause's first word
|
|
54
|
+
* (`sort limit`), after a comma or `as`, or before a comparator (`where limit = 1`).
|
|
55
|
+
* @param query
|
|
56
|
+
* @returns undefined when the query doesn't start with read, insert, update or delete (left to the find* steps).
|
|
57
|
+
* @throws {Error} For a joined record outside read, a clause the command doesn't allow, a repeated clause, a clause out
|
|
58
|
+
* of order, or the 2.x forms of a second where (`and where`, `or where`, or a plain repeat).
|
|
59
|
+
*/
|
|
60
|
+
const splitClauses = query => {
|
|
61
|
+
const head = query.match(headMatch);
|
|
62
|
+
if (!head) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
const command = head[1].toLowerCase();
|
|
66
|
+
const allowed = clauseOrder[command];
|
|
67
|
+
const article = /^[aeiou]/.test(command) ? 'an' : 'a';
|
|
68
|
+
if (head[3] && command !== 'read') {
|
|
69
|
+
throw new Error(`A joined record (${head[2]}) isn't allowed in ${article} ${command} query`);
|
|
70
|
+
}
|
|
71
|
+
const tokens = [...query.slice(head[0].length).matchAll(tokenMatch)].map(({
|
|
72
|
+
0: text,
|
|
73
|
+
index
|
|
74
|
+
}) => ({
|
|
75
|
+
text,
|
|
76
|
+
lower: text.toLowerCase(),
|
|
77
|
+
start: head[0].length + index
|
|
78
|
+
}));
|
|
79
|
+
const found = [];
|
|
80
|
+
let depth = 0;
|
|
81
|
+
let bodyStarts = false;
|
|
82
|
+
for (let index = 0; index < tokens.length; index++) {
|
|
83
|
+
const {
|
|
84
|
+
lower,
|
|
85
|
+
start
|
|
86
|
+
} = tokens[index];
|
|
87
|
+
const previous = tokens[index - 1]?.lower;
|
|
88
|
+
const next = tokens[index + 1]?.lower;
|
|
89
|
+
if (lower === '(' || lower === ')') {
|
|
90
|
+
depth += lower === '(' ? 1 : -1;
|
|
91
|
+
}
|
|
92
|
+
const keyword = lower === 'group' && next === 'by' ? 'group by' : lower;
|
|
93
|
+
const isName = bodyStarts || previous === ',' || previous === 'as' || conditionWords.includes(next);
|
|
94
|
+
bodyStarts = false;
|
|
95
|
+
if (depth > 0 || keyword === 'by' || !clauseWords.includes(keyword) || isName) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const current = found[found.length - 1]?.keyword;
|
|
99
|
+
if (current === keyword && continues[keyword]?.(previous)) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
// 2.x read `and where` / `or where` as `and` / `or`, and a second where as `and`
|
|
103
|
+
const hasWhere = found.some(clause => clause.keyword === 'where');
|
|
104
|
+
if (keyword === 'where' && hasWhere && (previous === 'and' || previous === 'or')) {
|
|
105
|
+
throw new Error(`"${previous} where" is no longer supported: ${whereHint}`);
|
|
106
|
+
}
|
|
107
|
+
if (!allowed.includes(keyword)) {
|
|
108
|
+
throw new Error(`"${keyword}" isn't allowed in ${article} ${command} query (allowed: ${allowed.join(', ')})`);
|
|
109
|
+
}
|
|
110
|
+
if (current && allowed.indexOf(keyword) < allowed.indexOf(current)) {
|
|
111
|
+
throw new Error(`"${keyword}" can't come after "${current}" (order: ${allowed.join(', ')})`);
|
|
112
|
+
}
|
|
113
|
+
if (found.some(clause => clause.keyword === keyword)) {
|
|
114
|
+
throw new Error(`Only one "${keyword}" clause is allowed${keyword === 'where' ? `: ${whereHint}` : ''}`);
|
|
115
|
+
}
|
|
116
|
+
if (keyword === 'group by') {
|
|
117
|
+
index++;
|
|
118
|
+
}
|
|
119
|
+
found.push({
|
|
120
|
+
keyword,
|
|
121
|
+
start,
|
|
122
|
+
end: tokens[index].start + tokens[index].text.length
|
|
123
|
+
});
|
|
124
|
+
bodyStarts = true;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
command,
|
|
128
|
+
head: head[0].trim(),
|
|
129
|
+
leading: query.slice(head[0].length, found[0]?.start ?? query.length).trim(),
|
|
130
|
+
clauses: found.map(({
|
|
131
|
+
keyword,
|
|
132
|
+
end
|
|
133
|
+
}, index) => ({
|
|
134
|
+
keyword,
|
|
135
|
+
body: query.slice(end, found[index + 1]?.start ?? query.length).trim()
|
|
136
|
+
}))
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
exports.splitClauses = splitClauses;
|
|
@@ -0,0 +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"),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 _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 s=e.match(headMatch);if(!s)return;const r=s[1].toLowerCase(),t=clauseOrder[r],o=/^[aeiou]/.test(r)?"an":"a";if(s[3]&&"read"!==r)throw new Error(`A joined record (${s[2]}) isn't allowed in ${o} ${r} query`);const n=[...e.slice(s[0].length).matchAll(tokenMatch)].map((({0:e,index:r})=>({text:e,lower:e.toLowerCase(),start:s[0].length+r}))),i=[];let l=0,d=!1;for(let e=0;e<n.length;e++){const{lower:s,start:u}=n[e],a=n[e-1]?.lower,c=n[e+1]?.lower;"("!==s&&")"!==s||(l+="("===s?1:-1);const w="group"===s&&"by"===c?"group by":s,j=d||","===a||"as"===a||conditionWords.includes(c);if(d=!1,l>0||"by"===w||!clauseWords.includes(w)||j)continue;const m=i[i.length-1]?.keyword;if(m===w&&continues[w]?.(a))continue;const h=i.some((e=>"where"===e.keyword));if("where"===w&&h&&("and"===a||"or"===a))throw new Error(`"${a} where" is no longer supported: ${whereHint}`);if(!t.includes(w))throw new Error(`"${w}" isn't allowed in ${o} ${r} query (allowed: ${t.join(", ")})`);if(m&&t.indexOf(w)<t.indexOf(m))throw new Error(`"${w}" can't come after "${m}" (order: ${t.join(", ")})`);if(i.some((e=>e.keyword===w)))throw new Error(`Only one "${w}" clause is allowed${"where"===w?`: ${whereHint}`:""}`);"group by"===w&&e++,i.push({keyword:w,start:u,end:n[e].start+n[e].text.length}),d=!0}return{command:r,head:s[0].trim(),leading:e.slice(s[0].length,i[0]?.start??e.length).trim(),clauses:i.map((({keyword:s,end:r},t)=>({keyword:s,body:e.slice(r,i[t+1]?.start??e.length).trim()})))}};exports.splitClauses=splitClauses;
|
|
@@ -101,8 +101,8 @@ const runQuery = async parsed => {
|
|
|
101
101
|
// anything has looked at it at all. readEntity() (below) can't tell those two states apart on its own (it reloads
|
|
102
102
|
// whenever the array is empty), so getConditionIndexedList reports which entities it resolved: once any indexed
|
|
103
103
|
// condition has narrowed entity's rows, they are the candidates (every condition is applied to them below) and
|
|
104
|
-
// must not be reloaded. This used to ask whether EVERY condition was indexed, so `where date = 'none' and
|
|
105
|
-
//
|
|
104
|
+
// must not be reloaded. This used to ask whether EVERY condition was indexed, so `where date = 'none' and reps =
|
|
105
|
+
// 10` reloaded every row and returned, updated or deleted all rows with reps 10.
|
|
106
106
|
const resolved = new Set();
|
|
107
107
|
parsed = await (0, _getConditionIndexedList.getConditionIndexedList)(parsed, recordData, dataSet, resolved);
|
|
108
108
|
const entityResolved = resolved.has(parsed.entity);
|
|
@@ -144,10 +144,11 @@ const runQuery = async parsed => {
|
|
|
144
144
|
if (parsed.command !== 'delete' && parsed.command !== 'update') {
|
|
145
145
|
dataSet[parsed.entity] = (0, _where.whereTree)(dataSet[parsed.entity], parsed.where, perPair ? parsed.joinEntity : undefined);
|
|
146
146
|
}
|
|
147
|
+
// Sorted before grouping, so the groups come in sorted order; limit and offset count groups once there are any
|
|
147
148
|
dataSet[parsed.entity] = (0, _sortBy.sortBy)(dataSet[parsed.entity], parsed.sortClauses);
|
|
148
|
-
dataSet[parsed.entity] = (0, _limitOffset.limitOffset)(dataSet[parsed.entity], parsed.offset, parsed.limit);
|
|
149
149
|
dataSet[parsed.entity] = (0, _groupBy.groupBy)(dataSet[parsed.entity], parsed.groupBy);
|
|
150
|
-
dataSet[parsed.entity] = (0,
|
|
150
|
+
dataSet[parsed.entity] = (0, _limitOffset.limitOffset)(dataSet[parsed.entity], parsed.offset, parsed.limit);
|
|
151
|
+
dataSet[parsed.entity] = (0, _selectFields.selectFields)(dataSet[parsed.entity], parsed.selectClauses, Boolean(parsed.groupBy?.length));
|
|
151
152
|
return dataSet;
|
|
152
153
|
};
|
|
153
154
|
exports.runQuery = runQuery;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runQuery=void 0,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"),_conditionTree=require("./conditionTree"),_conditionEntities=require("./conditionEntities");const typeClauses=async(e,t)=>{for(const r of[...(0,_conditionTree.conditionsOf)(e.where),...e.sortClauses]){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=>{const t=void 0!==e.where&&(0,_conditionEntities.conditionEntities)(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 r={[e.entity]:await(0,_retrieveRecord.retrieveRecord)(e.entity)};void 0!==e.joinEntity&&(r[e.joinEntity]=await(0,_retrieveRecord.retrieveRecord)(e.joinEntity)),await typeClauses(e,r);let i={[e.entity]:[]};const s=new Set;e=await(0,_getConditionIndexedList.getConditionIndexedList)(e,r,i,s);const n=s.has(e.entity);switch("delete"!==(e=await(0,_getJoinIndexedList.getJoinIndexedList)(e,r,i)).command&&"update"!==e.command||(n||(i=await(0,_readEntity.readEntity)(e.entity,i)),i[e.entity]=(0,_where.whereTree)(i[e.entity],e.where)),e.command){case"delete":i=await(0,_deleteEntity.deleteEntity)(e.entity,i);break;case"insert":i=await(0,_insertEntity.insertEntity)(e.entity,e.insertValues,i);break;case"read":n||(i=await(0,_readEntity.readEntity)(e.entity,i));break;case"update":i=await(0,_updateEntity.updateEntity)(e.entity,e.updateValues,i);break;default:throw new Error(`Unknown command: ${e.command}`)}return i=await(0,_joinEntity.joinEntity)(e.entity,e.joinEntity,i,e.joinClauses,n,s.has(e.joinEntity)),i=await(0,_mergeJoins.mergeJoins)(i,e.mergeJoins),"delete"!==e.command&&"update"!==e.command&&(i[e.entity]=(0,_where.whereTree)(i[e.entity],e.where,t?e.joinEntity:void 0)),i[e.entity]=(0,_sortBy.sortBy)(i[e.entity],e.sortClauses),i[e.entity]=(0,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runQuery=void 0,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"),_conditionTree=require("./conditionTree"),_conditionEntities=require("./conditionEntities");const typeClauses=async(e,t)=>{for(const r of[...(0,_conditionTree.conditionsOf)(e.where),...e.sortClauses]){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=>{const t=void 0!==e.where&&(0,_conditionEntities.conditionEntities)(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 r={[e.entity]:await(0,_retrieveRecord.retrieveRecord)(e.entity)};void 0!==e.joinEntity&&(r[e.joinEntity]=await(0,_retrieveRecord.retrieveRecord)(e.joinEntity)),await typeClauses(e,r);let i={[e.entity]:[]};const s=new Set;e=await(0,_getConditionIndexedList.getConditionIndexedList)(e,r,i,s);const n=s.has(e.entity);switch("delete"!==(e=await(0,_getJoinIndexedList.getJoinIndexedList)(e,r,i)).command&&"update"!==e.command||(n||(i=await(0,_readEntity.readEntity)(e.entity,i)),i[e.entity]=(0,_where.whereTree)(i[e.entity],e.where)),e.command){case"delete":i=await(0,_deleteEntity.deleteEntity)(e.entity,i);break;case"insert":i=await(0,_insertEntity.insertEntity)(e.entity,e.insertValues,i);break;case"read":n||(i=await(0,_readEntity.readEntity)(e.entity,i));break;case"update":i=await(0,_updateEntity.updateEntity)(e.entity,e.updateValues,i);break;default:throw new Error(`Unknown command: ${e.command}`)}return i=await(0,_joinEntity.joinEntity)(e.entity,e.joinEntity,i,e.joinClauses,n,s.has(e.joinEntity)),i=await(0,_mergeJoins.mergeJoins)(i,e.mergeJoins),"delete"!==e.command&&"update"!==e.command&&(i[e.entity]=(0,_where.whereTree)(i[e.entity],e.where,t?e.joinEntity:void 0)),i[e.entity]=(0,_sortBy.sortBy)(i[e.entity],e.sortClauses),i[e.entity]=(0,_groupBy.groupBy)(i[e.entity],e.groupBy),i[e.entity]=(0,_limitOffset.limitOffset)(i[e.entity],e.offset,e.limit),i[e.entity]=(0,_selectFields.selectFields)(i[e.entity],e.selectClauses,Boolean(e.groupBy?.length)),i};exports.runQuery=runQuery;
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.removeFromQuery=void 0;const removeFromQuery=(e,r)=>r.replace(e,"").trim();exports.removeFromQuery=removeFromQuery;
|