json-fs-query 0.1.0 → 1.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.
Files changed (212) hide show
  1. package/README.md +41 -6
  2. package/browser/jsonFsQuery.js +28271 -0
  3. package/browser/jsonFsQuery.min.js +1 -0
  4. package/dist/data/introspect/create.js +6 -4
  5. package/dist/data/introspect/create.min.js +1 -1
  6. package/dist/data/introspect/drop.js +2 -2
  7. package/dist/data/introspect/drop.min.js +1 -1
  8. package/dist/data/introspect/policies/hasDependents.d.ts +13 -0
  9. package/dist/data/introspect/policies/hasDependents.js +52 -0
  10. package/dist/data/introspect/policies/hasDependents.min.js +1 -0
  11. package/dist/data/introspect/policies/keyGenerate.js +1 -1
  12. package/dist/data/introspect/policies/keyGenerate.min.js +1 -1
  13. package/dist/data/introspect/policies/keyUnique.d.ts +9 -1
  14. package/dist/data/introspect/policies/keyUnique.js +19 -9
  15. package/dist/data/introspect/policies/keyUnique.min.js +1 -1
  16. package/dist/data/queries/deleteEntity.js +36 -15
  17. package/dist/data/queries/deleteEntity.min.js +1 -1
  18. package/dist/data/queries/groupBy.js +22 -22
  19. package/dist/data/queries/groupBy.min.js +1 -1
  20. package/dist/data/queries/insertEntity.js +14 -12
  21. package/dist/data/queries/insertEntity.min.js +1 -1
  22. package/dist/data/queries/readEntity.js +1 -1
  23. package/dist/data/queries/readEntity.min.js +1 -1
  24. package/dist/data/queries/updateEntity.js +68 -42
  25. package/dist/data/queries/updateEntity.min.js +1 -1
  26. package/dist/data/queries/where.js +1 -1
  27. package/dist/data/queries/where.min.js +1 -1
  28. package/dist/data/utilities/computeKeyValue.d.ts +13 -0
  29. package/dist/data/utilities/computeKeyValue.js +26 -0
  30. package/dist/data/utilities/computeKeyValue.min.js +1 -0
  31. package/dist/data/utilities/config.d.ts +28 -0
  32. package/dist/data/utilities/config.js +45 -0
  33. package/dist/data/utilities/config.min.js +1 -0
  34. package/dist/data/utilities/deregisterRecord.js +2 -2
  35. package/dist/data/utilities/deregisterRecord.min.js +1 -1
  36. package/dist/data/utilities/getConditionIndexedList.js +1 -1
  37. package/dist/data/utilities/getConditionIndexedList.min.js +1 -1
  38. package/dist/data/utilities/getJoinIndexedList.js +2 -2
  39. package/dist/data/utilities/getJoinIndexedList.min.js +1 -1
  40. package/dist/data/utilities/getMatchingIndexes.js +2 -2
  41. package/dist/data/utilities/getMatchingIndexes.min.js +1 -1
  42. package/dist/data/utilities/matchIndexedJoins.js +2 -2
  43. package/dist/data/utilities/matchIndexedJoins.min.js +1 -1
  44. package/dist/data/utilities/reconcileJoin.js +26 -26
  45. package/dist/data/utilities/reconcileJoin.min.js +1 -1
  46. package/dist/data/utilities/reconcileJoins.js +26 -27
  47. package/dist/data/utilities/reconcileJoins.min.js +1 -1
  48. package/dist/data/utilities/registerRecord.js +2 -2
  49. package/dist/data/utilities/registerRecord.min.js +1 -1
  50. package/dist/data/utilities/removeFromIndex.js +2 -2
  51. package/dist/data/utilities/removeFromIndex.min.js +1 -1
  52. package/dist/data/utilities/restrictIndexedList.js +45 -45
  53. package/dist/data/utilities/restrictIndexedList.min.js +1 -1
  54. package/dist/data/utilities/retrieveFile.js +3 -3
  55. package/dist/data/utilities/retrieveFile.min.js +1 -1
  56. package/dist/data/utilities/retrieveIndexes.js +1 -1
  57. package/dist/data/utilities/retrieveIndexes.min.js +1 -1
  58. package/dist/data/utilities/updateIndex.js +2 -2
  59. package/dist/data/utilities/updateIndex.min.js +1 -1
  60. package/dist/data/utilities/useJoinClause.js +4 -4
  61. package/dist/data/utilities/useJoinClause.min.js +1 -1
  62. package/dist/index.d.ts +1 -0
  63. package/dist/index.js +7 -0
  64. package/dist/index.min.js +1 -1
  65. package/package.json +11 -4
  66. package/.browserslistrc +0 -1
  67. package/.nvmrc +0 -1
  68. package/MAIN.md +0 -15
  69. package/babel.config.js +0 -3
  70. package/build-tools.config.json +0 -30
  71. package/gulpfile.mjs +0 -15
  72. package/src/data/introspect/create.test.js +0 -67
  73. package/src/data/introspect/create.ts +0 -29
  74. package/src/data/introspect/definitions/field.test.js +0 -23
  75. package/src/data/introspect/definitions/field.ts +0 -48
  76. package/src/data/introspect/definitions/key.test.js +0 -100
  77. package/src/data/introspect/definitions/key.ts +0 -64
  78. package/src/data/introspect/definitions/keyReference.test.js +0 -8
  79. package/src/data/introspect/definitions/keyReference.ts +0 -23
  80. package/src/data/introspect/definitions/record.ts +0 -42
  81. package/src/data/introspect/describe.test.js +0 -36
  82. package/src/data/introspect/describe.ts +0 -9
  83. package/src/data/introspect/drop.test.js +0 -77
  84. package/src/data/introspect/drop.ts +0 -20
  85. package/src/data/introspect/index.ts +0 -8
  86. package/src/data/introspect/policies/foreignKeyExists.test.js +0 -44
  87. package/src/data/introspect/policies/foreignKeyExists.ts +0 -15
  88. package/src/data/introspect/policies/keyGenerate.ts +0 -11
  89. package/src/data/introspect/policies/keyUnique.ts +0 -11
  90. package/src/data/introspect/policies/typeCheck.test.js +0 -84
  91. package/src/data/introspect/policies/typeCheck.ts +0 -49
  92. package/src/data/introspect/policies/typeEnum.ts +0 -6
  93. package/src/data/introspect/policies/useDefault.ts +0 -6
  94. package/src/data/queries/deleteEntity.test.js +0 -86
  95. package/src/data/queries/deleteEntity.ts +0 -56
  96. package/src/data/queries/groupBy.test.js +0 -135
  97. package/src/data/queries/groupBy.ts +0 -16
  98. package/src/data/queries/insertEntity.test.js +0 -156
  99. package/src/data/queries/insertEntity.ts +0 -113
  100. package/src/data/queries/joinEntity.test.js +0 -109
  101. package/src/data/queries/joinEntity.ts +0 -20
  102. package/src/data/queries/mergeJoins.test.js +0 -174
  103. package/src/data/queries/mergeJoins.ts +0 -13
  104. package/src/data/queries/parser.test.js +0 -343
  105. package/src/data/queries/parser.ts +0 -24
  106. package/src/data/queries/query.test.js +0 -233
  107. package/src/data/queries/query.ts +0 -12
  108. package/src/data/queries/readEntity.test.js +0 -85
  109. package/src/data/queries/readEntity.ts +0 -8
  110. package/src/data/queries/sortBy.test.js +0 -131
  111. package/src/data/queries/sortBy.ts +0 -18
  112. package/src/data/queries/updateEntity.test.js +0 -228
  113. package/src/data/queries/updateEntity.ts +0 -162
  114. package/src/data/queries/where.test.js +0 -129
  115. package/src/data/queries/where.ts +0 -54
  116. package/src/data/utilities/deregisterRecord.test.js +0 -26
  117. package/src/data/utilities/deregisterRecord.ts +0 -24
  118. package/src/data/utilities/getConditionIndexedList.ts +0 -43
  119. package/src/data/utilities/getJoinIndexedList.ts +0 -53
  120. package/src/data/utilities/getMatchingIndexes.ts +0 -21
  121. package/src/data/utilities/matchIndexedJoins.ts +0 -45
  122. package/src/data/utilities/mergeJoin.test.js +0 -102
  123. package/src/data/utilities/mergeJoin.ts +0 -28
  124. package/src/data/utilities/parsers/findCommand.ts +0 -25
  125. package/src/data/utilities/parsers/findConditions.test.js +0 -38
  126. package/src/data/utilities/parsers/findConditions.ts +0 -32
  127. package/src/data/utilities/parsers/findGroupBy.ts +0 -20
  128. package/src/data/utilities/parsers/findInsertValues.test.js +0 -26
  129. package/src/data/utilities/parsers/findInsertValues.ts +0 -32
  130. package/src/data/utilities/parsers/findJoinClauses.ts +0 -29
  131. package/src/data/utilities/parsers/findJoinEntity.ts +0 -20
  132. package/src/data/utilities/parsers/findLimit.ts +0 -20
  133. package/src/data/utilities/parsers/findMergeJoins.ts +0 -27
  134. package/src/data/utilities/parsers/findOffset.ts +0 -20
  135. package/src/data/utilities/parsers/findSelects.ts +0 -31
  136. package/src/data/utilities/parsers/findSortClauses.ts +0 -31
  137. package/src/data/utilities/parsers/findUpdateValues.test.js +0 -37
  138. package/src/data/utilities/parsers/findUpdateValues.ts +0 -32
  139. package/src/data/utilities/parsers/isEntityProperty.ts +0 -1
  140. package/src/data/utilities/parsers/parseLiteralValue.test.js +0 -41
  141. package/src/data/utilities/parsers/parseLiteralValue.ts +0 -29
  142. package/src/data/utilities/parsers/parseQuery.ts +0 -73
  143. package/src/data/utilities/parsers/removeFromQuery.ts +0 -1
  144. package/src/data/utilities/parsers/splitEntityProperty.test.js +0 -8
  145. package/src/data/utilities/parsers/splitEntityProperty.ts +0 -17
  146. package/src/data/utilities/parsers/splitQueries.test.js +0 -33
  147. package/src/data/utilities/parsers/splitQueries.ts +0 -4
  148. package/src/data/utilities/reconcileJoin.test.js +0 -38
  149. package/src/data/utilities/reconcileJoin.ts +0 -23
  150. package/src/data/utilities/reconcileJoins.test.js +0 -160
  151. package/src/data/utilities/reconcileJoins.ts +0 -15
  152. package/src/data/utilities/registerRecord.test.js +0 -44
  153. package/src/data/utilities/registerRecord.ts +0 -44
  154. package/src/data/utilities/removeFromIndex.test.js +0 -44
  155. package/src/data/utilities/removeFromIndex.ts +0 -34
  156. package/src/data/utilities/restrictIndexedList.ts +0 -38
  157. package/src/data/utilities/retrieveFile.test.js +0 -49
  158. package/src/data/utilities/retrieveFile.ts +0 -19
  159. package/src/data/utilities/retrieveIndexes.ts +0 -17
  160. package/src/data/utilities/retrieveRecord.ts +0 -3
  161. package/src/data/utilities/retrieveRecords.test.js +0 -223
  162. package/src/data/utilities/retrieveRecords.ts +0 -16
  163. package/src/data/utilities/runQuery.test.js +0 -88
  164. package/src/data/utilities/runQuery.ts +0 -75
  165. package/src/data/utilities/updateIndex.test.js +0 -44
  166. package/src/data/utilities/updateIndex.ts +0 -45
  167. package/src/data/utilities/useJoinClause.test.js +0 -94
  168. package/src/data/utilities/useJoinClause.ts +0 -44
  169. package/src/global.d.ts +0 -1
  170. package/src/index.test.js +0 -52
  171. package/src/index.ts +0 -17
  172. package/test-data/__RECORDS.json +0 -32
  173. package/test-data/__indexes/exercise_muscle/fk_exercise_id.json +0 -14
  174. package/test-data/__indexes/exercise_muscle/fk_muscle_id.json +0 -14
  175. package/test-data/__indexes/exercise_muscle/pk__id.json +0 -14
  176. package/test-data/__indexes/exercises/pk__id.json +0 -14
  177. package/test-data/__indexes/muscles/pk__id.json +0 -58
  178. package/test-data/__indexes/workouts/fk_exercise_id.json +0 -23
  179. package/test-data/__indexes/workouts/index_date.json +0 -18
  180. package/test-data/__indexes/workouts/pk__id.json +0 -26
  181. package/test-data/copyDatabase.ts +0 -64
  182. package/test-data/exercise_muscle/bench_press_pectorals.json +0 -6
  183. package/test-data/exercise_muscle/deadlift_hamstrings.json +0 -6
  184. package/test-data/exercise_muscle/squat_quadriceps.json +0 -6
  185. package/test-data/exercise_muscle.json +0 -69
  186. package/test-data/exercises/bench_press.json +0 -5
  187. package/test-data/exercises/deadlift.json +0 -5
  188. package/test-data/exercises/squat.json +0 -5
  189. package/test-data/exercises.json +0 -34
  190. package/test-data/muscles/abdominal.json +0 -6
  191. package/test-data/muscles/biceps.json +0 -6
  192. package/test-data/muscles/calves.json +0 -6
  193. package/test-data/muscles/deltoids.json +0 -6
  194. package/test-data/muscles/erector_spinae.json +0 -6
  195. package/test-data/muscles/forearms.json +0 -6
  196. package/test-data/muscles/gluteus_maximus.json +0 -6
  197. package/test-data/muscles/hamstrings.json +0 -6
  198. package/test-data/muscles/latissimus_dorsi.json +0 -6
  199. package/test-data/muscles/obliques.json +0 -6
  200. package/test-data/muscles/pectorals.json +0 -6
  201. package/test-data/muscles/quadriceps.json +0 -6
  202. package/test-data/muscles/trapezius.json +0 -6
  203. package/test-data/muscles/triceps.json +0 -6
  204. package/test-data/muscles.json +0 -50
  205. package/test-data/workouts/2024-06-02-001.json +0 -10
  206. package/test-data/workouts/2024-06-02-002.json +0 -10
  207. package/test-data/workouts/2024-06-02-003.json +0 -10
  208. package/test-data/workouts/2024-06-05-001.json +0 -10
  209. package/test-data/workouts/2024-06-05-002.json +0 -10
  210. package/test-data/workouts/2024-06-05-003.json +0 -10
  211. package/test-data/workouts.json +0 -84
  212. package/tsconfig.json +0 -15
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerRecord=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js");const gulpConfig=require("js-build-tools/gulp.config"),{readFile:readFile,writeFile:writeFile}=require("fs/promises"),defaultRegistry=()=>({path:"",definition:[{name:"path",type:"string",optional:!1,autoGenerate:!1},{name:"definition",type:"object",optional:!1,autoGenerate:!1},{name:"keys",type:"array",optional:!1,autoGenerate:!1},{name:"entries",type:"array",optional:!1,autoGenerate:!1}],keys:[],entries:[]}),registerRecord=async e=>{const t=`${gulpConfig.get("databasePath","database/")}__RECORDS.json`;let r;try{r=JSON.parse(await readFile(t,"utf8"))}catch(e){r=defaultRegistry()}const i=`${e}.json`;return r.entries.includes(i)||r.entries.push(i),await writeFile(t,JSON.stringify(r,null,2)),r};exports.registerRecord=registerRecord;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.registerRecord=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js");var _config=require("./config");const{readFile:readFile,writeFile:writeFile}=require("fs/promises"),defaultRegistry=()=>({path:"",definition:[{name:"path",type:"string",optional:!1,autoGenerate:!1},{name:"definition",type:"object",optional:!1,autoGenerate:!1},{name:"keys",type:"array",optional:!1,autoGenerate:!1},{name:"entries",type:"array",optional:!1,autoGenerate:!1}],keys:[],entries:[]}),registerRecord=async e=>{const t=`${(0,_config.getSetting)("databasePath","database/")}__RECORDS.json`;let r;try{r=JSON.parse(await readFile(t,"utf8"))}catch(e){r=defaultRegistry()}const i=`${e}.json`;return r.entries.includes(i)||r.entries.push(i),await writeFile(t,JSON.stringify(r,null,2)),r};exports.registerRecord=registerRecord;
@@ -8,7 +8,7 @@ require('core-js/modules/es.json.stringify.js')
8
8
  require('core-js/modules/esnext.iterator.constructor.js')
9
9
  require('core-js/modules/esnext.iterator.filter.js')
10
10
  require('core-js/modules/esnext.iterator.map.js')
11
- const gulpConfig = require('js-build-tools/gulp.config')
11
+ const _config = require('./config')
12
12
  const {
13
13
  readFile,
14
14
  writeFile
@@ -26,7 +26,7 @@ const removeFromIndex = async (path = '', key = null, value = undefined, fileNam
26
26
  if (!key || !key.lookup) {
27
27
  return null
28
28
  }
29
- const databasePath = gulpConfig.get('databasePath', 'database/')
29
+ const databasePath = (0, _config.getSetting)('databasePath', 'database/')
30
30
  const indexPath = `${databasePath}__indexes/${path}/${key.lookup}`
31
31
  let index = []
32
32
  try {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.removeFromIndex=void 0,require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.iterator.map.js");const gulpConfig=require("js-build-tools/gulp.config"),{readFile:readFile,writeFile:writeFile}=require("fs/promises"),removeFromIndex=async(e="",r=null,o=void 0,t="")=>{if(!r||!r.lookup)return null;const i=`${gulpConfig.get("databasePath","database/")}__indexes/${e}/${r.lookup}`;let s=[];try{s=JSON.parse(await readFile(i,"utf8"))}catch(e){return null}return s=s.map((e=>e.value==o?{value:e.value,record:e.record.filter((e=>e!==t))}:e)).filter((e=>e.record.length)),await writeFile(i,JSON.stringify(s,null,2)),s};exports.removeFromIndex=removeFromIndex;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.removeFromIndex=void 0,require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.filter.js"),require("core-js/modules/esnext.iterator.map.js");var _config=require("./config");const{readFile:readFile,writeFile:writeFile}=require("fs/promises"),removeFromIndex=async(e="",r=null,t=void 0,o="")=>{if(!r||!r.lookup)return null;const i=`${(0,_config.getSetting)("databasePath","database/")}__indexes/${e}/${r.lookup}`;let s=[];try{s=JSON.parse(await readFile(i,"utf8"))}catch(e){return null}return s=s.map((e=>e.value==t?{value:e.value,record:e.record.filter((e=>e!==o))}:e)).filter((e=>e.record.length)),await writeFile(i,JSON.stringify(s,null,2)),s};exports.removeFromIndex=removeFromIndex;
@@ -1,45 +1,45 @@
1
- 'use strict'
2
-
3
- Object.defineProperty(exports, '__esModule', {
4
- value: true
5
- })
6
- exports.restrictIndexedList = void 0
7
- const _splitEntityProperty = require('./parsers/splitEntityProperty')
8
- const restrictIndexedList = (joinClause, filterJoins, indexedClone) => {
9
- const {
10
- entity: entityA,
11
- property: propertyA
12
- } = (0, _splitEntityProperty.splitEntityProperty)(joinClause.propertyA)
13
- const {
14
- entity: entityB,
15
- property: propertyB
16
- } = (0, _splitEntityProperty.splitEntityProperty)(joinClause.propertyB)
17
- if (filterJoins.hasOwnProperty(entityA)) {
18
- const existingEntities = filterJoins[entityA]
19
- if (!indexedClone.hasOwnProperty(entityA)) {
20
- indexedClone[entityA] = {}
21
- }
22
- if (!indexedClone[entityA].hasOwnProperty(propertyA)) {
23
- indexedClone[entityA][propertyA] = {}
24
- }
25
- indexedClone[entityA][propertyA] = [{
26
- value: existingEntities[0][propertyA],
27
- record: existingEntities
28
- }]
29
- }
30
- if (filterJoins.hasOwnProperty(entityB)) {
31
- const existingEntities = filterJoins[entityB]
32
- if (!indexedClone.hasOwnProperty(entityB)) {
33
- indexedClone[entityB] = {}
34
- }
35
- if (!indexedClone[entityB].hasOwnProperty(propertyB)) {
36
- indexedClone[entityB][propertyB] = {}
37
- }
38
- indexedClone[entityB][propertyB] = [{
39
- value: existingEntities[0][propertyB],
40
- record: existingEntities
41
- }]
42
- }
43
- return indexedClone
44
- }
45
- exports.restrictIndexedList = restrictIndexedList
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.restrictIndexedList = void 0
7
+ const _splitEntityProperty = require('./parsers/splitEntityProperty')
8
+ const restrictIndexedList = (joinClause, filterJoins, indexedClone) => {
9
+ const {
10
+ entity: entityA,
11
+ property: propertyA
12
+ } = (0, _splitEntityProperty.splitEntityProperty)(joinClause.propertyA)
13
+ const {
14
+ entity: entityB,
15
+ property: propertyB
16
+ } = (0, _splitEntityProperty.splitEntityProperty)(joinClause.propertyB)
17
+ if (Object.prototype.hasOwnProperty.call(filterJoins, entityA)) {
18
+ const existingEntities = filterJoins[entityA]
19
+ if (!Object.prototype.hasOwnProperty.call(indexedClone, entityA)) {
20
+ indexedClone[entityA] = {}
21
+ }
22
+ if (!Object.prototype.hasOwnProperty.call(indexedClone[entityA], propertyA)) {
23
+ indexedClone[entityA][propertyA] = {}
24
+ }
25
+ indexedClone[entityA][propertyA] = [{
26
+ value: existingEntities[0][propertyA],
27
+ record: existingEntities
28
+ }]
29
+ }
30
+ if (Object.prototype.hasOwnProperty.call(filterJoins, entityB)) {
31
+ const existingEntities = filterJoins[entityB]
32
+ if (!Object.prototype.hasOwnProperty.call(indexedClone, entityB)) {
33
+ indexedClone[entityB] = {}
34
+ }
35
+ if (!Object.prototype.hasOwnProperty.call(indexedClone[entityB], propertyB)) {
36
+ indexedClone[entityB][propertyB] = {}
37
+ }
38
+ indexedClone[entityB][propertyB] = [{
39
+ value: existingEntities[0][propertyB],
40
+ record: existingEntities
41
+ }]
42
+ }
43
+ return indexedClone
44
+ }
45
+ exports.restrictIndexedList = restrictIndexedList
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.restrictIndexedList=void 0;var _splitEntityProperty=require("./parsers/splitEntityProperty");const restrictIndexedList=(t,r,e)=>{const{entity:s,property:p}=(0,_splitEntityProperty.splitEntityProperty)(t.propertyA),{entity:i,property:o}=(0,_splitEntityProperty.splitEntityProperty)(t.propertyB);if(r.hasOwnProperty(s)){const t=r[s];e.hasOwnProperty(s)||(e[s]={}),e[s].hasOwnProperty(p)||(e[s][p]={}),e[s][p]=[{value:t[0][p],record:t}]}if(r.hasOwnProperty(i)){const t=r[i];e.hasOwnProperty(i)||(e[i]={}),e[i].hasOwnProperty(o)||(e[i][o]={}),e[i][o]=[{value:t[0][o],record:t}]}return e};exports.restrictIndexedList=restrictIndexedList;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.restrictIndexedList=void 0;var _splitEntityProperty=require("./parsers/splitEntityProperty");const restrictIndexedList=(t,r,e)=>{const{entity:p,property:o}=(0,_splitEntityProperty.splitEntityProperty)(t.propertyA),{entity:s,property:y}=(0,_splitEntityProperty.splitEntityProperty)(t.propertyB);if(Object.prototype.hasOwnProperty.call(r,p)){const t=r[p];Object.prototype.hasOwnProperty.call(e,p)||(e[p]={}),Object.prototype.hasOwnProperty.call(e[p],o)||(e[p][o]={}),e[p][o]=[{value:t[0][o],record:t}]}if(Object.prototype.hasOwnProperty.call(r,s)){const t=r[s];Object.prototype.hasOwnProperty.call(e,s)||(e[s]={}),Object.prototype.hasOwnProperty.call(e[s],y)||(e[s][y]={}),e[s][y]=[{value:t[0][y],record:t}]}return e};exports.restrictIndexedList=restrictIndexedList;
@@ -6,18 +6,18 @@ Object.defineProperty(exports, '__esModule', {
6
6
  })
7
7
  exports.retrieveFile = void 0
8
8
  const jsEnv = _interopRequireWildcard(require('browser-or-node'))
9
- const gulpConfig = _interopRequireWildcard(require('js-build-tools/gulp.config'))
9
+ const _config = require('./config')
10
10
  function _interopRequireWildcard (e, t) { if (typeof WeakMap === 'function') var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; let o; let i; const f = { __proto__: null, default: e }; if (e === null || typeof e !== 'object' && typeof e !== 'function') return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f) } for (const t in e) t !== 'default' && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f })(e, t) }
11
11
  const retrieveFile = async path => {
12
12
  let retrieveFn = url => fetch(url).then(res => res.json())
13
- const relativePath = jsEnv.isBrowser ? gulpConfig.get('relativePath', '') : ''
13
+ const relativePath = jsEnv.isBrowser ? (0, _config.getSetting)('relativePath', '') : ''
14
14
  if (jsEnv.isNode) {
15
15
  const {
16
16
  readFile
17
17
  } = require('fs/promises')
18
18
  retrieveFn = url => readFile(url).then(res => JSON.parse(res))
19
19
  }
20
- const databasePath = gulpConfig.get('databasePath', 'database/')
20
+ const databasePath = (0, _config.getSetting)('databasePath', 'database/')
21
21
  const fetchUrl = `${relativePath}${databasePath}${path}`
22
22
  const recordInfo = await retrieveFn(fetchUrl).catch(err => console.error(err))
23
23
  if (!recordInfo) {
@@ -1 +1 @@
1
- "use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveFile=void 0;var jsEnv=_interopRequireWildcard(require("browser-or-node")),gulpConfig=_interopRequireWildcard(require("js-build-tools/gulp.config"));function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var o,n,a={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return a;if(o=r?i:t){if(o.has(e))return o.get(e);o.set(e,a)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((n=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(n.get||n.set)?o(a,r,n):a[r]=e[r]);return a})(e,r)}const retrieveFile=async e=>{let r=e=>fetch(e).then((e=>e.json())),t=jsEnv.isBrowser?gulpConfig.get("relativePath",""):"";if(jsEnv.isNode){const{readFile:e}=require("fs/promises");r=r=>e(r).then((e=>JSON.parse(e)))}const i=`${t}${gulpConfig.get("databasePath","database/")}${e}`,o=await r(i).catch((e=>console.error(e)));if(!o)throw new Error(`Could not read ${e}`);return o};exports.retrieveFile=retrieveFile;
1
+ "use strict";require("core-js/modules/esnext.weak-map.delete-all.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveFile=void 0;var jsEnv=_interopRequireWildcard(require("browser-or-node")),_config=require("./config");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var o,n,a={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return a;if(o=r?i:t){if(o.has(e))return o.get(e);o.set(e,a)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((n=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(n.get||n.set)?o(a,r,n):a[r]=e[r]);return a})(e,r)}const retrieveFile=async e=>{let r=e=>fetch(e).then((e=>e.json())),t=jsEnv.isBrowser?(0,_config.getSetting)("relativePath",""):"";if(jsEnv.isNode){const{readFile:e}=require("fs/promises");r=r=>e(r).then((e=>JSON.parse(e)))}const i=`${t}${(0,_config.getSetting)("databasePath","database/")}${e}`,o=await r(i).catch((e=>console.error(e)));if(!o)throw new Error(`Could not read ${e}`);return o};exports.retrieveFile=retrieveFile;
@@ -8,7 +8,7 @@ require('core-js/modules/es.array.includes.js')
8
8
  const _retrieveFile = require('./retrieveFile')
9
9
  const _retrieveRecord = require('./retrieveRecord')
10
10
  const retrieveIndexes = async (entity = '', properties = [], recordData = {}) => {
11
- if (!recordData.hasOwnProperty(entity)) {
11
+ if (!Object.prototype.hasOwnProperty.call(recordData, entity)) {
12
12
  recordData[entity] = await (0, _retrieveRecord.retrieveRecord)(entity)
13
13
  }
14
14
  const indexSet = {}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveIndexes=void 0,require("core-js/modules/es.array.includes.js");var _retrieveFile=require("./retrieveFile"),_retrieveRecord=require("./retrieveRecord");const retrieveIndexes=async(e="",r=[],i={})=>{i.hasOwnProperty(e)||(i[e]=await(0,_retrieveRecord.retrieveRecord)(e));const t={};for(let s of r)for(let r of i[e].keys)r.fields.includes(s)&&(t[s]=await(0,_retrieveFile.retrieveFile)(`__indexes/${e}/${r.lookup}`));return t};exports.retrieveIndexes=retrieveIndexes;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.retrieveIndexes=void 0,require("core-js/modules/es.array.includes.js");var _retrieveFile=require("./retrieveFile"),_retrieveRecord=require("./retrieveRecord");const retrieveIndexes=async(e="",r=[],t={})=>{Object.prototype.hasOwnProperty.call(t,e)||(t[e]=await(0,_retrieveRecord.retrieveRecord)(e));const i={};for(let o of r)for(let r of t[e].keys)r.fields.includes(o)&&(i[o]=await(0,_retrieveFile.retrieveFile)(`__indexes/${e}/${r.lookup}`));return i};exports.retrieveIndexes=retrieveIndexes;
@@ -8,7 +8,7 @@ require('core-js/modules/es.array.includes.js')
8
8
  require('core-js/modules/es.json.stringify.js')
9
9
  require('core-js/modules/esnext.iterator.constructor.js')
10
10
  require('core-js/modules/esnext.iterator.find.js')
11
- const gulpConfig = require('js-build-tools/gulp.config')
11
+ const _config = require('./config')
12
12
  const {
13
13
  readFile,
14
14
  writeFile,
@@ -27,7 +27,7 @@ const updateIndex = async (path = '', key = null, value = undefined, fileName =
27
27
  if (!key || !key.lookup) {
28
28
  return null
29
29
  }
30
- const databasePath = gulpConfig.get('databasePath', 'database/')
30
+ const databasePath = (0, _config.getSetting)('databasePath', 'database/')
31
31
  const indexDir = `${databasePath}__indexes/${path}`
32
32
  const indexPath = `${indexDir}/${key.lookup}`
33
33
  let index = []
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.updateIndex=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js");const gulpConfig=require("js-build-tools/gulp.config"),{readFile:readFile,writeFile:writeFile,mkdir:mkdir}=require("fs/promises"),updateIndex=async(e="",r=null,s=void 0,i="")=>{if(!r||!r.lookup)return null;const t=`${gulpConfig.get("databasePath","database/")}__indexes/${e}`,u=`${t}/${r.lookup}`;let o=[];try{o=JSON.parse(await readFile(u,"utf8"))}catch(e){o=[]}const d=o.find((e=>e.value==s));return d?d.record.includes(i)||d.record.push(i):o.push({value:s,record:[i]}),await mkdir(t,{recursive:!0}),await writeFile(u,JSON.stringify(o,null,2)),o};exports.updateIndex=updateIndex;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.updateIndex=void 0,require("core-js/modules/es.array.includes.js"),require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js");var _config=require("./config");const{readFile:readFile,writeFile:writeFile,mkdir:mkdir}=require("fs/promises"),updateIndex=async(e="",r=null,i=void 0,s="")=>{if(!r||!r.lookup)return null;const t=`${(0,_config.getSetting)("databasePath","database/")}__indexes/${e}`,o=`${t}/${r.lookup}`;let u=[];try{u=JSON.parse(await readFile(o,"utf8"))}catch(e){u=[]}const d=u.find((e=>e.value==i));return d?d.record.includes(s)||d.record.push(s):u.push({value:i,record:[s]}),await mkdir(t,{recursive:!0}),await writeFile(o,JSON.stringify(u,null,2)),u};exports.updateIndex=updateIndex;
@@ -24,16 +24,16 @@ const useJoinClause = async ({
24
24
  entity: entityB,
25
25
  property: propB
26
26
  } = (0, _splitEntityProperty.splitEntityProperty)(propertyB)
27
- if (!dataSets.hasOwnProperty(entityA)) {
27
+ if (!Object.prototype.hasOwnProperty.call(dataSets, entityA)) {
28
28
  dataSets = await (0, _readEntity.readEntity)(entityA, dataSets)
29
29
  }
30
- if (!dataSets.hasOwnProperty(entityB)) {
30
+ if (!Object.prototype.hasOwnProperty.call(dataSets, entityB)) {
31
31
  dataSets = await (0, _readEntity.readEntity)(entityB, dataSets)
32
32
  }
33
- if (!filterJoins.hasOwnProperty(entityA)) {
33
+ if (!Object.prototype.hasOwnProperty.call(filterJoins, entityA)) {
34
34
  filterJoins[entityA] = _siFunciona.default.cloneObject(dataSets[entityA])
35
35
  }
36
- if (!filterJoins.hasOwnProperty(entityB)) {
36
+ if (!Object.prototype.hasOwnProperty.call(filterJoins, entityB)) {
37
37
  filterJoins[entityB] = _siFunciona.default.cloneObject(dataSets[entityB])
38
38
  }
39
39
  filterJoins[entityA] = filterJoins[entityB].reduce((dataA, dataB) => _siFunciona.default.mergeArrays(dataA, (0, _where.where)(filterJoins[entityA], {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useJoinClause=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.reduce.js");var _readEntity=require("../queries/readEntity"),_where=require("../queries/where"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_siFunciona=_interopRequireDefault(require("si-funciona"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const useJoinClause=async({propertyA:e=null,comparator:r="=",propertyB:t=null}={},i={},o={})=>{const{entity:n,property:s}=(0,_splitEntityProperty.splitEntityProperty)(e),{entity:u,property:a}=(0,_splitEntityProperty.splitEntityProperty)(t);return i.hasOwnProperty(n)||(i=await(0,_readEntity.readEntity)(n,i)),i.hasOwnProperty(u)||(i=await(0,_readEntity.readEntity)(u,i)),o.hasOwnProperty(n)||(o[n]=_siFunciona.default.cloneObject(i[n])),o.hasOwnProperty(u)||(o[u]=_siFunciona.default.cloneObject(i[u])),o[n]=o[u].reduce(((e,t)=>_siFunciona.default.mergeArrays(e,(0,_where.where)(o[n],{property:s,comparator:r,value:t[a]}))),[]),o[u]=o[n].reduce(((e,t)=>_siFunciona.default.mergeArrays(e,(0,_where.where)(o[u],{property:a,comparator:r,value:t[s]}))),[]),o};exports.useJoinClause=useJoinClause;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useJoinClause=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.reduce.js");var _readEntity=require("../queries/readEntity"),_where=require("../queries/where"),_splitEntityProperty=require("./parsers/splitEntityProperty"),_siFunciona=_interopRequireDefault(require("si-funciona"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const useJoinClause=async({propertyA:e=null,comparator:r="=",propertyB:t=null}={},o={},i={})=>{const{entity:a,property:n}=(0,_splitEntityProperty.splitEntityProperty)(e),{entity:s,property:u}=(0,_splitEntityProperty.splitEntityProperty)(t);return Object.prototype.hasOwnProperty.call(o,a)||(o=await(0,_readEntity.readEntity)(a,o)),Object.prototype.hasOwnProperty.call(o,s)||(o=await(0,_readEntity.readEntity)(s,o)),Object.prototype.hasOwnProperty.call(i,a)||(i[a]=_siFunciona.default.cloneObject(o[a])),Object.prototype.hasOwnProperty.call(i,s)||(i[s]=_siFunciona.default.cloneObject(o[s])),i[a]=i[s].reduce(((e,t)=>_siFunciona.default.mergeArrays(e,(0,_where.where)(i[a],{property:n,comparator:r,value:t[u]}))),[]),i[s]=i[a].reduce(((e,t)=>_siFunciona.default.mergeArrays(e,(0,_where.where)(i[s],{property:u,comparator:r,value:t[n]}))),[]),i};exports.useJoinClause=useJoinClause;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { query } from './data/queries/query';
2
2
  export { create, drop, describe } from './data/introspect';
3
+ export { configure } from './data/utilities/config';
3
4
  export { fieldProperties, fieldDefinition, fieldName, keyProperties, keyDefinition, indexType, indexLocation, referenceProperties, reference, recordProperties, recordDefinition, recordPath, entityPath } from './data/introspect';
4
5
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -7,6 +7,12 @@ require('core-js/modules/esnext.iterator.drop.js')
7
7
  Object.defineProperty(exports, '__esModule', {
8
8
  value: true
9
9
  })
10
+ Object.defineProperty(exports, 'configure', {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _config.configure
14
+ }
15
+ })
10
16
  Object.defineProperty(exports, 'create', {
11
17
  enumerable: true,
12
18
  get: function () {
@@ -33,3 +39,4 @@ Object.defineProperty(exports, 'query', {
33
39
  })
34
40
  var _query = require('./data/queries/query')
35
41
  var _introspect = require('./data/introspect')
42
+ var _config = require('./data/utilities/config')
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,"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}});var _query=require("./data/queries/query"),_introspect=require("./data/introspect");
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}});var _query=require("./data/queries/query"),_introspect=require("./data/introspect"),_config=require("./data/utilities/config");
package/package.json CHANGED
@@ -1,9 +1,15 @@
1
1
  {
2
2
  "name": "json-fs-query",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
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",
9
+ "files": [
10
+ "dist",
11
+ "browser"
12
+ ],
7
13
  "scripts": {
8
14
  "build": "gulp build",
9
15
  "dev": "gulp",
@@ -33,12 +39,13 @@
33
39
  "homepage": "https://github.com/jheagle/json-file-db#readme",
34
40
  "devDependencies": {
35
41
  "gulp": "^5.0.1",
36
- "js-build-tools": "^5.3.2",
37
- "typedoc": "^0.28.20",
38
- "test-filesystem": "^1.3.14"
42
+ "js-build-tools": "^5.4.0",
43
+ "test-filesystem": "^1.3.14",
44
+ "typedoc": "^0.28.20"
39
45
  },
40
46
  "dependencies": {
41
47
  "browser-or-node": "^3.0.0",
48
+ "core-js": "^3.50.0",
42
49
  "si-funciona": "^2.3.4"
43
50
  }
44
51
  }
package/.browserslistrc DELETED
@@ -1 +0,0 @@
1
- last 2 versions, > 0.25%, not dead
package/.nvmrc DELETED
@@ -1 +0,0 @@
1
- v24
package/MAIN.md DELETED
@@ -1,15 +0,0 @@
1
- # json-file-db
2
-
3
- Read and manage data with JSON files - a small query engine that treats a folder of JSON files as a database, with
4
- a SQL-like query string (`read workouts where date = '2024-06-02'`) instead of a query builder API.
5
-
6
- ## The modules
7
-
8
- Each module of the documentation is a folder of `src/data/`:
9
-
10
- * `introspect`: create, drop and describe a JSON-file "table" (and the policies that validate one).
11
- * `queries`: parse a query string and run it - reads, inserts, updates, deletes, joins, `where`, `sortBy`, `groupBy`.
12
- * `utilities`: shared helpers the queries use - retrieving records/files/indexes and merging join results.
13
-
14
- Note: `src/index.ts` (the package's top-level entry point) is still an empty stub - there is no public
15
- `require('json-file-db')` API yet, only the individual modules above.
package/babel.config.js DELETED
@@ -1,3 +0,0 @@
1
- const babelConfig = require('js-build-tools/babel.config')
2
- babelConfig.presets.push('@babel/preset-typescript')
3
- module.exports = babelConfig
@@ -1,30 +0,0 @@
1
- {
2
- "browser": {
3
- "enabled": false,
4
- "name": "jsonFileDb"
5
- },
6
- "dist": {
7
- "main": "dist/index.js"
8
- },
9
- "docs": {
10
- "enabled": true,
11
- "from": "src/data",
12
- "index": "MAIN.md",
13
- "to": "../joshuaheagle.local/projects/json-file-db/docs"
14
- },
15
- "typescript": {
16
- "config": "tsconfig.json",
17
- "enabled": true
18
- },
19
- "test": {
20
- "options": {
21
- "testMatch": [
22
- "**/?(*.)+(spec|test).js?(x)"
23
- ]
24
- },
25
- "path": "src",
26
- "watch": "src/**/*.[jt]s"
27
- },
28
- "relativePath": "http://joshuaheagle.local/projects/workout-planner",
29
- "databasePath": "database/"
30
- }
package/gulpfile.mjs DELETED
@@ -1,15 +0,0 @@
1
- export {
2
- build,
3
- dist,
4
- defaultCmd as default,
5
- bundle,
6
- images,
7
- partials,
8
- readme,
9
- sass,
10
- testFull,
11
- testQuick,
12
- typescript,
13
- watchFull,
14
- watchTest
15
- } from 'js-build-tools/gulpfile.base.mjs'
@@ -1,67 +0,0 @@
1
- import { create } from './create'
2
- import { testHelpers } from 'js-build-tools/testHelpers'
3
-
4
- const databasePath = 'create-database/'
5
- const gulpConfig = testHelpers.gulpConfig
6
- gulpConfig.set('databasePath', databasePath)
7
- testHelpers.setDefaults(databasePath)
8
-
9
- beforeEach(testHelpers.beforeEach)
10
-
11
- afterEach(testHelpers.afterEach)
12
-
13
- describe('create', () => {
14
- test('create a new record', async () => {
15
- expect.assertions(3)
16
- const recordName = 'foo'
17
- const definition = [
18
- {
19
- name: '_id',
20
- type: 'string',
21
- optional: false,
22
- autoGenerate: true
23
- },
24
- {
25
- name: 'bar',
26
- type: 'string',
27
- optional: true,
28
- autoGenerate: false
29
- }
30
- ]
31
- const keys = [
32
- {
33
- type: 'primary',
34
- fields: [
35
- '_id'
36
- ],
37
- lookup: 'pk__id.json'
38
- }
39
- ]
40
- const result = await create(recordName, definition, keys)
41
- expect(result).toEqual({
42
- path: recordName,
43
- definition: definition,
44
- keys: keys,
45
- entries: []
46
- })
47
- expect(testHelpers.fileExists(`${databasePath}${recordName}.json`)).toBeTruthy()
48
- expect(testHelpers.fileExists(`${databasePath}${recordName}`)).toBeTruthy()
49
- })
50
-
51
- test('registers the new record in __RECORDS', async () => {
52
- await create('foo', [], [])
53
- const { readFile } = require('fs/promises')
54
- const registry = JSON.parse(await readFile(`${databasePath}__RECORDS.json`, 'utf8'))
55
- expect(registry.entries).toContain('foo.json')
56
- })
57
-
58
- test('creates the database directory itself when it does not already exist', async () => {
59
- const { rm } = require('fs/promises')
60
- await rm(databasePath, { recursive: true, force: true })
61
- expect(testHelpers.fileExists(databasePath)).toBeFalsy()
62
-
63
- await create('foo', [], [])
64
-
65
- expect(testHelpers.fileExists(`${databasePath}foo.json`)).toBeTruthy()
66
- })
67
- })
@@ -1,29 +0,0 @@
1
- import { fileExists } from 'test-filesystem'
2
- import { record, recordDefinition } from './definitions/record'
3
- import { keyProperties } from './definitions/key'
4
- import { fieldProperties } from './definitions/field'
5
- import { registerRecord } from '../utilities/registerRecord'
6
-
7
- /**
8
- * Create a new record.
9
- * @param recordName
10
- * @param definition
11
- * @param keys
12
- */
13
- export const create = async (recordName: string, definition: fieldProperties[] = [], keys: keyProperties[] = []): Promise<recordDefinition | null> => {
14
- const gulpConfig = require('js-build-tools/gulp.config')
15
- const { writeFile, mkdir } = require('fs/promises')
16
- const databasePath = gulpConfig.get('databasePath', 'database/')
17
- if (recordName === '__RECORDS') {
18
- return null
19
- }
20
- if (fileExists(`${databasePath}${recordName}.json`)) {
21
- return null
22
- }
23
- await mkdir(databasePath, { recursive: true })
24
- const recordContent = record({ path: recordName, definition: definition, keys: keys })
25
- await writeFile(`${databasePath}${recordName}.json`, JSON.stringify(recordContent, null, 2))
26
- await mkdir(`${databasePath}${recordName}`, { recursive: true })
27
- await registerRecord(recordName)
28
- return recordContent
29
- }
@@ -1,23 +0,0 @@
1
- import { field } from './field'
2
-
3
- describe('field', () => {
4
- test('can create a field with default value', () => {
5
- const generatedField = {
6
- name: 'quantity',
7
- type: 'string',
8
- optional: true,
9
- autoGenerate: false,
10
- default: 0
11
- }
12
- expect(
13
- field({
14
- name: generatedField.name,
15
- type: generatedField.type,
16
- optional: generatedField.optional,
17
- autoGenerate: generatedField.autoGenerate,
18
- useDefault: true,
19
- defaultValue: generatedField.default
20
- })
21
- ).toEqual(generatedField)
22
- })
23
- })
@@ -1,48 +0,0 @@
1
- export type fieldName = string;
2
-
3
- export type fieldDefinition = {
4
- name: fieldName
5
- type: string
6
- optional: boolean
7
- default?: any
8
- autoGenerate: boolean
9
- }
10
-
11
- export type fieldProperties = {
12
- name?: string
13
- type?: string
14
- optional?: boolean
15
- useDefault?: boolean
16
- defaultValue?: any
17
- autoGenerate?: boolean
18
- }
19
-
20
- /**
21
- * Generate a field for a record.
22
- * @param properties
23
- * @param properties.name
24
- * @param properties.type
25
- * @param properties.optional
26
- * @param properties.useDefault
27
- * @param properties.defaultValue
28
- * @param properties.autoGenerate
29
- */
30
- export const field = ({
31
- name = '',
32
- type = 'string',
33
- optional = false,
34
- useDefault = false,
35
- defaultValue = '',
36
- autoGenerate = false
37
- }: fieldProperties = {}): fieldDefinition => {
38
- const returnField = {
39
- name: name,
40
- type: type,
41
- optional: optional,
42
- autoGenerate: autoGenerate,
43
- }
44
- if (useDefault) {
45
- returnField['default'] = defaultValue
46
- }
47
- return returnField
48
- }