@dosgato/api 0.0.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 (330) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/access/access.model.d.ts +2 -0
  4. package/dist/access/access.model.js +14 -0
  5. package/dist/access/access.model.js.map +1 -0
  6. package/dist/access/access.resolver.d.ts +15 -0
  7. package/dist/access/access.resolver.js +133 -0
  8. package/dist/access/access.resolver.js.map +1 -0
  9. package/dist/asset/asset.database.d.ts +12 -0
  10. package/dist/asset/asset.database.js +116 -0
  11. package/dist/asset/asset.database.js.map +1 -0
  12. package/dist/asset/asset.model.d.ts +81 -0
  13. package/dist/asset/asset.model.js +271 -0
  14. package/dist/asset/asset.model.js.map +1 -0
  15. package/dist/asset/asset.resolver.d.ts +32 -0
  16. package/dist/asset/asset.resolver.js +325 -0
  17. package/dist/asset/asset.resolver.js.map +1 -0
  18. package/dist/asset/asset.service.d.ts +35 -0
  19. package/dist/asset/asset.service.js +225 -0
  20. package/dist/asset/asset.service.js.map +1 -0
  21. package/dist/assetfolder/assetfolder.database.d.ts +7 -0
  22. package/dist/assetfolder/assetfolder.database.js +85 -0
  23. package/dist/assetfolder/assetfolder.database.js.map +1 -0
  24. package/dist/assetfolder/assetfolder.model.d.ts +56 -0
  25. package/dist/assetfolder/assetfolder.model.js +160 -0
  26. package/dist/assetfolder/assetfolder.model.js.map +1 -0
  27. package/dist/assetfolder/assetfolder.resolver.d.ts +25 -0
  28. package/dist/assetfolder/assetfolder.resolver.js +255 -0
  29. package/dist/assetfolder/assetfolder.resolver.js.map +1 -0
  30. package/dist/assetfolder/assetfolder.service.d.ts +39 -0
  31. package/dist/assetfolder/assetfolder.service.js +355 -0
  32. package/dist/assetfolder/assetfolder.service.js.map +1 -0
  33. package/dist/assetrule/assetrule.database.d.ts +5 -0
  34. package/dist/assetrule/assetrule.database.js +161 -0
  35. package/dist/assetrule/assetrule.database.js.map +1 -0
  36. package/dist/assetrule/assetrule.model.d.ts +71 -0
  37. package/dist/assetrule/assetrule.model.js +221 -0
  38. package/dist/assetrule/assetrule.model.js.map +1 -0
  39. package/dist/assetrule/assetrule.resolver.d.ts +12 -0
  40. package/dist/assetrule/assetrule.resolver.js +100 -0
  41. package/dist/assetrule/assetrule.resolver.js.map +1 -0
  42. package/dist/assetrule/assetrule.service.d.ts +26 -0
  43. package/dist/assetrule/assetrule.service.js +184 -0
  44. package/dist/assetrule/assetrule.service.js.map +1 -0
  45. package/dist/createdb.d.ts +2 -0
  46. package/dist/createdb.js +541 -0
  47. package/dist/createdb.js.map +1 -0
  48. package/dist/data/data.database.d.ts +7 -0
  49. package/dist/data/data.database.js +265 -0
  50. package/dist/data/data.database.js.map +1 -0
  51. package/dist/data/data.indexing.d.ts +2 -0
  52. package/dist/data/data.indexing.js +23 -0
  53. package/dist/data/data.indexing.js.map +1 -0
  54. package/dist/data/data.model.d.ts +69 -0
  55. package/dist/data/data.model.js +206 -0
  56. package/dist/data/data.model.js.map +1 -0
  57. package/dist/data/data.resolver.d.ts +36 -0
  58. package/dist/data/data.resolver.js +384 -0
  59. package/dist/data/data.resolver.js.map +1 -0
  60. package/dist/data/data.service.d.ts +41 -0
  61. package/dist/data/data.service.js +374 -0
  62. package/dist/data/data.service.js.map +1 -0
  63. package/dist/datafolder/datafolder.database.d.ts +7 -0
  64. package/dist/datafolder/datafolder.database.js +72 -0
  65. package/dist/datafolder/datafolder.database.js.map +1 -0
  66. package/dist/datafolder/datafolder.model.d.ts +48 -0
  67. package/dist/datafolder/datafolder.model.js +139 -0
  68. package/dist/datafolder/datafolder.model.js.map +1 -0
  69. package/dist/datafolder/datafolder.resolver.d.ts +24 -0
  70. package/dist/datafolder/datafolder.resolver.js +243 -0
  71. package/dist/datafolder/datafolder.resolver.js.map +1 -0
  72. package/dist/datafolder/datafolder.service.d.ts +32 -0
  73. package/dist/datafolder/datafolder.service.js +223 -0
  74. package/dist/datafolder/datafolder.service.js.map +1 -0
  75. package/dist/dataroot/dataroot.model.d.ts +19 -0
  76. package/dist/dataroot/dataroot.model.js +72 -0
  77. package/dist/dataroot/dataroot.model.js.map +1 -0
  78. package/dist/dataroot/dataroot.resolver.d.ts +11 -0
  79. package/dist/dataroot/dataroot.resolver.js +87 -0
  80. package/dist/dataroot/dataroot.resolver.js.map +1 -0
  81. package/dist/dataroot/dataroot.service.d.ts +12 -0
  82. package/dist/dataroot/dataroot.service.js +62 -0
  83. package/dist/dataroot/dataroot.service.js.map +1 -0
  84. package/dist/datarule/datarule.database.d.ts +5 -0
  85. package/dist/datarule/datarule.database.js +144 -0
  86. package/dist/datarule/datarule.database.js.map +1 -0
  87. package/dist/datarule/datarule.model.d.ts +55 -0
  88. package/dist/datarule/datarule.model.js +200 -0
  89. package/dist/datarule/datarule.model.js.map +1 -0
  90. package/dist/datarule/datarule.resolver.d.ts +13 -0
  91. package/dist/datarule/datarule.resolver.js +114 -0
  92. package/dist/datarule/datarule.resolver.js.map +1 -0
  93. package/dist/datarule/datarule.service.d.ts +27 -0
  94. package/dist/datarule/datarule.service.js +191 -0
  95. package/dist/datarule/datarule.service.js.map +1 -0
  96. package/dist/fixtures.d.ts +1 -0
  97. package/dist/fixtures.js +697 -0
  98. package/dist/fixtures.js.map +1 -0
  99. package/dist/fixturetemplates.d.ts +110 -0
  100. package/dist/fixturetemplates.js +178 -0
  101. package/dist/fixturetemplates.js.map +1 -0
  102. package/dist/globalrule/globalrule.database.d.ts +5 -0
  103. package/dist/globalrule/globalrule.database.js +65 -0
  104. package/dist/globalrule/globalrule.database.js.map +1 -0
  105. package/dist/globalrule/globalrule.model.d.ts +34 -0
  106. package/dist/globalrule/globalrule.model.js +120 -0
  107. package/dist/globalrule/globalrule.model.js.map +1 -0
  108. package/dist/globalrule/globalrule.resolver.d.ts +11 -0
  109. package/dist/globalrule/globalrule.resolver.js +85 -0
  110. package/dist/globalrule/globalrule.resolver.js.map +1 -0
  111. package/dist/globalrule/globalrule.service.d.ts +18 -0
  112. package/dist/globalrule/globalrule.service.js +111 -0
  113. package/dist/globalrule/globalrule.service.js.map +1 -0
  114. package/dist/group/group.database.d.ts +41 -0
  115. package/dist/group/group.database.js +190 -0
  116. package/dist/group/group.database.js.map +1 -0
  117. package/dist/group/group.model.d.ts +19 -0
  118. package/dist/group/group.model.js +70 -0
  119. package/dist/group/group.model.js.map +1 -0
  120. package/dist/group/group.resolver.d.ts +27 -0
  121. package/dist/group/group.resolver.js +275 -0
  122. package/dist/group/group.resolver.js.map +1 -0
  123. package/dist/group/group.service.d.ts +46 -0
  124. package/dist/group/group.service.js +384 -0
  125. package/dist/group/group.service.js.map +1 -0
  126. package/dist/index.d.ts +18 -0
  127. package/dist/index.js +109 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/internal.d.ts +88 -0
  130. package/dist/internal.js +89 -0
  131. package/dist/internal.js.map +1 -0
  132. package/dist/migrations.d.ts +2 -0
  133. package/dist/migrations.js +41 -0
  134. package/dist/migrations.js.map +1 -0
  135. package/dist/organization/organization.database.d.ts +2 -0
  136. package/dist/organization/organization.database.js +16 -0
  137. package/dist/organization/organization.database.js.map +1 -0
  138. package/dist/organization/organization.model.d.ts +5 -0
  139. package/dist/organization/organization.model.js +35 -0
  140. package/dist/organization/organization.model.js.map +1 -0
  141. package/dist/organization/organization.resolver.d.ts +6 -0
  142. package/dist/organization/organization.resolver.js +43 -0
  143. package/dist/organization/organization.resolver.js.map +1 -0
  144. package/dist/organization/organization.service.d.ts +12 -0
  145. package/dist/organization/organization.service.js +35 -0
  146. package/dist/organization/organization.service.js.map +1 -0
  147. package/dist/page/page.database.d.ts +10 -0
  148. package/dist/page/page.database.js +269 -0
  149. package/dist/page/page.database.js.map +1 -0
  150. package/dist/page/page.indexing.d.ts +3 -0
  151. package/dist/page/page.indexing.js +26 -0
  152. package/dist/page/page.indexing.js.map +1 -0
  153. package/dist/page/page.migrations.d.ts +13 -0
  154. package/dist/page/page.migrations.js +55 -0
  155. package/dist/page/page.migrations.js.map +1 -0
  156. package/dist/page/page.model.d.ts +88 -0
  157. package/dist/page/page.model.js +272 -0
  158. package/dist/page/page.model.js.map +1 -0
  159. package/dist/page/page.resolver.d.ts +48 -0
  160. package/dist/page/page.resolver.js +542 -0
  161. package/dist/page/page.resolver.js.map +1 -0
  162. package/dist/page/page.service.d.ts +59 -0
  163. package/dist/page/page.service.js +399 -0
  164. package/dist/page/page.service.js.map +1 -0
  165. package/dist/page/page.util.d.ts +3 -0
  166. package/dist/page/page.util.js +16 -0
  167. package/dist/page/page.util.js.map +1 -0
  168. package/dist/page/page.validation.d.ts +2 -0
  169. package/dist/page/page.validation.js +21 -0
  170. package/dist/page/page.validation.js.map +1 -0
  171. package/dist/pagerule/pagerule.database.d.ts +5 -0
  172. package/dist/pagerule/pagerule.database.js +212 -0
  173. package/dist/pagerule/pagerule.database.js.map +1 -0
  174. package/dist/pagerule/pagerule.model.d.ts +71 -0
  175. package/dist/pagerule/pagerule.model.js +272 -0
  176. package/dist/pagerule/pagerule.model.js.map +1 -0
  177. package/dist/pagerule/pagerule.resolver.d.ts +13 -0
  178. package/dist/pagerule/pagerule.resolver.js +114 -0
  179. package/dist/pagerule/pagerule.resolver.js.map +1 -0
  180. package/dist/pagerule/pagerule.service.d.ts +23 -0
  181. package/dist/pagerule/pagerule.service.js +180 -0
  182. package/dist/pagerule/pagerule.service.js.map +1 -0
  183. package/dist/pagetree/pagetree.database.d.ts +13 -0
  184. package/dist/pagetree/pagetree.database.js +84 -0
  185. package/dist/pagetree/pagetree.database.js.map +1 -0
  186. package/dist/pagetree/pagetree.model.d.ts +43 -0
  187. package/dist/pagetree/pagetree.model.js +146 -0
  188. package/dist/pagetree/pagetree.model.js.map +1 -0
  189. package/dist/pagetree/pagetree.resolver.d.ts +23 -0
  190. package/dist/pagetree/pagetree.resolver.js +238 -0
  191. package/dist/pagetree/pagetree.resolver.js.map +1 -0
  192. package/dist/pagetree/pagetree.service.d.ts +25 -0
  193. package/dist/pagetree/pagetree.service.js +221 -0
  194. package/dist/pagetree/pagetree.service.js.map +1 -0
  195. package/dist/role/role.database.d.ts +17 -0
  196. package/dist/role/role.database.js +74 -0
  197. package/dist/role/role.database.js.map +1 -0
  198. package/dist/role/role.model.d.ts +26 -0
  199. package/dist/role/role.model.js +84 -0
  200. package/dist/role/role.model.js.map +1 -0
  201. package/dist/role/role.resolver.d.ts +27 -0
  202. package/dist/role/role.resolver.js +294 -0
  203. package/dist/role/role.resolver.js.map +1 -0
  204. package/dist/role/role.service.d.ts +33 -0
  205. package/dist/role/role.service.js +265 -0
  206. package/dist/role/role.service.js.map +1 -0
  207. package/dist/run.d.ts +1 -0
  208. package/dist/run.js +29 -0
  209. package/dist/run.js.map +1 -0
  210. package/dist/scalars/datetime.d.ts +2 -0
  211. package/dist/scalars/datetime.js +19 -0
  212. package/dist/scalars/datetime.js.map +1 -0
  213. package/dist/scalars/index.d.ts +3 -0
  214. package/dist/scalars/index.js +4 -0
  215. package/dist/scalars/index.js.map +1 -0
  216. package/dist/scalars/jsondata.d.ts +2 -0
  217. package/dist/scalars/jsondata.js +15 -0
  218. package/dist/scalars/jsondata.js.map +1 -0
  219. package/dist/scalars/urlsafestring.d.ts +4 -0
  220. package/dist/scalars/urlsafestring.js +28 -0
  221. package/dist/scalars/urlsafestring.js.map +1 -0
  222. package/dist/site/site.database.d.ts +15 -0
  223. package/dist/site/site.database.js +164 -0
  224. package/dist/site/site.database.js.map +1 -0
  225. package/dist/site/site.model.d.ts +62 -0
  226. package/dist/site/site.model.js +197 -0
  227. package/dist/site/site.model.js.map +1 -0
  228. package/dist/site/site.resolver.d.ts +30 -0
  229. package/dist/site/site.resolver.js +326 -0
  230. package/dist/site/site.resolver.js.map +1 -0
  231. package/dist/site/site.service.d.ts +35 -0
  232. package/dist/site/site.service.js +199 -0
  233. package/dist/site/site.service.js.map +1 -0
  234. package/dist/siterule/siterule.database.d.ts +5 -0
  235. package/dist/siterule/siterule.database.js +139 -0
  236. package/dist/siterule/siterule.database.js.map +1 -0
  237. package/dist/siterule/siterule.model.d.ts +53 -0
  238. package/dist/siterule/siterule.model.js +203 -0
  239. package/dist/siterule/siterule.model.js.map +1 -0
  240. package/dist/siterule/siterule.resolver.d.ts +12 -0
  241. package/dist/siterule/siterule.resolver.js +100 -0
  242. package/dist/siterule/siterule.resolver.js.map +1 -0
  243. package/dist/siterule/siterule.service.d.ts +23 -0
  244. package/dist/siterule/siterule.service.js +148 -0
  245. package/dist/siterule/siterule.service.js.map +1 -0
  246. package/dist/template/template.database.d.ts +15 -0
  247. package/dist/template/template.database.js +61 -0
  248. package/dist/template/template.database.js.map +1 -0
  249. package/dist/template/template.model.d.ts +32 -0
  250. package/dist/template/template.model.js +124 -0
  251. package/dist/template/template.model.js.map +1 -0
  252. package/dist/template/template.resolver.d.ts +22 -0
  253. package/dist/template/template.resolver.js +216 -0
  254. package/dist/template/template.resolver.js.map +1 -0
  255. package/dist/template/template.service.d.ts +27 -0
  256. package/dist/template/template.service.js +192 -0
  257. package/dist/template/template.service.js.map +1 -0
  258. package/dist/templaterule/templaterule.database.d.ts +5 -0
  259. package/dist/templaterule/templaterule.database.js +80 -0
  260. package/dist/templaterule/templaterule.database.js.map +1 -0
  261. package/dist/templaterule/templaterule.model.d.ts +38 -0
  262. package/dist/templaterule/templaterule.model.js +136 -0
  263. package/dist/templaterule/templaterule.model.js.map +1 -0
  264. package/dist/templaterule/templaterule.resolver.d.ts +12 -0
  265. package/dist/templaterule/templaterule.resolver.js +100 -0
  266. package/dist/templaterule/templaterule.resolver.js.map +1 -0
  267. package/dist/templaterule/templaterule.service.d.ts +19 -0
  268. package/dist/templaterule/templaterule.service.js +123 -0
  269. package/dist/templaterule/templaterule.service.js.map +1 -0
  270. package/dist/user/user.database.d.ts +22 -0
  271. package/dist/user/user.database.js +116 -0
  272. package/dist/user/user.database.js.map +1 -0
  273. package/dist/user/user.model.d.ts +42 -0
  274. package/dist/user/user.model.js +122 -0
  275. package/dist/user/user.model.js.map +1 -0
  276. package/dist/user/user.resolver.d.ts +16 -0
  277. package/dist/user/user.resolver.js +140 -0
  278. package/dist/user/user.resolver.js.map +1 -0
  279. package/dist/user/user.service.d.ts +29 -0
  280. package/dist/user/user.service.js +195 -0
  281. package/dist/user/user.service.js.map +1 -0
  282. package/dist/util/authservice.d.ts +28 -0
  283. package/dist/util/authservice.js +131 -0
  284. package/dist/util/authservice.js.map +1 -0
  285. package/dist/util/dates.d.ts +2 -0
  286. package/dist/util/dates.js +4 -0
  287. package/dist/util/dates.js.map +1 -0
  288. package/dist/util/filehandler.d.ts +15 -0
  289. package/dist/util/filehandler.js +48 -0
  290. package/dist/util/filehandler.js.map +1 -0
  291. package/dist/util/index.d.ts +13 -0
  292. package/dist/util/index.js +26 -0
  293. package/dist/util/index.js.map +1 -0
  294. package/dist/util/indexing.d.ts +12 -0
  295. package/dist/util/indexing.js +74 -0
  296. package/dist/util/indexing.js.map +1 -0
  297. package/dist/util/migrations.d.ts +15 -0
  298. package/dist/util/migrations.js +2 -0
  299. package/dist/util/migrations.js.map +1 -0
  300. package/dist/util/mutationlogger.d.ts +1 -0
  301. package/dist/util/mutationlogger.js +9 -0
  302. package/dist/util/mutationlogger.js.map +1 -0
  303. package/dist/util/registry.d.ts +25 -0
  304. package/dist/util/registry.js +66 -0
  305. package/dist/util/registry.js.map +1 -0
  306. package/dist/util/rules.d.ts +6 -0
  307. package/dist/util/rules.js +31 -0
  308. package/dist/util/rules.js.map +1 -0
  309. package/dist/util/sharedtypes.d.ts +3 -0
  310. package/dist/util/sharedtypes.js +2 -0
  311. package/dist/util/sharedtypes.js.map +1 -0
  312. package/dist/util/stopwords.d.ts +1 -0
  313. package/dist/util/stopwords.js +152 -0
  314. package/dist/util/stopwords.js.map +1 -0
  315. package/dist/version/version.model.d.ts +11 -0
  316. package/dist/version/version.model.js +46 -0
  317. package/dist/version/version.model.js.map +1 -0
  318. package/dist/version/version.resolver.d.ts +6 -0
  319. package/dist/version/version.resolver.js +45 -0
  320. package/dist/version/version.resolver.js.map +1 -0
  321. package/dist/versionedservice/service.d.ts +148 -0
  322. package/dist/versionedservice/service.js +547 -0
  323. package/dist/versionedservice/service.js.map +1 -0
  324. package/dist/versionedservice/types.d.ts +87 -0
  325. package/dist/versionedservice/types.js +11 -0
  326. package/dist/versionedservice/types.js.map +1 -0
  327. package/package.json +50 -0
  328. package/readme/DosGato.mwb +0 -0
  329. package/readme/DosGato.mwb.bak +0 -0
  330. package/readme/upgradeflow2.png +0 -0
@@ -0,0 +1,89 @@
1
+ export * from './scalars/index.js';
2
+ export * from './versionedservice/types.js';
3
+ export * from './role/role.model.js';
4
+ export * from './access/access.model.js';
5
+ export * from './asset/asset.model.js';
6
+ export * from './assetfolder/assetfolder.model.js';
7
+ export * from './assetrule/assetrule.model.js';
8
+ export * from './data/data.model.js';
9
+ export * from './datafolder/datafolder.model.js';
10
+ export * from './datarule/datarule.model.js';
11
+ export * from './globalrule/globalrule.model.js';
12
+ export * from './group/group.model.js';
13
+ export * from './organization/organization.model.js';
14
+ export * from './page/page.model.js';
15
+ export * from './pagerule/pagerule.model.js';
16
+ export * from './pagetree/pagetree.model.js';
17
+ export * from './site/site.model.js';
18
+ export * from './siterule/siterule.model.js';
19
+ export * from './template/template.model.js';
20
+ export * from './templaterule/templaterule.model.js';
21
+ export * from './user/user.model.js';
22
+ export * from './dataroot/dataroot.model.js';
23
+ export * from './version/version.model.js';
24
+ export * from './util/index.js';
25
+ export * from './asset/asset.database.js';
26
+ export * from './assetfolder/assetfolder.database.js';
27
+ export * from './assetrule/assetrule.database.js';
28
+ export * from './data/data.database.js';
29
+ export * from './datafolder/datafolder.database.js';
30
+ export * from './datarule/datarule.database.js';
31
+ export * from './globalrule/globalrule.database.js';
32
+ export * from './group/group.database.js';
33
+ export * from './organization/organization.database.js';
34
+ export * from './page/page.database.js';
35
+ export * from './pagerule/pagerule.database.js';
36
+ export * from './pagetree/pagetree.database.js';
37
+ export * from './role/role.database.js';
38
+ export * from './site/site.database.js';
39
+ export * from './siterule/siterule.database.js';
40
+ export * from './template/template.database.js';
41
+ export * from './templaterule/templaterule.database.js';
42
+ export * from './user/user.database.js';
43
+ export * from './page/page.util.js';
44
+ export * from './page/page.indexing.js';
45
+ export * from './page/page.migrations.js';
46
+ export * from './page/page.validation.js';
47
+ export * from './data/data.indexing.js';
48
+ export * from './asset/asset.service.js';
49
+ export * from './assetfolder/assetfolder.service.js';
50
+ export * from './data/data.service.js';
51
+ export * from './datafolder/datafolder.service.js';
52
+ export * from './dataroot/dataroot.service.js';
53
+ export * from './assetrule/assetrule.service.js';
54
+ export * from './datarule/datarule.service.js';
55
+ export * from './globalrule/globalrule.service.js';
56
+ export * from './group/group.service.js';
57
+ export * from './organization/organization.service.js';
58
+ export * from './page/page.service.js';
59
+ export * from './pagerule/pagerule.service.js';
60
+ export * from './pagetree/pagetree.service.js';
61
+ export * from './role/role.service.js';
62
+ export * from './site/site.service.js';
63
+ export * from './siterule/siterule.service.js';
64
+ export * from './template/template.service.js';
65
+ export * from './templaterule/templaterule.service.js';
66
+ export * from './user/user.service.js';
67
+ export * from './versionedservice/service.js';
68
+ export * from './access/access.resolver.js';
69
+ export * from './asset/asset.resolver.js';
70
+ export * from './assetfolder/assetfolder.resolver.js';
71
+ export * from './assetrule/assetrule.resolver.js';
72
+ export * from './data/data.resolver.js';
73
+ export * from './datafolder/datafolder.resolver.js';
74
+ export * from './dataroot/dataroot.resolver.js';
75
+ export * from './datarule/datarule.resolver.js';
76
+ export * from './globalrule/globalrule.resolver.js';
77
+ export * from './group/group.resolver.js';
78
+ export * from './organization/organization.resolver.js';
79
+ export * from './page/page.resolver.js';
80
+ export * from './pagerule/pagerule.resolver.js';
81
+ export * from './pagetree/pagetree.resolver.js';
82
+ export * from './role/role.resolver.js';
83
+ export * from './site/site.resolver.js';
84
+ export * from './siterule/siterule.resolver.js';
85
+ export * from './template/template.resolver.js';
86
+ export * from './templaterule/templaterule.resolver.js';
87
+ export * from './user/user.resolver.js';
88
+ export * from './version/version.resolver.js';
89
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,6BAA6B,CAAA;AAE3C,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oCAAoC,CAAA;AAClD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,sBAAsB,CAAA;AACpC,cAAc,kCAAkC,CAAA;AAChD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,kCAAkC,CAAA;AAChD,cAAc,wBAAwB,CAAA;AACtC,cAAc,sCAAsC,CAAA;AACpD,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sCAAsC,CAAA;AACpD,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAE1C,cAAc,iBAAiB,CAAA;AAE/B,cAAc,2BAA2B,CAAA;AACzC,cAAc,uCAAuC,CAAA;AACrD,cAAc,mCAAmC,CAAA;AACjD,cAAc,yBAAyB,CAAA;AACvC,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,2BAA2B,CAAA;AACzC,cAAc,yCAAyC,CAAA;AACvD,cAAc,yBAAyB,CAAA;AACvC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,yBAAyB,CAAA;AAEvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AAEzC,cAAc,yBAAyB,CAAA;AAEvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sCAAsC,CAAA;AACpD,cAAc,wBAAwB,CAAA;AACtC,cAAc,oCAAoC,CAAA;AAClD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,kCAAkC,CAAA;AAChD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oCAAoC,CAAA;AAClD,cAAc,0BAA0B,CAAA;AACxC,cAAc,wCAAwC,CAAA;AACtD,cAAc,wBAAwB,CAAA;AACtC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wCAAwC,CAAA;AACtD,cAAc,wBAAwB,CAAA;AACtC,cAAc,+BAA+B,CAAA;AAE7C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,uCAAuC,CAAA;AACrD,cAAc,mCAAmC,CAAA;AACjD,cAAc,yBAAyB,CAAA;AACvC,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,qCAAqC,CAAA;AACnD,cAAc,2BAA2B,CAAA;AACzC,cAAc,yCAAyC,CAAA;AACvD,cAAc,yBAAyB,CAAA;AACvC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,yBAAyB,CAAA;AACvC,cAAc,+BAA+B,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { type DBMigration } from './internal.js';
2
+ export declare function migrations(moreMigrations?: DBMigration[]): Promise<void>;
@@ -0,0 +1,41 @@
1
+ import db from 'mysql2-async/db';
2
+ import { init } from './createdb.js';
3
+ import { VersionedService } from './internal.js';
4
+ import { sortby } from 'txstate-utils';
5
+ const dgMigrations = [
6
+ {
7
+ id: 20220101000000,
8
+ description: 'initialize all tables',
9
+ run: async (db) => {
10
+ await VersionedService.init(db);
11
+ await init(db);
12
+ }
13
+ }
14
+ ];
15
+ export async function migrations(moreMigrations) {
16
+ await db.wait();
17
+ const tables = await db.getvals('show tables');
18
+ if (!tables.includes('dbversion')) {
19
+ await db.execute(`
20
+ CREATE TABLE dbversion (
21
+ id BIGINT UNSIGNED NOT NULL,
22
+ PRIMARY KEY (id)
23
+ ) ENGINE InnoDB
24
+ `);
25
+ }
26
+ const usedIds = new Set(await db.getvals('SELECT id FROM dbversion'));
27
+ const allMigrations = sortby(dgMigrations.concat(moreMigrations ?? []), 'id');
28
+ for (const migration of allMigrations) {
29
+ if (usedIds.has(migration.id))
30
+ continue;
31
+ await db.transaction(async (db) => {
32
+ if (!usedIds.has(migration.id)) {
33
+ console.info('Running migration', migration.id, ':', migration.description);
34
+ await migration.run(db);
35
+ await db.insert('INSERT INTO dbversion (id) VALUES (?)', [migration.id]);
36
+ console.info('Successfully migrated to', migration.id);
37
+ }
38
+ });
39
+ }
40
+ }
41
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAoB,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,MAAM,YAAY,GAAkB;IAClC;QACE,EAAE,EAAE,cAAc;QAClB,WAAW,EAAE,uBAAuB;QACpC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YAChB,MAAM,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC/B,MAAM,IAAI,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;KACF;CACF,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAE,cAA8B;IAC9D,MAAM,EAAE,CAAC,IAAI,EAAE,CAAA;IACf,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACjC,MAAM,EAAE,CAAC,OAAO,CAAC;;;;;KAKhB,CAAC,CAAA;KACH;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAS,0BAA0B,CAAC,CAAC,CAAA;IAC7E,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;IAC7E,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAAE,SAAQ;QACvC,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;gBAC9B,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;gBAC3E,MAAM,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACvB,MAAM,EAAE,CAAC,MAAM,CAAC,uCAAuC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAA;gBACxE,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,EAAE,CAAC,CAAA;aACvD;QACH,CAAC,CAAC,CAAA;KACH;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Organization } from '../internal.js';
2
+ export declare function getOrganizations(ids?: string[]): Promise<Organization[]>;
@@ -0,0 +1,16 @@
1
+ import db from 'mysql2-async/db';
2
+ import { Organization } from '../internal.js';
3
+ export async function getOrganizations(ids) {
4
+ const binds = [];
5
+ const where = [];
6
+ if (ids?.length) {
7
+ where.push(`organizations.id IN (${db.in(binds, ids)})`);
8
+ }
9
+ let query = 'SELECT * from organizations';
10
+ if (where.length) {
11
+ query += ` WHERE (${where.join(') AND (')})`;
12
+ }
13
+ const orgs = await db.getall(query, binds);
14
+ return orgs.map(org => new Organization(org));
15
+ }
16
+ //# sourceMappingURL=organization.database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.database.js","sourceRoot":"","sources":["../../src/organization/organization.database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAE,GAAc;IACpD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,GAAG,EAAE,MAAM,EAAE;QACf,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA;KACzD;IACD,IAAI,KAAK,GAAG,6BAA6B,CAAA;IACzC,IAAI,KAAK,CAAC,MAAM,EAAE;QAChB,KAAK,IAAI,WAAW,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAA;KAC7C;IACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;AAC/C,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare class Organization {
2
+ id: string;
3
+ name: string;
4
+ constructor(row: any);
5
+ }
@@ -0,0 +1,35 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Field, ID, ObjectType } from 'type-graphql';
11
+ let Organization = class Organization {
12
+ constructor(row) {
13
+ this.id = String(row.id);
14
+ this.name = row.name;
15
+ }
16
+ };
17
+ __decorate([
18
+ Field(type => ID),
19
+ __metadata("design:type", String)
20
+ ], Organization.prototype, "id", void 0);
21
+ __decorate([
22
+ Field(),
23
+ __metadata("design:type", String)
24
+ ], Organization.prototype, "name", void 0);
25
+ Organization = __decorate([
26
+ ObjectType({
27
+ description: `An organization is an entity that owns some sites. It is here mainly
28
+ for administrative purposes, so that system administrators can keep track of the responsible
29
+ parties for any site. Each site also has an owner (an individual person), but people move
30
+ around and we need a way to both identify that has happened and put the situation back together.`
31
+ }),
32
+ __metadata("design:paramtypes", [Object])
33
+ ], Organization);
34
+ export { Organization };
35
+ //# sourceMappingURL=organization.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.model.js","sourceRoot":"","sources":["../../src/organization/organization.model.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAQpD,IAAa,YAAY,GAAzB,MAAa,YAAY;IAOvB,YAAa,GAAQ;QACnB,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACxB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;IACtB,CAAC;CACF,CAAA;AATC;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;;wCACR;AAGV;IADC,KAAK,EAAE;;0CACI;AALD,YAAY;IANxB,UAAU,CAAC;QACV,WAAW,EAAE;;;iGAGkF;KAChG,CAAC;;GACW,YAAY,CAWxB;SAXY,YAAY"}
@@ -0,0 +1,6 @@
1
+ import { Context } from '@txstate-mws/graphql-server';
2
+ import { Site, Organization } from '../internal.js';
3
+ export declare class OrganizationResolver {
4
+ organizations(ctx: Context): Promise<any>;
5
+ sites(ctx: Context, org: Organization): Promise<Site[]>;
6
+ }
@@ -0,0 +1,43 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { Context } from '@txstate-mws/graphql-server';
14
+ import { Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql';
15
+ import { Site, SiteService, Organization, OrganizationService } from '../internal.js';
16
+ let OrganizationResolver = class OrganizationResolver {
17
+ async organizations(ctx) {
18
+ return await ctx.svc(OrganizationService).find();
19
+ }
20
+ async sites(ctx, org) {
21
+ return await ctx.svc(SiteService).findByOrganization(org.id);
22
+ }
23
+ };
24
+ __decorate([
25
+ Query(returns => [Organization]),
26
+ __param(0, Ctx()),
27
+ __metadata("design:type", Function),
28
+ __metadata("design:paramtypes", [Context]),
29
+ __metadata("design:returntype", Promise)
30
+ ], OrganizationResolver.prototype, "organizations", null);
31
+ __decorate([
32
+ FieldResolver(returns => [Site]),
33
+ __param(0, Ctx()),
34
+ __param(1, Root()),
35
+ __metadata("design:type", Function),
36
+ __metadata("design:paramtypes", [Context, Organization]),
37
+ __metadata("design:returntype", Promise)
38
+ ], OrganizationResolver.prototype, "sites", null);
39
+ OrganizationResolver = __decorate([
40
+ Resolver(of => Organization)
41
+ ], OrganizationResolver);
42
+ export { OrganizationResolver };
43
+ //# sourceMappingURL=organization.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.resolver.js","sourceRoot":"","sources":["../../src/organization/organization.resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACxE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAGrF,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAE/B,KAAK,CAAC,aAAa,CAAS,GAAY;QACtC,OAAO,MAAM,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAA;IAClD,CAAC;IAGD,KAAK,CAAC,KAAK,CAAS,GAAY,EAAU,GAAiB;QACzD,OAAO,MAAM,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC9D,CAAC;CACF,CAAA;AARC;IADC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;IACX,WAAA,GAAG,EAAE,CAAA;;qCAAM,OAAO;;yDAEvC;AAGD;IADC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACnB,WAAA,GAAG,EAAE,CAAA;IAAgB,WAAA,IAAI,EAAE,CAAA;;qCAAhB,OAAO,EAAe,YAAY;;iDAE1D;AATU,oBAAoB;IADhC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC;GAChB,oBAAoB,CAUhC;SAVY,oBAAoB"}
@@ -0,0 +1,12 @@
1
+ import { AuthorizedService, BaseService } from '@txstate-mws/graphql-server';
2
+ import { Organization } from '../internal.js';
3
+ export declare class OrganizationServiceInternal extends BaseService {
4
+ find(ids?: string[]): Promise<Organization[]>;
5
+ findById(id: string): Promise<Organization | undefined>;
6
+ }
7
+ export declare class OrganizationService extends AuthorizedService<Organization> {
8
+ raw: OrganizationServiceInternal;
9
+ find(ids?: string[]): Promise<any>;
10
+ findById(id: string): Promise<any>;
11
+ mayView(org: Organization): Promise<boolean>;
12
+ }
@@ -0,0 +1,35 @@
1
+ import { AuthorizedService, BaseService } from '@txstate-mws/graphql-server';
2
+ import { PrimaryKeyLoader } from 'dataloader-factory';
3
+ import { getOrganizations, SiteService } from '../internal.js';
4
+ const organizationsByIdLoader = new PrimaryKeyLoader({
5
+ fetch: async (ids) => {
6
+ return await getOrganizations(ids);
7
+ }
8
+ });
9
+ export class OrganizationServiceInternal extends BaseService {
10
+ async find(ids) {
11
+ const orgs = await getOrganizations(ids);
12
+ for (const org of orgs)
13
+ this.loaders.get(organizationsByIdLoader).prime(org.id, org);
14
+ return orgs;
15
+ }
16
+ async findById(id) {
17
+ return await this.loaders.get(organizationsByIdLoader).load(id);
18
+ }
19
+ }
20
+ export class OrganizationService extends AuthorizedService {
21
+ constructor() {
22
+ super(...arguments);
23
+ this.raw = this.svc(OrganizationServiceInternal);
24
+ }
25
+ async find(ids) {
26
+ return await this.removeUnauthorized(await this.raw.find(ids));
27
+ }
28
+ async findById(id) {
29
+ return await this.removeUnauthorized(await this.raw.findById(id));
30
+ }
31
+ async mayView(org) {
32
+ return await this.svc(SiteService).mayViewManagerUI();
33
+ }
34
+ }
35
+ //# sourceMappingURL=organization.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.service.js","sourceRoot":"","sources":["../../src/organization/organization.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAgB,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5E,MAAM,uBAAuB,GAAG,IAAI,gBAAgB,CAAC;IACnD,KAAK,EAAE,KAAK,EAAE,GAAa,EAAE,EAAE;QAC7B,OAAO,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACpC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,OAAO,2BAA4B,SAAQ,WAAW;IAC1D,KAAK,CAAC,IAAI,CAAE,GAAc;QACxB,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACxC,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QACpF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,EAAU;QACxB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACjE,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,iBAA+B;IAAxE;;QACE,QAAG,GAAG,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IAa7C,CAAC;IAXC,KAAK,CAAC,IAAI,CAAE,GAAc;QACxB,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,EAAU;QACxB,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACnE,CAAC;IAED,KAAK,CAAC,OAAO,CAAE,GAAiB;QAC9B,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,gBAAgB,EAAE,CAAA;IACvD,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { DateTime } from 'luxon';
2
+ import { Queryable } from 'mysql2-async';
3
+ import { Page, PageFilter, VersionedService } from '../internal.js';
4
+ export declare function getPages(filter: PageFilter, tdb?: Queryable): Promise<Page[]>;
5
+ export declare function createPage(versionedService: VersionedService, userId: string, parent: Page, aboveTarget: Page | undefined, name: string, templateKey: string, schemaVersion: DateTime): Promise<Page>;
6
+ export declare function movePages(pages: Page[], parent: Page, aboveTarget?: Page): Promise<Page[]>;
7
+ export declare function copyPages(versionedService: VersionedService, userId: string, pages: Page[], parent: Page, aboveTarget?: Page, includeChildren?: boolean): Promise<Page>;
8
+ export declare function deletePages(pages: Page[], userInternalId: number): Promise<void>;
9
+ export declare function undeletePages(pages: Page[]): Promise<number>;
10
+ export declare function renamePage(page: Page, name: string): Promise<number>;
@@ -0,0 +1,269 @@
1
+ import db from 'mysql2-async/db';
2
+ import { nanoid } from 'nanoid';
3
+ import { isNotBlank, isNotNull, keyby, mapConcurrent, unique, someConcurrent, filterAsync, sortby } from 'txstate-utils';
4
+ import { Page, normalizePath, formatSavedAtVersion, DeletedFilter } from '../internal.js';
5
+ async function convertPathsToIDPaths(pathstrings) {
6
+ var _a, _b, _c;
7
+ const paths = pathstrings.map(normalizePath).map(p => p.split(/\//).filter(isNotBlank));
8
+ const names = new Set(paths.flat());
9
+ const binds = [];
10
+ const rows = await db.getall(`SELECT id, name, path FROM pages WHERE name IN (${db.in(binds, Array.from(names))})`, binds);
11
+ const rowsByNameAndIDPath = {};
12
+ for (const row of rows) {
13
+ rowsByNameAndIDPath[_a = row.name] ?? (rowsByNameAndIDPath[_a] = {});
14
+ (_b = rowsByNameAndIDPath[row.name])[_c = row.path] ?? (_b[_c] = []);
15
+ rowsByNameAndIDPath[row.name][row.path].push(row);
16
+ }
17
+ const idpaths = [];
18
+ for (const pt of paths) {
19
+ let searchpaths = ['/'];
20
+ for (const segment of pt) {
21
+ const pages = searchpaths.flatMap(sp => rowsByNameAndIDPath[segment][sp]);
22
+ searchpaths = pages.map(pg => `${pg.path}${pg.path === '/' ? '' : '/'}${pg.id}`);
23
+ if (!searchpaths.length)
24
+ break;
25
+ }
26
+ idpaths.push(...searchpaths);
27
+ }
28
+ return idpaths;
29
+ }
30
+ async function processFilters(filter) {
31
+ const binds = [];
32
+ const where = [];
33
+ const joins = new Map();
34
+ if (filter.deleted) {
35
+ if (filter.deleted === DeletedFilter.ONLY) {
36
+ where.push('pages.deletedAt IS NOT NULL');
37
+ }
38
+ else if (filter.deleted === DeletedFilter.HIDE) {
39
+ where.push('pages.deletedAt IS NULL');
40
+ }
41
+ }
42
+ else {
43
+ where.push('pages.deletedAt IS NULL');
44
+ }
45
+ // dataIds
46
+ if (filter.ids?.length) {
47
+ where.push(`pages.dataId IN (${db.in(binds, filter.ids)})`);
48
+ }
49
+ // internalIds autoincrement
50
+ if (filter.internalIds?.length) {
51
+ where.push(`pages.id IN (${db.in(binds, filter.internalIds)})`);
52
+ }
53
+ // linkIds
54
+ if (filter.linkIds?.length) {
55
+ where.push(`pages.linkId IN (${db.in(binds, filter.linkIds)})`);
56
+ }
57
+ // pagetreeIds
58
+ if (filter.pagetreeIds?.length) {
59
+ where.push(`pages.pagetreeId IN (${db.in(binds, filter.pagetreeIds)})`);
60
+ }
61
+ // internalIdPaths for getting direct descendants of a page
62
+ if (filter.internalIdPaths?.length) {
63
+ where.push(`pages.path IN (${db.in(binds, filter.internalIdPaths)})`);
64
+ }
65
+ // internalIdPathsRecursive for getting all descendants of a page
66
+ if (filter.internalIdPathsRecursive?.length) {
67
+ const ors = filter.internalIdPathsRecursive.flatMap(path => ['pages.path LIKE ?', 'pages.path = ?']);
68
+ where.push(ors.join(' OR '));
69
+ binds.push(...filter.internalIdPathsRecursive.flatMap(p => [`${p}/%`, p]));
70
+ }
71
+ // pagetreeTypes
72
+ if (filter.pagetreeTypes?.length) {
73
+ where.push(`pagetrees.type IN (${db.in(binds, filter.pagetreeTypes)})`);
74
+ if (!joins.has('pagetrees')) {
75
+ joins.set('pagetrees', 'INNER JOIN pagetrees on pages.pagetreeId = pagetrees.id');
76
+ }
77
+ }
78
+ // siteIds
79
+ if (filter.siteIds?.length) {
80
+ where.push(`pagetrees.siteId IN (${db.in(binds, filter.siteIds)})`);
81
+ if (!joins.has('pagetrees')) {
82
+ joins.set('pagetrees', 'INNER JOIN pagetrees on pages.pagetreeId = pagetrees.id');
83
+ }
84
+ }
85
+ // named paths e.g. /site1/about
86
+ if (filter.paths?.length) {
87
+ const idpaths = await convertPathsToIDPaths(filter.paths);
88
+ const ids = idpaths.map(p => p.split(/\//).slice(-1)[0]);
89
+ where.push(`pages.id IN (${db.in(binds, ids)})`);
90
+ }
91
+ // beneath a named path e.g. /site1/about
92
+ if (filter.beneath?.length) {
93
+ const idpaths = await convertPathsToIDPaths(filter.beneath);
94
+ const ors = idpaths.flatMap(p => ['pages.path LIKE ?', 'pages.path = ?']);
95
+ binds.push(...idpaths.flatMap(p => [`${p}/%`, p]));
96
+ where.push(ors.join(' OR '));
97
+ }
98
+ // direct children of a named path e.g. /site1/about
99
+ if (filter.parentPaths?.length) {
100
+ const idpaths = await convertPathsToIDPaths(filter.parentPaths);
101
+ where.push(`pages.path IN (${db.in(binds, idpaths)})`);
102
+ }
103
+ // published TODO
104
+ // live TODO
105
+ // templateKeys TODO
106
+ // pages, assets, data referenced TODO
107
+ return { binds, where, joins };
108
+ }
109
+ export async function getPages(filter, tdb = db) {
110
+ const { binds, where, joins } = await processFilters(filter);
111
+ const pages = await tdb.getall(`SELECT pages.* FROM pages
112
+ ${joins.size ? Array.from(joins.values()).join('\n') : ''}
113
+ ${where.length ? `WHERE (${where.join(') AND (')})` : ''}
114
+ ORDER BY \`path\`, displayOrder`, binds);
115
+ return pages.map(p => new Page(p));
116
+ }
117
+ async function refetch(db, ...pages) {
118
+ const refetched = keyby(await getPages({ internalIds: pages.filter(isNotNull).map(p => p.internalId), deleted: DeletedFilter.SHOW }, db), 'internalId');
119
+ return pages.map(p => refetched[p?.internalId ?? 0]);
120
+ }
121
+ async function handleDisplayOrder(db, parent, aboveTarget, pagesAdded = 1) {
122
+ const pathToParent = `/${[...parent.pathSplit, parent.internalId].join('/')}`;
123
+ let displayOrder;
124
+ if (aboveTarget) {
125
+ displayOrder = aboveTarget.displayOrder;
126
+ await db.update(`UPDATE pages SET displayOrder=displayOrder + ${pagesAdded} WHERE path=? AND displayOrder >= ?`, [pathToParent, displayOrder]);
127
+ }
128
+ else {
129
+ const maxDisplayOrder = await db.getval('SELECT MAX(displayOrder) FROM pages WHERE path=?', [pathToParent]);
130
+ displayOrder = (maxDisplayOrder ?? 0) + 1;
131
+ }
132
+ return displayOrder;
133
+ }
134
+ async function updateSourceDisplayOrder(db, page, parent) {
135
+ // If page parent isn't changing, there is no hole left behind
136
+ if (page.parentInternalId === parent.internalId)
137
+ return;
138
+ await db.update('UPDATE pages SET displayOrder = displayOrder - 1 WHERE path = ? AND displayOrder > ?', [page.path, page.displayOrder]);
139
+ }
140
+ export async function createPage(versionedService, userId, parent, aboveTarget, name, templateKey, schemaVersion) {
141
+ return await db.transaction(async (db) => {
142
+ [parent, aboveTarget] = await refetch(db, parent, aboveTarget);
143
+ if (aboveTarget && parent.internalId !== aboveTarget.parentInternalId) {
144
+ throw new Error('Page targeted for ordering above no longer belongs to the same parent it did when the mutation started.');
145
+ }
146
+ const displayOrder = await handleDisplayOrder(db, parent, aboveTarget);
147
+ const dataId = await versionedService.create('page', { templateKey, savedAtVersion: formatSavedAtVersion(schemaVersion) }, [{ name: 'template', values: [templateKey] }], userId, db);
148
+ const newInternalId = await db.insert(`
149
+ INSERT INTO pages (name, path, displayOrder, pagetreeId, dataId, linkId)
150
+ VALUES (?,?,?,?,?,?)
151
+ `, [name, `/${[...parent.pathSplit, parent.internalId].join('/')}`, displayOrder, parent.pagetreeId, dataId, nanoid(10)]);
152
+ // return the newly created page
153
+ return new Page(await db.getrow('SELECT * FROM pages WHERE id=?', [newInternalId]));
154
+ });
155
+ }
156
+ export async function movePages(pages, parent, aboveTarget) {
157
+ return await db.transaction(async (db) => {
158
+ // refetch pages inside transaction for safety
159
+ [parent, aboveTarget, ...pages] = await refetch(db, parent, aboveTarget, ...pages);
160
+ if (aboveTarget && parent.internalId !== aboveTarget.parentInternalId) {
161
+ throw new Error('Page targeted for ordering above no longer belongs to the same parent it did when the mutation started.');
162
+ }
163
+ if (await someConcurrent(pages, async (page) => parent.path.startsWith(page.path + '/'))) {
164
+ throw new Error('Cannot move a page into its own subtree.');
165
+ }
166
+ // We cannot allow pages to be moved between pagetrees because linkId collision could occur.
167
+ // linkId collision can also occur on a copy, but in that case we can generate a new linkId
168
+ // automatically and the operation can still be undone. For instance, if you move a page to
169
+ // a new pagetree and give it a new linkId in the process, but that move was a mistake, lots
170
+ // of links will break and there's no way to restore them. Also, moving a page always moves
171
+ // all of its subpages, so the problem would be multiplied by the number of descendants.
172
+ if (await someConcurrent(pages, async (page) => parent.pagetreeId !== page.pagetreeId)) {
173
+ throw new Error('Moving between sites or pagetrees is not allowed. Copy instead.');
174
+ }
175
+ // If page selected to be moved is a descendent of one of the other pages being moved,
176
+ // we don't need to move it because it will be moved with its ancestor
177
+ let filteredPages = await filterAsync(pages, async (page) => {
178
+ return !(await someConcurrent(pages, async (p) => (p.internalId !== page.internalId) && page.path.startsWith(p.path + '/')));
179
+ });
180
+ filteredPages = sortby(filteredPages, 'displayOrder');
181
+ // deal with displayOrder
182
+ const displayOrder = await handleDisplayOrder(db, parent, aboveTarget, filteredPages.length);
183
+ // fill in any display order holes in the moved pages' previous location(s)
184
+ for (const p of pages) {
185
+ await updateSourceDisplayOrder(db, p, parent);
186
+ }
187
+ // update the pages themselves, currently just displayOrder.
188
+ await Promise.all(filteredPages.map(async (page, index) => await db.update('UPDATE pages SET displayOrder = ? WHERE id = ?', [displayOrder + index, page.internalId])));
189
+ // correct the path column for pages and all their descendants
190
+ for (const p of filteredPages) {
191
+ const descendants = (await db.getall('SELECT * FROM pages WHERE id=? OR path LIKE ?', [p.internalId, `/${[...p.pathSplit, p.internalId].join('/')}%`])).map(r => new Page(r));
192
+ const pathsize = p.pathSplit.length;
193
+ for (const d of descendants) {
194
+ const newPath = `/${[...parent.pathSplit, parent.internalId, ...d.pathSplit.slice(pathsize)].join('/')}`;
195
+ await db.update('UPDATE pages SET path=? WHERE id=?', [newPath, d.internalId]);
196
+ }
197
+ }
198
+ // return the newly updated pages
199
+ const binds = [];
200
+ const updatedPages = await db.getall(`SELECT * FROM pages WHERE id IN (${db.in(binds, filteredPages.map(p => p.internalId))})`, binds);
201
+ return updatedPages.map(p => new Page(p));
202
+ });
203
+ }
204
+ async function handleCopy(db, versionedService, userId, page, parent, displayOrder, includeChildren) {
205
+ const pageData = await versionedService.get(page.dataId);
206
+ const pageIndexes = await versionedService.getIndexes(page.dataId, pageData.version);
207
+ const newDataId = await versionedService.create('page', pageData.data, pageIndexes, userId, db);
208
+ let newPageName = String(page.name);
209
+ const pagesWithName = new Set(await db.getvals('SELECT name FROM pages WHERE name LIKE ? AND path = ?', [`${String(page.name)}%`, `/${[...parent.pathSplit, parent.internalId].join('/')}`]));
210
+ if (pagesWithName.size > 0) {
211
+ let idx = 0;
212
+ newPageName = `${String(page.name)}${idx}`;
213
+ while (pagesWithName.has(newPageName)) {
214
+ newPageName = `${String(page.name)}${++idx}`;
215
+ }
216
+ }
217
+ const newInternalId = await db.insert(`
218
+ INSERT INTO pages (name, pagetreeId, dataId, linkId, path, displayOrder)
219
+ VALUES (?, ?, ?, ?, ?, ?)`, [newPageName, parent.pagetreeId, newDataId, nanoid(10), `/${[...parent.pathSplit, parent.internalId].join('/')}`, displayOrder]);
220
+ if (includeChildren) {
221
+ const children = (await db.getall('SELECT * FROM pages WHERE path = ?', [`/${[...page.pathSplit, page.internalId].join('/')}`])).map(r => new Page(r));
222
+ const newParent = new Page(await db.getrow('SELECT * FROM pages WHERE id = ?', [newInternalId]));
223
+ for (const child of children) {
224
+ await handleCopy(db, versionedService, userId, child, newParent, child.displayOrder, true);
225
+ }
226
+ }
227
+ return newDataId;
228
+ }
229
+ export async function copyPages(versionedService, userId, pages, parent, aboveTarget, includeChildren) {
230
+ return await db.transaction(async (db) => {
231
+ [parent, aboveTarget, ...pages] = await refetch(db, parent, aboveTarget, ...pages);
232
+ if (aboveTarget && parent.internalId !== aboveTarget.parentInternalId) {
233
+ throw new Error('Page targeted for ordering above no longer belongs to the same parent it did when the mutation started.');
234
+ }
235
+ pages = sortby(pages, 'displayOrder');
236
+ const displayOrder = await handleDisplayOrder(db, parent, aboveTarget, pages.length);
237
+ let i = 0;
238
+ for (const page of pages) {
239
+ await handleCopy(db, versionedService, userId, page, parent, displayOrder + i, includeChildren);
240
+ i++;
241
+ }
242
+ return parent;
243
+ });
244
+ }
245
+ // TODO: always delete child pages? Or make it an option?
246
+ export async function deletePages(pages, userInternalId) {
247
+ return await db.transaction(async (db) => {
248
+ const binds = [userInternalId];
249
+ const refetchedPages = await refetch(db, ...pages);
250
+ const pageInternalIds = refetchedPages.map(p => p.internalId);
251
+ const children = (await mapConcurrent(refetchedPages, async (page) => await getPages({ deleted: DeletedFilter.SHOW, internalIdPathsRecursive: [`${page.path}${page.path === '/' ? '' : '/'}${page.internalId}`] }, db))).flat();
252
+ const childInternalIds = children.map(c => c.internalId);
253
+ await db.update(`UPDATE pages SET deletedAt = NOW(), deletedBy = ? WHERE id IN (${db.in(binds, unique([...pageInternalIds, ...childInternalIds]))})`, binds);
254
+ });
255
+ }
256
+ export async function undeletePages(pages) {
257
+ return await db.transaction(async (db) => {
258
+ const binds = [];
259
+ const refetchedPages = await refetch(db, ...pages);
260
+ return await db.update(`
261
+ UPDATE pages
262
+ SET deletedAt = NULL, deletedBy = NULL
263
+ WHERE id IN (${db.in(binds, refetchedPages.map(p => p.internalId))})`, binds);
264
+ });
265
+ }
266
+ export async function renamePage(page, name) {
267
+ return await db.update('UPDATE pages SET name = ? WHERE id = ?', [name, page.internalId]);
268
+ }
269
+ //# sourceMappingURL=page.database.js.map