@saltcorn/data 0.6.1-beta.3 → 0.6.2-beta.2

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 (555) hide show
  1. package/dist/base-plugin/actions.d.ts +141 -0
  2. package/dist/base-plugin/actions.d.ts.map +1 -0
  3. package/dist/base-plugin/actions.js +551 -0
  4. package/dist/base-plugin/actions.js.map +1 -0
  5. package/dist/base-plugin/base.test.d.ts +2 -0
  6. package/dist/base-plugin/base.test.d.ts.map +1 -0
  7. package/dist/base-plugin/base.test.js +15 -0
  8. package/dist/base-plugin/base.test.js.map +1 -0
  9. package/dist/base-plugin/fieldviews.d.ts +25 -0
  10. package/dist/base-plugin/fieldviews.d.ts.map +1 -0
  11. package/dist/base-plugin/fieldviews.js +159 -0
  12. package/dist/base-plugin/fieldviews.js.map +1 -0
  13. package/dist/base-plugin/fileviews.d.ts +52 -0
  14. package/dist/base-plugin/fileviews.d.ts.map +1 -0
  15. package/dist/base-plugin/fileviews.js +59 -0
  16. package/dist/base-plugin/fileviews.js.map +1 -0
  17. package/dist/base-plugin/index.d.ts +524 -0
  18. package/dist/base-plugin/index.d.ts.map +1 -0
  19. package/{base-plugin → dist/base-plugin}/index.js +22 -24
  20. package/dist/base-plugin/index.js.map +1 -0
  21. package/dist/base-plugin/types.d.ts +383 -0
  22. package/dist/base-plugin/types.d.ts.map +1 -0
  23. package/dist/base-plugin/types.js +1080 -0
  24. package/dist/base-plugin/types.js.map +1 -0
  25. package/dist/base-plugin/viewtemplates/edit.d.ts +116 -0
  26. package/dist/base-plugin/viewtemplates/edit.d.ts.map +1 -0
  27. package/dist/base-plugin/viewtemplates/edit.js +561 -0
  28. package/dist/base-plugin/viewtemplates/edit.js.map +1 -0
  29. package/dist/base-plugin/viewtemplates/feed.d.ts +73 -0
  30. package/dist/base-plugin/viewtemplates/feed.d.ts.map +1 -0
  31. package/dist/base-plugin/viewtemplates/feed.js +348 -0
  32. package/dist/base-plugin/viewtemplates/feed.js.map +1 -0
  33. package/dist/base-plugin/viewtemplates/filter.d.ts +46 -0
  34. package/dist/base-plugin/viewtemplates/filter.d.ts.map +1 -0
  35. package/dist/base-plugin/viewtemplates/filter.js +267 -0
  36. package/dist/base-plugin/viewtemplates/filter.js.map +1 -0
  37. package/dist/base-plugin/viewtemplates/list.d.ts +99 -0
  38. package/dist/base-plugin/viewtemplates/list.d.ts.map +1 -0
  39. package/dist/base-plugin/viewtemplates/list.js +471 -0
  40. package/dist/base-plugin/viewtemplates/list.js.map +1 -0
  41. package/dist/base-plugin/viewtemplates/listshowlist.d.ts +41 -0
  42. package/dist/base-plugin/viewtemplates/listshowlist.d.ts.map +1 -0
  43. package/dist/base-plugin/viewtemplates/listshowlist.js +248 -0
  44. package/dist/base-plugin/viewtemplates/listshowlist.js.map +1 -0
  45. package/dist/base-plugin/viewtemplates/room.d.ts +140 -0
  46. package/dist/base-plugin/viewtemplates/room.d.ts.map +1 -0
  47. package/dist/base-plugin/viewtemplates/room.js +469 -0
  48. package/dist/base-plugin/viewtemplates/room.js.map +1 -0
  49. package/dist/base-plugin/viewtemplates/show.d.ts +101 -0
  50. package/dist/base-plugin/viewtemplates/show.d.ts.map +1 -0
  51. package/dist/base-plugin/viewtemplates/show.js +562 -0
  52. package/dist/base-plugin/viewtemplates/show.js.map +1 -0
  53. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts +108 -0
  54. package/dist/base-plugin/viewtemplates/viewable_fields.d.ts.map +1 -0
  55. package/dist/base-plugin/viewtemplates/viewable_fields.js +563 -0
  56. package/dist/base-plugin/viewtemplates/viewable_fields.js.map +1 -0
  57. package/dist/contracts.d.ts +49 -0
  58. package/dist/contracts.d.ts.map +1 -0
  59. package/dist/contracts.js +212 -0
  60. package/dist/contracts.js.map +1 -0
  61. package/dist/coverage/lcov-report/block-navigation.d.ts +2 -0
  62. package/dist/coverage/lcov-report/block-navigation.d.ts.map +1 -0
  63. package/dist/coverage/lcov-report/block-navigation.js +66 -0
  64. package/dist/coverage/lcov-report/block-navigation.js.map +1 -0
  65. package/dist/coverage/lcov-report/prettify.d.ts +1 -0
  66. package/dist/coverage/lcov-report/prettify.d.ts.map +1 -0
  67. package/dist/coverage/lcov-report/prettify.js +478 -0
  68. package/dist/coverage/lcov-report/prettify.js.map +1 -0
  69. package/dist/coverage/lcov-report/sorter.d.ts +2 -0
  70. package/dist/coverage/lcov-report/sorter.d.ts.map +1 -0
  71. package/dist/coverage/lcov-report/sorter.js +141 -0
  72. package/dist/coverage/lcov-report/sorter.js.map +1 -0
  73. package/dist/db/connect.d.ts +40 -0
  74. package/dist/db/connect.d.ts.map +1 -0
  75. package/dist/db/connect.js +150 -0
  76. package/dist/db/connect.js.map +1 -0
  77. package/dist/db/db.test.d.ts +2 -0
  78. package/dist/db/db.test.d.ts.map +1 -0
  79. package/dist/db/db.test.js +28 -0
  80. package/dist/db/db.test.js.map +1 -0
  81. package/dist/db/fixtures.d.ts +8 -0
  82. package/dist/db/fixtures.d.ts.map +1 -0
  83. package/dist/db/fixtures.js +300 -0
  84. package/dist/db/fixtures.js.map +1 -0
  85. package/dist/db/index.d.ts +3 -0
  86. package/dist/db/index.d.ts.map +1 -0
  87. package/dist/db/index.js +41 -0
  88. package/dist/db/index.js.map +1 -0
  89. package/dist/db/reset_schema.d.ts +13 -0
  90. package/dist/db/reset_schema.d.ts.map +1 -0
  91. package/{db → dist/db}/reset_schema.js +45 -55
  92. package/dist/db/reset_schema.js.map +1 -0
  93. package/dist/db/state.d.ts +56 -0
  94. package/dist/db/state.d.ts.map +1 -0
  95. package/dist/db/state.js +608 -0
  96. package/dist/db/state.js.map +1 -0
  97. package/dist/index.d.ts +2 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/{index.js → dist/index.js} +2 -1
  100. package/dist/index.js.map +1 -0
  101. package/dist/migrate.d.ts +12 -0
  102. package/dist/migrate.d.ts.map +1 -0
  103. package/dist/migrate.js +94 -0
  104. package/dist/migrate.js.map +1 -0
  105. package/dist/migrations/202005141503.d.ts +2 -0
  106. package/dist/migrations/202005141503.d.ts.map +1 -0
  107. package/{migrations → dist/migrations}/202005141503.js +2 -1
  108. package/dist/migrations/202005141503.js.map +1 -0
  109. package/dist/migrations/202005241712.d.ts +2 -0
  110. package/dist/migrations/202005241712.d.ts.map +1 -0
  111. package/{migrations → dist/migrations}/202005241712.js +2 -1
  112. package/dist/migrations/202005241712.js.map +1 -0
  113. package/dist/migrations/202005251037.d.ts +2 -0
  114. package/dist/migrations/202005251037.d.ts.map +1 -0
  115. package/{migrations → dist/migrations}/202005251037.js +2 -1
  116. package/dist/migrations/202005251037.js.map +1 -0
  117. package/dist/migrations/202005282134.d.ts +2 -0
  118. package/dist/migrations/202005282134.d.ts.map +1 -0
  119. package/{migrations → dist/migrations}/202005282134.js +2 -1
  120. package/dist/migrations/202005282134.js.map +1 -0
  121. package/dist/migrations/202006022156.d.ts +2 -0
  122. package/dist/migrations/202006022156.d.ts.map +1 -0
  123. package/{migrations → dist/migrations}/202006022156.js +2 -1
  124. package/dist/migrations/202006022156.js.map +1 -0
  125. package/dist/migrations/202006051507.d.ts +2 -0
  126. package/dist/migrations/202006051507.d.ts.map +1 -0
  127. package/{migrations → dist/migrations}/202006051507.js +2 -1
  128. package/dist/migrations/202006051507.js.map +1 -0
  129. package/dist/migrations/202006240906.d.ts +2 -0
  130. package/dist/migrations/202006240906.d.ts.map +1 -0
  131. package/{migrations → dist/migrations}/202006240906.js +2 -1
  132. package/dist/migrations/202006240906.js.map +1 -0
  133. package/dist/migrations/202007091707.d.ts +2 -0
  134. package/dist/migrations/202007091707.d.ts.map +1 -0
  135. package/{migrations → dist/migrations}/202007091707.js +2 -1
  136. package/dist/migrations/202007091707.js.map +1 -0
  137. package/dist/migrations/202007202144.d.ts +2 -0
  138. package/dist/migrations/202007202144.d.ts.map +1 -0
  139. package/{migrations → dist/migrations}/202007202144.js +2 -1
  140. package/dist/migrations/202007202144.js.map +1 -0
  141. package/dist/migrations/202008031500.d.ts +2 -0
  142. package/dist/migrations/202008031500.d.ts.map +1 -0
  143. package/dist/migrations/202008031500.js +4 -0
  144. package/dist/migrations/202008031500.js.map +1 -0
  145. package/dist/migrations/202008051415.d.ts +2 -0
  146. package/dist/migrations/202008051415.d.ts.map +1 -0
  147. package/{migrations → dist/migrations}/202008051415.js +2 -1
  148. package/dist/migrations/202008051415.js.map +1 -0
  149. package/dist/migrations/202008121149.d.ts +3 -0
  150. package/dist/migrations/202008121149.d.ts.map +1 -0
  151. package/{migrations → dist/migrations}/202008121149.js +2 -2
  152. package/dist/migrations/202008121149.js.map +1 -0
  153. package/dist/migrations/202009112140.d.ts +3 -0
  154. package/dist/migrations/202009112140.d.ts.map +1 -0
  155. package/{migrations → dist/migrations}/202009112140.js +2 -2
  156. package/dist/migrations/202009112140.js.map +1 -0
  157. package/dist/migrations/202009181655.d.ts +2 -0
  158. package/dist/migrations/202009181655.d.ts.map +1 -0
  159. package/dist/migrations/202009181655.js +7 -0
  160. package/dist/migrations/202009181655.js.map +1 -0
  161. package/dist/migrations/202009221105.d.ts +2 -0
  162. package/dist/migrations/202009221105.d.ts.map +1 -0
  163. package/dist/migrations/202009221105.js +4 -0
  164. package/dist/migrations/202009221105.js.map +1 -0
  165. package/dist/migrations/202009231331.d.ts +2 -0
  166. package/dist/migrations/202009231331.d.ts.map +1 -0
  167. package/{migrations → dist/migrations}/202009231331.js +2 -1
  168. package/dist/migrations/202009231331.js.map +1 -0
  169. package/dist/migrations/202009301531.d.ts +2 -0
  170. package/dist/migrations/202009301531.d.ts.map +1 -0
  171. package/dist/migrations/202009301531.js +8 -0
  172. package/dist/migrations/202009301531.js.map +1 -0
  173. package/dist/migrations/202010231444.d.ts +2 -0
  174. package/dist/migrations/202010231444.d.ts.map +1 -0
  175. package/dist/migrations/202010231444.js +4 -0
  176. package/dist/migrations/202010231444.js.map +1 -0
  177. package/dist/migrations/202010251412.d.ts +2 -0
  178. package/dist/migrations/202010251412.d.ts.map +1 -0
  179. package/dist/migrations/202010251412.js +10 -0
  180. package/dist/migrations/202010251412.js.map +1 -0
  181. package/dist/migrations/202011021749.d.ts +2 -0
  182. package/dist/migrations/202011021749.d.ts.map +1 -0
  183. package/{migrations → dist/migrations}/202011021749.js +2 -1
  184. package/dist/migrations/202011021749.js.map +1 -0
  185. package/dist/migrations/202011051353.d.ts +2 -0
  186. package/dist/migrations/202011051353.d.ts.map +1 -0
  187. package/{migrations → dist/migrations}/202011051353.js +2 -1
  188. package/dist/migrations/202011051353.js.map +1 -0
  189. package/dist/migrations/202011111127.d.ts +2 -0
  190. package/dist/migrations/202011111127.d.ts.map +1 -0
  191. package/{migrations → dist/migrations}/202011111127.js +2 -1
  192. package/dist/migrations/202011111127.js.map +1 -0
  193. package/dist/migrations/202012011203.d.ts +2 -0
  194. package/dist/migrations/202012011203.d.ts.map +1 -0
  195. package/{migrations → dist/migrations}/202012011203.js +2 -1
  196. package/dist/migrations/202012011203.js.map +1 -0
  197. package/dist/migrations/202012100841.d.ts +2 -0
  198. package/dist/migrations/202012100841.d.ts.map +1 -0
  199. package/{migrations → dist/migrations}/202012100841.js +2 -1
  200. package/dist/migrations/202012100841.js.map +1 -0
  201. package/dist/migrations/202012281835.d.ts +2 -0
  202. package/dist/migrations/202012281835.d.ts.map +1 -0
  203. package/{migrations → dist/migrations}/202012281835.js +2 -1
  204. package/dist/migrations/202012281835.js.map +1 -0
  205. package/dist/migrations/202101061051.d.ts +2 -0
  206. package/dist/migrations/202101061051.d.ts.map +1 -0
  207. package/{migrations → dist/migrations}/202101061051.js +2 -1
  208. package/dist/migrations/202101061051.js.map +1 -0
  209. package/dist/migrations/202101141128.d.ts +2 -0
  210. package/dist/migrations/202101141128.d.ts.map +1 -0
  211. package/dist/migrations/202101141128.js +4 -0
  212. package/dist/migrations/202101141128.js.map +1 -0
  213. package/dist/migrations/202102091312.d.ts +3 -0
  214. package/dist/migrations/202102091312.d.ts.map +1 -0
  215. package/dist/migrations/202102091312.js +19 -0
  216. package/dist/migrations/202102091312.js.map +1 -0
  217. package/dist/migrations/202102101624.d.ts +2 -0
  218. package/dist/migrations/202102101624.d.ts.map +1 -0
  219. package/dist/migrations/202102101624.js +7 -0
  220. package/dist/migrations/202102101624.js.map +1 -0
  221. package/dist/migrations/202102172148.d.ts +2 -0
  222. package/dist/migrations/202102172148.d.ts.map +1 -0
  223. package/{migrations → dist/migrations}/202102172148.js +2 -2
  224. package/dist/migrations/202102172148.js.map +1 -0
  225. package/dist/migrations/202102261650.d.ts +2 -0
  226. package/dist/migrations/202102261650.d.ts.map +1 -0
  227. package/dist/migrations/202102261650.js +7 -0
  228. package/dist/migrations/202102261650.js.map +1 -0
  229. package/dist/migrations/202106102347.d.ts +2 -0
  230. package/dist/migrations/202106102347.d.ts.map +1 -0
  231. package/{migrations → dist/migrations}/202106102347.js +2 -3
  232. package/dist/migrations/202106102347.js.map +1 -0
  233. package/dist/migrations/202106112120.d.ts +2 -0
  234. package/dist/migrations/202106112120.d.ts.map +1 -0
  235. package/{migrations → dist/migrations}/202106112120.js +2 -3
  236. package/dist/migrations/202106112120.js.map +1 -0
  237. package/dist/migrations/202106120012.d.ts +2 -0
  238. package/dist/migrations/202106120012.d.ts.map +1 -0
  239. package/{migrations → dist/migrations}/202106120012.js +2 -3
  240. package/dist/migrations/202106120012.js.map +1 -0
  241. package/dist/migrations/202106120220.d.ts +2 -0
  242. package/dist/migrations/202106120220.d.ts.map +1 -0
  243. package/{migrations → dist/migrations}/202106120220.js +2 -4
  244. package/dist/migrations/202106120220.js.map +1 -0
  245. package/dist/migrations/202106121701.d.ts +2 -0
  246. package/dist/migrations/202106121701.d.ts.map +1 -0
  247. package/{migrations → dist/migrations}/202106121701.js +2 -3
  248. package/dist/migrations/202106121701.js.map +1 -0
  249. package/dist/migrations/202106121703.d.ts +3 -0
  250. package/dist/migrations/202106121703.d.ts.map +1 -0
  251. package/{migrations → dist/migrations}/202106121703.js +2 -3
  252. package/dist/migrations/202106121703.js.map +1 -0
  253. package/dist/migrations/202106251126.d.ts +2 -0
  254. package/dist/migrations/202106251126.d.ts.map +1 -0
  255. package/dist/migrations/202106251126.js +6 -0
  256. package/dist/migrations/202106251126.js.map +1 -0
  257. package/dist/migrations/202107281619.d.ts +2 -0
  258. package/dist/migrations/202107281619.d.ts.map +1 -0
  259. package/{migrations → dist/migrations}/202107281619.js +2 -1
  260. package/dist/migrations/202107281619.js.map +1 -0
  261. package/dist/migrations/202107302158.d.ts +3 -0
  262. package/dist/migrations/202107302158.d.ts.map +1 -0
  263. package/{migrations → dist/migrations}/202107302158.js +2 -3
  264. package/dist/migrations/202107302158.js.map +1 -0
  265. package/dist/migrations/202108022257.d.ts +2 -0
  266. package/dist/migrations/202108022257.d.ts.map +1 -0
  267. package/{migrations → dist/migrations}/202108022257.js +3 -4
  268. package/dist/migrations/202108022257.js.map +1 -0
  269. package/dist/migrations/202109201624.d.ts +2 -0
  270. package/dist/migrations/202109201624.d.ts.map +1 -0
  271. package/{migrations → dist/migrations}/202109201624.js +2 -1
  272. package/dist/migrations/202109201624.js.map +1 -0
  273. package/dist/migrations/202109301031.d.ts +3 -0
  274. package/dist/migrations/202109301031.d.ts.map +1 -0
  275. package/{migrations → dist/migrations}/202109301031.js +2 -2
  276. package/dist/migrations/202109301031.js.map +1 -0
  277. package/dist/migrations/202111290253.d.ts +3 -0
  278. package/dist/migrations/202111290253.d.ts.map +1 -0
  279. package/dist/migrations/202111290253.js +5 -0
  280. package/dist/migrations/202111290253.js.map +1 -0
  281. package/dist/models/backup.d.ts +22 -0
  282. package/dist/models/backup.d.ts.map +1 -0
  283. package/{models → dist/models}/backup.js +95 -192
  284. package/dist/models/backup.js.map +1 -0
  285. package/dist/models/config.d.ts +177 -0
  286. package/dist/models/config.d.ts.map +1 -0
  287. package/dist/models/config.js +683 -0
  288. package/dist/models/config.js.map +1 -0
  289. package/dist/models/crash.d.ts +74 -0
  290. package/dist/models/crash.d.ts.map +1 -0
  291. package/dist/models/crash.js +118 -0
  292. package/dist/models/crash.js.map +1 -0
  293. package/dist/models/discovery.d.ts +28 -0
  294. package/dist/models/discovery.d.ts.map +1 -0
  295. package/dist/models/discovery.js +163 -0
  296. package/dist/models/discovery.js.map +1 -0
  297. package/dist/models/email.d.ts +16 -0
  298. package/dist/models/email.d.ts.map +1 -0
  299. package/dist/models/email.js +90 -0
  300. package/dist/models/email.js.map +1 -0
  301. package/dist/models/eventlog.d.ts +77 -0
  302. package/dist/models/eventlog.d.ts.map +1 -0
  303. package/dist/models/eventlog.js +132 -0
  304. package/dist/models/eventlog.js.map +1 -0
  305. package/dist/models/expression.d.ts +54 -0
  306. package/dist/models/expression.d.ts.map +1 -0
  307. package/dist/models/expression.js +274 -0
  308. package/dist/models/expression.js.map +1 -0
  309. package/dist/models/field.d.ts +217 -0
  310. package/dist/models/field.d.ts.map +1 -0
  311. package/dist/models/field.js +619 -0
  312. package/dist/models/field.js.map +1 -0
  313. package/dist/models/fieldrepeat.d.ts +49 -0
  314. package/dist/models/fieldrepeat.d.ts.map +1 -0
  315. package/dist/models/fieldrepeat.js +88 -0
  316. package/dist/models/fieldrepeat.js.map +1 -0
  317. package/dist/models/file.d.ts +122 -0
  318. package/dist/models/file.d.ts.map +1 -0
  319. package/dist/models/file.js +224 -0
  320. package/dist/models/file.js.map +1 -0
  321. package/dist/models/form.d.ts +82 -0
  322. package/dist/models/form.d.ts.map +1 -0
  323. package/dist/models/form.js +163 -0
  324. package/dist/models/form.js.map +1 -0
  325. package/dist/models/index.d.ts +1 -0
  326. package/dist/models/index.d.ts.map +1 -0
  327. package/{models → dist/models}/index.js +42 -42
  328. package/dist/models/index.js.map +1 -0
  329. package/dist/models/layout.d.ts +34 -0
  330. package/dist/models/layout.d.ts.map +1 -0
  331. package/dist/models/layout.js +153 -0
  332. package/dist/models/layout.js.map +1 -0
  333. package/dist/models/library.d.ts +50 -0
  334. package/dist/models/library.d.ts.map +1 -0
  335. package/dist/models/library.js +129 -0
  336. package/dist/models/library.js.map +1 -0
  337. package/dist/models/pack.d.ts +89 -0
  338. package/dist/models/pack.d.ts.map +1 -0
  339. package/dist/models/pack.js +383 -0
  340. package/dist/models/pack.js.map +1 -0
  341. package/dist/models/page.d.ts +101 -0
  342. package/dist/models/page.d.ts.map +1 -0
  343. package/dist/models/page.js +223 -0
  344. package/dist/models/page.js.map +1 -0
  345. package/dist/models/plugin.d.ts +100 -0
  346. package/dist/models/plugin.d.ts.map +1 -0
  347. package/dist/models/plugin.js +204 -0
  348. package/dist/models/plugin.js.map +1 -0
  349. package/dist/models/random.d.ts +24 -0
  350. package/dist/models/random.d.ts.map +1 -0
  351. package/dist/models/random.js +186 -0
  352. package/dist/models/random.js.map +1 -0
  353. package/dist/models/role.d.ts +42 -0
  354. package/dist/models/role.d.ts.map +1 -0
  355. package/dist/models/role.js +64 -0
  356. package/dist/models/role.js.map +1 -0
  357. package/dist/models/scheduler.d.ts +18 -0
  358. package/dist/models/scheduler.d.ts.map +1 -0
  359. package/dist/models/scheduler.js +159 -0
  360. package/dist/models/scheduler.js.map +1 -0
  361. package/dist/models/table.d.ts +326 -0
  362. package/dist/models/table.d.ts.map +1 -0
  363. package/dist/models/table.js +1006 -0
  364. package/dist/models/table.js.map +1 -0
  365. package/dist/models/table_constraints.d.ts +69 -0
  366. package/dist/models/table_constraints.d.ts.map +1 -0
  367. package/dist/models/table_constraints.js +118 -0
  368. package/dist/models/table_constraints.js.map +1 -0
  369. package/dist/models/tenant.d.ts +55 -0
  370. package/dist/models/tenant.d.ts.map +1 -0
  371. package/{models → dist/models}/tenant.js +40 -63
  372. package/dist/models/tenant.js.map +1 -0
  373. package/dist/models/trigger.d.ts +133 -0
  374. package/dist/models/trigger.d.ts.map +1 -0
  375. package/dist/models/trigger.js +292 -0
  376. package/dist/models/trigger.js.map +1 -0
  377. package/dist/models/user.d.ts +235 -0
  378. package/dist/models/user.d.ts.map +1 -0
  379. package/dist/models/user.js +434 -0
  380. package/dist/models/user.js.map +1 -0
  381. package/dist/models/view.d.ts +204 -0
  382. package/dist/models/view.d.ts.map +1 -0
  383. package/dist/models/view.js +497 -0
  384. package/dist/models/view.js.map +1 -0
  385. package/dist/models/workflow.d.ts +48 -0
  386. package/dist/models/workflow.d.ts.map +1 -0
  387. package/dist/models/workflow.js +190 -0
  388. package/dist/models/workflow.js.map +1 -0
  389. package/dist/plugin-helper.d.ts +145 -0
  390. package/dist/plugin-helper.d.ts.map +1 -0
  391. package/dist/plugin-helper.js +1158 -0
  392. package/dist/plugin-helper.js.map +1 -0
  393. package/dist/plugin-testing.d.ts +3 -0
  394. package/dist/plugin-testing.d.ts.map +1 -0
  395. package/dist/plugin-testing.js +120 -0
  396. package/dist/plugin-testing.js.map +1 -0
  397. package/dist/tests/actions.test.d.ts +2 -0
  398. package/dist/tests/actions.test.d.ts.map +1 -0
  399. package/dist/tests/actions.test.js +205 -0
  400. package/dist/tests/actions.test.js.map +1 -0
  401. package/dist/tests/auxtest.test.d.ts +2 -0
  402. package/dist/tests/auxtest.test.d.ts.map +1 -0
  403. package/dist/tests/auxtest.test.js +48 -0
  404. package/dist/tests/auxtest.test.js.map +1 -0
  405. package/dist/tests/backup.test.d.ts +2 -0
  406. package/dist/tests/backup.test.d.ts.map +1 -0
  407. package/dist/tests/backup.test.js +88 -0
  408. package/dist/tests/backup.test.js.map +1 -0
  409. package/dist/tests/calc.test.d.ts +2 -0
  410. package/dist/tests/calc.test.d.ts.map +1 -0
  411. package/dist/tests/calc.test.js +231 -0
  412. package/dist/tests/calc.test.js.map +1 -0
  413. package/dist/tests/config.test.d.ts +2 -0
  414. package/dist/tests/config.test.d.ts.map +1 -0
  415. package/dist/tests/config.test.js +83 -0
  416. package/dist/tests/config.test.js.map +1 -0
  417. package/dist/tests/discover.test.d.ts +2 -0
  418. package/dist/tests/discover.test.d.ts.map +1 -0
  419. package/dist/tests/discover.test.js +106 -0
  420. package/dist/tests/discover.test.js.map +1 -0
  421. package/dist/tests/exact_views.test.d.ts +2 -0
  422. package/dist/tests/exact_views.test.d.ts.map +1 -0
  423. package/dist/tests/exact_views.test.js +511 -0
  424. package/dist/tests/exact_views.test.js.map +1 -0
  425. package/dist/tests/field.test.d.ts +2 -0
  426. package/dist/tests/field.test.d.ts.map +1 -0
  427. package/dist/tests/field.test.js +237 -0
  428. package/dist/tests/field.test.js.map +1 -0
  429. package/dist/tests/form.test.d.ts +2 -0
  430. package/dist/tests/form.test.d.ts.map +1 -0
  431. package/dist/tests/form.test.js +191 -0
  432. package/dist/tests/form.test.js.map +1 -0
  433. package/dist/tests/mocks.d.ts +111 -0
  434. package/dist/tests/mocks.d.ts.map +1 -0
  435. package/dist/tests/mocks.js +165 -0
  436. package/dist/tests/mocks.js.map +1 -0
  437. package/dist/tests/models.test.d.ts +2 -0
  438. package/dist/tests/models.test.d.ts.map +1 -0
  439. package/dist/tests/models.test.js +210 -0
  440. package/dist/tests/models.test.js.map +1 -0
  441. package/dist/tests/pack.test.d.ts +2 -0
  442. package/dist/tests/pack.test.d.ts.map +1 -0
  443. package/dist/tests/pack.test.js +331 -0
  444. package/dist/tests/pack.test.js.map +1 -0
  445. package/dist/tests/plugin.test.d.ts +2 -0
  446. package/dist/tests/plugin.test.d.ts.map +1 -0
  447. package/dist/tests/plugin.test.js +53 -0
  448. package/dist/tests/plugin.test.js.map +1 -0
  449. package/dist/tests/random.test.d.ts +2 -0
  450. package/dist/tests/random.test.d.ts.map +1 -0
  451. package/dist/tests/random.test.js +138 -0
  452. package/dist/tests/random.test.js.map +1 -0
  453. package/dist/tests/table.test.d.ts +2 -0
  454. package/dist/tests/table.test.d.ts.map +1 -0
  455. package/dist/tests/table.test.js +1048 -0
  456. package/dist/tests/table.test.js.map +1 -0
  457. package/dist/tests/tenant.test.d.ts +2 -0
  458. package/dist/tests/tenant.test.d.ts.map +1 -0
  459. package/dist/tests/tenant.test.js +45 -0
  460. package/dist/tests/tenant.test.js.map +1 -0
  461. package/dist/tests/user.test.d.ts +2 -0
  462. package/dist/tests/user.test.d.ts.map +1 -0
  463. package/dist/tests/user.test.js +190 -0
  464. package/dist/tests/user.test.js.map +1 -0
  465. package/dist/tests/view.test.d.ts +2 -0
  466. package/dist/tests/view.test.d.ts.map +1 -0
  467. package/dist/tests/view.test.js +238 -0
  468. package/dist/tests/view.test.js.map +1 -0
  469. package/dist/tests/workflow.test.d.ts +2 -0
  470. package/dist/tests/workflow.test.d.ts.map +1 -0
  471. package/dist/tests/workflow.test.js +115 -0
  472. package/dist/tests/workflow.test.js.map +1 -0
  473. package/dist/tsconfig.ref.tsbuildinfo +1 -0
  474. package/dist/utils.d.ts +26 -0
  475. package/dist/utils.d.ts.map +1 -0
  476. package/dist/utils.js +124 -0
  477. package/dist/utils.js.map +1 -0
  478. package/package.json +37 -8
  479. package/base-plugin/actions.js +0 -629
  480. package/base-plugin/base.test.js +0 -15
  481. package/base-plugin/fieldviews.js +0 -192
  482. package/base-plugin/fileviews.js +0 -65
  483. package/base-plugin/types.js +0 -1025
  484. package/base-plugin/viewtemplates/edit.js +0 -665
  485. package/base-plugin/viewtemplates/feed.js +0 -434
  486. package/base-plugin/viewtemplates/filter.js +0 -311
  487. package/base-plugin/viewtemplates/list.js +0 -575
  488. package/base-plugin/viewtemplates/listshowlist.js +0 -292
  489. package/base-plugin/viewtemplates/room.js +0 -650
  490. package/base-plugin/viewtemplates/show.js +0 -689
  491. package/base-plugin/viewtemplates/viewable_fields.js +0 -714
  492. package/contracts.js +0 -311
  493. package/db/connect.js +0 -151
  494. package/db/db.test.js +0 -33
  495. package/db/fixtures.js +0 -303
  496. package/db/index.js +0 -60
  497. package/db/state.js +0 -674
  498. package/migrate.js +0 -99
  499. package/migrations/202008031500.js +0 -4
  500. package/migrations/202009181655.js +0 -6
  501. package/migrations/202009221105.js +0 -4
  502. package/migrations/202009301531.js +0 -7
  503. package/migrations/202010231444.js +0 -4
  504. package/migrations/202010251412.js +0 -9
  505. package/migrations/202101141128.js +0 -4
  506. package/migrations/202102091312.js +0 -19
  507. package/migrations/202102101624.js +0 -5
  508. package/migrations/202102261650.js +0 -6
  509. package/migrations/202106251126.js +0 -5
  510. package/models/config.js +0 -680
  511. package/models/crash.js +0 -126
  512. package/models/discovery.js +0 -195
  513. package/models/email.js +0 -92
  514. package/models/eventlog.js +0 -146
  515. package/models/expression.js +0 -264
  516. package/models/field.js +0 -740
  517. package/models/fieldrepeat.js +0 -96
  518. package/models/file.js +0 -227
  519. package/models/form.js +0 -168
  520. package/models/layout.js +0 -146
  521. package/models/library.js +0 -135
  522. package/models/pack.js +0 -466
  523. package/models/page.js +0 -251
  524. package/models/plugin.js +0 -219
  525. package/models/random.js +0 -206
  526. package/models/role.js +0 -94
  527. package/models/scheduler.js +0 -163
  528. package/models/table.js +0 -1203
  529. package/models/table_constraints.js +0 -133
  530. package/models/trigger.js +0 -327
  531. package/models/user.js +0 -503
  532. package/models/view.js +0 -618
  533. package/models/workflow.js +0 -205
  534. package/plugin-helper.js +0 -1291
  535. package/plugin-testing.js +0 -124
  536. package/tests/actions.test.js +0 -232
  537. package/tests/auxtest.test.js +0 -52
  538. package/tests/backup.test.js +0 -92
  539. package/tests/calc.test.js +0 -221
  540. package/tests/config.test.js +0 -91
  541. package/tests/discover.test.js +0 -114
  542. package/tests/exact_views.test.js +0 -526
  543. package/tests/field.test.js +0 -253
  544. package/tests/form.test.js +0 -198
  545. package/tests/mocks.js +0 -173
  546. package/tests/models.test.js +0 -221
  547. package/tests/pack.test.js +0 -350
  548. package/tests/plugin.test.js +0 -59
  549. package/tests/random.test.js +0 -154
  550. package/tests/table.test.js +0 -1091
  551. package/tests/tenant.test.js +0 -56
  552. package/tests/user.test.js +0 -196
  553. package/tests/view.test.js +0 -251
  554. package/tests/workflow.test.js +0 -119
  555. package/utils.js +0 -137
@@ -1,1091 +0,0 @@
1
- const Table = require("../models/table");
2
- const TableConstraint = require("../models/table_constraints");
3
- const Field = require("../models/field");
4
- const View = require("../models/view");
5
- const db = require("../db");
6
- const { getState } = require("../db/state");
7
- getState().registerPlugin("base", require("../base-plugin"));
8
- const fs = require("fs").promises;
9
- const { rick_file, plugin_with_routes, mockReqRes } = require("./mocks");
10
-
11
- afterAll(db.close);
12
- beforeAll(async () => {
13
- await require("../db/reset_schema")();
14
- await require("../db/fixtures")();
15
- });
16
- jest.setTimeout(30000);
17
-
18
- describe("TableIO", () => {
19
- it("should store attributes", async () => {
20
- const tc = await Table.create("mytesttable");
21
- await Field.create({
22
- table: tc,
23
- name: "foo_height1",
24
- label: "height1",
25
- type: "Integer",
26
- attributes: { max: 18 },
27
- });
28
- const fs = await db.selectOne("_sc_fields", { name: "foo_height1" });
29
- expect(fs.table_id).toBe(tc.id);
30
- expect(fs.table_id > 0).toBe(true);
31
- expect(fs.id > 0).toBe(true);
32
- const fields = await tc.getFields();
33
- expect(fields[1].attributes).toStrictEqual({ max: 18 });
34
- });
35
- });
36
- describe("Table create", () => {
37
- it("should create", async () => {
38
- const tc = await Table.create("mytable1");
39
- const tf = await Table.findOne({ id: tc.id });
40
- expect(tf.external).toBe(false);
41
- expect(tc.external).toBe(false);
42
- expect(tf.name).toStrictEqual("mytable1");
43
- expect(tf.sql_name).toStrictEqual(
44
- db.isSQLite ? '"mytable1"' : '"public"."mytable1"'
45
- );
46
- });
47
- it("toggle bools", async () => {
48
- const tc = await Table.create("mytable17");
49
-
50
- await Field.create({
51
- table: tc,
52
- label: "Group",
53
- type: "Bool",
54
- required: true,
55
- });
56
- const tall_id = await tc.insertRow({ group: true });
57
- await tc.toggleBool(tall_id, "group");
58
- const row = await tc.getRow({ id: tall_id });
59
- expect(row.group).toBe(false);
60
- });
61
- it("should create required field in empty table without default", async () => {
62
- const mytable1 = await Table.findOne({ name: "mytable1" });
63
- expect(!!mytable1).toBe(true);
64
- await Field.create({
65
- table: mytable1,
66
- name: "height1",
67
- label: "height1",
68
- type: "Integer",
69
- required: true,
70
- });
71
- });
72
- it("should insert", async () => {
73
- const mytable1 = await Table.findOne({ name: "mytable1" });
74
- expect(mytable1.name).toBe("mytable1");
75
- const id = await db.insert(mytable1.name, { height1: 6 });
76
- expect(typeof id).toBe("number");
77
- expect(id > 0).toBe(true);
78
-
79
- const row = await db.selectOne(mytable1.name, { id });
80
- expect(row.height1).toBe(6);
81
- await db.update(mytable1.name, { height1: 7 }, id);
82
- const rowup = await db.selectOne(mytable1.name, { id });
83
- expect(rowup.height1).toBe(7);
84
- });
85
- it("should select one or zero", async () => {
86
- const rows = await db.select("mytable1", {});
87
- expect(rows.length).toBe(1);
88
- const row = await db.selectMaybeOne("mytable1", { id: rows[0].id });
89
- expect(row.height1).toBe(7);
90
- const norow = await db.selectMaybeOne("mytable1", { id: 789 });
91
- expect(norow).toBe(null);
92
- await expect(
93
- (async () => await db.selectOne("mytable1", { id: 789 }))()
94
- ).rejects.toThrow(Error);
95
- });
96
- it("should get distinct values", async () => {
97
- const table = await Table.findOne({ name: "mytable1" });
98
- const vs = await table.distinctValues("height1");
99
- expect(vs).toEqual([7]);
100
- });
101
- it("should delete", async () => {
102
- const table = await Table.findOne({ name: "mytable1" });
103
- await table.delete();
104
- const table1 = await Table.find({ name: "mytable1" });
105
- expect(table1.length).toBe(0);
106
- });
107
- });
108
-
109
- describe("Table get data", () => {
110
- it("should get rows", async () => {
111
- const patients = await Table.findOne({ name: "patients" });
112
- const all = await patients.getRows();
113
- expect(all.length).toStrictEqual(2);
114
- });
115
- it("should get rows where name is Michael", async () => {
116
- const patients = await Table.findOne({ name: "patients" });
117
- const michaels = await patients.getRows({ name: "Michael Douglas" });
118
- expect(michaels.length).toStrictEqual(1);
119
- });
120
- it("should get limited rows", async () => {
121
- const patients = await Table.findOne({ name: "patients" });
122
- const michaels = await patients.getRows(
123
- { name: { ilike: "Douglas" } },
124
- { limit: 1, orderBy: "id", offset: 1 }
125
- );
126
- expect(michaels.length).toStrictEqual(1);
127
- expect(michaels[0].name).toStrictEqual("Michael Douglas");
128
- });
129
- it("should get joined rows where name is Michael", async () => {
130
- const patients = await Table.findOne({ name: "patients" });
131
- const michaels = await patients.getJoinedRows({
132
- where: { name: "Michael Douglas" },
133
- });
134
- expect(michaels.length).toStrictEqual(1);
135
- expect(michaels[0].favbook).toBe(2);
136
- });
137
- it("should get rows in id range", async () => {
138
- const patients = await Table.findOne({ name: "patients" });
139
- const rows = await patients.getRows({ id: [{ gt: 0 }, { lt: 10 }] });
140
- expect(rows.length).toStrictEqual(2);
141
- });
142
- it("should get rows by subselect", async () => {
143
- const books = await Table.findOne({ name: "books" });
144
- const nrows = await books.countRows({
145
- id: {
146
- inSelect: {
147
- table: "patients",
148
- field: "favbook",
149
- where: { author: "Leo Tolstoy" },
150
- },
151
- },
152
- });
153
- expect(nrows).toStrictEqual(1);
154
- });
155
-
156
- it("should get joined rows with limit and order", async () => {
157
- const patients = await Table.findOne({ name: "patients" });
158
- const all = await patients.getJoinedRows({
159
- limit: 2,
160
- orderBy: "id",
161
- });
162
- expect(all.length).toStrictEqual(2);
163
- expect(all[1].favbook).toBe(2);
164
- });
165
- it("should get joined rows with limit and desc order", async () => {
166
- const patients = await Table.findOne({ name: "patients" });
167
- const all = await patients.getJoinedRows({
168
- limit: 2,
169
- orderBy: "id",
170
- orderDesc: true,
171
- });
172
- expect(all.length).toStrictEqual(2);
173
- expect(all[0].favbook).toBe(2);
174
- });
175
- it("should get joined rows with aggregations", async () => {
176
- const patients = await Table.findOne({ name: "patients" });
177
- const michaels = await patients.getJoinedRows({
178
- orderBy: "id",
179
- aggregations: {
180
- avg_temp: {
181
- table: "readings",
182
- ref: "patient_id",
183
- field: "temperature",
184
- aggregate: "avg",
185
- },
186
- },
187
- });
188
- expect(michaels.length).toStrictEqual(2);
189
- expect(Math.round(michaels[0].avg_temp)).toBe(38);
190
- });
191
- it("should get joined rows with latest aggregations", async () => {
192
- const patients = await Table.findOne({ name: "patients" });
193
- const michaels = await patients.getJoinedRows({
194
- orderBy: "id",
195
- aggregations: {
196
- last_temp: {
197
- table: "readings",
198
- ref: "patient_id",
199
- field: "temperature",
200
- aggregate: "Latest date",
201
- },
202
- },
203
- });
204
- expect(michaels.length).toStrictEqual(2);
205
- expect(Math.round(michaels[0].last_temp)).toBe(37);
206
- });
207
- it("should get double joined rows", async () => {
208
- const readings = await Table.findOne({ name: "readings" });
209
- const reads = await readings.getJoinedRows({
210
- orderBy: "id",
211
- joinFields: {
212
- author: { ref: "patient_id", through: "favbook", target: "author" },
213
- },
214
- });
215
- expect(reads.length).toStrictEqual(3);
216
- expect(reads[0].author).toBe("Herman Melville");
217
- });
218
- it("should get joined rows with aggregations and joins", async () => {
219
- const patients = await Table.findOne({ name: "patients" });
220
- const michaels = await patients.getJoinedRows({
221
- orderBy: "id",
222
- aggregations: {
223
- avg_temp: {
224
- table: "readings",
225
- ref: "patient_id",
226
- field: "temperature",
227
- aggregate: "avg",
228
- },
229
- },
230
- joinFields: {
231
- pages: { ref: "favbook", target: "pages" },
232
- author: { ref: "favbook", target: "author" },
233
- },
234
- });
235
- expect(michaels.length).toStrictEqual(2);
236
- expect(Math.round(michaels[0].avg_temp)).toBe(38);
237
- expect(michaels[1].author).toBe("Leo Tolstoy");
238
- });
239
-
240
- it("should support full text search", async () => {
241
- const table = await Table.findOne({ name: "patients" });
242
- const fields = await table.getFields();
243
- const rows = await db.select("patients", {
244
- _fts: { fields, searchTerm: "Douglas" },
245
- });
246
-
247
- expect(rows.length).toBe(2);
248
- });
249
- it("should enable versioning", async () => {
250
- const table = await Table.findOne({ name: "patients" });
251
- table.versioned = true;
252
- await table.update(table);
253
- });
254
- it("should save version on insert", async () => {
255
- const table = await Table.findOne({ name: "patients" });
256
-
257
- await table.insertRow({ name: "Bunny foo-foo", favbook: 1 });
258
- const bunnyFooFoo = await table.getRow({ name: "Bunny foo-foo" });
259
- const history1 = await table.get_history(bunnyFooFoo.id);
260
- expect(history1.length).toBe(1);
261
- expect(history1[0].id).toBe(bunnyFooFoo.id);
262
- expect(history1[0]._version).toBe(1);
263
- expect(history1[0].name).toBe("Bunny foo-foo");
264
- });
265
- it("should save version on update", async () => {
266
- const table = await Table.findOne({ name: "patients" });
267
-
268
- const bunnyFooFoo = await table.getRow({ name: "Bunny foo-foo" });
269
-
270
- await table.updateRow({ name: "Goon" }, bunnyFooFoo.id);
271
- const history2 = await table.get_history(bunnyFooFoo.id);
272
- expect(history2.length).toBe(2);
273
- expect(history2[0].id).toBe(bunnyFooFoo.id);
274
- expect(history2[0]._version).toBe(1);
275
- expect(history2[0].name).toBe("Bunny foo-foo");
276
- expect(history2[0].favbook).toBe(1);
277
- expect(history2[1].id).toBe(bunnyFooFoo.id);
278
- expect(history2[1]._version).toBe(2);
279
- expect(history2[1].name).toBe("Goon");
280
- expect(history2[1].favbook).toBe(1);
281
- const goon = await table.getRow({ id: bunnyFooFoo.id });
282
- expect(goon.name).toBe("Goon");
283
- expect(goon.favbook).toBe(1);
284
- });
285
- it("create field on version table", async () => {
286
- const table = await Table.findOne({ name: "patients" });
287
-
288
- const fc = await Field.create({
289
- table: table,
290
- name: "Height19",
291
- label: "height19",
292
- type: "Integer",
293
- required: true,
294
- attributes: { default: 6 },
295
- });
296
- await fc.delete();
297
- });
298
- it("should disable versioning", async () => {
299
- const table = await Table.findOne({ name: "patients" });
300
- await table.getFields();
301
- await table.update({ versioned: false });
302
- });
303
- it("should rename", async () => {
304
- const table = await Table.create("notsurename");
305
- await Field.create({
306
- table,
307
- label: "tall",
308
- type: "Bool",
309
- required: true,
310
- });
311
- const table1 = await Table.create("refsunsure");
312
- await Field.create({
313
- table: table1,
314
- label: "also_tall",
315
- type: "Bool",
316
- required: true,
317
- });
318
- await Field.create({
319
- table: table1,
320
- label: "theref",
321
- type: "Key to notsurename",
322
- required: true,
323
- });
324
- const id = await table.insertRow({ tall: false });
325
- await table1.insertRow({ also_tall: true, theref: id });
326
- const joinFields = { reftall: { ref: "theref", target: "tall" } };
327
- const rows = await table1.getJoinedRows({ joinFields });
328
- expect(rows[0].theref).toBe(id);
329
- expect(!!rows[0].reftall).toBe(false); //for sqlite
330
- if (!db.isSQLite) {
331
- await table.rename("isthisbetter");
332
- const table3 = await Table.findOne({ name: "refsunsure" });
333
- const rows1 = await table3.getJoinedRows({ joinFields });
334
- expect(rows1[0].theref).toBe(id);
335
- expect(rows1[0].reftall).toBe(false);
336
- const table2 = await Table.findOne({ name: "isthisbetter" });
337
- expect(!!table2).toBe(true);
338
- table2.versioned = true;
339
- await table2.update(table2);
340
- await table2.rename("thisisthebestname");
341
- }
342
- });
343
- it("should get joined rows with arbitrary fieldnames", async () => {
344
- const patients = await Table.findOne({ name: "patients" });
345
- const michaels = await patients.getJoinedRows({
346
- where: { name: "Michael Douglas" },
347
- joinFields: {
348
- pages: { ref: "favbook", target: "pages" },
349
- author: { ref: "favbook", target: "author" },
350
- },
351
- });
352
- expect(michaels.length).toStrictEqual(1);
353
- expect(michaels[0].pages).toBe(728);
354
- expect(michaels[0].author).toBe("Leo Tolstoy");
355
- });
356
- });
357
-
358
- describe("relations", () => {
359
- it("get parent relations", async () => {
360
- const table = await Table.findOne({ name: "patients" });
361
- const rels = await table.get_parent_relations();
362
- expect(rels.parent_field_list).toContain("favbook.author");
363
- expect(rels.parent_relations.length).toBe(2);
364
- });
365
- it("get parent relations", async () => {
366
- const table = await Table.findOne({ name: "books" });
367
- const rels = await table.get_child_relations();
368
- expect(rels.child_field_list).toEqual([
369
- "discusses_books.book",
370
- "patients.favbook",
371
- ]);
372
- expect(rels.child_relations.length).toBe(2);
373
- });
374
- it("get grandparent relations", async () => {
375
- const table = await Table.findOne({ name: "readings" });
376
- const rels = await table.get_parent_relations(true);
377
- expect(rels.parent_field_list).toEqual([
378
- "patient_id.favbook",
379
- "patient_id.favbook.author",
380
- "patient_id.favbook.id",
381
- "patient_id.favbook.pages",
382
- "patient_id.id",
383
- "patient_id.name",
384
- "patient_id.parent",
385
- "patient_id.parent.favbook",
386
- "patient_id.parent.id",
387
- "patient_id.parent.name",
388
- "patient_id.parent.parent",
389
- ]);
390
- expect(rels.parent_relations.length).toBe(3);
391
- });
392
- });
393
-
394
- describe("CSV import", () => {
395
- it("should import into existing table", async () => {
396
- const csv = `author,Pages
397
- Joe Celko, 856
398
- Gordon Kane, 217`;
399
- const fnm = "/tmp/test1ok.csv";
400
- await fs.writeFile(fnm, csv);
401
- const table = await Table.findOne({ name: "books" });
402
- expect(!!table).toBe(true);
403
- const impres = await table.import_csv_file(fnm);
404
- expect(impres).toEqual({ success: "Imported 2 rows into table books" });
405
- const rows = await table.getRows({ author: "Gordon Kane" });
406
- expect(rows.length).toBe(1);
407
- expect(rows[0].pages).toBe(217);
408
- });
409
- it("fail on required field", async () => {
410
- const csv = `author,Pagez
411
- Joe Celko, 856
412
- Gordon Kane, 217`;
413
- const fnm = "/tmp/test1f.csv";
414
- await fs.writeFile(fnm, csv);
415
- const table = await Table.findOne({ name: "books" });
416
- expect(!!table).toBe(true);
417
- const impres = await table.import_csv_file(fnm);
418
- expect(impres).toEqual({ error: "Required field missing: Pages" });
419
- });
420
- it("fail on strings in ints", async () => {
421
- const csv = `author,Pages
422
- Leonardo Boff, 99
423
- David MacKay, ITILA`;
424
- const fnm = "/tmp/test1.csv";
425
- await fs.writeFile(fnm, csv);
426
- const table = await Table.create("books_not_req_pages", {
427
- min_role_read: 10,
428
- });
429
- await Field.create({
430
- table,
431
- name: "author",
432
- label: "Author",
433
- type: "String",
434
- required: true,
435
- });
436
- await Field.create({
437
- table,
438
- name: "pages",
439
- label: "Pages",
440
- type: "Integer",
441
- attributes: { min: 0 },
442
- });
443
- expect(!!table).toBe(true);
444
- const impres = await table.import_csv_file(fnm);
445
- expect(impres).toEqual({
446
- success:
447
- "Imported 1 rows into table books_not_req_pages. Rejected 1 rows.",
448
- });
449
- const rows = await table.getRows({ author: "David MacKay" });
450
- expect(rows.length).toBe(0);
451
- });
452
- it("should create by importing", async () => {
453
- //db.set_sql_logging();
454
- const csv = `item,cost,count, vatable
455
- Book, 5,4, f
456
- Pencil, 0.5,2, t`;
457
- const fnm = "/tmp/test2impok.csv";
458
- await fs.writeFile(fnm, csv);
459
- const { table } = await Table.create_from_csv("Invoice", fnm);
460
- const fields = await table.getFields();
461
- const vatField = fields.find((f) => f.name === "vatable");
462
- expect(vatField.type.name).toBe("Bool");
463
- const costField = fields.find((f) => f.name === "cost");
464
- expect(costField.type.name).toBe("Float");
465
- const countField = fields.find((f) => f.name === "count");
466
- expect(countField.type.name).toBe("Integer");
467
- const rows = await table.getRows({ item: "Pencil" });
468
- expect(rows.length).toBe(1);
469
- expect(rows[0].vatable).toBe(true);
470
- const allrows = await table.getRows();
471
- expect(allrows.length).toBe(2);
472
- });
473
- it("should fail on bad col nm", async () => {
474
- const csv = `item,cost,!, vatable
475
- Book, 5,4, f
476
- Pencil, 0.5,2, t`;
477
- const fnm = "/tmp/test2.csv";
478
- await fs.writeFile(fnm, csv);
479
- const res = await Table.create_from_csv("Invoice1", fnm);
480
- expect(res).toEqual({
481
- error: "Invalid column name ! - Use A-Z, a-z, 0-9, _ only",
482
- });
483
- const table = await Table.findOne({ name: "Invoice1" });
484
- expect(table).toBe(null);
485
- });
486
- it("ignores a col on duplicate col nm", async () => {
487
- const csv = `item,cost,cost, vatable
488
- Book, 5,4, f
489
- Pencil, 0.5,2, t`;
490
- const fnm = "/tmp/test2.csv";
491
- await fs.writeFile(fnm, csv);
492
- const res = await Table.create_from_csv("Invoice1", fnm);
493
- expect(res.table.fields.length).toEqual(4); //and id
494
- });
495
- it("should fail non-int id", async () => {
496
- const csv = `id,cost,!, vatable
497
- Book, 5,4, f
498
- Pencil, 0.5,2, t`;
499
- const fnm = "/tmp/test2.csv";
500
- await fs.writeFile(fnm, csv);
501
- const res = await Table.create_from_csv("Invoice2", fnm);
502
- expect(res).toEqual({
503
- error: `Columns named "id" must have only integers`,
504
- });
505
- const table = await Table.findOne({ name: "Invoice2" });
506
- expect(table).toBe(null);
507
- });
508
- it("should fail missing id", async () => {
509
- const csv = `id,cost,!, vatable
510
- 1, 5,4, f
511
- , 0.5,2, t`;
512
- const fnm = "/tmp/test2.csv";
513
- await fs.writeFile(fnm, csv);
514
- const res = await Table.create_from_csv("Invoice3", fnm);
515
- expect(res).toEqual({
516
- error: `Columns named "id" must not have missing values`,
517
- });
518
- const table = await Table.findOne({ name: "Invoice3" });
519
- expect(table).toBe(null);
520
- });
521
- it("should succeed on good id", async () => {
522
- const csv = `id,cost,count, vatable
523
- 1, 5,4, f
524
- 2, 0.5,2, t`;
525
- const fnm = "/tmp/test2.csv";
526
- await fs.writeFile(fnm, csv);
527
- const res = await Table.create_from_csv("Invoice3", fnm);
528
- expect(res.table.fields.length).toEqual(4); // incl id
529
- const table = await Table.findOne({ name: "Invoice3" });
530
- const rows = await table.getRows();
531
- expect(rows.length).toBe(2);
532
- await table.insertRow({ cost: 0.2, count: 1, vatable: true });
533
- const rows3 = await table.getRows();
534
- expect(rows3.length).toBe(3);
535
- });
536
- it("should fail on repeat id", async () => {
537
- const csv = `id,cost,count, vatable
538
- 1, 5,4, f
539
- 1, 0.5,2, t`;
540
- const fnm = "/tmp/test2.csv";
541
- await fs.writeFile(fnm, csv);
542
- const res = await Table.create_from_csv("Invoice4", fnm);
543
- expect(res.error).toContain("Invoice4");
544
- const table = await Table.findOne({ name: "Invoice4" });
545
- expect(table).toBe(null);
546
- });
547
- it("should import with missing", async () => {
548
- const csv = `item,cost,count, vatable
549
- Book, 5,4, f
550
- Pencil, 0.5,, t`;
551
- const fnm = "/tmp/test2.csv";
552
- await fs.writeFile(fnm, csv);
553
- const { table, error } = await Table.create_from_csv("InvoiceMissing", fnm);
554
- expect(error).toBe(undefined);
555
- expect(!!table).toBe(true);
556
- const fields = await table.getFields();
557
- const countField = fields.find((f) => f.name === "count");
558
- expect(countField.type.name).toBe("Integer");
559
- expect(countField.required).toBe(false);
560
- const rows = await table.getRows({ item: "Pencil" });
561
- expect(rows.length).toBe(1);
562
- expect(rows[0].count).toBe(null);
563
- const brows = await table.getRows({ item: "Book" });
564
- expect(brows[0].count).toBe(4);
565
- });
566
- });
567
-
568
- describe("Table field uppercase", () => {
569
- it("should create by importing", async () => {
570
- const csv = `Item,cost,Count,Vatable
571
- Book, 5,4, f
572
- Pencil, 0.5,2, t`;
573
- const fnm = "/tmp/test_uc.csv";
574
- await fs.writeFile(fnm, csv);
575
- const { table } = await Table.create_from_csv("InvoiceUC", fnm);
576
- const fields = await table.getFields();
577
- const rows1 = await table.getJoinedRows({
578
- where: { item: { ilike: "East" } },
579
- });
580
- expect(rows1.length).toBe(0);
581
- const rows2 = await table.getJoinedRows({
582
- where: { count: 2 },
583
- });
584
- expect(rows2.length).toBe(1);
585
- const rows3 = await table.getJoinedRows({
586
- where: { _fts: { searchTerm: "Book", fields } },
587
- });
588
- expect(rows3.length).toBe(1);
589
- });
590
- });
591
-
592
- describe("Table unique constraint", () => {
593
- it("should create table", async () => {
594
- //db.set_sql_logging()
595
- const table = await Table.create("TableWithUniques");
596
- const field = await Field.create({
597
- table,
598
- name: "name",
599
- type: "String",
600
- is_unique: true,
601
- });
602
- await table.insertRow({ name: "Bill" });
603
- const ted_id = await table.insertRow({ name: "Ted" });
604
- const ins_res = await table.tryInsertRow({ name: "Bill" });
605
- expect(ins_res).toEqual({
606
- error: "Duplicate value for unique field: name",
607
- });
608
- const ins_res1 = await table.tryInsertRow({ name: "Billy" });
609
- expect(typeof ins_res1.success).toEqual("number");
610
- const upd_res = await table.tryUpdateRow({ name: "Bill" }, ted_id);
611
- expect(upd_res).toEqual({
612
- error: "Duplicate value for unique field: name",
613
- });
614
- const upd_res1 = await table.tryUpdateRow({ name: "teddy" }, ted_id);
615
- expect(upd_res1.success).toEqual(true);
616
- await field.update({ is_unique: false });
617
- const field1 = await Field.findOne({ id: field.id });
618
- expect(field1.is_unique).toBe(false);
619
- //const bill2_id = await table.insertRow({ name: "Bill" });
620
-
621
- await field1.update({ is_unique: true });
622
- const field2 = await Field.findOne({ id: field.id });
623
- expect(field2.is_unique).toBe(true);
624
- expect(field1.is_unique).toBe(true);
625
- });
626
- });
627
- describe("Table not null constraint", () => {
628
- it("should create table", async () => {
629
- //db.set_sql_logging()
630
- const table = await Table.create("TableWithNotNulls");
631
- const field = await Field.create({
632
- table,
633
- name: "name",
634
- type: "String",
635
- required: true,
636
- });
637
- await Field.create({
638
- table,
639
- name: "age",
640
- type: "Integer",
641
- });
642
- await table.insertRow({ name: "Bill", age: 13 });
643
- await table.insertRow({ name: "Bill", age: 13 });
644
- const ins_res = await table.tryInsertRow({ age: 17, name: null });
645
- expect(!!ins_res.error).toBe(true);
646
- expect(ins_res.error).toContain("name");
647
- if (!db.isSQLite) {
648
- await field.update({ required: false });
649
- const ted_id = await table.insertRow({ age: 17 });
650
- await table.deleteRows({ id: ted_id });
651
- await field.update({ required: true });
652
- const ins_res1 = await table.tryInsertRow({ age: 167 });
653
- expect(!!ins_res1.error).toBe(true);
654
- }
655
- });
656
- it("should query null", async () => {
657
- const table = await Table.findOne({ name: "TableWithNotNulls" });
658
- await table.insertRow({ name: "Ageless", age: null });
659
-
660
- const rows = await table.getRows({ age: null });
661
- expect(rows.length).toBe(1);
662
- expect(rows[0].name).toBe("Ageless");
663
- const rows1 = await table.getRows({ age: null, name: "Ageless" });
664
- expect(rows1.length).toBe(1);
665
- expect(rows1[0].name).toBe("Ageless");
666
- const rows2 = await table.getRows({ name: "Ageless", age: null });
667
- expect(rows2.length).toBe(1);
668
- expect(rows2[0].name).toBe("Ageless");
669
- });
670
- });
671
- describe("Table with users and files", () => {
672
- it("should create table", async () => {
673
- //db.set_sql_logging()
674
- const rick = await rick_file();
675
- const table = await Table.create("TableWithUsers");
676
- await Field.create({
677
- table,
678
- name: "name",
679
- type: "String",
680
- is_unique: true,
681
- });
682
- await Field.create({
683
- table,
684
- name: "owner",
685
- type: "Key to users",
686
- });
687
- await Field.create({
688
- table,
689
- name: "mugshot",
690
- type: "File",
691
- });
692
- await table.insertRow({ name: "Rocket", owner: 1, mugshot: rick.id });
693
- const rels = await table.get_parent_relations();
694
- expect(rels.parent_field_list).toEqual(["owner.email", "owner.id"]);
695
- const joined = await table.getJoinedRows();
696
- // expect(joined).toEqual("rick.png")
697
- expect(joined[0].mugshot__filename).toEqual("rick.png");
698
- });
699
- });
700
-
701
- describe("Table and view deletion ", () => {
702
- it("should setup", async () => {
703
- const tc = await Table.create("mytable19");
704
- await Field.create({
705
- table: tc,
706
- name: "name",
707
- type: "String",
708
- is_unique: true,
709
- });
710
- const v = await View.create({
711
- table_id: tc.id,
712
- name: "anewview",
713
- viewtemplate: "List",
714
- configuration: { columns: [], default_state: {} },
715
- min_role: 10,
716
- });
717
- let error;
718
- try {
719
- await tc.delete();
720
- } catch (e) {
721
- error = e;
722
- }
723
- //expect(error).toBeInstanceOf(Error); - not on SQLite
724
- await v.delete();
725
- });
726
- it("should delete table after view delete", async () => {
727
- const tc = await Table.findOne({ name: "mytable19" });
728
- if (tc) await tc.delete();
729
- });
730
- });
731
-
732
- describe("Table with date", () => {
733
- it("should create table", async () => {
734
- //db.set_sql_logging()
735
- const table = await Table.create("TableWithDates");
736
- await Field.create({
737
- table,
738
- name: "time",
739
- type: "Date",
740
- });
741
- await table.insertRow({ time: new Date() });
742
- const rows = await table.getRows();
743
- var dif = new Date(rows[0].time).getTime() - new Date().getTime();
744
-
745
- expect(Math.abs(dif)).toBeLessThanOrEqual(1000);
746
- });
747
- });
748
- describe("Tables with name clashes", () => {
749
- it("should create tables", async () => {
750
- //db.set_sql_logging()
751
- const cars = await Table.create("TableClashCar");
752
- const persons = await Table.create("TableClashPerson");
753
- await Field.create({
754
- table: persons,
755
- name: "name",
756
- type: "String",
757
- });
758
- await Field.create({
759
- table: cars,
760
- name: "name",
761
- type: "String",
762
- });
763
- await Field.create({
764
- table: cars,
765
- name: "owner",
766
- type: "Key to TableClashPerson",
767
- });
768
- const sally = await persons.insertRow({ name: "Sally" });
769
- await cars.insertRow({ name: "Mustang", owner: sally });
770
- });
771
- it("should query", async () => {
772
- const cars = await Table.findOne({ name: "TableClashCar" });
773
-
774
- const rows = await cars.getJoinedRows({
775
- joinFields: {
776
- owner_name: { ref: "owner", target: "name" },
777
- },
778
- });
779
- expect(rows[0]).toEqual({
780
- id: 1,
781
- name: "Mustang",
782
- owner: 1,
783
- owner_name: "Sally",
784
- });
785
- });
786
-
787
- it("should show list view", async () => {
788
- const cars = await Table.findOne({ name: "TableClashCar" });
789
- const v = await View.create({
790
- table_id: cars.id,
791
- name: "patientlist",
792
- viewtemplate: "List",
793
- configuration: {
794
- columns: [
795
- { type: "Field", field_name: "name" },
796
- { type: "JoinField", join_field: "owner.name" },
797
- ],
798
- },
799
- min_role: 10,
800
- });
801
- const res = await v.run({}, mockReqRes);
802
- expect(res).toContain("Mustang");
803
- expect(res).toContain("Sally");
804
- });
805
- it("should show show view", async () => {
806
- const cars = await Table.findOne({ name: "TableClashCar" });
807
- const v = await View.create({
808
- table_id: cars.id,
809
- name: "patientlist",
810
- viewtemplate: "Show",
811
- configuration: {
812
- columns: [
813
- { type: "Field", field_name: "name" },
814
- { type: "JoinField", join_field: "owner.name" },
815
- ],
816
- layout: {
817
- above: [
818
- { type: "field", fieldview: "show", field_name: "name" },
819
- { type: "join_field", join_field: "owner.name" },
820
- ],
821
- },
822
- },
823
- min_role: 10,
824
- });
825
- const res = await v.run({ id: 1 }, mockReqRes);
826
- expect(res).toContain("Mustang");
827
- expect(res).toContain("Sally");
828
- });
829
- });
830
- describe("Table joint unique constraint", () => {
831
- it("should create table", async () => {
832
- const table = await Table.findOne({ name: "books" });
833
- const rows = await table.getRows();
834
- const { id, ...row0 } = rows[0];
835
- const tc = await TableConstraint.create({
836
- table_id: table.id,
837
- type: "Unique",
838
- configuration: { fields: ["author", "pages"] },
839
- });
840
- const res = await table.tryInsertRow(row0);
841
- expect(!!res.error).toBe(true);
842
- await tc.delete();
843
- const res1 = await table.tryInsertRow(row0);
844
- expect(!!res1.error).toBe(false);
845
- });
846
- });
847
- describe("Table with row ownership", () => {
848
- it("should create and delete table", async () => {
849
- const persons = await Table.create("TableOwned");
850
- const name = await Field.create({
851
- table: persons,
852
- name: "name",
853
- type: "String",
854
- });
855
- const age = await Field.create({
856
- table: persons,
857
- name: "age",
858
- type: "String",
859
- });
860
- const owner = await Field.create({
861
- table: persons,
862
- name: "owner",
863
- type: "Key to users",
864
- });
865
- await persons.update({ ownership_field_id: owner.id });
866
- if (!db.isSQLite) {
867
- await age.update({ type: "Integer" });
868
- await name.update({ name: "lastname" });
869
- await persons.insertRow({ lastname: "Joe", age: 12 });
870
- await persons.insertRow({ lastname: "Sam", age: 13, owner: 1 });
871
- const row = await persons.getRow({ age: 12 });
872
- expect(row.lastname).toBe("Joe");
873
- expect(row.age).toBe(12);
874
- const owner_fnm = await persons.owner_fieldname();
875
- expect(owner_fnm).toBe("owner");
876
- const is_owner = await persons.is_owner({ id: 6 }, row);
877
- expect(is_owner).toBe(false);
878
- const row1 = await persons.getRow({ age: 13 });
879
- const is_owner1 = await persons.is_owner({ id: 1 }, row1);
880
- expect(is_owner1).toBe(true);
881
- }
882
- await persons.delete();
883
- });
884
- });
885
- describe("Table with row ownership", () => {
886
- it("should create and delete table", async () => {
887
- const persons = await Table.create("TableOwnedFml");
888
- const name = await Field.create({
889
- table: persons,
890
- name: "name",
891
- type: "String",
892
- });
893
- const age = await Field.create({
894
- table: persons,
895
- name: "age",
896
- type: "String",
897
- });
898
- const owner = await Field.create({
899
- table: persons,
900
- name: "owner",
901
- type: "Key to users",
902
- });
903
- await persons.update({ ownership_formula: "user.id===owner" });
904
- if (!db.isSQLite) {
905
- await age.update({ type: "Integer" });
906
- await name.update({ name: "lastname" });
907
- await persons.insertRow({ lastname: "Joe", age: 12 });
908
- await persons.insertRow({ lastname: "Sam", age: 13, owner: 1 });
909
- const row = await persons.getRow({ age: 12 });
910
- expect(row.lastname).toBe("Joe");
911
- expect(row.age).toBe(12);
912
- const is_owner = await persons.is_owner({ id: 6 }, row);
913
- expect(is_owner).toBe(false);
914
- const row1 = await persons.getRow({ age: 13 });
915
- const is_owner1 = await persons.is_owner({ id: 1 }, row1);
916
- expect(is_owner1).toBe(true);
917
- }
918
- await persons.delete();
919
- });
920
- });
921
- describe("Table with UUID pks", () => {
922
- if (!db.isSQLite) {
923
- it("should select uuid", async () => {
924
- await db.query('create extension if not exists "uuid-ossp";');
925
-
926
- const { rows } = await db.query("select uuid_generate_v4();");
927
- expect(rows.length).toBe(1);
928
- expect(typeof rows[0].uuid_generate_v4).toBe("string");
929
- });
930
- it("should create and insert stuff in table", async () => {
931
- getState().registerPlugin("mock_plugin", plugin_with_routes);
932
- const table = await Table.create("TableUUID");
933
- const [pk] = await table.getFields();
934
- await pk.update({ type: "UUID" });
935
-
936
- const name = await Field.create({
937
- table: table,
938
- name: "name",
939
- type: "String",
940
- });
941
- table.fields = null;
942
- await table.insertRow({ name: "Sam" });
943
- const rows = await table.getRows();
944
- expect(rows.length).toBe(1);
945
- expect(typeof rows[0].id).toBe("string");
946
- expect(rows[0].id.length > 10).toBe(true);
947
- expect(rows[0].name).toBe("Sam");
948
-
949
- await table.updateRow({ name: "Jim" }, rows[0].id);
950
- const rows1 = await table.getJoinedRows();
951
- expect(rows1.length).toBe(1);
952
- expect(typeof rows1[0].id).toBe("string");
953
- expect(rows1[0].id).toBe(rows[0].id);
954
- expect(rows1[0].name).toBe("Jim");
955
- const row = await table.getRow({ id: rows[0].id });
956
- expect(row.name).toBe("Jim");
957
- });
958
- it("should import json", async () => {
959
- const json = [
960
- { name: "Alex", id: "750d07fc-943d-4afc-9084-3911bcdbd0f7" },
961
- ];
962
- const fnm = "/tmp/test1.json";
963
- await fs.writeFile(fnm, JSON.stringify(json));
964
- const table = await Table.findOne({ name: "TableUUID" });
965
- expect(!!table).toBe(true);
966
- const impres = await table.import_json_file(fnm);
967
- expect(impres).toEqual({
968
- success: "Imported 1 rows into table TableUUID",
969
- });
970
- const rows = await table.getRows();
971
- expect(rows.length).toBe(2);
972
- });
973
- it("should be joinable to", async () => {
974
- const uuidtable1 = await Table.findOne({ name: "TableUUID" });
975
-
976
- const table = await Table.create("JoinUUID");
977
- await Field.create({
978
- table: table,
979
- name: "myname",
980
- type: "String",
981
- });
982
- //db.set_sql_logging();
983
- await Field.create({
984
- table: table,
985
- name: "follows",
986
- type: "Key to TableUUID",
987
- });
988
- const refrows = await uuidtable1.getRows({});
989
-
990
- await table.insertRow({ myname: "Fred", follows: refrows[0].id });
991
- const rows = await table.getJoinedRows({
992
- where: {},
993
- joinFields: {
994
- leader: { ref: "follows", target: "name" },
995
- },
996
- });
997
- //trying to debug intermittant CI failure
998
- if (rows.length === 0) {
999
- const allRows = await table.getRows();
1000
- console.log(allRows);
1001
- }
1002
- expect(rows.length).toBe(1);
1003
- expect(rows[0].leader).toBe("Jim");
1004
- expect(rows[0].myname).toBe("Fred");
1005
-
1006
- await table.delete();
1007
-
1008
- await uuidtable1.delete();
1009
- });
1010
- it("should create and delete table", async () => {
1011
- getState().registerPlugin("mock_plugin", plugin_with_routes);
1012
- const table = await Table.create("TableUUID1");
1013
- const [pk] = await table.getFields();
1014
- await pk.update({ type: "UUID" });
1015
-
1016
- table.fields = null;
1017
- const [pk1] = await table.getFields();
1018
- await pk1.update({ type: "Integer" });
1019
-
1020
- await table.delete();
1021
- });
1022
- }
1023
- });
1024
- describe("external tables", () => {
1025
- it("should register plugin", async () => {
1026
- getState().registerPlugin("mock_plugin", plugin_with_routes);
1027
- });
1028
- it("should find table", async () => {
1029
- const table = await Table.findOne({ name: "exttab" });
1030
- expect(!!table).toBe(true);
1031
- const notable = await Table.findOne({ name: "exttnosuchab" });
1032
- expect(!!notable).toBe(false);
1033
- const tables = await Table.find_with_external();
1034
- expect(tables.map((t) => t.name)).toContain("exttab");
1035
- expect(tables.map((t) => t.name)).toContain("books");
1036
-
1037
- const etables = await Table.find_with_external({ external: true });
1038
- expect(etables.map((t) => t.name)).toEqual(["exttab"]);
1039
- const dbtables = await Table.find_with_external({ external: false });
1040
- expect(dbtables.map((t) => t.name)).not.toContain("exttab");
1041
- expect(dbtables.map((t) => t.name)).toContain("books");
1042
- });
1043
- });
1044
-
1045
- describe("distance ordering", () => {
1046
- it("should create table", async () => {
1047
- const tc = await Table.create("geotable1");
1048
-
1049
- await Field.create({
1050
- table: tc,
1051
- label: "Name",
1052
- type: "String",
1053
- required: true,
1054
- });
1055
- await Field.create({
1056
- table: tc,
1057
- label: "Lat",
1058
- type: "Float",
1059
- required: true,
1060
- });
1061
- await Field.create({
1062
- table: tc,
1063
- label: "Long",
1064
- type: "Float",
1065
- required: true,
1066
- });
1067
- await tc.insertRow({ name: "Fred", lat: 10, long: 10 });
1068
- await tc.insertRow({ name: "George", lat: 20, long: 20 });
1069
- });
1070
- it("should query", async () => {
1071
- const table = await Table.findOne({ name: "geotable1" });
1072
-
1073
- const fred_rows = await table.getRows(
1074
- {},
1075
- {
1076
- orderBy: {
1077
- distance: { lat: 11, long: 11, latField: "lat", longField: "long" },
1078
- },
1079
- }
1080
- );
1081
- expect(fred_rows.length).toBe(2);
1082
- expect(fred_rows[0].name).toBe("Fred");
1083
- const george_rows = await table.getJoinedRows({
1084
- orderBy: {
1085
- distance: { lat: 19, long: 19, latField: "lat", longField: "long" },
1086
- },
1087
- });
1088
- expect(george_rows.length).toBe(2);
1089
- expect(george_rows[0].name).toBe("George");
1090
- });
1091
- });