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.
Files changed (32) hide show
  1. package/README.md +41 -6
  2. package/browser/jsonFsQuery.js +28336 -0
  3. package/browser/jsonFsQuery.min.js +1 -0
  4. package/dist/data/introspect/policies/hasDependents.d.ts +13 -0
  5. package/dist/data/introspect/policies/hasDependents.js +52 -0
  6. package/dist/data/introspect/policies/hasDependents.min.js +1 -0
  7. package/dist/data/introspect/policies/keyGenerate.js +1 -1
  8. package/dist/data/introspect/policies/keyGenerate.min.js +1 -1
  9. package/dist/data/introspect/policies/keyUnique.d.ts +9 -1
  10. package/dist/data/introspect/policies/keyUnique.js +19 -9
  11. package/dist/data/introspect/policies/keyUnique.min.js +1 -1
  12. package/dist/data/queries/deleteEntity.js +33 -12
  13. package/dist/data/queries/deleteEntity.min.js +1 -1
  14. package/dist/data/queries/insertEntity.js +9 -7
  15. package/dist/data/queries/insertEntity.min.js +1 -1
  16. package/dist/data/queries/limitOffset.d.ts +8 -0
  17. package/dist/data/queries/limitOffset.js +21 -0
  18. package/dist/data/queries/limitOffset.min.js +1 -0
  19. package/dist/data/queries/selectFields.d.ts +10 -0
  20. package/dist/data/queries/selectFields.js +36 -0
  21. package/dist/data/queries/selectFields.min.js +1 -0
  22. package/dist/data/queries/updateEntity.js +64 -38
  23. package/dist/data/queries/updateEntity.min.js +1 -1
  24. package/dist/data/utilities/computeKeyValue.d.ts +13 -0
  25. package/dist/data/utilities/computeKeyValue.js +26 -0
  26. package/dist/data/utilities/computeKeyValue.min.js +1 -0
  27. package/dist/data/utilities/config.d.ts +6 -0
  28. package/dist/data/utilities/config.js +7 -1
  29. package/dist/data/utilities/config.min.js +1 -1
  30. package/dist/data/utilities/runQuery.js +4 -0
  31. package/dist/data/utilities/runQuery.min.js +1 -1
  32. 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.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.3.2",
40
- "typedoc": "^0.28.20",
41
- "test-filesystem": "^1.3.14"
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",