json-fs-query 0.1.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 (336) hide show
  1. package/.browserslistrc +1 -0
  2. package/.nvmrc +1 -0
  3. package/LICENSE +674 -0
  4. package/MAIN.md +15 -0
  5. package/README.md +63 -0
  6. package/babel.config.js +3 -0
  7. package/build-tools.config.json +30 -0
  8. package/dist/data/introspect/create.d.ts +11 -0
  9. package/dist/data/introspect/create.js +45 -0
  10. package/dist/data/introspect/create.min.js +1 -0
  11. package/dist/data/introspect/definitions/field.d.ts +28 -0
  12. package/dist/data/introspect/definitions/field.js +36 -0
  13. package/dist/data/introspect/definitions/field.min.js +1 -0
  14. package/dist/data/introspect/definitions/key.d.ts +26 -0
  15. package/dist/data/introspect/definitions/key.js +53 -0
  16. package/dist/data/introspect/definitions/key.min.js +1 -0
  17. package/dist/data/introspect/definitions/keyReference.d.ts +18 -0
  18. package/dist/data/introspect/definitions/keyReference.js +20 -0
  19. package/dist/data/introspect/definitions/keyReference.min.js +1 -0
  20. package/dist/data/introspect/definitions/record.d.ts +26 -0
  21. package/dist/data/introspect/definitions/record.js +32 -0
  22. package/dist/data/introspect/definitions/record.min.js +1 -0
  23. package/dist/data/introspect/describe.d.ts +2 -0
  24. package/dist/data/introspect/describe.js +15 -0
  25. package/dist/data/introspect/describe.min.js +1 -0
  26. package/dist/data/introspect/drop.d.ts +2 -0
  27. package/dist/data/introspect/drop.js +37 -0
  28. package/dist/data/introspect/drop.min.js +1 -0
  29. package/dist/data/introspect/index.d.ts +8 -0
  30. package/dist/data/introspect/index.js +30 -0
  31. package/dist/data/introspect/index.min.js +1 -0
  32. package/dist/data/introspect/policies/foreignKeyExists.d.ts +9 -0
  33. package/dist/data/introspect/policies/foreignKeyExists.js +25 -0
  34. package/dist/data/introspect/policies/foreignKeyExists.min.js +1 -0
  35. package/dist/data/introspect/policies/keyGenerate.d.ts +2 -0
  36. package/dist/data/introspect/policies/keyGenerate.js +17 -0
  37. package/dist/data/introspect/policies/keyGenerate.min.js +1 -0
  38. package/dist/data/introspect/policies/keyUnique.d.ts +2 -0
  39. package/dist/data/introspect/policies/keyUnique.js +21 -0
  40. package/dist/data/introspect/policies/keyUnique.min.js +1 -0
  41. package/dist/data/introspect/policies/typeCheck.d.ts +12 -0
  42. package/dist/data/introspect/policies/typeCheck.js +57 -0
  43. package/dist/data/introspect/policies/typeCheck.min.js +1 -0
  44. package/dist/data/introspect/policies/typeEnum.d.ts +2 -0
  45. package/dist/data/introspect/policies/typeEnum.js +14 -0
  46. package/dist/data/introspect/policies/typeEnum.min.js +1 -0
  47. package/dist/data/introspect/policies/useDefault.d.ts +2 -0
  48. package/dist/data/introspect/policies/useDefault.js +13 -0
  49. package/dist/data/introspect/policies/useDefault.min.js +1 -0
  50. package/dist/data/queries/deleteEntity.d.ts +2 -0
  51. package/dist/data/queries/deleteEntity.js +79 -0
  52. package/dist/data/queries/deleteEntity.min.js +1 -0
  53. package/dist/data/queries/groupBy.d.ts +2 -0
  54. package/dist/data/queries/groupBy.js +22 -0
  55. package/dist/data/queries/groupBy.min.js +1 -0
  56. package/dist/data/queries/insertEntity.d.ts +2 -0
  57. package/dist/data/queries/insertEntity.js +115 -0
  58. package/dist/data/queries/insertEntity.min.js +1 -0
  59. package/dist/data/queries/joinEntity.d.ts +2 -0
  60. package/dist/data/queries/joinEntity.js +27 -0
  61. package/dist/data/queries/joinEntity.min.js +1 -0
  62. package/dist/data/queries/mergeJoins.d.ts +2 -0
  63. package/dist/data/queries/mergeJoins.js +19 -0
  64. package/dist/data/queries/mergeJoins.min.js +1 -0
  65. package/dist/data/queries/parser.d.ts +2 -0
  66. package/dist/data/queries/parser.js +30 -0
  67. package/dist/data/queries/parser.min.js +1 -0
  68. package/dist/data/queries/query.d.ts +2 -0
  69. package/dist/data/queries/query.js +18 -0
  70. package/dist/data/queries/query.min.js +1 -0
  71. package/dist/data/queries/readEntity.d.ts +2 -0
  72. package/dist/data/queries/readEntity.js +14 -0
  73. package/dist/data/queries/readEntity.min.js +1 -0
  74. package/dist/data/queries/sortBy.d.ts +2 -0
  75. package/dist/data/queries/sortBy.js +25 -0
  76. package/dist/data/queries/sortBy.min.js +1 -0
  77. package/dist/data/queries/updateEntity.d.ts +2 -0
  78. package/dist/data/queries/updateEntity.js +164 -0
  79. package/dist/data/queries/updateEntity.min.js +1 -0
  80. package/dist/data/queries/where.d.ts +7 -0
  81. package/dist/data/queries/where.js +56 -0
  82. package/dist/data/queries/where.min.js +1 -0
  83. package/dist/data/utilities/deregisterRecord.d.ts +8 -0
  84. package/dist/data/utilities/deregisterRecord.js +34 -0
  85. package/dist/data/utilities/deregisterRecord.min.js +1 -0
  86. package/dist/data/utilities/getConditionIndexedList.d.ts +3 -0
  87. package/dist/data/utilities/getConditionIndexedList.js +47 -0
  88. package/dist/data/utilities/getConditionIndexedList.min.js +1 -0
  89. package/dist/data/utilities/getJoinIndexedList.d.ts +3 -0
  90. package/dist/data/utilities/getJoinIndexedList.js +59 -0
  91. package/dist/data/utilities/getJoinIndexedList.min.js +1 -0
  92. package/dist/data/utilities/getMatchingIndexes.d.ts +2 -0
  93. package/dist/data/utilities/getMatchingIndexes.js +28 -0
  94. package/dist/data/utilities/getMatchingIndexes.min.js +1 -0
  95. package/dist/data/utilities/matchIndexedJoins.d.ts +2 -0
  96. package/dist/data/utilities/matchIndexedJoins.js +61 -0
  97. package/dist/data/utilities/matchIndexedJoins.min.js +1 -0
  98. package/dist/data/utilities/mergeJoin.d.ts +2 -0
  99. package/dist/data/utilities/mergeJoin.js +44 -0
  100. package/dist/data/utilities/mergeJoin.min.js +1 -0
  101. package/dist/data/utilities/parsers/findCommand.d.ts +10 -0
  102. package/dist/data/utilities/parsers/findCommand.js +25 -0
  103. package/dist/data/utilities/parsers/findCommand.min.js +1 -0
  104. package/dist/data/utilities/parsers/findConditions.d.ts +15 -0
  105. package/dist/data/utilities/parsers/findConditions.js +28 -0
  106. package/dist/data/utilities/parsers/findConditions.min.js +1 -0
  107. package/dist/data/utilities/parsers/findGroupBy.d.ts +9 -0
  108. package/dist/data/utilities/parsers/findGroupBy.js +22 -0
  109. package/dist/data/utilities/parsers/findGroupBy.min.js +1 -0
  110. package/dist/data/utilities/parsers/findInsertValues.d.ts +13 -0
  111. package/dist/data/utilities/parsers/findInsertValues.js +34 -0
  112. package/dist/data/utilities/parsers/findInsertValues.min.js +1 -0
  113. package/dist/data/utilities/parsers/findJoinClauses.d.ts +13 -0
  114. package/dist/data/utilities/parsers/findJoinClauses.js +27 -0
  115. package/dist/data/utilities/parsers/findJoinClauses.min.js +1 -0
  116. package/dist/data/utilities/parsers/findJoinEntity.d.ts +9 -0
  117. package/dist/data/utilities/parsers/findJoinEntity.js +22 -0
  118. package/dist/data/utilities/parsers/findJoinEntity.min.js +1 -0
  119. package/dist/data/utilities/parsers/findLimit.d.ts +9 -0
  120. package/dist/data/utilities/parsers/findLimit.js +22 -0
  121. package/dist/data/utilities/parsers/findLimit.min.js +1 -0
  122. package/dist/data/utilities/parsers/findMergeJoins.d.ts +12 -0
  123. package/dist/data/utilities/parsers/findMergeJoins.js +26 -0
  124. package/dist/data/utilities/parsers/findMergeJoins.min.js +1 -0
  125. package/dist/data/utilities/parsers/findOffset.d.ts +9 -0
  126. package/dist/data/utilities/parsers/findOffset.js +22 -0
  127. package/dist/data/utilities/parsers/findOffset.min.js +1 -0
  128. package/dist/data/utilities/parsers/findSelects.d.ts +12 -0
  129. package/dist/data/utilities/parsers/findSelects.js +30 -0
  130. package/dist/data/utilities/parsers/findSelects.min.js +1 -0
  131. package/dist/data/utilities/parsers/findSortClauses.d.ts +12 -0
  132. package/dist/data/utilities/parsers/findSortClauses.js +30 -0
  133. package/dist/data/utilities/parsers/findSortClauses.min.js +1 -0
  134. package/dist/data/utilities/parsers/findUpdateValues.d.ts +15 -0
  135. package/dist/data/utilities/parsers/findUpdateValues.js +34 -0
  136. package/dist/data/utilities/parsers/findUpdateValues.min.js +1 -0
  137. package/dist/data/utilities/parsers/isEntityProperty.d.ts +2 -0
  138. package/dist/data/utilities/parsers/isEntityProperty.js +8 -0
  139. package/dist/data/utilities/parsers/isEntityProperty.min.js +1 -0
  140. package/dist/data/utilities/parsers/parseLiteralValue.d.ts +12 -0
  141. package/dist/data/utilities/parsers/parseLiteralValue.js +34 -0
  142. package/dist/data/utilities/parsers/parseLiteralValue.min.js +1 -0
  143. package/dist/data/utilities/parsers/parseQuery.d.ts +33 -0
  144. package/dist/data/utilities/parsers/parseQuery.js +51 -0
  145. package/dist/data/utilities/parsers/parseQuery.min.js +1 -0
  146. package/dist/data/utilities/parsers/removeFromQuery.d.ts +2 -0
  147. package/dist/data/utilities/parsers/removeFromQuery.js +8 -0
  148. package/dist/data/utilities/parsers/removeFromQuery.min.js +1 -0
  149. package/dist/data/utilities/parsers/splitEntityProperty.d.ts +5 -0
  150. package/dist/data/utilities/parsers/splitEntityProperty.js +23 -0
  151. package/dist/data/utilities/parsers/splitEntityProperty.min.js +1 -0
  152. package/dist/data/utilities/parsers/splitQueries.d.ts +2 -0
  153. package/dist/data/utilities/parsers/splitQueries.js +11 -0
  154. package/dist/data/utilities/parsers/splitQueries.min.js +1 -0
  155. package/dist/data/utilities/reconcileJoin.d.ts +2 -0
  156. package/dist/data/utilities/reconcileJoin.js +26 -0
  157. package/dist/data/utilities/reconcileJoin.min.js +1 -0
  158. package/dist/data/utilities/reconcileJoins.d.ts +2 -0
  159. package/dist/data/utilities/reconcileJoins.js +27 -0
  160. package/dist/data/utilities/reconcileJoins.min.js +1 -0
  161. package/dist/data/utilities/registerRecord.d.ts +8 -0
  162. package/dist/data/utilities/registerRecord.js +67 -0
  163. package/dist/data/utilities/registerRecord.min.js +1 -0
  164. package/dist/data/utilities/removeFromIndex.d.ts +14 -0
  165. package/dist/data/utilities/removeFromIndex.js +46 -0
  166. package/dist/data/utilities/removeFromIndex.min.js +1 -0
  167. package/dist/data/utilities/restrictIndexedList.d.ts +2 -0
  168. package/dist/data/utilities/restrictIndexedList.js +45 -0
  169. package/dist/data/utilities/restrictIndexedList.min.js +1 -0
  170. package/dist/data/utilities/retrieveFile.d.ts +2 -0
  171. package/dist/data/utilities/retrieveFile.js +28 -0
  172. package/dist/data/utilities/retrieveFile.min.js +1 -0
  173. package/dist/data/utilities/retrieveIndexes.d.ts +2 -0
  174. package/dist/data/utilities/retrieveIndexes.js +24 -0
  175. package/dist/data/utilities/retrieveIndexes.min.js +1 -0
  176. package/dist/data/utilities/retrieveRecord.d.ts +2 -0
  177. package/dist/data/utilities/retrieveRecord.js +9 -0
  178. package/dist/data/utilities/retrieveRecord.min.js +1 -0
  179. package/dist/data/utilities/retrieveRecords.d.ts +2 -0
  180. package/dist/data/utilities/retrieveRecords.js +21 -0
  181. package/dist/data/utilities/retrieveRecords.min.js +1 -0
  182. package/dist/data/utilities/runQuery.d.ts +2 -0
  183. package/dist/data/utilities/runQuery.js +72 -0
  184. package/dist/data/utilities/runQuery.min.js +1 -0
  185. package/dist/data/utilities/updateIndex.d.ts +17 -0
  186. package/dist/data/utilities/updateIndex.js +56 -0
  187. package/dist/data/utilities/updateIndex.min.js +1 -0
  188. package/dist/data/utilities/useJoinClause.d.ts +6 -0
  189. package/dist/data/utilities/useJoinClause.js +51 -0
  190. package/dist/data/utilities/useJoinClause.min.js +1 -0
  191. package/dist/index.d.ts +4 -0
  192. package/dist/index.js +35 -0
  193. package/dist/index.min.js +1 -0
  194. package/gulpfile.mjs +15 -0
  195. package/package.json +44 -0
  196. package/src/data/introspect/create.test.js +67 -0
  197. package/src/data/introspect/create.ts +29 -0
  198. package/src/data/introspect/definitions/field.test.js +23 -0
  199. package/src/data/introspect/definitions/field.ts +48 -0
  200. package/src/data/introspect/definitions/key.test.js +100 -0
  201. package/src/data/introspect/definitions/key.ts +64 -0
  202. package/src/data/introspect/definitions/keyReference.test.js +8 -0
  203. package/src/data/introspect/definitions/keyReference.ts +23 -0
  204. package/src/data/introspect/definitions/record.ts +42 -0
  205. package/src/data/introspect/describe.test.js +36 -0
  206. package/src/data/introspect/describe.ts +9 -0
  207. package/src/data/introspect/drop.test.js +77 -0
  208. package/src/data/introspect/drop.ts +20 -0
  209. package/src/data/introspect/index.ts +8 -0
  210. package/src/data/introspect/policies/foreignKeyExists.test.js +44 -0
  211. package/src/data/introspect/policies/foreignKeyExists.ts +15 -0
  212. package/src/data/introspect/policies/keyGenerate.ts +11 -0
  213. package/src/data/introspect/policies/keyUnique.ts +11 -0
  214. package/src/data/introspect/policies/typeCheck.test.js +84 -0
  215. package/src/data/introspect/policies/typeCheck.ts +49 -0
  216. package/src/data/introspect/policies/typeEnum.ts +6 -0
  217. package/src/data/introspect/policies/useDefault.ts +6 -0
  218. package/src/data/queries/deleteEntity.test.js +86 -0
  219. package/src/data/queries/deleteEntity.ts +56 -0
  220. package/src/data/queries/groupBy.test.js +135 -0
  221. package/src/data/queries/groupBy.ts +16 -0
  222. package/src/data/queries/insertEntity.test.js +156 -0
  223. package/src/data/queries/insertEntity.ts +113 -0
  224. package/src/data/queries/joinEntity.test.js +109 -0
  225. package/src/data/queries/joinEntity.ts +20 -0
  226. package/src/data/queries/mergeJoins.test.js +174 -0
  227. package/src/data/queries/mergeJoins.ts +13 -0
  228. package/src/data/queries/parser.test.js +343 -0
  229. package/src/data/queries/parser.ts +24 -0
  230. package/src/data/queries/query.test.js +233 -0
  231. package/src/data/queries/query.ts +12 -0
  232. package/src/data/queries/readEntity.test.js +85 -0
  233. package/src/data/queries/readEntity.ts +8 -0
  234. package/src/data/queries/sortBy.test.js +131 -0
  235. package/src/data/queries/sortBy.ts +18 -0
  236. package/src/data/queries/updateEntity.test.js +228 -0
  237. package/src/data/queries/updateEntity.ts +162 -0
  238. package/src/data/queries/where.test.js +129 -0
  239. package/src/data/queries/where.ts +54 -0
  240. package/src/data/utilities/deregisterRecord.test.js +26 -0
  241. package/src/data/utilities/deregisterRecord.ts +24 -0
  242. package/src/data/utilities/getConditionIndexedList.ts +43 -0
  243. package/src/data/utilities/getJoinIndexedList.ts +53 -0
  244. package/src/data/utilities/getMatchingIndexes.ts +21 -0
  245. package/src/data/utilities/matchIndexedJoins.ts +45 -0
  246. package/src/data/utilities/mergeJoin.test.js +102 -0
  247. package/src/data/utilities/mergeJoin.ts +28 -0
  248. package/src/data/utilities/parsers/findCommand.ts +25 -0
  249. package/src/data/utilities/parsers/findConditions.test.js +38 -0
  250. package/src/data/utilities/parsers/findConditions.ts +32 -0
  251. package/src/data/utilities/parsers/findGroupBy.ts +20 -0
  252. package/src/data/utilities/parsers/findInsertValues.test.js +26 -0
  253. package/src/data/utilities/parsers/findInsertValues.ts +32 -0
  254. package/src/data/utilities/parsers/findJoinClauses.ts +29 -0
  255. package/src/data/utilities/parsers/findJoinEntity.ts +20 -0
  256. package/src/data/utilities/parsers/findLimit.ts +20 -0
  257. package/src/data/utilities/parsers/findMergeJoins.ts +27 -0
  258. package/src/data/utilities/parsers/findOffset.ts +20 -0
  259. package/src/data/utilities/parsers/findSelects.ts +31 -0
  260. package/src/data/utilities/parsers/findSortClauses.ts +31 -0
  261. package/src/data/utilities/parsers/findUpdateValues.test.js +37 -0
  262. package/src/data/utilities/parsers/findUpdateValues.ts +32 -0
  263. package/src/data/utilities/parsers/isEntityProperty.ts +1 -0
  264. package/src/data/utilities/parsers/parseLiteralValue.test.js +41 -0
  265. package/src/data/utilities/parsers/parseLiteralValue.ts +29 -0
  266. package/src/data/utilities/parsers/parseQuery.ts +73 -0
  267. package/src/data/utilities/parsers/removeFromQuery.ts +1 -0
  268. package/src/data/utilities/parsers/splitEntityProperty.test.js +8 -0
  269. package/src/data/utilities/parsers/splitEntityProperty.ts +17 -0
  270. package/src/data/utilities/parsers/splitQueries.test.js +33 -0
  271. package/src/data/utilities/parsers/splitQueries.ts +4 -0
  272. package/src/data/utilities/reconcileJoin.test.js +38 -0
  273. package/src/data/utilities/reconcileJoin.ts +23 -0
  274. package/src/data/utilities/reconcileJoins.test.js +160 -0
  275. package/src/data/utilities/reconcileJoins.ts +15 -0
  276. package/src/data/utilities/registerRecord.test.js +44 -0
  277. package/src/data/utilities/registerRecord.ts +44 -0
  278. package/src/data/utilities/removeFromIndex.test.js +44 -0
  279. package/src/data/utilities/removeFromIndex.ts +34 -0
  280. package/src/data/utilities/restrictIndexedList.ts +38 -0
  281. package/src/data/utilities/retrieveFile.test.js +49 -0
  282. package/src/data/utilities/retrieveFile.ts +19 -0
  283. package/src/data/utilities/retrieveIndexes.ts +17 -0
  284. package/src/data/utilities/retrieveRecord.ts +3 -0
  285. package/src/data/utilities/retrieveRecords.test.js +223 -0
  286. package/src/data/utilities/retrieveRecords.ts +16 -0
  287. package/src/data/utilities/runQuery.test.js +88 -0
  288. package/src/data/utilities/runQuery.ts +75 -0
  289. package/src/data/utilities/updateIndex.test.js +44 -0
  290. package/src/data/utilities/updateIndex.ts +45 -0
  291. package/src/data/utilities/useJoinClause.test.js +94 -0
  292. package/src/data/utilities/useJoinClause.ts +44 -0
  293. package/src/global.d.ts +1 -0
  294. package/src/index.test.js +52 -0
  295. package/src/index.ts +17 -0
  296. package/test-data/__RECORDS.json +32 -0
  297. package/test-data/__indexes/exercise_muscle/fk_exercise_id.json +14 -0
  298. package/test-data/__indexes/exercise_muscle/fk_muscle_id.json +14 -0
  299. package/test-data/__indexes/exercise_muscle/pk__id.json +14 -0
  300. package/test-data/__indexes/exercises/pk__id.json +14 -0
  301. package/test-data/__indexes/muscles/pk__id.json +58 -0
  302. package/test-data/__indexes/workouts/fk_exercise_id.json +23 -0
  303. package/test-data/__indexes/workouts/index_date.json +18 -0
  304. package/test-data/__indexes/workouts/pk__id.json +26 -0
  305. package/test-data/copyDatabase.ts +64 -0
  306. package/test-data/exercise_muscle/bench_press_pectorals.json +6 -0
  307. package/test-data/exercise_muscle/deadlift_hamstrings.json +6 -0
  308. package/test-data/exercise_muscle/squat_quadriceps.json +6 -0
  309. package/test-data/exercise_muscle.json +69 -0
  310. package/test-data/exercises/bench_press.json +5 -0
  311. package/test-data/exercises/deadlift.json +5 -0
  312. package/test-data/exercises/squat.json +5 -0
  313. package/test-data/exercises.json +34 -0
  314. package/test-data/muscles/abdominal.json +6 -0
  315. package/test-data/muscles/biceps.json +6 -0
  316. package/test-data/muscles/calves.json +6 -0
  317. package/test-data/muscles/deltoids.json +6 -0
  318. package/test-data/muscles/erector_spinae.json +6 -0
  319. package/test-data/muscles/forearms.json +6 -0
  320. package/test-data/muscles/gluteus_maximus.json +6 -0
  321. package/test-data/muscles/hamstrings.json +6 -0
  322. package/test-data/muscles/latissimus_dorsi.json +6 -0
  323. package/test-data/muscles/obliques.json +6 -0
  324. package/test-data/muscles/pectorals.json +6 -0
  325. package/test-data/muscles/quadriceps.json +6 -0
  326. package/test-data/muscles/trapezius.json +6 -0
  327. package/test-data/muscles/triceps.json +6 -0
  328. package/test-data/muscles.json +50 -0
  329. package/test-data/workouts/2024-06-02-001.json +10 -0
  330. package/test-data/workouts/2024-06-02-002.json +10 -0
  331. package/test-data/workouts/2024-06-02-003.json +10 -0
  332. package/test-data/workouts/2024-06-05-001.json +10 -0
  333. package/test-data/workouts/2024-06-05-002.json +10 -0
  334. package/test-data/workouts/2024-06-05-003.json +10 -0
  335. package/test-data/workouts.json +84 -0
  336. package/tsconfig.json +15 -0
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Validate (and where sensible, coerce) a value against a field's declared type. Runs only
3
+ * against values being written by insertEntity/updateEntity - it never re-validates data already
4
+ * on disk, so a field whose declared type doesn't match its already-stored values (which can
5
+ * happen, since nothing enforced this before) is left alone until something actually updates it.
6
+ * An unrecognized type name is treated as unconstrained rather than rejected, so a typo in a
7
+ * schema's field type can't silently block every write to that field.
8
+ * @param type
9
+ * @param value
10
+ */
11
+ export declare const typeCheck: (type?: string, value?: any) => any;
12
+ //# sourceMappingURL=typeCheck.d.ts.map
@@ -0,0 +1,57 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.typeCheck = void 0
7
+ /**
8
+ * Validate (and where sensible, coerce) a value against a field's declared type. Runs only
9
+ * against values being written by insertEntity/updateEntity - it never re-validates data already
10
+ * on disk, so a field whose declared type doesn't match its already-stored values (which can
11
+ * happen, since nothing enforced this before) is left alone until something actually updates it.
12
+ * An unrecognized type name is treated as unconstrained rather than rejected, so a typo in a
13
+ * schema's field type can't silently block every write to that field.
14
+ * @param type
15
+ * @param value
16
+ */
17
+ const typeCheck = (type = 'string', value = undefined) => {
18
+ if (typeof value === 'undefined') {
19
+ return value
20
+ }
21
+ switch (type) {
22
+ case 'string':
23
+ return typeof value === 'string' ? value : String(value)
24
+ case 'int':
25
+ {
26
+ const coerced = Number(value)
27
+ if (Number.isNaN(coerced) || !Number.isInteger(coerced)) {
28
+ throw new Error(`Value "${value}" is not a valid int`)
29
+ }
30
+ return coerced
31
+ }
32
+ case 'boolean':
33
+ if (typeof value === 'boolean') {
34
+ return value
35
+ }
36
+ if (value === 'true') {
37
+ return true
38
+ }
39
+ if (value === 'false') {
40
+ return false
41
+ }
42
+ throw new Error(`Value "${value}" is not a valid boolean`)
43
+ case 'object':
44
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
45
+ throw new Error(`Value "${value}" is not a valid object`)
46
+ }
47
+ return value
48
+ case 'array':
49
+ if (!Array.isArray(value)) {
50
+ throw new Error(`Value "${value}" is not a valid array`)
51
+ }
52
+ return value
53
+ default:
54
+ return value
55
+ }
56
+ }
57
+ exports.typeCheck = typeCheck
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.typeCheck=void 0;const typeCheck=(r="string",e=void 0)=>{if(void 0===e)return e;switch(r){case"string":return"string"==typeof e?e:String(e);case"int":{const r=Number(e);if(Number.isNaN(r)||!Number.isInteger(r))throw new Error(`Value "${e}" is not a valid int`);return r}case"boolean":if("boolean"==typeof e)return e;if("true"===e)return!0;if("false"===e)return!1;throw new Error(`Value "${e}" is not a valid boolean`);case"object":if("object"!=typeof e||null===e||Array.isArray(e))throw new Error(`Value "${e}" is not a valid object`);return e;case"array":if(!Array.isArray(e))throw new Error(`Value "${e}" is not a valid array`);return e;default:return e}};exports.typeCheck=typeCheck;
@@ -0,0 +1,2 @@
1
+ export declare const typeEnum: (values?: any[], value?: string, optional?: boolean) => boolean;
2
+ //# sourceMappingURL=typeEnum.d.ts.map
@@ -0,0 +1,14 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.typeEnum = void 0
7
+ require('core-js/modules/es.array.includes.js')
8
+ const typeEnum = (values = [], value = '', optional = false) => {
9
+ if (values.includes(value)) {
10
+ return true
11
+ }
12
+ return typeof value === 'undefined' && optional
13
+ }
14
+ exports.typeEnum = typeEnum
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.typeEnum=void 0,require("core-js/modules/es.array.includes.js");const typeEnum=(e=[],s="",t=!1)=>!!e.includes(s)||void 0===s&&t;exports.typeEnum=typeEnum;
@@ -0,0 +1,2 @@
1
+ export declare const useDefault: (defaultValue?: string, value?: any) => any;
2
+ //# sourceMappingURL=useDefault.d.ts.map
@@ -0,0 +1,13 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.useDefault = void 0
7
+ const useDefault = (defaultValue = '', value = undefined) => {
8
+ if (typeof value === 'undefined') {
9
+ return defaultValue
10
+ }
11
+ return value
12
+ }
13
+ exports.useDefault = useDefault
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useDefault=void 0;const useDefault=(e="",t=void 0)=>void 0===t?e:t;exports.useDefault=useDefault;
@@ -0,0 +1,2 @@
1
+ export declare const deleteEntity: (entity?: string, dataSet?: Object) => Promise<Object>;
2
+ //# sourceMappingURL=deleteEntity.d.ts.map
@@ -0,0 +1,79 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.deleteEntity = 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.find.js')
10
+ require('core-js/modules/esnext.iterator.map.js')
11
+ require('core-js/modules/esnext.set.add-all.js')
12
+ require('core-js/modules/esnext.set.delete-all.js')
13
+ require('core-js/modules/esnext.set.difference.js')
14
+ require('core-js/modules/esnext.set.every.js')
15
+ require('core-js/modules/esnext.set.filter.js')
16
+ require('core-js/modules/esnext.set.find.js')
17
+ require('core-js/modules/esnext.set.intersection.js')
18
+ require('core-js/modules/esnext.set.is-disjoint-from.js')
19
+ require('core-js/modules/esnext.set.is-subset-of.js')
20
+ require('core-js/modules/esnext.set.is-superset-of.js')
21
+ require('core-js/modules/esnext.set.join.js')
22
+ require('core-js/modules/esnext.set.map.js')
23
+ require('core-js/modules/esnext.set.reduce.js')
24
+ require('core-js/modules/esnext.set.some.js')
25
+ require('core-js/modules/esnext.set.symmetric-difference.js')
26
+ require('core-js/modules/esnext.set.union.js')
27
+ const _retrieveRecord = require('../utilities/retrieveRecord')
28
+ const _retrieveFile = require('../utilities/retrieveFile')
29
+ const _removeFromIndex = require('../utilities/removeFromIndex')
30
+ const gulpConfig = require('js-build-tools/gulp.config')
31
+ const {
32
+ rm,
33
+ writeFile
34
+ } = require('fs/promises')
35
+ /**
36
+ * A record object carries no memory of which entry file it was read from, and files are not
37
+ * guaranteed to be named after any field's value, so the only reliable way to find a record's
38
+ * file is to re-scan every entry and match it by its primary key value.
39
+ * @param entity
40
+ * @param record
41
+ * @param primaryField
42
+ * @param deletedValues
43
+ */
44
+ const removeMatchingEntries = async (entity, record, primaryField, deletedValues) => {
45
+ const databasePath = gulpConfig.get('databasePath', 'database/')
46
+ const remainingEntries = []
47
+ for (const fileName of record.entries) {
48
+ const data = await (0, _retrieveFile.retrieveFile)(`${record.path}/${fileName}`)
49
+ if (!deletedValues.has(data[primaryField])) {
50
+ remainingEntries.push(fileName)
51
+ continue
52
+ }
53
+ await rm(`${databasePath}${record.path}/${fileName}`)
54
+ for (const key of record.keys) {
55
+ if (key.fields.length === 1) {
56
+ await (0, _removeFromIndex.removeFromIndex)(record.path, key, data[key.fields[0]], fileName)
57
+ }
58
+ }
59
+ }
60
+ return remainingEntries
61
+ }
62
+ const deleteEntity = async (entity = '', dataSet = {}) => {
63
+ const databasePath = gulpConfig.get('databasePath', 'database/')
64
+ const record = await (0, _retrieveRecord.retrieveRecord)(entity)
65
+ const primaryKey = record.keys.find(key => key.type === 'primary' && key.fields.length === 1)
66
+ if (!primaryKey) {
67
+ throw new Error(`Cannot delete from "${entity}" without a single-field primary key`)
68
+ }
69
+ const primaryField = primaryKey.fields[0]
70
+ const toDelete = dataSet[entity] || []
71
+ if (!toDelete.length) {
72
+ return dataSet
73
+ }
74
+ const deletedValues = new Set(toDelete.map(row => row[primaryField]))
75
+ record.entries = await removeMatchingEntries(entity, record, primaryField, deletedValues)
76
+ await writeFile(`${databasePath}${record.path}.json`, JSON.stringify(record, null, 2))
77
+ return dataSet
78
+ }
79
+ exports.deleteEntity = deleteEntity
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deleteEntity=void 0,require("core-js/modules/es.json.stringify.js"),require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.find.js"),require("core-js/modules/esnext.iterator.map.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 _retrieveRecord=require("../utilities/retrieveRecord"),_retrieveFile=require("../utilities/retrieveFile"),_removeFromIndex=require("../utilities/removeFromIndex");const gulpConfig=require("js-build-tools/gulp.config"),{rm:rm,writeFile:writeFile}=require("fs/promises"),removeMatchingEntries=async(e,r,s,t)=>{const i=gulpConfig.get("databasePath","database/"),o=[];for(const e of r.entries){const n=await(0,_retrieveFile.retrieveFile)(`${r.path}/${e}`);if(t.has(n[s])){await rm(`${i}${r.path}/${e}`);for(const s of r.keys)1===s.fields.length&&await(0,_removeFromIndex.removeFromIndex)(r.path,s,n[s.fields[0]],e)}else o.push(e)}return o},deleteEntity=async(e="",r={})=>{const s=gulpConfig.get("databasePath","database/"),t=await(0,_retrieveRecord.retrieveRecord)(e),i=t.keys.find((e=>"primary"===e.type&&1===e.fields.length));if(!i)throw new Error(`Cannot delete from "${e}" without a single-field primary key`);const o=i.fields[0],n=r[e]||[];if(!n.length)return r;const u=new Set(n.map((e=>e[o])));return t.entries=await removeMatchingEntries(0,t,o,u),await writeFile(`${s}${t.path}.json`,JSON.stringify(t,null,2)),r};exports.deleteEntity=deleteEntity;
@@ -0,0 +1,2 @@
1
+ export declare const groupBy: (dataSet?: any[], groupProperty?: string) => any;
2
+ //# sourceMappingURL=groupBy.d.ts.map
@@ -0,0 +1,22 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.groupBy = void 0
7
+ require('core-js/modules/esnext.iterator.constructor.js')
8
+ require('core-js/modules/esnext.iterator.reduce.js')
9
+ const groupBy = (dataSet = [], groupProperty = '') => {
10
+ if (!groupProperty) {
11
+ return dataSet
12
+ }
13
+ return dataSet.reduce((groupedData, data) => {
14
+ const property = data[groupProperty]
15
+ if (!groupedData.hasOwnProperty(property)) {
16
+ groupedData[property] = []
17
+ }
18
+ groupedData[property].push(data)
19
+ return groupedData
20
+ }, {})
21
+ }
22
+ exports.groupBy = groupBy
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.groupBy=void 0,require("core-js/modules/esnext.iterator.constructor.js"),require("core-js/modules/esnext.iterator.reduce.js");const groupBy=(e=[],r="")=>r?e.reduce(((e,o)=>{const s=o[r];return e.hasOwnProperty(s)||(e[s]=[]),e[s].push(o),e}),{}):e;exports.groupBy=groupBy;
@@ -0,0 +1,2 @@
1
+ export declare const insertEntity: (entity?: string, values?: Object[], dataSet?: Object) => Promise<Object>;
2
+ //# sourceMappingURL=insertEntity.d.ts.map
@@ -0,0 +1,115 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.insertEntity = 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.find.js')
10
+ const _retrieveRecord = require('../utilities/retrieveRecord')
11
+ const _updateIndex = require('../utilities/updateIndex')
12
+ const _keyGenerate = require('../introspect/policies/keyGenerate')
13
+ const _keyUnique = require('../introspect/policies/keyUnique')
14
+ const _useDefault = require('../introspect/policies/useDefault')
15
+ const _typeCheck = require('../introspect/policies/typeCheck')
16
+ const _foreignKeyExists = require('../introspect/policies/foreignKeyExists')
17
+ const _splitEntityProperty = require('../utilities/parsers/splitEntityProperty')
18
+ const gulpConfig = require('js-build-tools/gulp.config')
19
+ const {
20
+ writeFile
21
+ } = require('fs/promises')
22
+ /**
23
+ * Build one entity's stored values from the raw input values, generating any autoGenerate
24
+ * fields and applying field defaults, then throw if a required field still has no value.
25
+ * @param entity
26
+ * @param record
27
+ * @param rowValues
28
+ */
29
+ const buildEntityValues = async (entity, record, rowValues = {}) => {
30
+ const entityValues = {}
31
+ for (const field of record.definition) {
32
+ let value = rowValues[field.name]
33
+ if (field.autoGenerate) {
34
+ value = await (0, _keyGenerate.keyGenerate)(entity, [field.name])
35
+ } else if (field.hasOwnProperty('default')) {
36
+ value = (0, _useDefault.useDefault)(field.default, value)
37
+ }
38
+ if (typeof value === 'undefined') {
39
+ if (!field.optional) {
40
+ throw new Error(`Missing required field "${field.name}" for ${entity}`)
41
+ }
42
+ continue
43
+ }
44
+ entityValues[field.name] = (0, _typeCheck.typeCheck)(field.type, value)
45
+ }
46
+ return entityValues
47
+ }
48
+ /**
49
+ * Reject the insert if it collides with an existing primary or unique single-field key value.
50
+ * @param entity
51
+ * @param record
52
+ * @param entityValues
53
+ */
54
+ const assertUnique = async (entity, record, entityValues) => {
55
+ for (const key of record.keys) {
56
+ if (key.type !== 'primary' && key.type !== 'unique' || key.fields.length !== 1) {
57
+ continue
58
+ }
59
+ const isUnique = await (0, _keyUnique.keyUnique)(entity, key.fields, entityValues[key.fields[0]])
60
+ if (!isUnique) {
61
+ throw new Error(`Duplicate value for ${key.type} key "${key.fields[0]}" on ${entity}`)
62
+ }
63
+ }
64
+ }
65
+ /**
66
+ * Reject the insert if a single-field foreign key's value doesn't exist in the record it
67
+ * references.
68
+ * @param entity
69
+ * @param record
70
+ * @param entityValues
71
+ */
72
+ const assertForeignKeys = async (entity, record, entityValues) => {
73
+ for (const key of record.keys) {
74
+ if (key.type !== 'foreign' || key.fields.length !== 1 || !key.references || key.references.length !== 1) {
75
+ continue
76
+ }
77
+ const field = key.fields[0]
78
+ if (!entityValues.hasOwnProperty(field)) {
79
+ continue
80
+ }
81
+ const {
82
+ entity: refEntity,
83
+ property: refProperty
84
+ } = (0, _splitEntityProperty.splitEntityProperty)(key.references[0].fields[0])
85
+ const exists = await (0, _foreignKeyExists.foreignKeyExists)(refEntity, refProperty, entityValues[field])
86
+ if (!exists) {
87
+ throw new Error(`Foreign key "${field}" on ${entity} references a nonexistent ${refEntity}.${refProperty} = ${entityValues[field]}`)
88
+ }
89
+ }
90
+ }
91
+ const insertEntity = async (entity = '', values = [], dataSet = {}) => {
92
+ const databasePath = gulpConfig.get('databasePath', 'database/')
93
+ const record = await (0, _retrieveRecord.retrieveRecord)(entity)
94
+ const primaryKey = record.keys.find(key => key.type === 'primary' && key.fields.length === 1)
95
+ if (!dataSet.hasOwnProperty(entity)) {
96
+ dataSet[entity] = []
97
+ }
98
+ for (const rowValues of values) {
99
+ const entityValues = await buildEntityValues(entity, record, rowValues)
100
+ await assertUnique(entity, record, entityValues)
101
+ await assertForeignKeys(entity, record, entityValues)
102
+ const fileName = `${primaryKey ? entityValues[primaryKey.fields[0]] : crypto.randomUUID()}.json`
103
+ await writeFile(`${databasePath}${record.path}/${fileName}`, JSON.stringify(entityValues, null, 2))
104
+ record.entries.push(fileName)
105
+ await writeFile(`${databasePath}${record.path}.json`, JSON.stringify(record, null, 2))
106
+ for (const key of record.keys) {
107
+ if (key.fields.length === 1) {
108
+ await (0, _updateIndex.updateIndex)(record.path, key, entityValues[key.fields[0]], fileName)
109
+ }
110
+ }
111
+ dataSet[entity].push(entityValues)
112
+ }
113
+ return dataSet
114
+ }
115
+ exports.insertEntity = insertEntity
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.insertEntity=void 0,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 _retrieveRecord=require("../utilities/retrieveRecord"),_updateIndex=require("../utilities/updateIndex"),_keyGenerate=require("../introspect/policies/keyGenerate"),_keyUnique=require("../introspect/policies/keyUnique"),_useDefault=require("../introspect/policies/useDefault"),_typeCheck=require("../introspect/policies/typeCheck"),_foreignKeyExists=require("../introspect/policies/foreignKeyExists"),_splitEntityProperty=require("../utilities/parsers/splitEntityProperty");const gulpConfig=require("js-build-tools/gulp.config"),{writeFile:writeFile}=require("fs/promises"),buildEntityValues=async(e,t,i={})=>{const r={};for(const s of t.definition){let t=i[s.name];if(s.autoGenerate?t=await(0,_keyGenerate.keyGenerate)(e,[s.name]):s.hasOwnProperty("default")&&(t=(0,_useDefault.useDefault)(s.default,t)),void 0!==t)r[s.name]=(0,_typeCheck.typeCheck)(s.type,t);else if(!s.optional)throw new Error(`Missing required field "${s.name}" for ${e}`)}return r},assertUnique=async(e,t,i)=>{for(const r of t.keys){if("primary"!==r.type&&"unique"!==r.type||1!==r.fields.length)continue;if(!await(0,_keyUnique.keyUnique)(e,r.fields,i[r.fields[0]]))throw new Error(`Duplicate value for ${r.type} key "${r.fields[0]}" on ${e}`)}},assertForeignKeys=async(e,t,i)=>{for(const r of t.keys){if("foreign"!==r.type||1!==r.fields.length||!r.references||1!==r.references.length)continue;const t=r.fields[0];if(!i.hasOwnProperty(t))continue;const{entity:s,property:n}=(0,_splitEntityProperty.splitEntityProperty)(r.references[0].fields[0]);if(!await(0,_foreignKeyExists.foreignKeyExists)(s,n,i[t]))throw new Error(`Foreign key "${t}" on ${e} references a nonexistent ${s}.${n} = ${i[t]}`)}},insertEntity=async(e="",t=[],i={})=>{const r=gulpConfig.get("databasePath","database/"),s=await(0,_retrieveRecord.retrieveRecord)(e),n=s.keys.find((e=>"primary"===e.type&&1===e.fields.length));i.hasOwnProperty(e)||(i[e]=[]);for(const o of t){const t=await buildEntityValues(e,s,o);await assertUnique(e,s,t),await assertForeignKeys(e,s,t);const a=`${n?t[n.fields[0]]:crypto.randomUUID()}.json`;await writeFile(`${r}${s.path}/${a}`,JSON.stringify(t,null,2)),s.entries.push(a),await writeFile(`${r}${s.path}.json`,JSON.stringify(s,null,2));for(const e of s.keys)1===e.fields.length&&await(0,_updateIndex.updateIndex)(s.path,e,t[e.fields[0]],a);i[e].push(t)}return i};exports.insertEntity=insertEntity;
@@ -0,0 +1,2 @@
1
+ export declare const joinEntity: (entity: any, joinEntity: any, dataSets?: {}, joinClauses?: any[]) => Promise<{}>;
2
+ //# sourceMappingURL=joinEntity.d.ts.map
@@ -0,0 +1,27 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.joinEntity = void 0
7
+ const _siFunciona = _interopRequireDefault(require('si-funciona'))
8
+ const _readEntity = require('./readEntity')
9
+ const _useJoinClause = require('../utilities/useJoinClause')
10
+ function _interopRequireDefault (e) { return e && e.__esModule ? e : { default: e } }
11
+ const joinEntity = async (entity, joinEntity, dataSets = {}, joinClauses = []) => {
12
+ dataSets = await (0, _readEntity.readEntity)(entity, dataSets)
13
+ if (!joinClauses.length) {
14
+ return dataSets
15
+ }
16
+ dataSets = await (0, _readEntity.readEntity)(joinEntity, dataSets)
17
+ for (const anEntity in dataSets[entity]) {
18
+ let filterJoins = _siFunciona.default.cloneObject(dataSets)
19
+ filterJoins[entity] = [dataSets[entity][anEntity]]
20
+ for (const joinClause of joinClauses) {
21
+ filterJoins = await (0, _useJoinClause.useJoinClause)(joinClause, dataSets, filterJoins)
22
+ }
23
+ dataSets[entity][anEntity][joinEntity] = filterJoins[joinEntity]
24
+ }
25
+ return dataSets
26
+ }
27
+ exports.joinEntity = joinEntity
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.joinEntity=void 0;var _siFunciona=_interopRequireDefault(require("si-funciona")),_readEntity=require("./readEntity"),_useJoinClause=require("../utilities/useJoinClause");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const joinEntity=async(e,t,i={},n=[])=>{if(i=await(0,_readEntity.readEntity)(e,i),!n.length)return i;i=await(0,_readEntity.readEntity)(t,i);for(const r in i[e]){let u=_siFunciona.default.cloneObject(i);u[e]=[i[e][r]];for(let e of n)u=await(0,_useJoinClause.useJoinClause)(e,i,u);i[e][r][t]=u[t]}return i};exports.joinEntity=joinEntity;
@@ -0,0 +1,2 @@
1
+ export declare const mergeJoins: (dataSet?: {}, merges?: any[]) => Promise<{}>;
2
+ //# sourceMappingURL=mergeJoins.d.ts.map
@@ -0,0 +1,19 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.mergeJoins = void 0
7
+ const _mergeJoin = require('../utilities/mergeJoin')
8
+ const _reconcileJoins = require('../utilities/reconcileJoins')
9
+ const mergeJoins = async (dataSet = {}, merges = []) => {
10
+ if (!merges.length) {
11
+ return dataSet
12
+ }
13
+ for (const merge of merges) {
14
+ dataSet = await (0, _mergeJoin.mergeJoin)(merge.propertyA, merge.propertyB, dataSet)
15
+ dataSet = (0, _reconcileJoins.reconcileJoins)(merge.propertyA, merge.propertyB, dataSet)
16
+ }
17
+ return dataSet
18
+ }
19
+ exports.mergeJoins = mergeJoins
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.mergeJoins=void 0;var _mergeJoin=require("../utilities/mergeJoin"),_reconcileJoins=require("../utilities/reconcileJoins");const mergeJoins=async(e={},r=[])=>{if(!r.length)return e;for(let i of r)e=await(0,_mergeJoin.mergeJoin)(i.propertyA,i.propertyB,e),e=(0,_reconcileJoins.reconcileJoins)(i.propertyA,i.propertyB,e);return e};exports.mergeJoins=mergeJoins;
@@ -0,0 +1,2 @@
1
+ export declare const parser: (queries?: string) => any[];
2
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1,30 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.parser = void 0
7
+ const _splitQueries = require('../utilities/parsers/splitQueries')
8
+ const _parseQuery = require('../utilities/parsers/parseQuery')
9
+ const parser = (queries = '') => {
10
+ const queryArray = (0, _splitQueries.splitQueries)(queries)
11
+ const parsedQueries = []
12
+ let mergeQuery = ''
13
+ for (const query of queryArray) {
14
+ mergeQuery = mergeQuery ? `${mergeQuery}${query}` : query
15
+ let parsedQuery = {}
16
+ try {
17
+ parsedQuery = (0, _parseQuery.parseQuery)(mergeQuery)
18
+ mergeQuery = ''
19
+ } catch (e) {
20
+ // attempt to combine queries to fix bad splits
21
+ continue
22
+ }
23
+ parsedQueries.push(parsedQuery)
24
+ }
25
+ if (mergeQuery) {
26
+ throw new Error(`Failed to interpret: ${mergeQuery}`)
27
+ }
28
+ return parsedQueries
29
+ }
30
+ exports.parser = parser
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parser=void 0;var _splitQueries=require("../utilities/parsers/splitQueries"),_parseQuery=require("../utilities/parsers/parseQuery");const parser=(e="")=>{const r=(0,_splitQueries.splitQueries)(e),s=[];let t="";for(let e of r){t=t?`${t}${e}`:e;let r={};try{r=(0,_parseQuery.parseQuery)(t),t=""}catch(e){continue}s.push(r)}if(t)throw new Error(`Failed to interpret: ${t}`);return s};exports.parser=parser;
@@ -0,0 +1,2 @@
1
+ export declare const query: (queryString?: string) => Promise<any[]>;
2
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1,18 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.query = void 0
7
+ const _parser = require('./parser')
8
+ const _runQuery = require('../utilities/runQuery')
9
+ const query = async (queryString = '') => {
10
+ const parsedQueries = (0, _parser.parser)(queryString)
11
+ const queryResults = []
12
+ for (const parsed of parsedQueries) {
13
+ const dataSet = await (0, _runQuery.runQuery)(parsed)
14
+ queryResults.push(dataSet[parsed.entity])
15
+ }
16
+ return queryResults
17
+ }
18
+ exports.query = query
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.query=void 0;var _parser=require("./parser"),_runQuery=require("../utilities/runQuery");const query=async(r="")=>{const e=(0,_parser.parser)(r),u=[];for(let r of e){const e=await(0,_runQuery.runQuery)(r);u.push(e[r.entity])}return u};exports.query=query;
@@ -0,0 +1,2 @@
1
+ export declare const readEntity: (entity?: string, dataSet?: {}) => Promise<{}>;
2
+ //# sourceMappingURL=readEntity.d.ts.map
@@ -0,0 +1,14 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.readEntity = void 0
7
+ const _retrieveRecords = require('../utilities/retrieveRecords')
8
+ const readEntity = async (entity = '', dataSet = {}) => {
9
+ if (!dataSet.hasOwnProperty(entity) || !dataSet[entity].length) {
10
+ dataSet[entity] = await (0, _retrieveRecords.retrieveRecords)(entity)
11
+ }
12
+ return dataSet
13
+ }
14
+ exports.readEntity = readEntity
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.readEntity=void 0;var _retrieveRecords=require("../utilities/retrieveRecords");const readEntity=async(e="",r={})=>(r.hasOwnProperty(e)&&r[e].length||(r[e]=await(0,_retrieveRecords.retrieveRecords)(e)),r);exports.readEntity=readEntity;
@@ -0,0 +1,2 @@
1
+ export declare const sortBy: (dataSet?: any[], sortClauses?: any[]) => any[];
2
+ //# sourceMappingURL=sortBy.d.ts.map
@@ -0,0 +1,25 @@
1
+ 'use strict'
2
+
3
+ Object.defineProperty(exports, '__esModule', {
4
+ value: true
5
+ })
6
+ exports.sortBy = void 0
7
+ const sortBy = (dataSet = [], sortClauses = []) => {
8
+ if (!sortClauses.length) {
9
+ return dataSet
10
+ }
11
+ dataSet.sort((a, b) => {
12
+ for (const sortClause of sortClauses) {
13
+ const property = sortClause.property
14
+ const direction = sortClause.direction
15
+ if (a[property] == b[property]) {
16
+ continue
17
+ }
18
+ const result = a[property] < b[property] ? -1 : 1
19
+ return direction === 'asc' ? result : result * -1
20
+ }
21
+ return 0
22
+ })
23
+ return dataSet
24
+ }
25
+ exports.sortBy = sortBy
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sortBy=void 0;const sortBy=(t=[],o=[])=>o.length?(t.sort(((t,r)=>{for(let e of o){const o=e.property,s=e.direction;if(t[o]==r[o])continue;const n=t[o]<r[o]?-1:1;return"asc"===s?n:-1*n}return 0})),t):t;exports.sortBy=sortBy;
@@ -0,0 +1,2 @@
1
+ export declare const updateEntity: (entity?: string, values?: Object, dataSet?: Object) => Promise<Object>;
2
+ //# sourceMappingURL=updateEntity.d.ts.map