@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,35 @@
1
+ import { BaseService } from '@txstate-mws/graphql-server';
2
+ import { Asset, AssetFilter, AssetFolder, DosGatoService, CreateAssetInput, AssetResponse } from '../internal.js';
3
+ export declare class AssetServiceInternal extends BaseService {
4
+ find(filter: AssetFilter): Promise<Asset[]>;
5
+ findById(id: string): Promise<Asset | undefined>;
6
+ findByIds(ids: string[]): Promise<Asset[]>;
7
+ findByFolder(folder: AssetFolder, filter?: AssetFilter): Promise<Asset[]>;
8
+ findByFolders(folders: AssetFolder[], filter?: AssetFilter): Promise<Asset[]>;
9
+ getAncestors(asset: Asset): Promise<AssetFolder[]>;
10
+ getSite(asset: Asset): Promise<import("../internal.js").Site | undefined>;
11
+ getPath(asset: Asset): Promise<string>;
12
+ processAssetFilters(filter?: AssetFilter): Promise<AssetFilter | undefined>;
13
+ }
14
+ export declare class AssetService extends DosGatoService<Asset> {
15
+ raw: AssetServiceInternal;
16
+ find(filter: AssetFilter): Promise<Asset[]>;
17
+ findByFolder(folder: AssetFolder): Promise<Asset[]>;
18
+ findByFolders(folders: AssetFolder[]): Promise<Asset[]>;
19
+ getAncestors(asset: Asset): Promise<AssetFolder[]>;
20
+ getSite(asset: Asset): Promise<import("../internal.js").Site | undefined>;
21
+ getPath(asset: Asset): Promise<string>;
22
+ getResizes(asset: Asset): Promise<import("./asset.model.js").AssetResize[]>;
23
+ getLatestDownload(asset: Asset): Promise<import("luxon").DateTime>;
24
+ create(args: CreateAssetInput): Promise<AssetResponse>;
25
+ move(dataId: string, folderId: string): Promise<AssetResponse>;
26
+ delete(dataId: string): Promise<AssetResponse>;
27
+ undelete(dataId: string): Promise<AssetResponse>;
28
+ mayViewManagerUI(): Promise<boolean>;
29
+ mayView(asset: Asset): Promise<boolean>;
30
+ mayViewForEdit(asset: Asset): Promise<boolean>;
31
+ mayUpdate(asset: Asset): Promise<boolean>;
32
+ mayMove(asset: Asset): Promise<boolean>;
33
+ mayDelete(asset: Asset): Promise<boolean>;
34
+ mayUndelete(asset: Asset): Promise<boolean>;
35
+ }
@@ -0,0 +1,225 @@
1
+ import { BaseService } from '@txstate-mws/graphql-server';
2
+ import { ManyJoinedLoader, OneToManyLoader, PrimaryKeyLoader } from 'dataloader-factory';
3
+ import { intersect, isNotNull, keyby } from 'txstate-utils';
4
+ import { getAssets, AssetFolderService, appendPath, getResizes, SiteService, DosGatoService, getLatestDownload, AssetFolderServiceInternal, createAsset, VersionedService, AssetResponse, FileSystemHandler, deleteAsset, undeleteAsset, moveAsset, popPath, basename } from '../internal.js';
5
+ const assetsByIdLoader = new PrimaryKeyLoader({
6
+ fetch: async (dataIds) => await getAssets({ ids: dataIds })
7
+ });
8
+ const assetsByFolderInternalIdLoader = new OneToManyLoader({
9
+ fetch: async (folderInternalIds, filter) => await getAssets({ ...filter, folderInternalIds }),
10
+ keysFromFilter: (filter) => filter?.folderInternalIds ?? [],
11
+ extractKey: asset => asset.folderInternalId,
12
+ idLoader: assetsByIdLoader
13
+ });
14
+ const resizesByAssetIdLoader = new ManyJoinedLoader({
15
+ fetch: async (assetIds) => await getResizes(assetIds)
16
+ });
17
+ export class AssetServiceInternal extends BaseService {
18
+ async find(filter) {
19
+ const assets = await getAssets(await this.processAssetFilters(filter));
20
+ for (const asset of assets)
21
+ this.loaders.get(assetsByIdLoader).prime(asset.id, asset);
22
+ return assets;
23
+ }
24
+ async findById(id) {
25
+ return await this.loaders.get(assetsByIdLoader).load(id);
26
+ }
27
+ async findByIds(ids) {
28
+ return await this.loaders.loadMany(assetsByIdLoader, ids);
29
+ }
30
+ async findByFolder(folder, filter) {
31
+ filter = await this.processAssetFilters(filter);
32
+ return await this.loaders.get(assetsByFolderInternalIdLoader, filter).load(folder.internalId);
33
+ }
34
+ async findByFolders(folders, filter) {
35
+ filter = await this.processAssetFilters(filter);
36
+ return await this.loaders.loadMany(assetsByFolderInternalIdLoader, folders.map(f => f.internalId), filter);
37
+ }
38
+ async getAncestors(asset) {
39
+ const folder = await this.svc(AssetFolderServiceInternal).findByInternalId(asset.folderInternalId);
40
+ if (!folder)
41
+ return [];
42
+ return [...await this.svc(AssetFolderServiceInternal).getAncestors(folder), folder];
43
+ }
44
+ async getSite(asset) {
45
+ const ancestors = await this.getAncestors(asset);
46
+ return await this.svc(SiteService).findByAssetRootId(ancestors[0].internalId);
47
+ }
48
+ async getPath(asset) {
49
+ const folder = await this.svc(AssetFolderServiceInternal).findByInternalId(asset.folderInternalId);
50
+ if (!folder)
51
+ return '/';
52
+ return appendPath(await this.svc(AssetFolderServiceInternal).getPath(folder), asset.name);
53
+ }
54
+ async processAssetFilters(filter) {
55
+ if (filter?.paths?.length) {
56
+ const folderidpaths = await this.svc(AssetFolderServiceInternal).convertPathsToIDPaths(filter.paths.map(popPath));
57
+ const folderids = folderidpaths.map(p => +p.split(/\//).slice(-1)[0]);
58
+ filter.folderInternalIds = intersect({ skipEmpty: true }, filter.folderInternalIds, folderids);
59
+ filter.names = filter.paths.map(basename);
60
+ }
61
+ if (filter?.beneath?.length) {
62
+ const folderidpaths = await this.svc(AssetFolderServiceInternal).convertPathsToIDPaths(filter.beneath);
63
+ const folders = await this.svc(AssetFolderServiceInternal).getChildFoldersByIDPaths(folderidpaths);
64
+ const ids = [...folders.map(f => f.internalId), ...folderidpaths.map(basename).map(Number)];
65
+ filter.folderInternalIds = intersect({ skipEmpty: true }, filter.folderInternalIds, ids);
66
+ }
67
+ if (filter?.parentPaths?.length) {
68
+ const folderidpaths = await this.svc(AssetFolderServiceInternal).convertPathsToIDPaths(filter.parentPaths);
69
+ filter.folderInternalIds = intersect({ skipEmpty: true }, filter.folderInternalIds, folderidpaths.map(basename).map(Number));
70
+ }
71
+ if (filter?.links?.length) {
72
+ const assets = await this.findByIds(filter.links.map(l => l.id));
73
+ const assetsById = keyby(assets, 'id');
74
+ const notFoundById = filter.links.filter(l => !assetsById[l.id]);
75
+ if (notFoundById.length) {
76
+ const [pathAssets, checksumAssets] = await Promise.all([
77
+ this.find({ paths: notFoundById.map(l => l.path) }),
78
+ this.find({ checksums: notFoundById.map(l => l.checksum) })
79
+ ]);
80
+ const assetsByPath = {};
81
+ await Promise.all(pathAssets.map(async (a) => {
82
+ assetsByPath[await this.getPath(a)] = a;
83
+ }));
84
+ const assetsByChecksum = keyby(checksumAssets, 'checksum');
85
+ assets.push(...notFoundById.map(link => assetsByPath[link.path] ?? assetsByChecksum[link.checksum]).filter(isNotNull));
86
+ }
87
+ if (!assets.length)
88
+ filter.internalIds = [-1];
89
+ else
90
+ filter.internalIds = intersect({ skipEmpty: true }, filter.internalIds, assets.map(a => a.internalId));
91
+ }
92
+ return filter;
93
+ }
94
+ }
95
+ export class AssetService extends DosGatoService {
96
+ constructor() {
97
+ super(...arguments);
98
+ this.raw = this.svc(AssetServiceInternal);
99
+ }
100
+ async find(filter) {
101
+ return await this.removeUnauthorized(await this.raw.find(filter));
102
+ }
103
+ async findByFolder(folder) {
104
+ return await this.removeUnauthorized(await this.raw.findByFolder(folder));
105
+ }
106
+ async findByFolders(folders) {
107
+ return await this.removeUnauthorized(await this.raw.findByFolders(folders));
108
+ }
109
+ async getAncestors(asset) {
110
+ return await this.svc(AssetFolderService).removeUnauthorized(await this.raw.getAncestors(asset));
111
+ }
112
+ async getSite(asset) {
113
+ return await this.svc(SiteService).removeUnauthorized(await this.raw.getSite(asset));
114
+ }
115
+ async getPath(asset) {
116
+ return await this.raw.getPath(asset);
117
+ }
118
+ async getResizes(asset) {
119
+ return await this.loaders.get(resizesByAssetIdLoader).load(asset.id);
120
+ }
121
+ async getLatestDownload(asset) {
122
+ const resizes = await this.getResizes(asset);
123
+ return await getLatestDownload(asset, resizes.map(r => r.binaryId));
124
+ }
125
+ async create(args) {
126
+ const folder = await this.svc(AssetFolderService).findById(args.folderId);
127
+ if (!folder)
128
+ throw new Error('Specified folder does not exist');
129
+ if (!(await this.haveAssetFolderPerm(folder, 'create')))
130
+ throw new Error(`Current user is not permitted to add assets to folder ${String(folder.name)}.`);
131
+ try {
132
+ await FileSystemHandler.moveToPermLocation(args.checksum);
133
+ const versionedService = this.svc(VersionedService);
134
+ const asset = await createAsset(versionedService, this.auth.sub, args);
135
+ this.loaders.clear();
136
+ return new AssetResponse({ asset, success: true });
137
+ }
138
+ catch (err) {
139
+ console.error(err);
140
+ // TODO: Need to distinguish between errors that happen when moving the file and errors releated to the database
141
+ throw new Error('Could not create asset');
142
+ }
143
+ }
144
+ async move(dataId, folderId) {
145
+ const [asset, folder] = await Promise.all([
146
+ this.loaders.get(assetsByIdLoader).load(dataId),
147
+ this.svc(AssetFolderService).findById(folderId)
148
+ ]);
149
+ if (!asset)
150
+ throw new Error('Asset to be moved does not exist');
151
+ if (!folder)
152
+ throw new Error('Target asset folder does not exist');
153
+ if (!(await this.haveAssetPerm(asset, 'move')))
154
+ throw new Error(`Current user is not permitted to move asset ${String(asset.name)}.${asset.extension}.`);
155
+ if (!(await this.haveAssetFolderPerm(folder, 'create')))
156
+ throw new Error(`Current user is not permitted to move files to folder ${String(folder.name)}`);
157
+ try {
158
+ await moveAsset(asset.internalId, folder);
159
+ this.loaders.clear();
160
+ const movedAsset = await this.loaders.get(assetsByIdLoader).load(dataId);
161
+ return new AssetResponse({ asset: movedAsset, success: true });
162
+ }
163
+ catch (err) {
164
+ console.error(err);
165
+ throw new Error('Could not move asset');
166
+ }
167
+ }
168
+ async delete(dataId) {
169
+ const asset = await this.loaders.get(assetsByIdLoader).load(dataId);
170
+ if (!asset)
171
+ throw new Error('Asset to be deleted does not exist');
172
+ if (!(await this.haveAssetPerm(asset, 'delete')))
173
+ throw new Error(`Current user is not permitted to delete asset ${String(asset.name)}.${asset.extension}.`);
174
+ const currentUser = await this.currentUser();
175
+ try {
176
+ await deleteAsset(asset.internalId, currentUser.internalId);
177
+ this.loaders.clear();
178
+ const deletedAsset = await this.loaders.get(assetsByIdLoader).load(dataId);
179
+ return new AssetResponse({ asset: deletedAsset, success: true });
180
+ }
181
+ catch (err) {
182
+ console.error(err);
183
+ throw new Error('Could not delete asset');
184
+ }
185
+ }
186
+ async undelete(dataId) {
187
+ const asset = await this.loaders.get(assetsByIdLoader).load(dataId);
188
+ if (!asset)
189
+ throw new Error('Asset to be restored does not exist');
190
+ if (!(await this.haveAssetPerm(asset, 'undelete')))
191
+ throw new Error(`Current user is not permitted to restore asset ${String(asset.name)}.${asset.extension}.`);
192
+ try {
193
+ await undeleteAsset(asset.internalId);
194
+ this.loaders.clear();
195
+ const restoredAsset = await this.loaders.get(assetsByIdLoader).load(dataId);
196
+ return new AssetResponse({ asset: restoredAsset, success: true });
197
+ }
198
+ catch (err) {
199
+ console.error(err);
200
+ throw new Error('Could not restore asset folder');
201
+ }
202
+ }
203
+ async mayViewManagerUI() {
204
+ return (await this.currentAssetRules()).some(r => r.grants.viewForEdit);
205
+ }
206
+ async mayView(asset) {
207
+ return await this.haveAssetPerm(asset, 'view');
208
+ }
209
+ async mayViewForEdit(asset) {
210
+ return await this.haveAssetPerm(asset, 'viewForEdit');
211
+ }
212
+ async mayUpdate(asset) {
213
+ return await this.haveAssetPerm(asset, 'update');
214
+ }
215
+ async mayMove(asset) {
216
+ return await this.haveAssetPerm(asset, 'move');
217
+ }
218
+ async mayDelete(asset) {
219
+ return await this.haveAssetPerm(asset, 'delete');
220
+ }
221
+ async mayUndelete(asset) {
222
+ return await this.haveAssetPerm(asset, 'undelete');
223
+ }
224
+ }
225
+ //# sourceMappingURL=asset.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset.service.js","sourceRoot":"","sources":["../../src/asset/asset.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { AssetFolder, AssetFolderFilter, CreateAssetFolderInput } from '../internal.js';
2
+ export declare function getAssetFolders(filter?: AssetFolderFilter): Promise<AssetFolder[]>;
3
+ export declare function createAssetFolder(args: CreateAssetFolderInput): Promise<AssetFolder>;
4
+ export declare function renameAssetFolder(folderId: string, name: string): Promise<number>;
5
+ export declare function moveAssetFolder(id: number, targetFolder: AssetFolder): Promise<number>;
6
+ export declare function deleteAssetFolder(id: number, userInternalId: number): Promise<number>;
7
+ export declare function undeleteAssetFolder(id: number): Promise<number>;
@@ -0,0 +1,85 @@
1
+ import db from 'mysql2-async/db';
2
+ import { nanoid } from 'nanoid';
3
+ import { AssetFolder } from '../internal.js';
4
+ async function processFilters(filter) {
5
+ const where = [];
6
+ const binds = [];
7
+ if (filter?.internalIds?.length) {
8
+ where.push(`assetfolders.id IN (${db.in(binds, filter.internalIds)})`);
9
+ }
10
+ // internalIdPaths for getting direct descendants of an asset folder
11
+ if (filter?.internalIdPaths?.length) {
12
+ where.push(`assetfolders.path IN (${db.in(binds, filter.internalIdPaths)})`);
13
+ }
14
+ // internalIdPathsRecursive for getting all descendants of an asset folder
15
+ if (filter?.internalIdPathsRecursive?.length) {
16
+ const ors = filter.internalIdPathsRecursive.flatMap(path => ['assetfolders.path LIKE ?', 'assetfolders.path = ?']);
17
+ where.push(ors.join(' OR '));
18
+ binds.push(...filter.internalIdPathsRecursive.flatMap(p => [`${p}/%`, p]));
19
+ }
20
+ if (filter?.ids?.length) {
21
+ where.push(`assetfolders.guid IN (${db.in(binds, filter.ids)})`);
22
+ }
23
+ if (filter?.siteIds?.length) {
24
+ where.push(`assetfolders.siteId IN (${db.in(binds, filter.siteIds)})`);
25
+ }
26
+ if (filter?.childOfFolderInternalIds?.length) {
27
+ const ors = filter.childOfFolderInternalIds.map(id => 'assetfolders.path LIKE ?');
28
+ where.push(ors.join(' OR '));
29
+ binds.push(...filter.childOfFolderInternalIds.map(id => `%/${id}`));
30
+ }
31
+ if (filter?.names?.length) {
32
+ where.push(`assetfolders.name IN (${db.in(binds, filter.names)})`);
33
+ }
34
+ if (filter?.root) {
35
+ where.push('assetfolders.path = \'/\'');
36
+ }
37
+ if (filter?.deleted != null) {
38
+ if (filter.deleted) {
39
+ where.push('assetfolders.deletedAt IS NOT NULL');
40
+ }
41
+ else {
42
+ where.push('assetfolders.deletedAt IS NULL');
43
+ }
44
+ }
45
+ return { where, binds };
46
+ }
47
+ export async function getAssetFolders(filter) {
48
+ const { where, binds } = await processFilters(filter);
49
+ console.log(where, binds);
50
+ return (await db.getall(`
51
+ SELECT *
52
+ FROM assetfolders
53
+ ${where.length ? `WHERE (${where.join(') AND (')})` : ''}
54
+ `, binds)).map(r => new AssetFolder(r));
55
+ }
56
+ export async function createAssetFolder(args) {
57
+ return await db.transaction(async (db) => {
58
+ const parent = new AssetFolder(await db.getrow('SELECT * from assetfolders WHERE guid = ?', [args.parentId]));
59
+ const newInternalId = await db.insert(`
60
+ INSERT INTO assetfolders (siteId, path, name, guid)
61
+ VALUES (?, ?, ?, ?)`, [args.siteId, `/${[...parent.pathSplit, parent.internalId].join('/')}`, args.name, nanoid(10)]);
62
+ return new AssetFolder(await db.getrow('SELECT * FROM assetfolders WHERE id=?', [newInternalId]));
63
+ });
64
+ }
65
+ export async function renameAssetFolder(folderId, name) {
66
+ return await db.transaction(async (db) => {
67
+ const id = await db.getval('SELECT id FROM assetfolders WHERE guid = ?', [folderId]);
68
+ return await db.update('UPDATE assetfolders SET name = ? WHERE id = ?', [name, id]);
69
+ });
70
+ }
71
+ export async function moveAssetFolder(id, targetFolder) {
72
+ return await db.transaction(async (db) => {
73
+ const folder = new AssetFolder(await db.getrow('SELECT * FROM assetfolders WHERE id = ?', [targetFolder.internalId]));
74
+ if (folder.path !== targetFolder.path)
75
+ throw new Error('Target folder has moved since the mutation began.');
76
+ return await db.update('UPDATE assetfolders SET path = ? WHERE id = ?', [`/${[...targetFolder.pathSplit, targetFolder.internalId].join('/')}`, id]);
77
+ });
78
+ }
79
+ export async function deleteAssetFolder(id, userInternalId) {
80
+ return await db.update('UPDATE assetfolders SET deletedBy = ?, deletedAt = NOW() WHERE id = ?', [userInternalId, id]);
81
+ }
82
+ export async function undeleteAssetFolder(id) {
83
+ return await db.update('UPDATE assetfolders SET deletedBy = null, deletedAt = null WHERE id = ?', [id]);
84
+ }
85
+ //# sourceMappingURL=assetfolder.database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetfolder.database.js","sourceRoot":"","sources":["../../src/assetfolder/assetfolder.database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { DateTime } from 'luxon';
2
+ import { ValidatedResponse, ValidatedResponseArgs } from '@txstate-mws/graphql-server';
3
+ export declare class AssetFolder {
4
+ internalId: number;
5
+ id: string;
6
+ name: string;
7
+ deleted: boolean;
8
+ deletedAt?: DateTime;
9
+ siteId?: string;
10
+ deletedBy?: number;
11
+ path: string;
12
+ pathSplit: number[];
13
+ parentInternalId?: number;
14
+ constructor(row: any);
15
+ }
16
+ export declare class AssetFolderFilter {
17
+ internalIds?: number[];
18
+ internalIdPaths?: string[];
19
+ internalIdPathsRecursive?: string[];
20
+ ids?: string[];
21
+ siteIds?: string[];
22
+ links?: AssetFolderLinkInput[];
23
+ parentOfFolderIds?: string[];
24
+ parentOfFolderInternalIds?: number[];
25
+ childOfFolderIds?: string[];
26
+ childOfFolderInternalIds?: number[];
27
+ names?: string[];
28
+ paths?: string[];
29
+ beneath?: string[];
30
+ parentPaths?: string[];
31
+ root?: boolean;
32
+ deleted?: boolean;
33
+ }
34
+ export declare class CreateAssetFolderInput {
35
+ name: string;
36
+ siteId: string;
37
+ parentId: string;
38
+ }
39
+ export declare class AssetFolderResponse extends ValidatedResponse {
40
+ assetFolder?: AssetFolder;
41
+ constructor(config: ValidatedResponseArgs & {
42
+ assetFolder?: AssetFolder;
43
+ });
44
+ }
45
+ export declare class AssetFolderPermissions {
46
+ }
47
+ export declare enum AssetFolderPermission {
48
+ CREATE = "create",
49
+ UPDATE = "update",
50
+ DELETE = "delete",
51
+ UNDELETE = "undelete"
52
+ }
53
+ export declare class AssetFolderLinkInput {
54
+ id: string;
55
+ path: string;
56
+ }
@@ -0,0 +1,160 @@
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 { DateTime } from 'luxon';
11
+ import { isNotBlank, isNotNull } from 'txstate-utils';
12
+ import { Field, ID, InputType, ObjectType, registerEnumType } from 'type-graphql';
13
+ import { ValidatedResponse } from '@txstate-mws/graphql-server';
14
+ import { UrlSafeString } from '../internal.js';
15
+ let AssetFolder = class AssetFolder {
16
+ constructor(row) {
17
+ this.internalId = row.id;
18
+ this.id = row.guid;
19
+ this.name = row.name;
20
+ this.siteId = String(row.siteId);
21
+ this.path = row.path;
22
+ this.pathSplit = row.path.split(/\//).filter(isNotBlank).map(Number);
23
+ this.parentInternalId = this.pathSplit[this.pathSplit.length - 1];
24
+ this.deleted = isNotNull(row.deletedAt);
25
+ this.deletedAt = DateTime.fromJSDate(row.deletedAt);
26
+ this.deletedBy = row.deletedBy;
27
+ }
28
+ };
29
+ __decorate([
30
+ Field(type => ID),
31
+ __metadata("design:type", String)
32
+ ], AssetFolder.prototype, "id", void 0);
33
+ __decorate([
34
+ Field(type => UrlSafeString, { description: 'Name for the folder. Will be used when constructing the path.' }),
35
+ __metadata("design:type", String)
36
+ ], AssetFolder.prototype, "name", void 0);
37
+ __decorate([
38
+ Field({ description: 'Folder has been soft-deleted but is still recoverable.' }),
39
+ __metadata("design:type", Boolean)
40
+ ], AssetFolder.prototype, "deleted", void 0);
41
+ __decorate([
42
+ Field({ nullable: true, description: 'Date this folder was soft-deleted, null when not applicable.' }),
43
+ __metadata("design:type", DateTime)
44
+ ], AssetFolder.prototype, "deletedAt", void 0);
45
+ AssetFolder = __decorate([
46
+ ObjectType({ description: 'An asset folder is a folder that contains assets and other asset folders. Each site has exactly one root asset folder that is nameless and cannot be deleted.' }),
47
+ __metadata("design:paramtypes", [Object])
48
+ ], AssetFolder);
49
+ export { AssetFolder };
50
+ let AssetFolderFilter = class AssetFolderFilter {
51
+ };
52
+ __decorate([
53
+ Field(type => [ID], { nullable: true }),
54
+ __metadata("design:type", Array)
55
+ ], AssetFolderFilter.prototype, "ids", void 0);
56
+ __decorate([
57
+ Field(type => [ID], { nullable: true }),
58
+ __metadata("design:type", Array)
59
+ ], AssetFolderFilter.prototype, "siteIds", void 0);
60
+ __decorate([
61
+ Field(type => [AssetFolderLinkInput], { nullable: true, description: 'Resolve asset folder links preferring id and falling back to path.' }),
62
+ __metadata("design:type", Array)
63
+ ], AssetFolderFilter.prototype, "links", void 0);
64
+ __decorate([
65
+ Field(type => [ID], { nullable: true, description: 'Return folders that are parents of the given folder ids.' }),
66
+ __metadata("design:type", Array)
67
+ ], AssetFolderFilter.prototype, "parentOfFolderIds", void 0);
68
+ __decorate([
69
+ Field(type => [ID], { nullable: true, description: 'Return folders that are children of the given folder ids.' }),
70
+ __metadata("design:type", Array)
71
+ ], AssetFolderFilter.prototype, "childOfFolderIds", void 0);
72
+ __decorate([
73
+ Field(type => [String], { nullable: true, description: 'Return folders with the given paths.' }),
74
+ __metadata("design:type", Array)
75
+ ], AssetFolderFilter.prototype, "paths", void 0);
76
+ __decorate([
77
+ Field(type => [String], { nullable: true, description: 'Return folders that descend from any of the given paths.' }),
78
+ __metadata("design:type", Array)
79
+ ], AssetFolderFilter.prototype, "beneath", void 0);
80
+ __decorate([
81
+ Field(type => [String], { nullable: true, description: 'Return folders that are direct children of any of the given paths.' }),
82
+ __metadata("design:type", Array)
83
+ ], AssetFolderFilter.prototype, "parentPaths", void 0);
84
+ __decorate([
85
+ Field(type => Boolean, { nullable: true, description: 'Return folders that are the root folder of a site.' }),
86
+ __metadata("design:type", Boolean)
87
+ ], AssetFolderFilter.prototype, "root", void 0);
88
+ __decorate([
89
+ Field(type => Boolean, { nullable: true, description: 'true -> return only deleted folders, false -> return only nondeleted folders, undefined -> return all folders' }),
90
+ __metadata("design:type", Boolean)
91
+ ], AssetFolderFilter.prototype, "deleted", void 0);
92
+ AssetFolderFilter = __decorate([
93
+ InputType()
94
+ ], AssetFolderFilter);
95
+ export { AssetFolderFilter };
96
+ let CreateAssetFolderInput = class CreateAssetFolderInput {
97
+ };
98
+ __decorate([
99
+ Field(),
100
+ __metadata("design:type", String)
101
+ ], CreateAssetFolderInput.prototype, "name", void 0);
102
+ __decorate([
103
+ Field(type => ID),
104
+ __metadata("design:type", String)
105
+ ], CreateAssetFolderInput.prototype, "siteId", void 0);
106
+ __decorate([
107
+ Field(type => ID, { description: 'The existing asset folder that will be the new asset folder\'s parent' }),
108
+ __metadata("design:type", String)
109
+ ], CreateAssetFolderInput.prototype, "parentId", void 0);
110
+ CreateAssetFolderInput = __decorate([
111
+ InputType()
112
+ ], CreateAssetFolderInput);
113
+ export { CreateAssetFolderInput };
114
+ let AssetFolderResponse = class AssetFolderResponse extends ValidatedResponse {
115
+ constructor(config) {
116
+ super(config);
117
+ this.assetFolder = config.assetFolder;
118
+ }
119
+ };
120
+ __decorate([
121
+ Field({ nullable: true }),
122
+ __metadata("design:type", AssetFolder)
123
+ ], AssetFolderResponse.prototype, "assetFolder", void 0);
124
+ AssetFolderResponse = __decorate([
125
+ ObjectType(),
126
+ __metadata("design:paramtypes", [Object])
127
+ ], AssetFolderResponse);
128
+ export { AssetFolderResponse };
129
+ let AssetFolderPermissions = class AssetFolderPermissions {
130
+ };
131
+ AssetFolderPermissions = __decorate([
132
+ ObjectType()
133
+ ], AssetFolderPermissions);
134
+ export { AssetFolderPermissions };
135
+ export var AssetFolderPermission;
136
+ (function (AssetFolderPermission) {
137
+ AssetFolderPermission["CREATE"] = "create";
138
+ AssetFolderPermission["UPDATE"] = "update";
139
+ AssetFolderPermission["DELETE"] = "delete";
140
+ AssetFolderPermission["UNDELETE"] = "undelete";
141
+ })(AssetFolderPermission || (AssetFolderPermission = {}));
142
+ registerEnumType(AssetFolderPermission, {
143
+ name: 'AssetFolderPermission',
144
+ description: 'All the action types that can be individually permissioned on a data entry.'
145
+ });
146
+ let AssetFolderLinkInput = class AssetFolderLinkInput {
147
+ };
148
+ __decorate([
149
+ Field(type => ID),
150
+ __metadata("design:type", String)
151
+ ], AssetFolderLinkInput.prototype, "id", void 0);
152
+ __decorate([
153
+ Field(),
154
+ __metadata("design:type", String)
155
+ ], AssetFolderLinkInput.prototype, "path", void 0);
156
+ AssetFolderLinkInput = __decorate([
157
+ InputType()
158
+ ], AssetFolderLinkInput);
159
+ export { AssetFolderLinkInput };
160
+ //# sourceMappingURL=assetfolder.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetfolder.model.js","sourceRoot":"","sources":["../../src/assetfolder/assetfolder.model.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACjF,OAAO,EAAE,iBAAiB,EAAyB,MAAM,6BAA6B,CAAA;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAG9C,IAAa,WAAW,GAAxB,MAAa,WAAW;IAqBtB,YAAa,GAAQ;QACnB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,CAAA;QACxB,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;QAClB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QACpB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACpE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACjE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACnD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAA;IAChC,CAAC;CACF,CAAA;AA7BC;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;;uCACR;AAGV;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,+DAA+D,EAAE,CAAC;;yCACnG;AAGZ;IADC,KAAK,CAAC,EAAE,WAAW,EAAE,wDAAwD,EAAE,CAAC;;4CACjE;AAGhB;IADC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,8DAA8D,EAAE,CAAC;8BAC3F,QAAQ;8CAAA;AAbT,WAAW;IADvB,UAAU,CAAC,EAAE,WAAW,EAAE,+JAA+J,EAAE,CAAC;;GAChL,WAAW,CAiCvB;SAjCY,WAAW;AAoCxB,IAAa,iBAAiB,GAA9B,MAAa,iBAAiB;CAuC7B,CAAA;AAjCC;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CAC1B;AAGd;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kDACtB;AAGlB;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oEAAoE,EAAE,CAAC;;gDAC/G;AAG9B;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,0DAA0D,EAAE,CAAC;;4DACrF;AAK5B;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,2DAA2D,EAAE,CAAC;;2DACvF;AAM3B;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,sCAAsC,EAAE,CAAC;;gDACjF;AAGhB;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,0DAA0D,EAAE,CAAC;;kDACnG;AAGlB;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oEAAoE,EAAE,CAAC;;sDACzG;AAGtB;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,oDAAoD,EAAE,CAAC;;+CAChG;AAGd;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,+GAA+G,EAAE,CAAC;;kDACxJ;AAtCN,iBAAiB;IAD7B,SAAS,EAAE;GACC,iBAAiB,CAuC7B;SAvCY,iBAAiB;AA0C9B,IAAa,sBAAsB,GAAnC,MAAa,sBAAsB;CASlC,CAAA;AAPC;IADC,KAAK,EAAE;;oDACK;AAGb;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;;sDACH;AAGf;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,uEAAuE,EAAE,CAAC;;wDAC3F;AARN,sBAAsB;IADlC,SAAS,EAAE;GACC,sBAAsB,CASlC;SATY,sBAAsB;AAYnC,IAAa,mBAAmB,GAAhC,MAAa,mBAAoB,SAAQ,iBAAiB;IAIxD,YAAa,MAA6D;QACxE,KAAK,CAAC,MAAM,CAAC,CAAA;QACb,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;IACvC,CAAC;CACF,CAAA;AANC;IADC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACZ,WAAW;wDAAA;AAFd,mBAAmB;IAD/B,UAAU,EAAE;;GACA,mBAAmB,CAQ/B;SARY,mBAAmB;AAWhC,IAAa,sBAAsB,GAAnC,MAAa,sBAAsB;CAAG,CAAA;AAAzB,sBAAsB;IADlC,UAAU,EAAE;GACA,sBAAsB,CAAG;SAAzB,sBAAsB;AAEnC,MAAM,CAAN,IAAY,qBAKX;AALD,WAAY,qBAAqB;IAC/B,0CAAiB,CAAA;IACjB,0CAAiB,CAAA;IACjB,0CAAiB,CAAA;IACjB,8CAAqB,CAAA;AACvB,CAAC,EALW,qBAAqB,KAArB,qBAAqB,QAKhC;AACD,gBAAgB,CAAC,qBAAqB,EAAE;IACtC,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,6EAA6E;CAC3F,CAAC,CAAA;AAGF,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;CAMhC,CAAA;AAJC;IADC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;;gDACP;AAGX;IADC,KAAK,EAAE;;kDACK;AALF,oBAAoB;IADhC,SAAS,EAAE;GACC,oBAAoB,CAMhC;SANY,oBAAoB"}
@@ -0,0 +1,25 @@
1
+ import { Context } from '@txstate-mws/graphql-server';
2
+ import { Asset, AssetFilter, Role, AssetFolder, AssetFolderFilter, AssetFolderPermission, AssetFolderResponse, CreateAssetFolderInput } from '../internal.js';
3
+ export declare class AssetFolderResolver {
4
+ assetfolders(ctx: Context, filter?: AssetFolderFilter): Promise<AssetFolder[]>;
5
+ deletedBy(ctx: Context, folder: AssetFolder): Promise<import("../internal.js").RedactedUser | null | undefined>;
6
+ folder(ctx: Context, folder: AssetFolder): Promise<AssetFolder | undefined>;
7
+ ancestors(ctx: Context, folder: AssetFolder): Promise<AssetFolder[]>;
8
+ path(ctx: Context, folder: AssetFolder): Promise<string>;
9
+ assets(ctx: Context, folder: AssetFolder, filter?: AssetFilter, recursive?: boolean): Promise<Asset[]>;
10
+ folders(ctx: Context, folder: AssetFolder, filter?: AssetFolderFilter, recursive?: boolean): Promise<AssetFolder[]>;
11
+ roles(ctx: Context, folder: AssetFolder, withPermission?: AssetFolderPermission[]): Promise<Role[]>;
12
+ permissions(folder: AssetFolder): AssetFolder;
13
+ createAssetFolder(ctx: Context, args: CreateAssetFolderInput): Promise<AssetFolderResponse>;
14
+ renameAssetFolder(ctx: Context, folderId: string, name: string): Promise<AssetFolderResponse>;
15
+ moveAssetFolder(ctx: Context, folderId: string, targetId: string): Promise<AssetFolderResponse>;
16
+ deleteAssetFolder(ctx: Context, folderId: string): Promise<AssetFolderResponse>;
17
+ undeleteAssetFolder(ctx: Context, folderId: string): Promise<AssetFolderResponse>;
18
+ }
19
+ export declare class AssetFolderPermissionsResolver {
20
+ create(ctx: Context, folder: AssetFolder): Promise<boolean>;
21
+ update(ctx: Context, folder: AssetFolder): Promise<boolean>;
22
+ move(ctx: Context, folder: AssetFolder): Promise<boolean>;
23
+ delete(ctx: Context, folder: AssetFolder): Promise<boolean>;
24
+ undelete(ctx: Context, folder: AssetFolder): Promise<boolean>;
25
+ }