json-fs-query 0.1.1 → 1.0.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 +41 -6
- package/browser/jsonFsQuery.js +28336 -0
- package/browser/jsonFsQuery.min.js +1 -0
- package/dist/data/introspect/policies/hasDependents.d.ts +13 -0
- package/dist/data/introspect/policies/hasDependents.js +52 -0
- package/dist/data/introspect/policies/hasDependents.min.js +1 -0
- package/dist/data/introspect/policies/keyGenerate.js +1 -1
- package/dist/data/introspect/policies/keyGenerate.min.js +1 -1
- package/dist/data/introspect/policies/keyUnique.d.ts +9 -1
- package/dist/data/introspect/policies/keyUnique.js +19 -9
- package/dist/data/introspect/policies/keyUnique.min.js +1 -1
- package/dist/data/queries/deleteEntity.js +33 -12
- package/dist/data/queries/deleteEntity.min.js +1 -1
- package/dist/data/queries/insertEntity.js +9 -7
- package/dist/data/queries/insertEntity.min.js +1 -1
- package/dist/data/queries/limitOffset.d.ts +8 -0
- package/dist/data/queries/limitOffset.js +21 -0
- package/dist/data/queries/limitOffset.min.js +1 -0
- package/dist/data/queries/selectFields.d.ts +10 -0
- package/dist/data/queries/selectFields.js +36 -0
- package/dist/data/queries/selectFields.min.js +1 -0
- package/dist/data/queries/updateEntity.js +64 -38
- package/dist/data/queries/updateEntity.min.js +1 -1
- package/dist/data/utilities/computeKeyValue.d.ts +13 -0
- package/dist/data/utilities/computeKeyValue.js +26 -0
- package/dist/data/utilities/computeKeyValue.min.js +1 -0
- package/dist/data/utilities/config.d.ts +6 -0
- package/dist/data/utilities/config.js +7 -1
- package/dist/data/utilities/config.min.js +1 -1
- package/dist/data/utilities/runQuery.js +4 -0
- package/dist/data/utilities/runQuery.min.js +1 -1
- package/package.json +8 -5
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', {
|
|
4
|
+
value: true
|
|
5
|
+
})
|
|
6
|
+
exports.computeKeyValue = void 0
|
|
7
|
+
require('core-js/modules/es.json.stringify.js')
|
|
8
|
+
require('core-js/modules/esnext.iterator.constructor.js')
|
|
9
|
+
require('core-js/modules/esnext.iterator.map.js')
|
|
10
|
+
/**
|
|
11
|
+
* The value a key (of any field count) indexes and checks uniqueness by. A single-field key uses
|
|
12
|
+
* the field's own raw value directly - this is the pre-existing, already-shipped index file
|
|
13
|
+
* format (e.g. a plain "2024-06-02" or 1), and stays exactly as it was for backward compatibility
|
|
14
|
+
* with real fixture data. A multi-field key has no single value to use, so its fields' values are
|
|
15
|
+
* combined into one deterministic composite (a JSON array), in the same field order as key.fields
|
|
16
|
+
* - two records only share a composite value if every field matches.
|
|
17
|
+
* @param fields
|
|
18
|
+
* @param values
|
|
19
|
+
*/
|
|
20
|
+
const computeKeyValue = (fields, values) => {
|
|
21
|
+
if (fields.length === 1) {
|
|
22
|
+
return values[fields[0]]
|
|
23
|
+
}
|
|
24
|
+
return JSON.stringify(fields.map(field => values[field]))
|
|
25
|
+
}
|
|
26
|
+
exports.computeKeyValue = computeKeyValue
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.computeKeyValue=void 0,require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.map.js");const computeKeyValue=(e,r)=>1===e.length?r[e[0]]:JSON.stringify(e.map((e=>r[e])));exports.computeKeyValue=computeKeyValue;
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
export type RuntimeSettings = {
|
|
2
2
|
databasePath: string;
|
|
3
3
|
relativePath: string;
|
|
4
|
+
enforceForeignKeys: boolean;
|
|
4
5
|
};
|
|
5
6
|
/**
|
|
6
7
|
* Set where this package's data lives: databasePath (a filesystem path, used in Node) and/or
|
|
7
8
|
* relativePath (a URL prefix prepended to databasePath, used when reading over fetch() in a
|
|
8
9
|
* browser). Call this once before using create()/drop()/query() - a fresh consumer has no other
|
|
9
10
|
* way to point this package at their own data directory.
|
|
11
|
+
*
|
|
12
|
+
* enforceForeignKeys (default true) controls whether deleteEntity/updateEntity block an operation
|
|
13
|
+
* that would leave another record's foreign key pointing at a value that no longer exists -
|
|
14
|
+
* mirroring MySQL's own foreign_key_checks setting, which is also toggleable rather than always
|
|
15
|
+
* on, since strict enforcement isn't always what every consumer wants.
|
|
10
16
|
* @param newSettings
|
|
11
17
|
*/
|
|
12
18
|
export declare const configure: (newSettings: Partial<RuntimeSettings>) => void;
|
|
@@ -6,7 +6,8 @@ Object.defineProperty(exports, '__esModule', {
|
|
|
6
6
|
exports.getSetting = exports.configure = void 0
|
|
7
7
|
const defaults = {
|
|
8
8
|
databasePath: 'database/',
|
|
9
|
-
relativePath: ''
|
|
9
|
+
relativePath: '',
|
|
10
|
+
enforceForeignKeys: true
|
|
10
11
|
}
|
|
11
12
|
let settings = {
|
|
12
13
|
...defaults
|
|
@@ -16,6 +17,11 @@ let settings = {
|
|
|
16
17
|
* relativePath (a URL prefix prepended to databasePath, used when reading over fetch() in a
|
|
17
18
|
* browser). Call this once before using create()/drop()/query() - a fresh consumer has no other
|
|
18
19
|
* way to point this package at their own data directory.
|
|
20
|
+
*
|
|
21
|
+
* enforceForeignKeys (default true) controls whether deleteEntity/updateEntity block an operation
|
|
22
|
+
* that would leave another record's foreign key pointing at a value that no longer exists -
|
|
23
|
+
* mirroring MySQL's own foreign_key_checks setting, which is also toggleable rather than always
|
|
24
|
+
* on, since strict enforcement isn't always what every consumer wants.
|
|
19
25
|
* @param newSettings
|
|
20
26
|
*/
|
|
21
27
|
const configure = newSettings => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getSetting=exports.configure=void 0;const defaults={databasePath:"database/",relativePath:""};let settings={...defaults};const configure=t=>{settings={...settings,...t}};exports.configure=configure;const getSetting=(t,e)=>void 0!==settings[t]?settings[t]:e;exports.getSetting=getSetting;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getSetting=exports.configure=void 0;const defaults={databasePath:"database/",relativePath:"",enforceForeignKeys:!0};let settings={...defaults};const configure=t=>{settings={...settings,...t}};exports.configure=configure;const getSetting=(t,e)=>void 0!==settings[t]?settings[t]:e;exports.getSetting=getSetting;
|
|
@@ -15,6 +15,8 @@ const _mergeJoins = require('../queries/mergeJoins')
|
|
|
15
15
|
const _where = require('../queries/where')
|
|
16
16
|
const _sortBy = require('../queries/sortBy')
|
|
17
17
|
const _groupBy = require('../queries/groupBy')
|
|
18
|
+
const _limitOffset = require('../queries/limitOffset')
|
|
19
|
+
const _selectFields = require('../queries/selectFields')
|
|
18
20
|
const _retrieveRecord = require('./retrieveRecord')
|
|
19
21
|
const _getConditionIndexedList = require('./getConditionIndexedList')
|
|
20
22
|
const _getJoinIndexedList = require('./getJoinIndexedList')
|
|
@@ -66,7 +68,9 @@ const runQuery = async parsed => {
|
|
|
66
68
|
}, dataSet[parsed.entity])
|
|
67
69
|
}
|
|
68
70
|
dataSet[parsed.entity] = (0, _sortBy.sortBy)(dataSet[parsed.entity], parsed.sortClauses)
|
|
71
|
+
dataSet[parsed.entity] = (0, _limitOffset.limitOffset)(dataSet[parsed.entity], parsed.offset, parsed.limit)
|
|
69
72
|
dataSet[parsed.entity] = (0, _groupBy.groupBy)(dataSet[parsed.entity], parsed.groupBy)
|
|
73
|
+
dataSet[parsed.entity] = (0, _selectFields.selectFields)(dataSet[parsed.entity], parsed.selectClauses)
|
|
70
74
|
return dataSet
|
|
71
75
|
}
|
|
72
76
|
exports.runQuery = runQuery
|
|
@@ -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"),_joinEntity=require("../queries/joinEntity"),_mergeJoins=require("../queries/mergeJoins"),_where=require("../queries/where"),_sortBy=require("../queries/sortBy"),_groupBy=require("../queries/groupBy"),_retrieveRecord=require("./retrieveRecord"),_getConditionIndexedList=require("./getConditionIndexedList"),_getJoinIndexedList=require("./getJoinIndexedList");const runQuery=async e=>{const t={[e.entity]:await(0,_retrieveRecord.retrieveRecord)(e.entity)};void 0!==e.joinEntity&&(t[e.joinEntity]=await(0,_retrieveRecord.retrieveRecord)(e.joinEntity));let i={[e.entity]:[]};switch(e=await(0,_getConditionIndexedList.getConditionIndexedList)(e,t,i),"delete"!==(e=await(0,_getJoinIndexedList.getJoinIndexedList)(e,t,i)).command&&"update"!==e.command||(i=await(0,_readEntity.readEntity)(e.entity,i),i[e.entity]=e.conditions.reduce(((e,t)=>(0,_where.where)(e,t)),i[e.entity])),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":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),i=await(0,_mergeJoins.mergeJoins)(i,e.mergeJoins),"delete"!==e.command&&"update"!==e.command&&(i[e.entity]=e.conditions.reduce(((e,t)=>(0,_where.where)(e,t)),i[e.entity])),i[e.entity]=(0,_sortBy.sortBy)(i[e.entity],e.sortClauses),i[e.entity]=(0,_groupBy.groupBy)(i[e.entity],e.groupBy),i};exports.runQuery=runQuery;
|
|
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"),_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");const runQuery=async e=>{const t={[e.entity]:await(0,_retrieveRecord.retrieveRecord)(e.entity)};void 0!==e.joinEntity&&(t[e.joinEntity]=await(0,_retrieveRecord.retrieveRecord)(e.joinEntity));let i={[e.entity]:[]};switch(e=await(0,_getConditionIndexedList.getConditionIndexedList)(e,t,i),"delete"!==(e=await(0,_getJoinIndexedList.getJoinIndexedList)(e,t,i)).command&&"update"!==e.command||(i=await(0,_readEntity.readEntity)(e.entity,i),i[e.entity]=e.conditions.reduce(((e,t)=>(0,_where.where)(e,t)),i[e.entity])),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":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),i=await(0,_mergeJoins.mergeJoins)(i,e.mergeJoins),"delete"!==e.command&&"update"!==e.command&&(i[e.entity]=e.conditions.reduce(((e,t)=>(0,_where.where)(e,t)),i[e.entity])),i[e.entity]=(0,_sortBy.sortBy)(i[e.entity],e.sortClauses),i[e.entity]=(0,_limitOffset.limitOffset)(i[e.entity],e.offset,e.limit),i[e.entity]=(0,_groupBy.groupBy)(i[e.entity],e.groupBy),i[e.entity]=(0,_selectFields.selectFields)(i[e.entity],e.selectClauses),i};exports.runQuery=runQuery;
|
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-fs-query",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Use json files to manage and read data.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"unpkg": "browser/jsonFsQuery.min.js",
|
|
8
|
+
"jsdelivr": "browser/jsonFsQuery.min.js",
|
|
7
9
|
"files": [
|
|
8
|
-
"dist"
|
|
10
|
+
"dist",
|
|
11
|
+
"browser"
|
|
9
12
|
],
|
|
10
13
|
"scripts": {
|
|
11
14
|
"build": "gulp build",
|
|
@@ -36,9 +39,9 @@
|
|
|
36
39
|
"homepage": "https://github.com/jheagle/json-file-db#readme",
|
|
37
40
|
"devDependencies": {
|
|
38
41
|
"gulp": "^5.0.1",
|
|
39
|
-
"js-build-tools": "^5.
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
+
"js-build-tools": "^5.4.0",
|
|
43
|
+
"test-filesystem": "^1.3.14",
|
|
44
|
+
"typedoc": "^0.28.20"
|
|
42
45
|
},
|
|
43
46
|
"dependencies": {
|
|
44
47
|
"browser-or-node": "^3.0.0",
|