@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,131 @@
1
+ import { AuthorizedService } from '@txstate-mws/graphql-server';
2
+ import { filterAsync, keyby } from 'txstate-utils';
3
+ import { AssetRuleService, DataRuleService, GlobalRuleService, PageRuleService, SiteRuleService, TemplateRuleService, RoleServiceInternal, SiteRuleServiceInternal, PageRuleServiceInternal, AssetRuleServiceInternal, DataRuleServiceInternal, GlobalRuleServiceInternal, GroupServiceInternal, UserServiceInternal, TemplateRuleServiceInternal } from '../internal.js';
4
+ export class DosGatoService extends AuthorizedService {
5
+ get login() {
6
+ return this.auth.sub;
7
+ }
8
+ isRenderServer() {
9
+ return this.login === 'anonymous';
10
+ }
11
+ async currentUser() {
12
+ return await this.svc(UserServiceInternal).findById(this.login);
13
+ }
14
+ async currentRoles() {
15
+ return await this.svc(RoleServiceInternal).findByUserId(this.login);
16
+ }
17
+ async currentGroups() {
18
+ return await this.svc(GroupServiceInternal).findByUserId(this.login);
19
+ }
20
+ async currentGroupsById(id) {
21
+ this.currentGroupsByIdStorage ?? (this.currentGroupsByIdStorage = keyby(await this.currentGroups(), 'id'));
22
+ return this.currentGroupsByIdStorage[id];
23
+ }
24
+ async currentGlobalRules() {
25
+ const roles = await this.currentRoles();
26
+ return (await Promise.all(roles.map(async (r) => await this.svc(GlobalRuleServiceInternal).findByRoleId(r.id)))).flat();
27
+ }
28
+ async haveGlobalPerm(grant) {
29
+ const rules = await this.currentGlobalRules();
30
+ const globalRuleService = this.svc(GlobalRuleService);
31
+ const applicable = await filterAsync(rules, async (r) => await globalRuleService.applies(r));
32
+ return applicable.some(r => r.grants[grant]);
33
+ }
34
+ async currentSiteRules() {
35
+ const roles = await this.currentRoles();
36
+ return (await Promise.all(roles.map(async (r) => await this.svc(SiteRuleServiceInternal).findByRoleId(r.id)))).flat();
37
+ }
38
+ async haveSitePerm(site, grant) {
39
+ const rules = await this.currentSiteRules();
40
+ const siteRuleService = this.svc(SiteRuleService);
41
+ const applicable = await filterAsync(rules, async (r) => await siteRuleService.applies(r, site));
42
+ return applicable.some(r => r.grants[grant]);
43
+ }
44
+ async currentPageRules() {
45
+ const roles = await this.currentRoles();
46
+ return (await Promise.all(roles.map(async (r) => await this.svc(PageRuleServiceInternal).findByRoleId(r.id)))).flat();
47
+ }
48
+ async havePagePerm(page, grant) {
49
+ if (this.isRenderServer() && grant === 'view')
50
+ return true;
51
+ const rules = await this.currentPageRules();
52
+ const pageRuleService = this.svc(PageRuleService);
53
+ const applicable = await filterAsync(rules, async (r) => await pageRuleService.applies(r, page));
54
+ return applicable.some(r => r.grants[grant]);
55
+ }
56
+ async currentAssetRules() {
57
+ const roles = await this.currentRoles();
58
+ return (await Promise.all(roles.map(async (r) => await this.svc(AssetRuleServiceInternal).findByRoleId(r.id)))).flat();
59
+ }
60
+ async haveAssetPerm(asset, grant) {
61
+ if (this.isRenderServer() && grant === 'view')
62
+ return true;
63
+ const rules = await this.currentAssetRules();
64
+ const assetRuleService = this.svc(AssetRuleService);
65
+ const applicable = await filterAsync(rules, async (r) => await assetRuleService.applies(r, asset));
66
+ return applicable.some(r => r.grants[grant]);
67
+ }
68
+ async haveAssetFolderPerm(folder, grant) {
69
+ if (this.isRenderServer() && grant === 'view')
70
+ return true;
71
+ const rules = await this.currentAssetRules();
72
+ const assetRuleService = this.svc(AssetRuleService);
73
+ const applicable = await filterAsync(rules, async (r) => await assetRuleService.appliesToFolder(r, folder));
74
+ return applicable.some(r => r.grants[grant]);
75
+ }
76
+ async currentDataRules() {
77
+ const roles = await this.currentRoles();
78
+ return (await Promise.all(roles.map(async (r) => await this.svc(DataRuleServiceInternal).findByRoleId(r.id)))).flat();
79
+ }
80
+ async haveDataPerm(item, grant) {
81
+ if (this.isRenderServer() && grant === 'view')
82
+ return true;
83
+ // if siteId is null it's global data and governed by GlobalRules.manageGlobalData instead
84
+ // of DataRules
85
+ if (!item.siteId)
86
+ return await this.haveGlobalPerm('manageGlobalData');
87
+ const rules = await this.currentDataRules();
88
+ const dataRuleService = this.svc(DataRuleService);
89
+ const applicable = await filterAsync(rules, async (r) => await dataRuleService.applies(r, item));
90
+ return applicable.some(r => r.grants[grant]);
91
+ }
92
+ async haveDataFolderPerm(folder, grant) {
93
+ if (this.isRenderServer() && grant === 'view')
94
+ return true;
95
+ if (!folder.siteId)
96
+ return await this.haveGlobalPerm('manageGlobalData');
97
+ const rules = await this.currentDataRules();
98
+ const dataRuleService = this.svc(DataRuleService);
99
+ const applicable = await filterAsync(rules, async (r) => await dataRuleService.appliesToFolder(r, folder));
100
+ return applicable.some(r => r.grants[grant]);
101
+ }
102
+ async haveDataRootPerm(dataroot, grant) {
103
+ if (this.isRenderServer() && grant === 'view')
104
+ return true;
105
+ if (!dataroot.site)
106
+ return await this.haveGlobalPerm('manageGlobalData');
107
+ const rules = await this.currentDataRules();
108
+ return rules.some(r => {
109
+ if (r.path !== '/')
110
+ return false;
111
+ if (!r.grants[grant])
112
+ return false;
113
+ if (r.siteId && (r.siteId !== dataroot.site.id))
114
+ return false;
115
+ if (r.templateId && (r.templateId !== dataroot.template.id))
116
+ return false;
117
+ return true;
118
+ });
119
+ }
120
+ async currentTemplateRules() {
121
+ const roles = await this.currentRoles();
122
+ return (await Promise.all(roles.map(async (r) => await this.svc(TemplateRuleServiceInternal).findByRoleId(r.id)))).flat();
123
+ }
124
+ async haveTemplatePerm(template, grant) {
125
+ const rules = await this.currentTemplateRules();
126
+ const templateRuleService = this.svc(TemplateRuleService);
127
+ const applicable = await filterAsync(rules, async (r) => await templateRuleService.applies(r, template));
128
+ return applicable.some(r => r.grants[grant]);
129
+ }
130
+ }
131
+ //# sourceMappingURL=authservice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authservice.js","sourceRoot":"","sources":["../../src/util/authservice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { DateTime } from 'luxon';
2
+ export declare function formatSavedAtVersion(datetime: DateTime): string;
@@ -0,0 +1,4 @@
1
+ export function formatSavedAtVersion(datetime) {
2
+ return datetime.toFormat('yLLddHHmmss');
3
+ }
4
+ //# sourceMappingURL=dates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../src/util/dates.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAE,QAAkB;IACtD,OAAO,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;AACzC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { FastifyRequest, FastifyReply } from 'fastify';
2
+ export declare function handleUpload(req: FastifyRequest, res: FastifyReply): Promise<{
3
+ filename: string;
4
+ shasum: any;
5
+ mime: string;
6
+ size: number;
7
+ }[]>;
8
+ interface FileHandler {
9
+ moveToPermLocation: (checksum: string) => Promise<void>;
10
+ getFileLocation: (checksum: string) => string;
11
+ getFile: (checksum: string) => Promise<void>;
12
+ }
13
+ export declare const FileSystemHandler: FileHandler;
14
+ export declare const ObjectStorageHandler: FileHandler;
15
+ export {};
@@ -0,0 +1,48 @@
1
+ import crypto from 'crypto';
2
+ import * as util from 'util';
3
+ import stream from 'stream';
4
+ import { nanoid } from 'nanoid';
5
+ import fs, { promises as fsp } from 'fs';
6
+ import { dirname } from 'path';
7
+ const pipelinep = util.promisify(stream.pipeline);
8
+ export async function handleUpload(req, res) {
9
+ const files = [];
10
+ const parts = req.files();
11
+ for await (const part of parts) {
12
+ const hash = crypto.createHash('sha1').setEncoding('hex');
13
+ const tempName = nanoid(10);
14
+ await pipelinep(part.file, fs.createWriteStream(`/files/tmp/${tempName}`));
15
+ await pipelinep(fs.createReadStream(`/files/tmp/${tempName}`), hash);
16
+ const checksum = hash.read();
17
+ await fsp.rename(`/files/tmp/${tempName}`, `/files/tmp/${checksum}`);
18
+ files.push({ filename: part.filename, shasum: checksum, mime: part.mimetype, size: part.file.bytesRead });
19
+ }
20
+ return files;
21
+ }
22
+ export const FileSystemHandler = {
23
+ async moveToPermLocation(checksum) {
24
+ const checksumpath = this.getFileLocation(checksum);
25
+ await fsp.mkdir(dirname(checksumpath), { recursive: true });
26
+ await fsp.rename(`/files/tmp/${checksum}`, checksumpath);
27
+ },
28
+ getFileLocation(checksum) {
29
+ return `/files/storage/${checksum.slice(0, 2)}/${checksum.slice(2, 4)}/${checksum.slice(4)}`;
30
+ },
31
+ async getFile(checksum) {
32
+ const checksumpath = this.getFileLocation(checksum);
33
+ // TODO: Should this just send back the path? Do we need another RESTful endpoint for downloading the file?
34
+ }
35
+ };
36
+ export const ObjectStorageHandler = {
37
+ async moveToPermLocation(checksum) {
38
+ // put the file in a bucket
39
+ },
40
+ getFileLocation(checksum) {
41
+ // determine where to put the file, based on the checksum. Is there just one bucket? Multiple buckets?
42
+ return '';
43
+ },
44
+ async getFile(checksum) {
45
+ // Use the checksum to find the file and return it
46
+ }
47
+ };
48
+ //# sourceMappingURL=filehandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filehandler.js","sourceRoot":"","sources":["../../src/util/filehandler.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,EAAE,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,IAAI,CAAA;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAEjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,GAAmB,EAAE,GAAiB;IACxE,MAAM,KAAK,GAAG,EAAE,CAAA;IAChB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAA;IACzB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;QAC3B,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC1E,MAAM,SAAS,CAAC,EAAE,CAAC,gBAAgB,CAAC,cAAc,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAC5B,MAAM,GAAG,CAAC,MAAM,CAAC,cAAc,QAAQ,EAAE,EAAE,cAAc,QAAQ,EAAE,CAAC,CAAA;QACpE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;KAC1G;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAQD,MAAM,CAAC,MAAM,iBAAiB,GAAgB;IAC5C,KAAK,CAAC,kBAAkB,CAAE,QAAgB;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACnD,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,MAAM,GAAG,CAAC,MAAM,CAAC,cAAc,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAA;IAC1D,CAAC;IACD,eAAe,CAAE,QAAgB;QAC/B,OAAO,kBAAkB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9F,CAAC;IACD,KAAK,CAAC,OAAO,CAAE,QAAgB;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACnD,2GAA2G;IAC7G,CAAC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,KAAK,CAAC,kBAAkB,CAAE,QAAgB;QACxC,2BAA2B;IAC7B,CAAC;IACD,eAAe,CAAE,QAAgB;QAC/B,sGAAsG;QACtG,OAAO,EAAE,CAAA;IACX,CAAC;IACD,KAAK,CAAC,OAAO,CAAE,QAAgB;QAC7B,kDAAkD;IACpD,CAAC;CACF,CAAA"}
@@ -0,0 +1,13 @@
1
+ export * from './authservice.js';
2
+ export * from './indexing.js';
3
+ export * from './migrations.js';
4
+ export * from './registry.js';
5
+ export * from './rules.js';
6
+ export * from './sharedtypes.js';
7
+ export * from './mutationlogger.js';
8
+ export * from './filehandler.js';
9
+ export * from './dates.js';
10
+ export declare function normalizePath(path: string): string;
11
+ export declare function appendPath(a: string, b: string): string;
12
+ export declare function popPath(path: string): string;
13
+ export declare function basename(p: string): string;
@@ -0,0 +1,26 @@
1
+ import path from 'path';
2
+ import { isNotBlank } from 'txstate-utils';
3
+ export * from './authservice.js';
4
+ export * from './indexing.js';
5
+ export * from './migrations.js';
6
+ export * from './registry.js';
7
+ export * from './rules.js';
8
+ export * from './sharedtypes.js';
9
+ export * from './mutationlogger.js';
10
+ export * from './filehandler.js';
11
+ export * from './dates.js';
12
+ export function normalizePath(path) {
13
+ return (path.startsWith('/') ? '' : '/') + (path.endsWith('/') ? path.substr(0, -1) : path)
14
+ .replace(/[^/]*\/\.\./, '').replace(/\/+/, '/')
15
+ .replace(/\.\w{1,12}$/i, '');
16
+ }
17
+ export function appendPath(a, b) {
18
+ return `${a}${a === '/' ? '' : '/'}${b}`;
19
+ }
20
+ export function popPath(path) {
21
+ return `/${path.split('/').filter(isNotBlank).slice(0, -1).join('/')}`;
22
+ }
23
+ export function basename(p) {
24
+ return path.basename(p);
25
+ }
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAE1B,MAAM,UAAU,aAAa,CAAE,IAAY;IACzC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACxF,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SAC9C,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CAAE,CAAS,EAAE,CAAS;IAC9C,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,OAAO,CAAE,IAAY;IACnC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAE,CAAS;IACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AACzB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { LinkDefinition } from '@dosgato/templating';
2
+ export declare function extractLinksFromText(text: string): LinkDefinition[];
3
+ export declare function getKeywords(text: string, options?: {
4
+ stopwords?: boolean;
5
+ }): string[];
6
+ export declare function getHostname(urlString: string): string | undefined;
7
+ export interface SingleValueIndex {
8
+ name: string;
9
+ value: string;
10
+ }
11
+ export declare type LinkIndexTypes = 'link_asset' | 'link_page' | 'link_hostname' | 'link_data' | 'link_assetfolder' | 'link_datafolder';
12
+ export declare function processLink(link: LinkDefinition): SingleValueIndex[];
@@ -0,0 +1,74 @@
1
+ import { stringify } from 'txstate-utils';
2
+ import { stopwords } from './stopwords.js';
3
+ export function extractLinksFromText(text) {
4
+ const matches = text.matchAll(/{.*"type"\s?:\s+"\w+".*?}/gi);
5
+ return Array.from(matches).map(m => JSON.parse(m[0]));
6
+ }
7
+ export function getKeywords(text, options) {
8
+ return Array.from(new Set(text
9
+ .toLocaleLowerCase()
10
+ .normalize('NFD').replace(/\p{Diacritic}/gu, '')
11
+ .split(/[^\w-]+/)
12
+ .flatMap(word => word.includes('-') ? word.split('-').concat(word.replace('-', '')) : [word])
13
+ .filter(word => word.length > 2 && (options?.stopwords === false || !stopwords[word]) && isNaN(Number(word)))));
14
+ }
15
+ export function getHostname(urlString) {
16
+ if (!urlString)
17
+ return undefined;
18
+ urlString = urlString.trim();
19
+ if (/^(data|view-source):/i.test(urlString)) {
20
+ return undefined;
21
+ }
22
+ if (urlString.startsWith('//'))
23
+ urlString = 'http:' + urlString;
24
+ try {
25
+ const urlObject = new URL(urlString);
26
+ return urlObject.hostname;
27
+ }
28
+ catch (e) {
29
+ return undefined;
30
+ }
31
+ }
32
+ export function processLink(link) {
33
+ let ret = [];
34
+ if (link.type === 'asset') {
35
+ ret = [
36
+ { name: 'link_asset', value: { source: link.source, id: link.id } },
37
+ { name: 'link_asset', value: { path: link.path } },
38
+ { name: 'link_asset', value: { checksum: link.checksum } }
39
+ ];
40
+ }
41
+ else if (link.type === 'page') {
42
+ ret = [
43
+ { name: 'link_page', value: { linkId: link.linkId } },
44
+ { name: 'link_page', value: { path: link.path } }
45
+ ];
46
+ }
47
+ else if (link.type === 'data') {
48
+ ret = [
49
+ { name: 'link_data', value: { linkId: link.id } },
50
+ { name: 'link_data', value: { siteId: link.siteId, path: link.path } }
51
+ ];
52
+ }
53
+ else if (link.type === 'assetfolder') {
54
+ ret = [
55
+ { name: 'link_assetfolder', value: { linkId: link.id } },
56
+ { name: 'link_assetfolder', value: { path: link.path } }
57
+ ];
58
+ }
59
+ else if (link.type === 'datafolder') {
60
+ ret = [
61
+ { name: 'link_datafolder', value: { linkId: link.id } },
62
+ { name: 'link_datafolder', value: { siteId: link.siteId, path: link.path } }
63
+ ];
64
+ }
65
+ else if (link.type === 'url') {
66
+ const hostname = getHostname(link.url);
67
+ if (!hostname)
68
+ ret = [];
69
+ else
70
+ ret = [{ name: 'link_hostname', value: hostname }];
71
+ }
72
+ return ret.map(l => ({ ...l, value: stringify(l.value) }));
73
+ }
74
+ //# sourceMappingURL=indexing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexing.js","sourceRoot":"","sources":["../../src/util/indexing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Migration } from '@dosgato/templating';
2
+ import { Queryable } from 'mysql2-async';
3
+ export interface MigrationWithTemplate extends Migration {
4
+ templateKey: string;
5
+ }
6
+ export interface DBMigration {
7
+ /**
8
+ * number with format YYYYMMDDHHMMSS e.g. 20220101120000
9
+ *
10
+ * efficient storage and comparison but also easy to read & write
11
+ */
12
+ id: number;
13
+ description: string;
14
+ run: (db: Queryable) => Promise<void>;
15
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/util/migrations.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare function logMutation(queryTime: number, operationName: string, query: string, auth: any, variables: any): Promise<void>;
@@ -0,0 +1,9 @@
1
+ export async function logMutation(queryTime, operationName, query, auth, variables) {
2
+ if (query.includes('mutation')) {
3
+ // TODO: we have the login and userId is the internal ID for the user. How can we get that internal ID here,
4
+ // or does it need to be in the auth object?
5
+ // await db.insert('INSERT INTO mutationlog (userId, mutation, query, variables) VALUES (?,?,?,?)',
6
+ // [auth.login, query, operationName, JSON.stringify(variables)])
7
+ }
8
+ }
9
+ //# sourceMappingURL=mutationlogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutationlogger.js","sourceRoot":"","sources":["../../src/util/mutationlogger.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,SAAiB,EAAE,aAAqB,EAAE,KAAa,EAAE,IAAS,EAAE,SAAc;IACnH,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QAC9B,4GAA4G;QAC5G,4CAA4C;QAC5C,mGAAmG;QACnG,mEAAmE;KACpE;AACH,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { APITemplateType, APITemplate } from '@dosgato/templating';
2
+ import { TemplateArea } from '../internal.js';
3
+ interface APITemplateImpl extends Omit<APITemplate, 'areas'> {
4
+ }
5
+ declare class APITemplateImpl implements Omit<APITemplate, 'areas'> {
6
+ areas: Record<string, TemplateArea>;
7
+ constructor(template: APITemplate);
8
+ }
9
+ declare class TemplateRegistry {
10
+ protected byType: Record<APITemplateType, APITemplateImpl[]>;
11
+ protected byKey: Record<string, APITemplateImpl>;
12
+ register(template: APITemplate): void;
13
+ /**
14
+ * Use this function to extend a component after importing it. For instance,
15
+ * if another developer writes a component for a carded layout, and you write a new
16
+ * card that fits in that layout, you can add your custom card to its availableComponents
17
+ * while constructing your individual CMS server.
18
+ */
19
+ addAvailableComponent(templateKey: string, area: string, availableComponent: string): void;
20
+ get(templateKey: string): APITemplateImpl;
21
+ getType(type: APITemplateType): APITemplateImpl[];
22
+ }
23
+ export declare const templateRegistry: TemplateRegistry;
24
+ export declare function syncRegistryWithDB(): Promise<void>;
25
+ export {};
@@ -0,0 +1,66 @@
1
+ import { eachConcurrent, keyby } from 'txstate-utils';
2
+ import db from 'mysql2-async/db';
3
+ import { TemplateArea } from '../internal.js';
4
+ class APITemplateImpl {
5
+ constructor(template) {
6
+ Object.assign(this, template);
7
+ this.areas = {};
8
+ for (const key of Object.keys(template.areas)) {
9
+ this.areas[key] = new TemplateArea(key, template.areas[key]);
10
+ }
11
+ }
12
+ }
13
+ class TemplateRegistry {
14
+ constructor() {
15
+ this.byType = { page: [], component: [], data: [] };
16
+ this.byKey = {};
17
+ }
18
+ register(template) {
19
+ var _a, _b;
20
+ const impl = new APITemplateImpl(template);
21
+ (_a = this.byType)[_b = template.type] ?? (_a[_b] = []);
22
+ this.byType[template.type].push(impl);
23
+ this.byKey[template.templateKey] = impl;
24
+ }
25
+ /**
26
+ * Use this function to extend a component after importing it. For instance,
27
+ * if another developer writes a component for a carded layout, and you write a new
28
+ * card that fits in that layout, you can add your custom card to its availableComponents
29
+ * while constructing your individual CMS server.
30
+ */
31
+ addAvailableComponent(templateKey, area, availableComponent) {
32
+ this.get(templateKey).areas[area]?.addAvailableComponent(availableComponent);
33
+ }
34
+ get(templateKey) {
35
+ return this.byKey[templateKey];
36
+ }
37
+ getType(type) {
38
+ return this.byType[type];
39
+ }
40
+ }
41
+ export const templateRegistry = new TemplateRegistry();
42
+ export async function syncRegistryWithDB() {
43
+ const templatesInDB = keyby(await db.getall('SELECT * FROM templates'), 'key');
44
+ const registryTemplates = [...templateRegistry.getType('page'), ...templateRegistry.getType('component'), ...templateRegistry.getType('data')];
45
+ const found = new Set();
46
+ await eachConcurrent(registryTemplates, async (template) => {
47
+ if (!templatesInDB[template.templateKey]) {
48
+ console.log(`Adding template ${template.templateKey}`);
49
+ await db.insert('INSERT INTO templates (`key`, `name`, `type`, `deleted`) VALUES (?,?,?,?)', [template.templateKey, `${template.name}`, template.type, 0]);
50
+ }
51
+ else {
52
+ found.add(template.templateKey);
53
+ }
54
+ });
55
+ // TODO: This will set deleted = true for all templates in the database NOT added to the template registry.
56
+ // Does anything need to happen with the datarules or datafolders associated with deleted templates?
57
+ // Also need to consider the pagetrees_templates and sites_templates tables. What happens if an allowed template is deleted?
58
+ const notInRegistry = Object.keys(templatesInDB).filter((t) => !found.has(t));
59
+ if (notInRegistry.length > 0) {
60
+ const deleteTemplateBinds = [];
61
+ const numDeleted = await db.update(`UPDATE templates SET deleted = true WHERE \`key\` IN (${db.in(deleteTemplateBinds, notInRegistry)})`, deleteTemplateBinds);
62
+ if (numDeleted > 0)
63
+ console.info(`${numDeleted} templates marked deleted because they were not found in template registry.`);
64
+ }
65
+ }
66
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/util/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { AssetRule, DataRule, GlobalRule, PageRule, SiteRule, TemplateRule } from '../internal.js';
2
+ declare type Rule = AssetRule | DataRule | GlobalRule | PageRule | SiteRule | TemplateRule;
3
+ declare type RuleWithPath = AssetRule | PageRule;
4
+ export declare function comparePathsWithMode(ruleA: RuleWithPath, ruleB: RuleWithPath): boolean;
5
+ export declare function tooPowerfulHelper<R extends Rule>(rule: R, rules: R[], asOrMorePowerful: (ruleA: R, ruleB: R) => boolean): boolean;
6
+ export {};
@@ -0,0 +1,31 @@
1
+ import { RulePathMode } from '../internal.js';
2
+ const comparePathsMap = {
3
+ [RulePathMode.SELF]: {
4
+ [RulePathMode.SELF]: (ruleA, ruleB) => ruleA.path === ruleB.path,
5
+ [RulePathMode.SELFANDSUB]: (ruleA, ruleB) => ruleB.path.startsWith(ruleA.path),
6
+ [RulePathMode.SUB]: (ruleA, ruleB) => ruleA.path !== ruleB.path && ruleB.path.startsWith(ruleA.path)
7
+ },
8
+ [RulePathMode.SELFANDSUB]: {
9
+ [RulePathMode.SELF]: (ruleA, ruleB) => false,
10
+ [RulePathMode.SELFANDSUB]: (ruleA, ruleB) => ruleB.path.startsWith(ruleA.path),
11
+ [RulePathMode.SUB]: (ruleA, ruleB) => ruleA.path !== ruleB.path && ruleB.path.startsWith(ruleA.path)
12
+ },
13
+ [RulePathMode.SUB]: {
14
+ [RulePathMode.SELF]: (ruleA, ruleB) => false,
15
+ [RulePathMode.SELFANDSUB]: (ruleA, ruleB) => ruleB.path.startsWith(ruleA.path),
16
+ [RulePathMode.SUB]: (ruleA, ruleB) => ruleB.path.startsWith(ruleA.path)
17
+ }
18
+ };
19
+ export function comparePathsWithMode(ruleA, ruleB) {
20
+ return comparePathsMap[ruleB.mode][ruleA.mode](ruleA, ruleB);
21
+ }
22
+ export function tooPowerfulHelper(rule, rules, asOrMorePowerful) {
23
+ const asPowerfulRules = rules.filter(r => asOrMorePowerful(r, rule));
24
+ const grants = {};
25
+ for (const r of asPowerfulRules) {
26
+ for (const [key, value] of Object.entries(r.grants))
27
+ grants[key] || (grants[key] = value);
28
+ }
29
+ return Object.entries(rule.grants).some(([key, value]) => value && !grants[key]);
30
+ }
31
+ //# sourceMappingURL=rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/util/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,YAAY,EAA0B,MAAM,gBAAgB,CAAA;AAMhH,MAAM,eAAe,GAAG;IACtB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;QACnB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,KAAmB,EAAE,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;QAC5F,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,KAAmB,EAAE,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1G,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAmB,EAAE,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;KACjI;IACD,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;QACzB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,KAAmB,EAAE,KAAmB,EAAE,EAAE,CAAC,KAAK;QACxE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,KAAmB,EAAE,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1G,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAmB,EAAE,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;KACjI;IACD,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;QAClB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,KAAmB,EAAE,KAAmB,EAAE,EAAE,CAAC,KAAK;QACxE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,KAAmB,EAAE,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1G,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,KAAmB,EAAE,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;KACpG;CACF,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAE,KAAmB,EAAE,KAAmB;IAC5E,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAmB,IAAO,EAAE,KAAU,EAAE,gBAAiD;IACxH,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IACpE,MAAM,MAAM,GAA4B,EAAE,CAAA;IAC1C,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE;QAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,GAAG,MAAV,MAAM,CAAC,GAAG,IAAM,KAAK,EAAA;KAC3E;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAClF,CAAC"}
@@ -0,0 +1,3 @@
1
+ export interface DataEntryData {
2
+ templateKey: string;
3
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sharedtypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharedtypes.js","sourceRoot":"","sources":["../../src/util/sharedtypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare const stopwords: Record<string, boolean>;