@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,399 @@
1
+ import { OneToManyLoader, PrimaryKeyLoader } from 'dataloader-factory';
2
+ import { eachConcurrent, intersect, isNotNull, isNull, mapConcurrent, someAsync, stringify, unique } from 'txstate-utils';
3
+ import { VersionedService, templateRegistry, DosGatoService, PageResponse, PagesResponse, createPage, getPages, movePages, deletePages, renamePage, TemplateService, PagetreeService, SiteService, getPageIndexes, undeletePages, validatePage, DeletedFilter, copyPages } from '../internal.js';
4
+ import { BaseService, ValidatedResponse, MutationMessageType } from '@txstate-mws/graphql-server';
5
+ const pagesByInternalIdLoader = new PrimaryKeyLoader({
6
+ fetch: async (internalIds) => {
7
+ return await getPages({ internalIds, deleted: DeletedFilter.SHOW });
8
+ },
9
+ extractId: (item) => item.internalId
10
+ });
11
+ const pagesByDataIdLoader = new PrimaryKeyLoader({
12
+ fetch: async (ids) => {
13
+ return await getPages({ ids, deleted: DeletedFilter.SHOW });
14
+ },
15
+ idLoader: pagesByInternalIdLoader
16
+ });
17
+ pagesByInternalIdLoader.addIdLoader(pagesByDataIdLoader);
18
+ const pagesInPagetreeLoader = new OneToManyLoader({
19
+ fetch: async (pagetreeIds, filter) => {
20
+ return await getPages({ ...filter, pagetreeIds });
21
+ },
22
+ extractKey: (p) => p.pagetreeId,
23
+ keysFromFilter: (filter) => filter?.pagetreeIds ?? [],
24
+ idLoader: [pagesByInternalIdLoader, pagesByDataIdLoader]
25
+ });
26
+ const pagesByInternalIdPathLoader = new OneToManyLoader({
27
+ fetch: async (internalIdPaths, filter) => {
28
+ return await getPages({ ...filter, internalIdPaths });
29
+ },
30
+ extractKey: (p) => p.path,
31
+ idLoader: [pagesByInternalIdLoader, pagesByDataIdLoader]
32
+ });
33
+ const pagesByInternalIdPathRecursiveLoader = new OneToManyLoader({
34
+ fetch: async (internalIdPathsRecursive, filter) => {
35
+ const pages = await getPages({ ...filter, internalIdPathsRecursive });
36
+ return pages;
37
+ },
38
+ matchKey: (path, p) => p.path.startsWith(path),
39
+ idLoader: [pagesByInternalIdLoader, pagesByDataIdLoader]
40
+ });
41
+ export class PageServiceInternal extends BaseService {
42
+ async find(filter) {
43
+ filter = await this.processFilters(filter);
44
+ // TODO: move this to processFilters?
45
+ if (filter.linkIdsReferenced?.length) {
46
+ const searchRule = { indexName: 'link_page', in: filter.linkIdsReferenced.map(linkId => (stringify({ linkId }))) };
47
+ const [dataIdsLatest, dataIdsPublished] = await Promise.all([
48
+ this.svc(VersionedService).find([searchRule], 'latest'),
49
+ this.svc(VersionedService).find([searchRule], 'published')
50
+ ]);
51
+ const dataIds = unique([...dataIdsLatest, ...dataIdsPublished]);
52
+ if (filter.ids?.length)
53
+ filter.ids.push(...dataIds);
54
+ else
55
+ filter.ids = dataIds;
56
+ // TODO: look at this in VersionedService. Does tag need to be required in the find method? Can we find multiple tags at once?
57
+ }
58
+ const pages = await getPages(filter);
59
+ for (const page of pages) {
60
+ this.loaders.get(pagesByInternalIdLoader).prime(page.internalId, page);
61
+ this.loaders.get(pagesByDataIdLoader).prime(page.id, page);
62
+ }
63
+ return pages;
64
+ }
65
+ async findById(id) {
66
+ return await this.loaders.get(pagesByDataIdLoader).load(id);
67
+ }
68
+ async findByIds(ids) {
69
+ return await this.loaders.loadMany(pagesByDataIdLoader, ids);
70
+ }
71
+ async findByInternalId(id) {
72
+ return await this.loaders.get(pagesByInternalIdLoader).load(id);
73
+ }
74
+ async findByPagetreeId(id, filter) {
75
+ return await this.loaders.get(pagesInPagetreeLoader, filter).load(id);
76
+ }
77
+ async findByTemplate(key, filter) {
78
+ const searchRule = { indexName: 'template', equal: key };
79
+ const [dataIdsLatest, dataIdsPublished] = await Promise.all([
80
+ this.svc(VersionedService).find([searchRule], 'latest'),
81
+ this.svc(VersionedService).find([searchRule], 'published')
82
+ ]);
83
+ let dataIds = unique([...dataIdsLatest, ...dataIdsPublished]);
84
+ if (!dataIds.length)
85
+ return [];
86
+ if (filter?.ids?.length) {
87
+ dataIds = dataIds.filter(i => filter.ids?.includes(i));
88
+ }
89
+ return await this.findByIds(dataIds);
90
+ }
91
+ async getPageChildren(page, recursive, filter) {
92
+ const loader = recursive ? pagesByInternalIdPathRecursiveLoader : pagesByInternalIdPathLoader;
93
+ return await this.loaders.get(loader).load(`${page.path}${page.path === '/' ? '' : '/'}${page.internalId}`);
94
+ }
95
+ async getPageAncestors(page) {
96
+ return await this.loaders.loadMany(pagesByInternalIdLoader, page.pathSplit);
97
+ }
98
+ async getRootPage(page) {
99
+ const rootId = page.pathSplit[0];
100
+ if (!rootId)
101
+ return page;
102
+ return await this.findByInternalId(rootId);
103
+ }
104
+ async getPath(page) {
105
+ const ancestors = await this.getPageAncestors(page);
106
+ return `/${ancestors.map(a => a.name).join('/')}${ancestors.length ? '/' : ''}${page.name}`;
107
+ }
108
+ async processFilters(filter) {
109
+ if (filter.referencedByPageIds?.length) {
110
+ const verService = this.svc(VersionedService);
111
+ const pages = (await Promise.all(filter.referencedByPageIds.map(async (id) => await this.findById(id)))).filter(isNotNull);
112
+ const pagedata = (await Promise.all(pages.map(async (page) => await verService.get(page.dataId, { tag: filter.published ? 'published' : undefined })))).filter(isNotNull);
113
+ const links = pagedata.flatMap(d => templateRegistry.get(d.data.templateKey).getLinks(d.data)).filter(l => l.type === 'page');
114
+ filter.links = intersect({ skipEmpty: true, by: lnk => stringify({ ...lnk, type: 'page' }) }, links, filter.links);
115
+ }
116
+ // TODO: add missing filters: `links`
117
+ return filter;
118
+ }
119
+ }
120
+ export class PageService extends DosGatoService {
121
+ constructor() {
122
+ super(...arguments);
123
+ this.raw = this.svc(PageServiceInternal);
124
+ }
125
+ async find(filter) {
126
+ return await this.removeUnauthorized(await this.raw.find(filter));
127
+ }
128
+ async findById(id) {
129
+ return await this.removeUnauthorized(await this.raw.findById(id));
130
+ }
131
+ async findByIds(ids) {
132
+ return await this.removeUnauthorized(await this.raw.findByIds(ids));
133
+ }
134
+ async findByInternalId(internalId) {
135
+ return await this.removeUnauthorized(await this.raw.findByInternalId(internalId));
136
+ }
137
+ async findByPagetreeId(id, filter) {
138
+ return await this.removeUnauthorized(await this.raw.findByPagetreeId(id));
139
+ }
140
+ async findByTemplate(key, filter) {
141
+ return await this.removeUnauthorized(await this.raw.findByTemplate(key, filter));
142
+ }
143
+ async getPageChildren(page, recursive, filter) {
144
+ return await this.removeUnauthorized(await this.raw.getPageChildren(page, recursive, filter));
145
+ }
146
+ async getPageAncestors(page) {
147
+ return await this.removeUnauthorized(await this.raw.getPageAncestors(page));
148
+ }
149
+ async getApprovedTemplates(page, filter) {
150
+ const pageTree = await this.svc(PagetreeService).findById(page.pagetreeId);
151
+ const site = await this.svc(SiteService).findByPagetreeId(pageTree.id);
152
+ const [pagetreeTemplates, siteTemplates] = await Promise.all([
153
+ this.svc(TemplateService).findByPagetreeId(page.pagetreeId, filter),
154
+ this.svc(TemplateService).findBySiteId(site.id, filter)
155
+ ]);
156
+ let templatesAuthForUser = [];
157
+ const templateRules = await this.currentTemplateRules();
158
+ // If there is a template rule that applies to all templates, this user can use all templates anywhere
159
+ // TODO: Should this be filtered by template type too? It doesn't make sense to have page templates approved
160
+ // for use in a page, but this could return all three template types
161
+ if (templateRules.some(r => isNull(r.templateId) && r.grants.use)) {
162
+ templatesAuthForUser = await this.svc(TemplateService).find();
163
+ }
164
+ else {
165
+ const rules = templateRules.filter(r => isNotNull(r.templateId) && r.grants.use);
166
+ let ids = rules.map(r => r.templateId);
167
+ if (filter?.ids?.length) {
168
+ ids = ids.filter(i => filter.ids?.includes(i));
169
+ }
170
+ if (ids)
171
+ templatesAuthForUser = await this.svc(TemplateService).find({ ids });
172
+ }
173
+ return unique([...pagetreeTemplates, ...siteTemplates, ...templatesAuthForUser], 'id');
174
+ }
175
+ async getRootPage(page) {
176
+ return await this.removeUnauthorized(await this.raw.getRootPage(page));
177
+ }
178
+ async getPath(page) {
179
+ return await this.raw.getPath(page);
180
+ }
181
+ async mayView(page) {
182
+ if (await this.havePagePerm(page, 'view'))
183
+ return true;
184
+ // if we are able to view any child pages, we have to be able to view the ancestors so that we can draw the tree
185
+ const children = await this.raw.getPageChildren(page, true);
186
+ for (const c of children) {
187
+ if (await this.havePagePerm(c, 'view'))
188
+ return true;
189
+ }
190
+ return false;
191
+ }
192
+ async mayViewForEdit(page) {
193
+ return await this.havePagePerm(page, 'viewForEdit');
194
+ }
195
+ async mayViewLatest(page) {
196
+ return await this.havePagePerm(page, 'viewlatest');
197
+ }
198
+ async mayViewManagerUI() {
199
+ return (await this.currentPageRules()).some(r => r.grants.viewForEdit);
200
+ }
201
+ // authenticated user may create pages underneath given page
202
+ async mayCreate(page) {
203
+ return await this.havePagePerm(page, 'create');
204
+ }
205
+ async mayUpdate(page) {
206
+ return await this.havePagePerm(page, 'update');
207
+ }
208
+ async mayPublish(page) {
209
+ return await this.havePagePerm(page, 'publish');
210
+ }
211
+ async mayUnpublish(page) {
212
+ return await this.havePagePerm(page, 'unpublish');
213
+ }
214
+ async mayMove(page) {
215
+ return await this.havePagePerm(page, 'move');
216
+ }
217
+ async mayDelete(page) {
218
+ return await this.havePagePerm(page, 'delete');
219
+ }
220
+ async mayUndelete(page) {
221
+ return await this.havePagePerm(page, 'undelete');
222
+ }
223
+ /**
224
+ * MUTATIONS
225
+ */
226
+ async movePages(dataIds, targetId, above) {
227
+ const pages = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
228
+ const { parent, aboveTarget } = await this.resolveTarget(targetId, above);
229
+ if (!(await this.mayCreate(parent)) || (await someAsync(pages, async (page) => !(await this.mayMove(page))))) {
230
+ throw new Error('Current user is not permitted to perform this move.');
231
+ }
232
+ const newPages = await movePages(pages, parent, aboveTarget);
233
+ return new PagesResponse({ success: true, pages: newPages });
234
+ }
235
+ async copyPages(dataIds, targetId, above, includeChildren) {
236
+ const pages = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
237
+ const { parent, aboveTarget } = await this.resolveTarget(targetId, above);
238
+ if (!(await this.mayCreate(parent))) {
239
+ throw new Error('Current user is not permitted to copy pages to this location.');
240
+ }
241
+ const newPage = await copyPages(this.svc(VersionedService), this.login, pages, parent, aboveTarget, includeChildren);
242
+ return new PageResponse({ success: true, page: newPage });
243
+ }
244
+ async createPage(args) {
245
+ const { parent, aboveTarget } = await this.resolveTarget(args.targetId, args.above);
246
+ if (!(await this.mayCreate(parent)))
247
+ throw new Error('Current user is not permitted to create pages in the specified parent.');
248
+ const template = await this.svc(TemplateService).findByKey(args.templateKey);
249
+ if (!template)
250
+ throw new Error('Cannot find template.');
251
+ // TODO is it a correct assumption that the approved templates for the new page will match its parent's approved templates?
252
+ const approvedTemplates = await this.getApprovedTemplates(parent);
253
+ if (!approvedTemplates.find(t => t.id === template.id)) {
254
+ throw new Error(`Template ${template.name} is not approved for use in this site or pagetree.`);
255
+ }
256
+ const page = await createPage(this.svc(VersionedService), this.login, parent, aboveTarget, args.name, args.templateKey, args.schemaVersion);
257
+ return new PageResponse({ success: true, page });
258
+ }
259
+ async updatePage(dataId, args) {
260
+ const response = new PageResponse({});
261
+ const page = await this.raw.findById(dataId);
262
+ if (!page)
263
+ throw new Error('Cannot update a page that does not exist.');
264
+ if (!(await this.mayUpdate(page)))
265
+ throw new Error(`Current user is not permitted to update page ${String(page.name)}`);
266
+ try {
267
+ const messages = await validatePage(args.data);
268
+ if (Object.keys(messages).length) {
269
+ for (const key of Object.keys(messages)) {
270
+ for (const message of messages[key]) {
271
+ response.addMessage(message, key, MutationMessageType.error);
272
+ }
273
+ }
274
+ return response;
275
+ }
276
+ const indexes = getPageIndexes(args.data);
277
+ await this.svc(VersionedService).update(dataId, args.data, indexes, { user: this.login, comment: args.comment, version: args.dataVersion });
278
+ this.loaders.clear();
279
+ const updated = await this.raw.findById(dataId);
280
+ response.success = true;
281
+ response.page = updated;
282
+ return response;
283
+ }
284
+ catch (err) {
285
+ console.error(err);
286
+ throw new Error(`Could not update page ${String(page.name)}`);
287
+ }
288
+ }
289
+ async renamePage(dataId, name) {
290
+ const page = await this.raw.findById(dataId);
291
+ if (!page)
292
+ throw new Error('Cannot rename a page that does not exist.');
293
+ if (page.path === '/')
294
+ throw new Error('Cannot rename the root page'); // TODO: Does this check belong in mayMove()? Editors shouldn't move the root page either
295
+ if (!(await this.mayMove(page)))
296
+ throw new Error('Current user is not permitted to rename this page');
297
+ try {
298
+ await renamePage(page, name);
299
+ this.loaders.clear();
300
+ const updated = await this.raw.findById(dataId);
301
+ return new PageResponse({ success: true, page: updated });
302
+ }
303
+ catch (err) {
304
+ console.log(err);
305
+ throw new Error('An unknown error ocurred while trying to rename a page.');
306
+ }
307
+ }
308
+ async deletePages(dataIds) {
309
+ // TODO: Should they be able to delete the root page of the pagetree?
310
+ const pages = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
311
+ if (await someAsync(pages, async (page) => !(await this.mayDelete(page)))) {
312
+ throw new Error('Current user is not permitted to delete one or more pages');
313
+ }
314
+ const currentUser = await this.currentUser();
315
+ try {
316
+ await deletePages(pages, currentUser.internalId);
317
+ this.loaders.clear();
318
+ const updated = await this.raw.findByIds(dataIds);
319
+ return new PagesResponse({ success: true, pages: updated });
320
+ }
321
+ catch (err) {
322
+ console.error(err);
323
+ throw new Error('An unknown error ocurred while trying to delete a page.');
324
+ }
325
+ }
326
+ async undeletePages(dataIds, includeChildren) {
327
+ let pages = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
328
+ if (includeChildren) {
329
+ const children = (await mapConcurrent(pages, async (page) => await this.getPageChildren(page, true))).flat();
330
+ pages = [...pages, ...children];
331
+ }
332
+ if (await someAsync(pages, async (page) => !(await this.mayUndelete(page)))) {
333
+ throw new Error('Current user is not permitted to restore one or more pages');
334
+ }
335
+ try {
336
+ await undeletePages(pages);
337
+ this.loaders.clear();
338
+ const restored = await this.raw.findByIds(dataIds);
339
+ return new PagesResponse({ success: true, pages: restored });
340
+ }
341
+ catch (err) {
342
+ console.error(err);
343
+ throw new Error('Unable to restore page');
344
+ }
345
+ }
346
+ async publishPages(dataIds, includeChildren) {
347
+ let pages = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
348
+ if (includeChildren) {
349
+ const children = (await mapConcurrent(pages, async (page) => await this.getPageChildren(page, true))).flat();
350
+ pages = [...pages, ...children];
351
+ }
352
+ if (await someAsync(pages, async (page) => !(await this.mayPublish(page)))) {
353
+ throw new Error('Current user is not permitted to publish one or more pages');
354
+ }
355
+ pages = pages.filter(p => !p.deleted);
356
+ try {
357
+ await eachConcurrent(pages.map(p => p.dataId), async (dataId) => await this.svc(VersionedService).tag(dataId, 'published', undefined, this.login));
358
+ this.loaders.clear();
359
+ return new ValidatedResponse({ success: true });
360
+ }
361
+ catch (err) {
362
+ console.error(err);
363
+ throw new Error('Unable to publish one or more pages.');
364
+ }
365
+ }
366
+ async unpublishPages(dataIds) {
367
+ let pages = (await Promise.all(dataIds.map(async (id) => await this.raw.findById(id)))).filter(isNotNull);
368
+ const children = (await mapConcurrent(pages, async (page) => await this.getPageChildren(page, true))).flat();
369
+ pages = [...pages, ...children];
370
+ if (await someAsync(pages, async (page) => !(await this.mayUnpublish(page)))) {
371
+ throw new Error('Current user is not permitted to unpublish one or more pages');
372
+ }
373
+ try {
374
+ await eachConcurrent(dataIds, async (dataId) => await this.svc(VersionedService).removeTag(dataId, 'published'));
375
+ this.loaders.clear();
376
+ return new ValidatedResponse({ success: true });
377
+ }
378
+ catch (err) {
379
+ console.error(err);
380
+ throw new Error('Unable to unpublish one or more pages');
381
+ }
382
+ }
383
+ /**
384
+ * Mutation Helpers
385
+ */
386
+ async resolveTarget(targetId, above) {
387
+ const target = await this.raw.findById(targetId);
388
+ let parent = target;
389
+ let aboveTarget;
390
+ if (above) {
391
+ parent = target?.parentInternalId ? await this.raw.findByInternalId(target.parentInternalId) : undefined;
392
+ aboveTarget = target;
393
+ }
394
+ if (!parent)
395
+ throw new Error('Target selection not appropriate.');
396
+ return { parent, aboveTarget };
397
+ }
398
+ }
399
+ //# sourceMappingURL=page.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.service.js","sourceRoot":"","sources":["../../src/page/page.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ComponentData } from '@dosgato/templating';
2
+ export declare function collectTemplates(component: ComponentData): Set<string>;
3
+ export declare function collectComponents(component: ComponentData): ComponentData[];
@@ -0,0 +1,16 @@
1
+ // array of templateKey strings in use on the page
2
+ export function collectTemplates(component) {
3
+ return new Set(collectComponents(component).map(c => c.templateKey));
4
+ }
5
+ // recursive helper function to traverse a hydrated page and return a flat array
6
+ // of Component instances
7
+ export function collectComponents(component) {
8
+ const ret = [component];
9
+ for (const areaList of Object.values(component.areas)) {
10
+ for (const component of areaList) {
11
+ ret.push(...collectComponents(component));
12
+ }
13
+ }
14
+ return ret;
15
+ }
16
+ //# sourceMappingURL=page.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.util.js","sourceRoot":"","sources":["../../src/page/page.util.ts"],"names":[],"mappings":"AAEA,kDAAkD;AAClD,MAAM,UAAU,gBAAgB,CAAE,SAAwB;IACxD,OAAO,IAAI,GAAG,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;AACtE,CAAC;AAED,gFAAgF;AAChF,yBAAyB;AACzB,MAAM,UAAU,iBAAiB,CAAE,SAAwB;IACzD,MAAM,GAAG,GAAG,CAAC,SAAS,CAAoB,CAAA;IAC1C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QACrD,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE;YAChC,GAAG,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAA;SAC1C;KACF;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { PageData } from '@dosgato/templating';
2
+ export declare function validatePage(page: PageData): Promise<Record<string, string[]>>;
@@ -0,0 +1,21 @@
1
+ import { templateRegistry } from '../internal.js';
2
+ async function validateRecurse(data, path) {
3
+ const validator = templateRegistry.get(data.templateKey).validate;
4
+ const messages = await validator(data);
5
+ let ret = {};
6
+ for (const key of Object.keys(messages)) {
7
+ ret[[...path, key].join('.')] = messages[key];
8
+ }
9
+ for (const area of Object.keys(data.areas)) {
10
+ const areaList = data.areas[area];
11
+ for (let i = 0; i < areaList.length; i++) {
12
+ const component = areaList[i];
13
+ ret = { ...ret, ...await validateRecurse(component, [...path, 'areas', area, String(i)]) };
14
+ }
15
+ }
16
+ return ret;
17
+ }
18
+ export async function validatePage(page) {
19
+ return await validateRecurse(page, []);
20
+ }
21
+ //# sourceMappingURL=page.validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.validation.js","sourceRoot":"","sources":["../../src/page/page.validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,KAAK,UAAU,eAAe,CAAE,IAAmB,EAAE,IAAc;IACjE,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAA;IACjE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,GAAG,GAA6B,EAAE,CAAA;IACtC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACvC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;KAC9C;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC7B,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;SAC3F;KACF;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,IAAc;IAChD,OAAO,MAAM,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { PageRule, PageRuleFilter, CreatePageRuleInput, UpdatePageRuleInput } from '../internal.js';
2
+ export declare function getPageRules(filter: PageRuleFilter): Promise<PageRule[]>;
3
+ export declare function createPageRule(args: CreatePageRuleInput): Promise<number>;
4
+ export declare function updatePageRule(args: UpdatePageRuleInput): Promise<number>;
5
+ export declare function deletePageRule(ruleId: string): Promise<number>;