json-fs-query 3.2.0 → 3.3.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 +257 -15
- package/browser/jsonFsQuery.js +2253 -293
- package/browser/jsonFsQuery.min.js +1 -1
- package/dist/data/introspect/alter.d.ts +12 -0
- package/dist/data/introspect/alter.js +304 -0
- package/dist/data/introspect/alter.min.js +1 -0
- package/dist/data/introspect/create.d.ts +10 -0
- package/dist/data/introspect/create.js +2 -1
- package/dist/data/introspect/create.min.js +1 -1
- package/dist/data/introspect/drop.js +2 -0
- package/dist/data/introspect/drop.min.js +1 -1
- package/dist/data/introspect/formatDatabase.d.ts +17 -0
- package/dist/data/introspect/formatDatabase.js +56 -0
- package/dist/data/introspect/formatDatabase.min.js +1 -0
- package/dist/data/introspect/index.d.ts +9 -0
- package/dist/data/introspect/index.js +18 -5
- package/dist/data/introspect/index.min.js +1 -1
- package/dist/data/introspect/packDatabase.d.ts +27 -0
- package/dist/data/introspect/packDatabase.js +113 -0
- package/dist/data/introspect/packDatabase.min.js +1 -0
- package/dist/data/queries/databaseStatements.d.ts +31 -0
- package/dist/data/queries/databaseStatements.js +97 -0
- package/dist/data/queries/databaseStatements.min.js +1 -0
- package/dist/data/queries/deleteEntity.js +6 -1
- package/dist/data/queries/deleteEntity.min.js +1 -1
- package/dist/data/queries/insertEntity.d.ts +8 -0
- package/dist/data/queries/insertEntity.js +338 -33
- package/dist/data/queries/insertEntity.min.js +1 -1
- package/dist/data/queries/query.d.ts +2 -1
- package/dist/data/queries/query.js +5 -2
- package/dist/data/queries/query.min.js +1 -1
- package/dist/data/queries/selectFields.d.ts +5 -4
- package/dist/data/queries/selectFields.js +25 -11
- package/dist/data/queries/selectFields.min.js +1 -1
- package/dist/data/queries/updateEntity.js +39 -5
- package/dist/data/queries/updateEntity.min.js +1 -1
- package/dist/data/storage/databases.d.ts +32 -0
- package/dist/data/storage/databases.js +93 -0
- package/dist/data/storage/databases.min.js +1 -0
- package/dist/data/storage/fileExists.d.ts +2 -1
- package/dist/data/storage/fileExists.js +9 -2
- package/dist/data/storage/fileExists.min.js +1 -1
- package/dist/data/storage/index.d.ts +5 -2
- package/dist/data/storage/index.js +64 -1
- package/dist/data/storage/index.min.js +1 -1
- package/dist/data/storage/listFiles.d.ts +8 -0
- package/dist/data/storage/listFiles.js +52 -0
- package/dist/data/storage/listFiles.min.js +1 -0
- package/dist/data/storage/makeDirectory.d.ts +2 -1
- package/dist/data/storage/makeDirectory.js +8 -2
- package/dist/data/storage/makeDirectory.min.js +1 -1
- package/dist/data/storage/readJson.d.ts +9 -1
- package/dist/data/storage/readJson.js +20 -7
- package/dist/data/storage/readJson.min.js +1 -1
- package/dist/data/storage/removeDirectory.d.ts +3 -1
- package/dist/data/storage/removeDirectory.js +7 -1
- package/dist/data/storage/removeDirectory.min.js +1 -1
- package/dist/data/storage/removeFile.d.ts +2 -1
- package/dist/data/storage/removeFile.js +10 -1
- package/dist/data/storage/removeFile.min.js +1 -1
- package/dist/data/storage/storagePath.js +1 -1
- package/dist/data/storage/storagePath.min.js +1 -1
- package/dist/data/storage/writeJson.d.ts +12 -3
- package/dist/data/storage/writeJson.js +21 -7
- package/dist/data/storage/writeJson.min.js +1 -1
- package/dist/data/storage/writeSet.d.ts +64 -0
- package/dist/data/storage/writeSet.js +306 -0
- package/dist/data/storage/writeSet.min.js +1 -0
- package/dist/data/utilities/config.d.ts +37 -0
- package/dist/data/utilities/config.js +77 -5
- package/dist/data/utilities/config.min.js +1 -1
- package/dist/data/utilities/databaseLock.d.ts +5 -0
- package/dist/data/utilities/databaseLock.js +15 -3
- package/dist/data/utilities/databaseLock.min.js +1 -1
- package/dist/data/utilities/getConditionIndexedList.js +3 -4
- package/dist/data/utilities/getConditionIndexedList.min.js +1 -1
- package/dist/data/utilities/indexBuffer.d.ts +35 -0
- package/dist/data/utilities/indexBuffer.js +139 -0
- package/dist/data/utilities/indexBuffer.min.js +1 -0
- package/dist/data/utilities/joinBases.js +2 -10
- package/dist/data/utilities/joinBases.min.js +1 -1
- package/dist/data/utilities/knownFields.d.ts +26 -0
- package/dist/data/utilities/knownFields.js +128 -0
- package/dist/data/utilities/knownFields.min.js +1 -0
- package/dist/data/utilities/packedTable.d.ts +34 -0
- package/dist/data/utilities/packedTable.js +60 -0
- package/dist/data/utilities/packedTable.min.js +1 -0
- package/dist/data/utilities/parsers/findInsertValues.d.ts +3 -3
- package/dist/data/utilities/parsers/findInsertValues.js +28 -12
- package/dist/data/utilities/parsers/findInsertValues.min.js +1 -1
- package/dist/data/utilities/parsers/maskStrings.js +11 -2
- package/dist/data/utilities/parsers/maskStrings.min.js +1 -1
- package/dist/data/utilities/parsers/parseAlter.d.ts +33 -0
- package/dist/data/utilities/parsers/parseAlter.js +84 -0
- package/dist/data/utilities/parsers/parseAlter.min.js +1 -0
- package/dist/data/utilities/parsers/parseCreate.d.ts +14 -0
- package/dist/data/utilities/parsers/parseCreate.js +13 -5
- package/dist/data/utilities/parsers/parseCreate.min.js +1 -1
- package/dist/data/utilities/parsers/parseDatabaseStatement.d.ts +17 -0
- package/dist/data/utilities/parsers/parseDatabaseStatement.js +82 -0
- package/dist/data/utilities/parsers/parseDatabaseStatement.min.js +1 -0
- package/dist/data/utilities/parsers/parseQuery.d.ts +3 -0
- package/dist/data/utilities/parsers/parseQuery.js +24 -0
- package/dist/data/utilities/parsers/parseQuery.min.js +1 -1
- package/dist/data/utilities/parsers/startsQuery.js +1 -1
- package/dist/data/utilities/parsers/startsQuery.min.js +1 -1
- package/dist/data/utilities/retrieveFiles.d.ts +15 -0
- package/dist/data/utilities/retrieveFiles.js +48 -0
- package/dist/data/utilities/retrieveFiles.min.js +1 -0
- package/dist/data/utilities/retrieveRecord.d.ts +6 -0
- package/dist/data/utilities/retrieveRecord.js +24 -1
- package/dist/data/utilities/retrieveRecord.min.js +1 -1
- package/dist/data/utilities/retrieveRecords.d.ts +22 -0
- package/dist/data/utilities/retrieveRecords.js +60 -10
- package/dist/data/utilities/retrieveRecords.min.js +1 -1
- package/dist/data/utilities/runQuery.js +27 -2
- package/dist/data/utilities/runQuery.min.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +24 -0
- package/dist/index.min.js +1 -1
- package/package.json +7 -3
|
@@ -20,6 +20,8 @@ var _findOffset = require("./findOffset");
|
|
|
20
20
|
var _maskStrings = require("./maskStrings");
|
|
21
21
|
var _parseCreate = require("./parseCreate");
|
|
22
22
|
var _parseSchemaStatement = require("./parseSchemaStatement");
|
|
23
|
+
var _parseAlter = require("./parseAlter");
|
|
24
|
+
var _parseDatabaseStatement = require("./parseDatabaseStatement");
|
|
23
25
|
var _splitClauses = require("./splitClauses");
|
|
24
26
|
var _startsQuery = require("./startsQuery");
|
|
25
27
|
// Each clause's own step, and what its body must start with (for the error when it doesn't)
|
|
@@ -101,6 +103,11 @@ const parseQuery = query => {
|
|
|
101
103
|
};
|
|
102
104
|
// No find* step may see inside a string or an array: each one becomes a placeholder holding its value
|
|
103
105
|
query = (0, _maskStrings.maskArrays)((0, _maskStrings.maskStrings)(query));
|
|
106
|
+
// Statements about databases (create / drop database, use, show databases) come first: they share their first words
|
|
107
|
+
// with the record statements
|
|
108
|
+
if (_parseDatabaseStatement.databaseStatementMatch.test(query)) {
|
|
109
|
+
return Object.assign(parsedQuery, (0, _parseDatabaseStatement.parseDatabaseStatement)(query));
|
|
110
|
+
}
|
|
104
111
|
// A create statement has its own shape (a bracketed list of fields and keys), so it gets its own parser
|
|
105
112
|
if (_parseCreate.createMatch.test(query)) {
|
|
106
113
|
const {
|
|
@@ -116,6 +123,18 @@ const parseQuery = query => {
|
|
|
116
123
|
if (_parseSchemaStatement.schemaStatementMatch.test(query)) {
|
|
117
124
|
return Object.assign(parsedQuery, (0, _parseSchemaStatement.parseSchemaStatement)(query));
|
|
118
125
|
}
|
|
126
|
+
// So does alter: one change to a record's fields
|
|
127
|
+
if (_parseAlter.alterMatch.test(query)) {
|
|
128
|
+
const {
|
|
129
|
+
entity,
|
|
130
|
+
alter
|
|
131
|
+
} = (0, _parseAlter.parseAlter)(query);
|
|
132
|
+
return Object.assign(parsedQuery, {
|
|
133
|
+
command: 'alter',
|
|
134
|
+
entity,
|
|
135
|
+
alter
|
|
136
|
+
});
|
|
137
|
+
}
|
|
119
138
|
// Clauses come at most once each, in a fixed order (see clauseOrder); each step reads only its own clause's body
|
|
120
139
|
const split = (0, _splitClauses.splitClauses)(query);
|
|
121
140
|
if (!split) {
|
|
@@ -146,6 +165,11 @@ const parseQuery = query => {
|
|
|
146
165
|
throw leftoverError(rest, `${keyword} ${body.slice(0, body.length - rest.length).trim()}`);
|
|
147
166
|
}
|
|
148
167
|
}
|
|
168
|
+
// `on` joins the record named after the queried one: without it there's nothing to join (this used to fail later,
|
|
169
|
+
// reading a record with no name, as "Could not read .json")
|
|
170
|
+
if ((parsedQuery.joinClauses || []).length && !parsedQuery.joinEntity) {
|
|
171
|
+
throw new Error(`"on" needs the record to join, after the one read: ${parsedQuery.command} ${parsedQuery.entity}.<record> on ...`);
|
|
172
|
+
}
|
|
149
173
|
return parsedQuery;
|
|
150
174
|
};
|
|
151
175
|
exports.parseQuery = parseQuery;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseQuery=void 0;var _findCommand=require("./findCommand"),_findInsertValues=require("./findInsertValues"),_findUpdateValues=require("./findUpdateValues"),_findJoinEntity=require("./findJoinEntity"),_findSelects=require("./findSelects"),_findConditions=require("./findConditions"),_conditionTree=require("../conditionTree"),_findJoinClauses=require("./findJoinClauses"),_findMergeJoins=require("./findMergeJoins"),_findSortClauses=require("./findSortClauses"),_findGroupBy=require("./findGroupBy"),_findLimit=require("./findLimit"),_findOffset=require("./findOffset"),_maskStrings=require("./maskStrings"),_parseCreate=require("./parseCreate"),_parseSchemaStatement=require("./parseSchemaStatement"),_splitClauses=require("./splitClauses"),_startsQuery=require("./startsQuery");const clauseSteps={values:{step:_findInsertValues.findInsertValues,expected:"an assignment (field = value)"},set:{step:_findUpdateValues.findUpdateValues,expected:"an assignment (field = value)"},select:{step:_findSelects.findSelects,expected:"a field"},on:{step:_findJoinClauses.findJoinClauses,expected:"a join condition (a.x = b.y)"},merge:{step:_findMergeJoins.findMergeJoins,expected:"a merge (a.x with b.y)"},where:{step:_findConditions.findConditions,expected:"a condition"},"group by":{step:_findGroupBy.findGroupBy,expected:"a field"},sort:{step:_findSortClauses.findSortClauses,expected:"a field"},limit:{step:_findLimit.findLimit,expected:"a whole number"},offset:{step:_findOffset.findOffset,expected:"a whole number"}},leftoverError=(e,t)=>{const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseQuery=void 0;var _findCommand=require("./findCommand"),_findInsertValues=require("./findInsertValues"),_findUpdateValues=require("./findUpdateValues"),_findJoinEntity=require("./findJoinEntity"),_findSelects=require("./findSelects"),_findConditions=require("./findConditions"),_conditionTree=require("../conditionTree"),_findJoinClauses=require("./findJoinClauses"),_findMergeJoins=require("./findMergeJoins"),_findSortClauses=require("./findSortClauses"),_findGroupBy=require("./findGroupBy"),_findLimit=require("./findLimit"),_findOffset=require("./findOffset"),_maskStrings=require("./maskStrings"),_parseCreate=require("./parseCreate"),_parseSchemaStatement=require("./parseSchemaStatement"),_parseAlter=require("./parseAlter"),_parseDatabaseStatement=require("./parseDatabaseStatement"),_splitClauses=require("./splitClauses"),_startsQuery=require("./startsQuery");const clauseSteps={values:{step:_findInsertValues.findInsertValues,expected:"an assignment (field = value)"},set:{step:_findUpdateValues.findUpdateValues,expected:"an assignment (field = value)"},select:{step:_findSelects.findSelects,expected:"a field"},on:{step:_findJoinClauses.findJoinClauses,expected:"a join condition (a.x = b.y)"},merge:{step:_findMergeJoins.findMergeJoins,expected:"a merge (a.x with b.y)"},where:{step:_findConditions.findConditions,expected:"a condition"},"group by":{step:_findGroupBy.findGroupBy,expected:"a field"},sort:{step:_findSortClauses.findSortClauses,expected:"a field"},limit:{step:_findLimit.findLimit,expected:"a whole number"},offset:{step:_findOffset.findOffset,expected:"a whole number"}},leftoverError=(e,t)=>{const r=e=>(0,_maskStrings.unmaskStrings)(e,"'");return _startsQuery.startsQueryMatch.test(e)?new Error(`Missing ; before: ${r(e)}`):new Error(`Unexpected "${r(e)}" after "${r(t)}"`)},parseQuery=e=>{const t={command:void 0,entity:void 0,joinEntity:void 0,selectClauses:[],insertValues:[],updateValues:{},where:void 0,joinClauses:[],mergeJoins:[],sortClauses:[],groupBy:void 0,limit:void 0,offset:void 0,create:void 0,ifExists:void 0};if(e=(0,_maskStrings.maskArrays)((0,_maskStrings.maskStrings)(e)),_parseDatabaseStatement.databaseStatementMatch.test(e))return Object.assign(t,(0,_parseDatabaseStatement.parseDatabaseStatement)(e));if(_parseCreate.createMatch.test(e)){const{entity:r,create:s}=(0,_parseCreate.parseCreate)(e);return Object.assign(t,{command:"create",entity:r,create:s})}if(_parseSchemaStatement.schemaStatementMatch.test(e))return Object.assign(t,(0,_parseSchemaStatement.parseSchemaStatement)(e));if(_parseAlter.alterMatch.test(e)){const{entity:r,alter:s}=(0,_parseAlter.parseAlter)(e);return Object.assign(t,{command:"alter",entity:r,alter:s})}const r=(0,_splitClauses.splitClauses)(e);if(!r){if(e=e.trim(),_startsQuery.startsQueryMatch.test(e))throw new Error(`Missing ; before: ${(0,_maskStrings.unmaskStrings)(e,"'")}`);throw new Error(`Unrecognized query value: ${(0,_maskStrings.unmaskStrings)(e,"'")}`)}if((0,_findJoinEntity.findJoinEntity)(t,(0,_findCommand.findCommand)(t,r.head)),t.where=(0,_conditionTree.allOf)([]),r.leading)throw leftoverError(r.leading,r.head);for(const{keyword:e,body:s}of r.clauses){const{step:r,expected:i}=clauseSteps[e],n=r(t,s);if(n===s)throw new Error(`Missing ${i} after ${e}${s?`: ${(0,_maskStrings.unmaskStrings)(s,"'")}`:""}`);if(n)throw leftoverError(n,`${e} ${s.slice(0,s.length-n.length).trim()}`)}if((t.joinClauses||[]).length&&!t.joinEntity)throw new Error(`"on" needs the record to join, after the one read: ${t.command} ${t.entity}.<record> on ...`);return t};exports.parseQuery=parseQuery;
|
|
@@ -7,4 +7,4 @@ exports.startsQueryMatch = void 0;
|
|
|
7
7
|
/**
|
|
8
8
|
* Matches text that starts with a command word, for the "Missing ; before" error when a query runs on into the next.
|
|
9
9
|
*/
|
|
10
|
-
const startsQueryMatch = exports.startsQueryMatch = /^\s*(create|delete|describe|drop|insert|read|show|update)(?![a-z0-9_-])/i;
|
|
10
|
+
const startsQueryMatch = exports.startsQueryMatch = /^\s*(alter|create|delete|describe|drop|insert|read|show|update|use)(?![a-z0-9_-])/i;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.startsQueryMatch=void 0;const startsQueryMatch=exports.startsQueryMatch=/^\s*(create|delete|describe|drop|insert|read|show|update)(?![a-z0-9_-])/i;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.startsQueryMatch=void 0;const startsQueryMatch=exports.startsQueryMatch=/^\s*(alter|create|delete|describe|drop|insert|read|show|update|use)(?![a-z0-9_-])/i;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read several files of the database at once and resolve to their contents in the order of `paths`. Up to
|
|
3
|
+
* `readConcurrency` reads (see configure) are in flight together: in a browser each file is an HTTP request, so a full
|
|
4
|
+
* read of 1,000 rows no longer waits for 1,000 requests one after another.
|
|
5
|
+
*
|
|
6
|
+
* Fails as reading them one at a time would: with the error of the first file (in `paths` order) that can't be read.
|
|
7
|
+
* Once a read fails no new ones start; the ones already started are awaited, so none is left running after this
|
|
8
|
+
* returns, and since reads start in order, every file before the first failure was read.
|
|
9
|
+
* @param paths - Paths inside the database, such as `users/1.json`.
|
|
10
|
+
* @param read - Reads one path (default retrieveFile); callers with their own error message for a missing file pass it
|
|
11
|
+
* here.
|
|
12
|
+
* @throws {Error} The error of the first file that couldn't be read.
|
|
13
|
+
*/
|
|
14
|
+
export declare const retrieveFiles: (paths: string[], read?: (path: string) => Promise<any>) => Promise<any[]>;
|
|
15
|
+
//# sourceMappingURL=retrieveFiles.d.ts.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.retrieveFiles = void 0;
|
|
7
|
+
var _retrieveFile = require("./retrieveFile");
|
|
8
|
+
var _config = require("./config");
|
|
9
|
+
/**
|
|
10
|
+
* Read several files of the database at once and resolve to their contents in the order of `paths`. Up to
|
|
11
|
+
* `readConcurrency` reads (see configure) are in flight together: in a browser each file is an HTTP request, so a full
|
|
12
|
+
* read of 1,000 rows no longer waits for 1,000 requests one after another.
|
|
13
|
+
*
|
|
14
|
+
* Fails as reading them one at a time would: with the error of the first file (in `paths` order) that can't be read.
|
|
15
|
+
* Once a read fails no new ones start; the ones already started are awaited, so none is left running after this
|
|
16
|
+
* returns, and since reads start in order, every file before the first failure was read.
|
|
17
|
+
* @param paths - Paths inside the database, such as `users/1.json`.
|
|
18
|
+
* @param read - Reads one path (default retrieveFile); callers with their own error message for a missing file pass it
|
|
19
|
+
* here.
|
|
20
|
+
* @throws {Error} The error of the first file that couldn't be read.
|
|
21
|
+
*/
|
|
22
|
+
const retrieveFiles = async (paths, read = _retrieveFile.retrieveFile) => {
|
|
23
|
+
const limit = Math.max(1, Math.floor((0, _config.getSetting)('readConcurrency', 16)) || 1);
|
|
24
|
+
const contents = new Array(paths.length);
|
|
25
|
+
const failures = [];
|
|
26
|
+
let next = 0;
|
|
27
|
+
const worker = async () => {
|
|
28
|
+
while (next < paths.length && !failures.length) {
|
|
29
|
+
const position = next++;
|
|
30
|
+
try {
|
|
31
|
+
contents[position] = await read(paths[position]);
|
|
32
|
+
} catch (error) {
|
|
33
|
+
failures.push({
|
|
34
|
+
position,
|
|
35
|
+
error
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
await Promise.all(Array.from({
|
|
41
|
+
length: Math.min(limit, paths.length)
|
|
42
|
+
}, worker));
|
|
43
|
+
if (failures.length) {
|
|
44
|
+
throw failures.reduce((first, failure) => failure.position < first.position ? failure : first).error;
|
|
45
|
+
}
|
|
46
|
+
return contents;
|
|
47
|
+
};
|
|
48
|
+
exports.retrieveFiles = retrieveFiles;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveFiles=void 0;var _retrieveFile=require("./retrieveFile"),_config=require("./config");const retrieveFiles=async(e,r=_retrieveFile.retrieveFile)=>{const t=Math.max(1,Math.floor((0,_config.getSetting)("readConcurrency",16))||1),i=new Array(e.length),o=[];let n=0;if(await Promise.all(Array.from({length:Math.min(t,e.length)},(async()=>{for(;n<e.length&&!o.length;){const t=n++;try{i[t]=await r(e[t])}catch(e){o.push({position:t,error:e})}}}))),o.length)throw o.reduce(((e,r)=>r.position<e.position?r:e)).error;return i};exports.retrieveFiles=retrieveFiles;
|
|
@@ -1,2 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A record's definition (its fields, keys and entries), from `<entity>.json`.
|
|
3
|
+
* @param entity
|
|
4
|
+
* @throws {Error} `Record "<entity>" doesn't exist` when it doesn't (in Node, checked before reading; in a browser,
|
|
5
|
+
* where that can't be checked without reading, when the file can't be read).
|
|
6
|
+
*/
|
|
1
7
|
export declare const retrieveRecord: (entity?: string) => Promise<any>;
|
|
2
8
|
//# sourceMappingURL=retrieveRecord.d.ts.map
|
|
@@ -1,9 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
require("core-js/modules/esnext.weak-map.delete-all.js");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.retrieveRecord = void 0;
|
|
8
|
+
var jsEnv = _interopRequireWildcard(require("browser-or-node"));
|
|
7
9
|
var _retrieveFile = require("./retrieveFile");
|
|
8
|
-
|
|
10
|
+
var _recordExists = require("./recordExists");
|
|
11
|
+
var e;
|
|
12
|
+
function _interopRequireWildcard(t, r) { if (!r && t && t.__esModule) return t; var n, a, o = Object.defineProperty, f = { __proto__: null, default: t }; if (Object(t) !== t) return f; if (e || "function" != typeof WeakMap || (e = new WeakMap()), e) { if (e.has(t)) return e.get(t); e.set(t, f); } for (a in t) "default" !== a && {}.hasOwnProperty.call(t, a) && ((n = o && Object.getOwnPropertyDescriptor(t, a)) && (n.get || n.set) ? o(f, a, n) : f[a] = t[a]); return f; }
|
|
13
|
+
/**
|
|
14
|
+
* A record's definition (its fields, keys and entries), from `<entity>.json`.
|
|
15
|
+
* @param entity
|
|
16
|
+
* @throws {Error} `Record "<entity>" doesn't exist` when it doesn't (in Node, checked before reading; in a browser,
|
|
17
|
+
* where that can't be checked without reading, when the file can't be read).
|
|
18
|
+
*/
|
|
19
|
+
const retrieveRecord = async (entity = '') => {
|
|
20
|
+
if (jsEnv.isNode && !(0, _recordExists.recordExists)(entity)) {
|
|
21
|
+
throw new Error(`Record "${entity}" doesn't exist`);
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
return await (0, _retrieveFile.retrieveFile)(`${entity}.json`);
|
|
25
|
+
} catch (error) {
|
|
26
|
+
if (!jsEnv.isNode) {
|
|
27
|
+
throw new Error(`Record "${entity}" doesn't exist, or ${entity}.json can't be read`);
|
|
28
|
+
}
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
9
32
|
exports.retrieveRecord = retrieveRecord;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveRecord=void 0;var _retrieveFile=require("./retrieveFile");const retrieveRecord=async(e="")=>await(0,_retrieveFile.retrieveFile)(`${e}.json`);exports.retrieveRecord=retrieveRecord;
|
|
1
|
+
"use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),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;
|
|
@@ -1,2 +1,24 @@
|
|
|
1
|
+
import { recordDefinition } from '../introspect/definitions/record';
|
|
2
|
+
/**
|
|
3
|
+
* Read one entry file, failing with the message a missing entry has always had.
|
|
4
|
+
* @param path - The entry's path inside the database, such as `users/1.json`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const retrieveEntry: (path: string) => Promise<any>;
|
|
7
|
+
/**
|
|
8
|
+
* The rows of some of a record's entry files, in the order of `files`. When they're more than one round of reads
|
|
9
|
+
* (`readConcurrency`, see retrieveFiles) and the record has a packed file that matches it (see retrievePacked), they
|
|
10
|
+
* come from the packed file in one read; otherwise, and for any file the packed file doesn't hold (an index can list a
|
|
11
|
+
* file the record doesn't), from the entry files, several at a time. So a lookup of a few rows never downloads a whole
|
|
12
|
+
* record, and a record of a few rows is never asked for a packed file.
|
|
13
|
+
* @param record
|
|
14
|
+
* @param files - Entry file names, such as `1.json`.
|
|
15
|
+
* @param read - Reads one entry file (default retrieveEntry).
|
|
16
|
+
*/
|
|
17
|
+
export declare const retrieveEntryRows: (record: recordDefinition, files: string[], read?: (path: string) => Promise<any>) => Promise<any[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Every row of a record, in the record's order: from its packed file when there's one that matches (see
|
|
20
|
+
* retrievePacked), otherwise from its entry files, several at a time (see retrieveFiles).
|
|
21
|
+
* @param entity
|
|
22
|
+
*/
|
|
1
23
|
export declare const retrieveRecords: (entity?: string) => Promise<any[]>;
|
|
2
24
|
//# sourceMappingURL=retrieveRecords.d.ts.map
|
|
@@ -3,19 +3,69 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.retrieveRecords = void 0;
|
|
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");
|
|
7
23
|
var _retrieveFile = require("./retrieveFile");
|
|
8
24
|
var _retrieveRecord = require("./retrieveRecord");
|
|
25
|
+
var _retrieveFiles = require("./retrieveFiles");
|
|
26
|
+
var _packedTable = require("./packedTable");
|
|
27
|
+
var _config = require("./config");
|
|
28
|
+
/**
|
|
29
|
+
* Read one entry file, failing with the message a missing entry has always had.
|
|
30
|
+
* @param path - The entry's path inside the database, such as `users/1.json`.
|
|
31
|
+
*/
|
|
32
|
+
const retrieveEntry = async path => {
|
|
33
|
+
const data = await (0, _retrieveFile.retrieveFile)(path).catch(err => console.error(err));
|
|
34
|
+
if (!data) {
|
|
35
|
+
throw new Error(`Could not read entity ${path.slice(path.lastIndexOf('/') + 1)}`);
|
|
36
|
+
}
|
|
37
|
+
return data;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* The rows of some of a record's entry files, in the order of `files`. When they're more than one round of reads
|
|
41
|
+
* (`readConcurrency`, see retrieveFiles) and the record has a packed file that matches it (see retrievePacked), they
|
|
42
|
+
* come from the packed file in one read; otherwise, and for any file the packed file doesn't hold (an index can list a
|
|
43
|
+
* file the record doesn't), from the entry files, several at a time. So a lookup of a few rows never downloads a whole
|
|
44
|
+
* record, and a record of a few rows is never asked for a packed file.
|
|
45
|
+
* @param record
|
|
46
|
+
* @param files - Entry file names, such as `1.json`.
|
|
47
|
+
* @param read - Reads one entry file (default retrieveEntry).
|
|
48
|
+
*/
|
|
49
|
+
exports.retrieveEntry = retrieveEntry;
|
|
50
|
+
const retrieveEntryRows = async (record, files, read = retrieveEntry) => {
|
|
51
|
+
const packed = files.length > (0, _config.getSetting)('readConcurrency', 16) ? await (0, _packedTable.retrievePacked)(record) : undefined;
|
|
52
|
+
if (!packed) {
|
|
53
|
+
return (0, _retrieveFiles.retrieveFiles)(files.map(file => `${record.path}/${file}`), read);
|
|
54
|
+
}
|
|
55
|
+
const positions = new Map(packed.entries.map((entry, position) => [entry, position]));
|
|
56
|
+
const unpacked = files.filter(file => !positions.has(file));
|
|
57
|
+
const readRows = unpacked.length ? await (0, _retrieveFiles.retrieveFiles)(unpacked.map(file => `${record.path}/${file}`), read) : [];
|
|
58
|
+
const fromFiles = new Map(unpacked.map((file, position) => [file, readRows[position]]));
|
|
59
|
+
return files.map(file => positions.has(file) ? packed.rows[positions.get(file)] : fromFiles.get(file));
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Every row of a record, in the record's order: from its packed file when there's one that matches (see
|
|
63
|
+
* retrievePacked), otherwise from its entry files, several at a time (see retrieveFiles).
|
|
64
|
+
* @param entity
|
|
65
|
+
*/
|
|
66
|
+
exports.retrieveEntryRows = retrieveEntryRows;
|
|
9
67
|
const retrieveRecords = async (entity = '') => {
|
|
10
68
|
const recordFile = await (0, _retrieveRecord.retrieveRecord)(entity);
|
|
11
|
-
|
|
12
|
-
for (const file of recordFile.entries) {
|
|
13
|
-
const data = await (0, _retrieveFile.retrieveFile)(`${recordFile.path}/${file}`).catch(err => console.error(err));
|
|
14
|
-
if (!data) {
|
|
15
|
-
throw new Error(`Could not read entity ${file}`);
|
|
16
|
-
}
|
|
17
|
-
dataSet.push(data);
|
|
18
|
-
}
|
|
19
|
-
return dataSet;
|
|
69
|
+
return retrieveEntryRows(recordFile, recordFile.entries);
|
|
20
70
|
};
|
|
21
71
|
exports.retrieveRecords = retrieveRecords;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveRecords=void 0;var _retrieveFile=require("./retrieveFile"),_retrieveRecord=require("./retrieveRecord")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveRecords=exports.retrieveEntryRows=exports.retrieveEntry=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.iterator.map.js"),require("core-js/modules/esnext.map.delete-all.js"),require("core-js/modules/esnext.map.every.js"),require("core-js/modules/esnext.map.filter.js"),require("core-js/modules/esnext.map.find.js"),require("core-js/modules/esnext.map.find-key.js"),require("core-js/modules/esnext.map.includes.js"),require("core-js/modules/esnext.map.key-of.js"),require("core-js/modules/esnext.map.map-keys.js"),require("core-js/modules/esnext.map.map-values.js"),require("core-js/modules/esnext.map.merge.js"),require("core-js/modules/esnext.map.reduce.js"),require("core-js/modules/esnext.map.some.js"),require("core-js/modules/esnext.map.update.js");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,s=retrieveEntry)=>{const t=r.length>(0,_config.getSetting)("readConcurrency",16)?await(0,_packedTable.retrievePacked)(e):void 0;if(!t)return(0,_retrieveFiles.retrieveFiles)(r.map((r=>`${e.path}/${r}`)),s);const i=new Map(t.entries.map(((e,r)=>[e,r]))),o=r.filter((e=>!i.has(e))),n=o.length?await(0,_retrieveFiles.retrieveFiles)(o.map((r=>`${e.path}/${r}`)),s):[],a=new Map(o.map(((e,r)=>[e,n[r]])));return r.map((e=>i.has(e)?t.rows[i.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;
|
|
@@ -28,6 +28,8 @@ var _updateEntity = require("../queries/updateEntity");
|
|
|
28
28
|
var _createRecord = require("../queries/createRecord");
|
|
29
29
|
var _dropRecord = require("../queries/dropRecord");
|
|
30
30
|
var _describeRecord = require("../queries/describeRecord");
|
|
31
|
+
var _alter = require("../introspect/alter");
|
|
32
|
+
var _databaseStatements = require("../queries/databaseStatements");
|
|
31
33
|
var _showRecords = require("../queries/showRecords");
|
|
32
34
|
var _joinEntity = require("../queries/joinEntity");
|
|
33
35
|
var _mergeJoins = require("../queries/mergeJoins");
|
|
@@ -44,6 +46,7 @@ var _fieldType = require("./fieldType");
|
|
|
44
46
|
var _conditionTree = require("./conditionTree");
|
|
45
47
|
var _conditionEntities = require("./conditionEntities");
|
|
46
48
|
var _requireNode = require("./requireNode");
|
|
49
|
+
var _knownFields = require("./knownFields");
|
|
47
50
|
/**
|
|
48
51
|
* Give each condition and sort clause its field's declared type, so where and sortBy compare by it
|
|
49
52
|
* (a joined entity's field is looked up on that entity's record).
|
|
@@ -70,7 +73,7 @@ const runQuery = async parsed => {
|
|
|
70
73
|
// Checked before anything is read: which entity each condition is on, and whether it needs per-pair evaluation
|
|
71
74
|
const perPair = typeof parsed.where !== 'undefined' && (0, _conditionEntities.conditionEntities)(parsed);
|
|
72
75
|
// Writes and schema changes need the filesystem; say so plainly in a browser
|
|
73
|
-
if (['insert', 'update', 'delete', 'create', 'drop'].includes(parsed.command)) {
|
|
76
|
+
if (['insert', 'update', 'delete', 'create', 'drop', 'alter'].includes(parsed.command)) {
|
|
74
77
|
(0, _requireNode.requireNode)(`"${parsed.command}"`);
|
|
75
78
|
}
|
|
76
79
|
// Schema statements act on the database, not on entries (for create there is no record to read yet)
|
|
@@ -87,6 +90,26 @@ const runQuery = async parsed => {
|
|
|
87
90
|
return {
|
|
88
91
|
[parsed.entity]: await (0, _describeRecord.describeRecord)(parsed.entity)
|
|
89
92
|
};
|
|
93
|
+
case 'alter':
|
|
94
|
+
return {
|
|
95
|
+
[parsed.entity]: await (0, _alter.alter)(parsed.entity, parsed.alter)
|
|
96
|
+
};
|
|
97
|
+
case 'create database':
|
|
98
|
+
return {
|
|
99
|
+
[parsed.entity]: await (0, _databaseStatements.createDatabase)(parsed.entity, parsed.ifNotExists)
|
|
100
|
+
};
|
|
101
|
+
case 'drop database':
|
|
102
|
+
return {
|
|
103
|
+
[parsed.entity]: await (0, _databaseStatements.dropDatabase)(parsed.entity, parsed.ifExists)
|
|
104
|
+
};
|
|
105
|
+
case 'use':
|
|
106
|
+
return {
|
|
107
|
+
[parsed.entity]: await (0, _databaseStatements.useDatabase)(parsed.entity)
|
|
108
|
+
};
|
|
109
|
+
case 'show databases':
|
|
110
|
+
return {
|
|
111
|
+
[parsed.entity]: await (0, _databaseStatements.showDatabases)()
|
|
112
|
+
};
|
|
90
113
|
case 'show':
|
|
91
114
|
return {
|
|
92
115
|
[parsed.entity]: await (0, _showRecords.showRecords)()
|
|
@@ -98,6 +121,8 @@ const runQuery = async parsed => {
|
|
|
98
121
|
if (typeof parsed.joinEntity !== 'undefined') {
|
|
99
122
|
recordData[parsed.joinEntity] = await (0, _retrieveRecord.retrieveRecord)(parsed.joinEntity);
|
|
100
123
|
}
|
|
124
|
+
// Every field the query names must be one its record defines: a misspelled one would otherwise match nothing
|
|
125
|
+
await (0, _knownFields.assertKnownFields)(parsed, recordData);
|
|
101
126
|
await typeClauses(parsed, recordData);
|
|
102
127
|
let dataSet = {
|
|
103
128
|
[parsed.entity]: []
|
|
@@ -153,7 +178,7 @@ const runQuery = async parsed => {
|
|
|
153
178
|
dataSet[parsed.entity] = (0, _sortBy.sortBy)(dataSet[parsed.entity], parsed.sortClauses);
|
|
154
179
|
dataSet[parsed.entity] = (0, _groupBy.groupBy)(dataSet[parsed.entity], parsed.groupBy);
|
|
155
180
|
dataSet[parsed.entity] = (0, _limitOffset.limitOffset)(dataSet[parsed.entity], parsed.offset, parsed.limit);
|
|
156
|
-
dataSet[parsed.entity] = (0, _selectFields.selectFields)(dataSet[parsed.entity], parsed.selectClauses, Boolean(parsed.groupBy?.length));
|
|
181
|
+
dataSet[parsed.entity] = (0, _selectFields.selectFields)(dataSet[parsed.entity], parsed.selectClauses, Boolean(parsed.groupBy?.length), parsed.entity);
|
|
157
182
|
return dataSet;
|
|
158
183
|
};
|
|
159
184
|
exports.runQuery = runQuery;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runQuery=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 _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"),_isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_fieldType=require("./fieldType"),_conditionTree=require("./conditionTree"),_conditionEntities=require("./conditionEntities"),_requireNode=require("./requireNode");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(["insert","update","delete","create","drop"].includes(e.command)&&(0,_requireNode.requireNode)(`"${e.command}"`),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.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;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runQuery=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 _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"),_alter=require("../introspect/alter"),_databaseStatements=require("../queries/databaseStatements"),_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"),_isEntityProperty=require("./parsers/isEntityProperty"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_fieldType=require("./fieldType"),_conditionTree=require("./conditionTree"),_conditionEntities=require("./conditionEntities"),_requireNode=require("./requireNode"),_knownFields=require("./knownFields");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(["insert","update","delete","create","drop","alter"].includes(e.command)&&(0,_requireNode.requireNode)(`"${e.command}"`),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"alter":return{[e.entity]:await(0,_alter.alter)(e.entity,e.alter)};case"create database":return{[e.entity]:await(0,_databaseStatements.createDatabase)(e.entity,e.ifNotExists)};case"drop database":return{[e.entity]:await(0,_databaseStatements.dropDatabase)(e.entity,e.ifExists)};case"use":return{[e.entity]:await(0,_databaseStatements.useDatabase)(e.entity)};case"show databases":return{[e.entity]:await(0,_databaseStatements.showDatabases)()};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(0,_knownFields.assertKnownFields)(e,r),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.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),e.entity),i};exports.runQuery=runQuery;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { query } from './data/queries/query';
|
|
2
2
|
export { quote } from './data/queries/quote';
|
|
3
3
|
export { queryStatus, QueryStatus } from './data/queries/queryStatus';
|
|
4
|
-
export { create, drop, describe } from './data/introspect';
|
|
4
|
+
export { create, drop, alter, describe, formatDatabase, packDatabase, checkPacked } from './data/introspect';
|
|
5
5
|
export { configure } from './data/utilities/config';
|
|
6
6
|
export { fieldProperties, fieldDefinition, fieldName, keyProperties, keyDefinition, indexType, indexLocation, referenceProperties, reference, recordProperties, recordDefinition, recordPath, entityPath } from './data/introspect';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,18 @@ require("core-js/modules/esnext.iterator.drop.js");
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", {
|
|
8
8
|
value: true
|
|
9
9
|
});
|
|
10
|
+
Object.defineProperty(exports, "alter", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _introspect.alter;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(exports, "checkPacked", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () {
|
|
19
|
+
return _introspect.checkPacked;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
10
22
|
Object.defineProperty(exports, "configure", {
|
|
11
23
|
enumerable: true,
|
|
12
24
|
get: function () {
|
|
@@ -31,6 +43,18 @@ Object.defineProperty(exports, "drop", {
|
|
|
31
43
|
return _introspect.drop;
|
|
32
44
|
}
|
|
33
45
|
});
|
|
46
|
+
Object.defineProperty(exports, "formatDatabase", {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
get: function () {
|
|
49
|
+
return _introspect.formatDatabase;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
Object.defineProperty(exports, "packDatabase", {
|
|
53
|
+
enumerable: true,
|
|
54
|
+
get: function () {
|
|
55
|
+
return _introspect.packDatabase;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
34
58
|
Object.defineProperty(exports, "query", {
|
|
35
59
|
enumerable: true,
|
|
36
60
|
get: function () {
|
package/dist/index.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";require("core-js/modules/esnext.async-iterator.constructor.js"),require("core-js/modules/esnext.async-iterator.drop.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.drop.js"),Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"configure",{enumerable:!0,get:function(){return _config.configure}}),Object.defineProperty(exports,"create",{enumerable:!0,get:function(){return _introspect.create}}),Object.defineProperty(exports,"describe",{enumerable:!0,get:function(){return _introspect.describe}}),Object.defineProperty(exports,"drop",{enumerable:!0,get:function(){return _introspect.drop}}),Object.defineProperty(exports,"query",{enumerable:!0,get:function(){return _query.query}}),Object.defineProperty(exports,"queryStatus",{enumerable:!0,get:function(){return _queryStatus.queryStatus}}),Object.defineProperty(exports,"quote",{enumerable:!0,get:function(){return _quote.quote}});var _query=require("./data/queries/query"),_quote=require("./data/queries/quote"),_queryStatus=require("./data/queries/queryStatus"),_introspect=require("./data/introspect"),_config=require("./data/utilities/config");
|
|
1
|
+
"use strict";require("core-js/modules/esnext.async-iterator.constructor.js"),require("core-js/modules/esnext.async-iterator.drop.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.drop.js"),Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"alter",{enumerable:!0,get:function(){return _introspect.alter}}),Object.defineProperty(exports,"checkPacked",{enumerable:!0,get:function(){return _introspect.checkPacked}}),Object.defineProperty(exports,"configure",{enumerable:!0,get:function(){return _config.configure}}),Object.defineProperty(exports,"create",{enumerable:!0,get:function(){return _introspect.create}}),Object.defineProperty(exports,"describe",{enumerable:!0,get:function(){return _introspect.describe}}),Object.defineProperty(exports,"drop",{enumerable:!0,get:function(){return _introspect.drop}}),Object.defineProperty(exports,"formatDatabase",{enumerable:!0,get:function(){return _introspect.formatDatabase}}),Object.defineProperty(exports,"packDatabase",{enumerable:!0,get:function(){return _introspect.packDatabase}}),Object.defineProperty(exports,"query",{enumerable:!0,get:function(){return _query.query}}),Object.defineProperty(exports,"queryStatus",{enumerable:!0,get:function(){return _queryStatus.queryStatus}}),Object.defineProperty(exports,"quote",{enumerable:!0,get:function(){return _quote.quote}});var _query=require("./data/queries/query"),_quote=require("./data/queries/quote"),_queryStatus=require("./data/queries/queryStatus"),_introspect=require("./data/introspect"),_config=require("./data/utilities/config");
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-fs-query",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.3.0",
|
|
4
|
+
"description": "A git-native JSON data store for static sites: JSON files with a schema, enforced keys and a SQL-like query language, read straight from static hosting.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"unpkg": "browser/jsonFsQuery.min.js",
|
|
@@ -35,7 +35,11 @@
|
|
|
35
35
|
"database",
|
|
36
36
|
"filesystem",
|
|
37
37
|
"json",
|
|
38
|
-
"data"
|
|
38
|
+
"data",
|
|
39
|
+
"static-site",
|
|
40
|
+
"git",
|
|
41
|
+
"query",
|
|
42
|
+
"sql"
|
|
39
43
|
],
|
|
40
44
|
"author": "Joshua Heagle <joshuaheagle@gmail.com>",
|
|
41
45
|
"license": "GPL-3.0-or-later",
|