@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.
- package/LICENSE +21 -0
- package/README.md +74 -0
- package/dist/access/access.model.d.ts +2 -0
- package/dist/access/access.model.js +14 -0
- package/dist/access/access.model.js.map +1 -0
- package/dist/access/access.resolver.d.ts +15 -0
- package/dist/access/access.resolver.js +133 -0
- package/dist/access/access.resolver.js.map +1 -0
- package/dist/asset/asset.database.d.ts +12 -0
- package/dist/asset/asset.database.js +116 -0
- package/dist/asset/asset.database.js.map +1 -0
- package/dist/asset/asset.model.d.ts +81 -0
- package/dist/asset/asset.model.js +271 -0
- package/dist/asset/asset.model.js.map +1 -0
- package/dist/asset/asset.resolver.d.ts +32 -0
- package/dist/asset/asset.resolver.js +325 -0
- package/dist/asset/asset.resolver.js.map +1 -0
- package/dist/asset/asset.service.d.ts +35 -0
- package/dist/asset/asset.service.js +225 -0
- package/dist/asset/asset.service.js.map +1 -0
- package/dist/assetfolder/assetfolder.database.d.ts +7 -0
- package/dist/assetfolder/assetfolder.database.js +85 -0
- package/dist/assetfolder/assetfolder.database.js.map +1 -0
- package/dist/assetfolder/assetfolder.model.d.ts +56 -0
- package/dist/assetfolder/assetfolder.model.js +160 -0
- package/dist/assetfolder/assetfolder.model.js.map +1 -0
- package/dist/assetfolder/assetfolder.resolver.d.ts +25 -0
- package/dist/assetfolder/assetfolder.resolver.js +255 -0
- package/dist/assetfolder/assetfolder.resolver.js.map +1 -0
- package/dist/assetfolder/assetfolder.service.d.ts +39 -0
- package/dist/assetfolder/assetfolder.service.js +355 -0
- package/dist/assetfolder/assetfolder.service.js.map +1 -0
- package/dist/assetrule/assetrule.database.d.ts +5 -0
- package/dist/assetrule/assetrule.database.js +161 -0
- package/dist/assetrule/assetrule.database.js.map +1 -0
- package/dist/assetrule/assetrule.model.d.ts +71 -0
- package/dist/assetrule/assetrule.model.js +221 -0
- package/dist/assetrule/assetrule.model.js.map +1 -0
- package/dist/assetrule/assetrule.resolver.d.ts +12 -0
- package/dist/assetrule/assetrule.resolver.js +100 -0
- package/dist/assetrule/assetrule.resolver.js.map +1 -0
- package/dist/assetrule/assetrule.service.d.ts +26 -0
- package/dist/assetrule/assetrule.service.js +184 -0
- package/dist/assetrule/assetrule.service.js.map +1 -0
- package/dist/createdb.d.ts +2 -0
- package/dist/createdb.js +541 -0
- package/dist/createdb.js.map +1 -0
- package/dist/data/data.database.d.ts +7 -0
- package/dist/data/data.database.js +265 -0
- package/dist/data/data.database.js.map +1 -0
- package/dist/data/data.indexing.d.ts +2 -0
- package/dist/data/data.indexing.js +23 -0
- package/dist/data/data.indexing.js.map +1 -0
- package/dist/data/data.model.d.ts +69 -0
- package/dist/data/data.model.js +206 -0
- package/dist/data/data.model.js.map +1 -0
- package/dist/data/data.resolver.d.ts +36 -0
- package/dist/data/data.resolver.js +384 -0
- package/dist/data/data.resolver.js.map +1 -0
- package/dist/data/data.service.d.ts +41 -0
- package/dist/data/data.service.js +374 -0
- package/dist/data/data.service.js.map +1 -0
- package/dist/datafolder/datafolder.database.d.ts +7 -0
- package/dist/datafolder/datafolder.database.js +72 -0
- package/dist/datafolder/datafolder.database.js.map +1 -0
- package/dist/datafolder/datafolder.model.d.ts +48 -0
- package/dist/datafolder/datafolder.model.js +139 -0
- package/dist/datafolder/datafolder.model.js.map +1 -0
- package/dist/datafolder/datafolder.resolver.d.ts +24 -0
- package/dist/datafolder/datafolder.resolver.js +243 -0
- package/dist/datafolder/datafolder.resolver.js.map +1 -0
- package/dist/datafolder/datafolder.service.d.ts +32 -0
- package/dist/datafolder/datafolder.service.js +223 -0
- package/dist/datafolder/datafolder.service.js.map +1 -0
- package/dist/dataroot/dataroot.model.d.ts +19 -0
- package/dist/dataroot/dataroot.model.js +72 -0
- package/dist/dataroot/dataroot.model.js.map +1 -0
- package/dist/dataroot/dataroot.resolver.d.ts +11 -0
- package/dist/dataroot/dataroot.resolver.js +87 -0
- package/dist/dataroot/dataroot.resolver.js.map +1 -0
- package/dist/dataroot/dataroot.service.d.ts +12 -0
- package/dist/dataroot/dataroot.service.js +62 -0
- package/dist/dataroot/dataroot.service.js.map +1 -0
- package/dist/datarule/datarule.database.d.ts +5 -0
- package/dist/datarule/datarule.database.js +144 -0
- package/dist/datarule/datarule.database.js.map +1 -0
- package/dist/datarule/datarule.model.d.ts +55 -0
- package/dist/datarule/datarule.model.js +200 -0
- package/dist/datarule/datarule.model.js.map +1 -0
- package/dist/datarule/datarule.resolver.d.ts +13 -0
- package/dist/datarule/datarule.resolver.js +114 -0
- package/dist/datarule/datarule.resolver.js.map +1 -0
- package/dist/datarule/datarule.service.d.ts +27 -0
- package/dist/datarule/datarule.service.js +191 -0
- package/dist/datarule/datarule.service.js.map +1 -0
- package/dist/fixtures.d.ts +1 -0
- package/dist/fixtures.js +697 -0
- package/dist/fixtures.js.map +1 -0
- package/dist/fixturetemplates.d.ts +110 -0
- package/dist/fixturetemplates.js +178 -0
- package/dist/fixturetemplates.js.map +1 -0
- package/dist/globalrule/globalrule.database.d.ts +5 -0
- package/dist/globalrule/globalrule.database.js +65 -0
- package/dist/globalrule/globalrule.database.js.map +1 -0
- package/dist/globalrule/globalrule.model.d.ts +34 -0
- package/dist/globalrule/globalrule.model.js +120 -0
- package/dist/globalrule/globalrule.model.js.map +1 -0
- package/dist/globalrule/globalrule.resolver.d.ts +11 -0
- package/dist/globalrule/globalrule.resolver.js +85 -0
- package/dist/globalrule/globalrule.resolver.js.map +1 -0
- package/dist/globalrule/globalrule.service.d.ts +18 -0
- package/dist/globalrule/globalrule.service.js +111 -0
- package/dist/globalrule/globalrule.service.js.map +1 -0
- package/dist/group/group.database.d.ts +41 -0
- package/dist/group/group.database.js +190 -0
- package/dist/group/group.database.js.map +1 -0
- package/dist/group/group.model.d.ts +19 -0
- package/dist/group/group.model.js +70 -0
- package/dist/group/group.model.js.map +1 -0
- package/dist/group/group.resolver.d.ts +27 -0
- package/dist/group/group.resolver.js +275 -0
- package/dist/group/group.resolver.js.map +1 -0
- package/dist/group/group.service.d.ts +46 -0
- package/dist/group/group.service.js +384 -0
- package/dist/group/group.service.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +88 -0
- package/dist/internal.js +89 -0
- package/dist/internal.js.map +1 -0
- package/dist/migrations.d.ts +2 -0
- package/dist/migrations.js +41 -0
- package/dist/migrations.js.map +1 -0
- package/dist/organization/organization.database.d.ts +2 -0
- package/dist/organization/organization.database.js +16 -0
- package/dist/organization/organization.database.js.map +1 -0
- package/dist/organization/organization.model.d.ts +5 -0
- package/dist/organization/organization.model.js +35 -0
- package/dist/organization/organization.model.js.map +1 -0
- package/dist/organization/organization.resolver.d.ts +6 -0
- package/dist/organization/organization.resolver.js +43 -0
- package/dist/organization/organization.resolver.js.map +1 -0
- package/dist/organization/organization.service.d.ts +12 -0
- package/dist/organization/organization.service.js +35 -0
- package/dist/organization/organization.service.js.map +1 -0
- package/dist/page/page.database.d.ts +10 -0
- package/dist/page/page.database.js +269 -0
- package/dist/page/page.database.js.map +1 -0
- package/dist/page/page.indexing.d.ts +3 -0
- package/dist/page/page.indexing.js +26 -0
- package/dist/page/page.indexing.js.map +1 -0
- package/dist/page/page.migrations.d.ts +13 -0
- package/dist/page/page.migrations.js +55 -0
- package/dist/page/page.migrations.js.map +1 -0
- package/dist/page/page.model.d.ts +88 -0
- package/dist/page/page.model.js +272 -0
- package/dist/page/page.model.js.map +1 -0
- package/dist/page/page.resolver.d.ts +48 -0
- package/dist/page/page.resolver.js +542 -0
- package/dist/page/page.resolver.js.map +1 -0
- package/dist/page/page.service.d.ts +59 -0
- package/dist/page/page.service.js +399 -0
- package/dist/page/page.service.js.map +1 -0
- package/dist/page/page.util.d.ts +3 -0
- package/dist/page/page.util.js +16 -0
- package/dist/page/page.util.js.map +1 -0
- package/dist/page/page.validation.d.ts +2 -0
- package/dist/page/page.validation.js +21 -0
- package/dist/page/page.validation.js.map +1 -0
- package/dist/pagerule/pagerule.database.d.ts +5 -0
- package/dist/pagerule/pagerule.database.js +212 -0
- package/dist/pagerule/pagerule.database.js.map +1 -0
- package/dist/pagerule/pagerule.model.d.ts +71 -0
- package/dist/pagerule/pagerule.model.js +272 -0
- package/dist/pagerule/pagerule.model.js.map +1 -0
- package/dist/pagerule/pagerule.resolver.d.ts +13 -0
- package/dist/pagerule/pagerule.resolver.js +114 -0
- package/dist/pagerule/pagerule.resolver.js.map +1 -0
- package/dist/pagerule/pagerule.service.d.ts +23 -0
- package/dist/pagerule/pagerule.service.js +180 -0
- package/dist/pagerule/pagerule.service.js.map +1 -0
- package/dist/pagetree/pagetree.database.d.ts +13 -0
- package/dist/pagetree/pagetree.database.js +84 -0
- package/dist/pagetree/pagetree.database.js.map +1 -0
- package/dist/pagetree/pagetree.model.d.ts +43 -0
- package/dist/pagetree/pagetree.model.js +146 -0
- package/dist/pagetree/pagetree.model.js.map +1 -0
- package/dist/pagetree/pagetree.resolver.d.ts +23 -0
- package/dist/pagetree/pagetree.resolver.js +238 -0
- package/dist/pagetree/pagetree.resolver.js.map +1 -0
- package/dist/pagetree/pagetree.service.d.ts +25 -0
- package/dist/pagetree/pagetree.service.js +221 -0
- package/dist/pagetree/pagetree.service.js.map +1 -0
- package/dist/role/role.database.d.ts +17 -0
- package/dist/role/role.database.js +74 -0
- package/dist/role/role.database.js.map +1 -0
- package/dist/role/role.model.d.ts +26 -0
- package/dist/role/role.model.js +84 -0
- package/dist/role/role.model.js.map +1 -0
- package/dist/role/role.resolver.d.ts +27 -0
- package/dist/role/role.resolver.js +294 -0
- package/dist/role/role.resolver.js.map +1 -0
- package/dist/role/role.service.d.ts +33 -0
- package/dist/role/role.service.js +265 -0
- package/dist/role/role.service.js.map +1 -0
- package/dist/run.d.ts +1 -0
- package/dist/run.js +29 -0
- package/dist/run.js.map +1 -0
- package/dist/scalars/datetime.d.ts +2 -0
- package/dist/scalars/datetime.js +19 -0
- package/dist/scalars/datetime.js.map +1 -0
- package/dist/scalars/index.d.ts +3 -0
- package/dist/scalars/index.js +4 -0
- package/dist/scalars/index.js.map +1 -0
- package/dist/scalars/jsondata.d.ts +2 -0
- package/dist/scalars/jsondata.js +15 -0
- package/dist/scalars/jsondata.js.map +1 -0
- package/dist/scalars/urlsafestring.d.ts +4 -0
- package/dist/scalars/urlsafestring.js +28 -0
- package/dist/scalars/urlsafestring.js.map +1 -0
- package/dist/site/site.database.d.ts +15 -0
- package/dist/site/site.database.js +164 -0
- package/dist/site/site.database.js.map +1 -0
- package/dist/site/site.model.d.ts +62 -0
- package/dist/site/site.model.js +197 -0
- package/dist/site/site.model.js.map +1 -0
- package/dist/site/site.resolver.d.ts +30 -0
- package/dist/site/site.resolver.js +326 -0
- package/dist/site/site.resolver.js.map +1 -0
- package/dist/site/site.service.d.ts +35 -0
- package/dist/site/site.service.js +199 -0
- package/dist/site/site.service.js.map +1 -0
- package/dist/siterule/siterule.database.d.ts +5 -0
- package/dist/siterule/siterule.database.js +139 -0
- package/dist/siterule/siterule.database.js.map +1 -0
- package/dist/siterule/siterule.model.d.ts +53 -0
- package/dist/siterule/siterule.model.js +203 -0
- package/dist/siterule/siterule.model.js.map +1 -0
- package/dist/siterule/siterule.resolver.d.ts +12 -0
- package/dist/siterule/siterule.resolver.js +100 -0
- package/dist/siterule/siterule.resolver.js.map +1 -0
- package/dist/siterule/siterule.service.d.ts +23 -0
- package/dist/siterule/siterule.service.js +148 -0
- package/dist/siterule/siterule.service.js.map +1 -0
- package/dist/template/template.database.d.ts +15 -0
- package/dist/template/template.database.js +61 -0
- package/dist/template/template.database.js.map +1 -0
- package/dist/template/template.model.d.ts +32 -0
- package/dist/template/template.model.js +124 -0
- package/dist/template/template.model.js.map +1 -0
- package/dist/template/template.resolver.d.ts +22 -0
- package/dist/template/template.resolver.js +216 -0
- package/dist/template/template.resolver.js.map +1 -0
- package/dist/template/template.service.d.ts +27 -0
- package/dist/template/template.service.js +192 -0
- package/dist/template/template.service.js.map +1 -0
- package/dist/templaterule/templaterule.database.d.ts +5 -0
- package/dist/templaterule/templaterule.database.js +80 -0
- package/dist/templaterule/templaterule.database.js.map +1 -0
- package/dist/templaterule/templaterule.model.d.ts +38 -0
- package/dist/templaterule/templaterule.model.js +136 -0
- package/dist/templaterule/templaterule.model.js.map +1 -0
- package/dist/templaterule/templaterule.resolver.d.ts +12 -0
- package/dist/templaterule/templaterule.resolver.js +100 -0
- package/dist/templaterule/templaterule.resolver.js.map +1 -0
- package/dist/templaterule/templaterule.service.d.ts +19 -0
- package/dist/templaterule/templaterule.service.js +123 -0
- package/dist/templaterule/templaterule.service.js.map +1 -0
- package/dist/user/user.database.d.ts +22 -0
- package/dist/user/user.database.js +116 -0
- package/dist/user/user.database.js.map +1 -0
- package/dist/user/user.model.d.ts +42 -0
- package/dist/user/user.model.js +122 -0
- package/dist/user/user.model.js.map +1 -0
- package/dist/user/user.resolver.d.ts +16 -0
- package/dist/user/user.resolver.js +140 -0
- package/dist/user/user.resolver.js.map +1 -0
- package/dist/user/user.service.d.ts +29 -0
- package/dist/user/user.service.js +195 -0
- package/dist/user/user.service.js.map +1 -0
- package/dist/util/authservice.d.ts +28 -0
- package/dist/util/authservice.js +131 -0
- package/dist/util/authservice.js.map +1 -0
- package/dist/util/dates.d.ts +2 -0
- package/dist/util/dates.js +4 -0
- package/dist/util/dates.js.map +1 -0
- package/dist/util/filehandler.d.ts +15 -0
- package/dist/util/filehandler.js +48 -0
- package/dist/util/filehandler.js.map +1 -0
- package/dist/util/index.d.ts +13 -0
- package/dist/util/index.js +26 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/indexing.d.ts +12 -0
- package/dist/util/indexing.js +74 -0
- package/dist/util/indexing.js.map +1 -0
- package/dist/util/migrations.d.ts +15 -0
- package/dist/util/migrations.js +2 -0
- package/dist/util/migrations.js.map +1 -0
- package/dist/util/mutationlogger.d.ts +1 -0
- package/dist/util/mutationlogger.js +9 -0
- package/dist/util/mutationlogger.js.map +1 -0
- package/dist/util/registry.d.ts +25 -0
- package/dist/util/registry.js +66 -0
- package/dist/util/registry.js.map +1 -0
- package/dist/util/rules.d.ts +6 -0
- package/dist/util/rules.js +31 -0
- package/dist/util/rules.js.map +1 -0
- package/dist/util/sharedtypes.d.ts +3 -0
- package/dist/util/sharedtypes.js +2 -0
- package/dist/util/sharedtypes.js.map +1 -0
- package/dist/util/stopwords.d.ts +1 -0
- package/dist/util/stopwords.js +152 -0
- package/dist/util/stopwords.js.map +1 -0
- package/dist/version/version.model.d.ts +11 -0
- package/dist/version/version.model.js +46 -0
- package/dist/version/version.model.js.map +1 -0
- package/dist/version/version.resolver.d.ts +6 -0
- package/dist/version/version.resolver.js +45 -0
- package/dist/version/version.resolver.js.map +1 -0
- package/dist/versionedservice/service.d.ts +148 -0
- package/dist/versionedservice/service.js +547 -0
- package/dist/versionedservice/service.js.map +1 -0
- package/dist/versionedservice/types.d.ts +87 -0
- package/dist/versionedservice/types.js +11 -0
- package/dist/versionedservice/types.js.map +1 -0
- package/package.json +50 -0
- package/readme/DosGato.mwb +0 -0
- package/readme/DosGato.mwb.bak +0 -0
- package/readme/upgradeflow2.png +0 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { BaseService, ValidatedResponse } from '@txstate-mws/graphql-server';
|
|
2
|
+
import { ManyJoinedLoader, PrimaryKeyLoader } from 'dataloader-factory';
|
|
3
|
+
import { unique } from 'txstate-utils';
|
|
4
|
+
import { DosGatoService, GroupService, UserService, RoleResponse, addRoleToUser, createRole, deleteRole, getRoles, getRolesWithGroup, getRolesForUsers, removeRoleFromUser, updateRole, removeRoleFromGroup, addRoleToGroup, GroupServiceInternal } from '../internal.js';
|
|
5
|
+
const rolesByIdLoader = new PrimaryKeyLoader({
|
|
6
|
+
fetch: async (ids) => {
|
|
7
|
+
return await getRoles({ ids });
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
const rolesByGroupIdLoader = new ManyJoinedLoader({
|
|
11
|
+
fetch: async (groupIds) => {
|
|
12
|
+
return await getRolesWithGroup(groupIds);
|
|
13
|
+
},
|
|
14
|
+
idLoader: rolesByIdLoader
|
|
15
|
+
});
|
|
16
|
+
const rolesByUserIdLoader = new ManyJoinedLoader({
|
|
17
|
+
fetch: async (userIds) => {
|
|
18
|
+
return await getRolesForUsers(userIds);
|
|
19
|
+
},
|
|
20
|
+
idLoader: rolesByIdLoader
|
|
21
|
+
});
|
|
22
|
+
export class RoleServiceInternal extends BaseService {
|
|
23
|
+
async find(filter) {
|
|
24
|
+
const roles = await getRoles(filter);
|
|
25
|
+
for (const role of roles) {
|
|
26
|
+
this.loaders.get(rolesByIdLoader).prime(role.id, role);
|
|
27
|
+
}
|
|
28
|
+
return unique(roles, 'id');
|
|
29
|
+
}
|
|
30
|
+
async findById(id) {
|
|
31
|
+
return await this.loaders.get(rolesByIdLoader).load(id);
|
|
32
|
+
}
|
|
33
|
+
async findByIds(ids) {
|
|
34
|
+
return await this.loaders.loadMany(rolesByIdLoader, ids);
|
|
35
|
+
}
|
|
36
|
+
async findByGroupId(groupId, direct) {
|
|
37
|
+
let roles = await this.loaders.get(rolesByGroupIdLoader).load(groupId);
|
|
38
|
+
if (!direct) {
|
|
39
|
+
// get parent groups
|
|
40
|
+
const parentGroups = await this.svc(GroupServiceInternal).getSuperGroups(groupId);
|
|
41
|
+
// get the roles for those groups
|
|
42
|
+
const result = await Promise.all(parentGroups.map(async (pg) => {
|
|
43
|
+
return await this.loaders.get(rolesByGroupIdLoader).load(pg.id);
|
|
44
|
+
}));
|
|
45
|
+
const parentGroupRoles = unique(result.flat(), 'id');
|
|
46
|
+
if (typeof direct === 'undefined') {
|
|
47
|
+
roles = unique([...roles, ...parentGroupRoles], 'id');
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
roles = parentGroupRoles;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return roles;
|
|
54
|
+
}
|
|
55
|
+
async findByUserId(userId, direct) {
|
|
56
|
+
if (direct) {
|
|
57
|
+
return await this.loaders.get(rolesByUserIdLoader).load(userId);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// get the user's groups
|
|
61
|
+
const groups = await this.svc(GroupServiceInternal).findByUserId(userId);
|
|
62
|
+
// get the roles for those groups
|
|
63
|
+
const [roles, ...indirectRolesUnflattened] = await Promise.all([
|
|
64
|
+
this.loaders.get(rolesByUserIdLoader).load(userId),
|
|
65
|
+
...groups.map(async (g) => await this.loaders.get(rolesByGroupIdLoader).load(g.id))
|
|
66
|
+
]);
|
|
67
|
+
const indirectRoles = unique(indirectRolesUnflattened.flat(), 'id');
|
|
68
|
+
if (typeof direct === 'undefined') {
|
|
69
|
+
return unique([...roles, ...indirectRoles], 'id');
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
return indirectRoles;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export class RoleService extends DosGatoService {
|
|
78
|
+
constructor() {
|
|
79
|
+
super(...arguments);
|
|
80
|
+
this.raw = this.svc(RoleServiceInternal);
|
|
81
|
+
}
|
|
82
|
+
async find(filter) {
|
|
83
|
+
return await this.removeUnauthorized(await this.raw.find(filter));
|
|
84
|
+
}
|
|
85
|
+
async findById(id) {
|
|
86
|
+
return await this.removeUnauthorized(await this.raw.findById(id));
|
|
87
|
+
}
|
|
88
|
+
async findByIds(ids) {
|
|
89
|
+
return await this.removeUnauthorized(await this.raw.findByIds(ids));
|
|
90
|
+
}
|
|
91
|
+
async findByGroupId(groupId, direct) {
|
|
92
|
+
return await this.removeUnauthorized(await this.raw.findByGroupId(groupId, direct));
|
|
93
|
+
}
|
|
94
|
+
async findByUserId(userId, direct) {
|
|
95
|
+
return await this.removeUnauthorized(await this.raw.findByUserId(userId, direct));
|
|
96
|
+
}
|
|
97
|
+
async create(name) {
|
|
98
|
+
if (!(await this.mayCreate()))
|
|
99
|
+
throw new Error('Current user is not permitted to create roles.');
|
|
100
|
+
const response = new RoleResponse({});
|
|
101
|
+
try {
|
|
102
|
+
const id = await createRole(name);
|
|
103
|
+
const role = await this.raw.findById(String(id));
|
|
104
|
+
response.success = true;
|
|
105
|
+
response.role = role;
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
if (err.code === 'ER_DUP_ENTRY') {
|
|
109
|
+
response.addMessage(`Role ${name} already exists.`, 'name');
|
|
110
|
+
return response;
|
|
111
|
+
}
|
|
112
|
+
console.error(err);
|
|
113
|
+
throw new Error(`An unknown error occurred while creating role ${name}.`);
|
|
114
|
+
}
|
|
115
|
+
return response;
|
|
116
|
+
}
|
|
117
|
+
async update(id, name) {
|
|
118
|
+
const role = await this.raw.findById(id);
|
|
119
|
+
if (!role)
|
|
120
|
+
throw new Error('Role to be edited does not exist.');
|
|
121
|
+
if (!(await this.mayUpdate(role)))
|
|
122
|
+
throw new Error('Current user is not permitted to update role names.');
|
|
123
|
+
const response = new RoleResponse({});
|
|
124
|
+
try {
|
|
125
|
+
await updateRole(id, name);
|
|
126
|
+
this.loaders.clear();
|
|
127
|
+
response.success = true;
|
|
128
|
+
response.role = await this.raw.findById(id);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
if (err.code === 'ER_DUP_ENTRY') {
|
|
132
|
+
response.addMessage(`${name} role already exists.`, 'name');
|
|
133
|
+
return response;
|
|
134
|
+
}
|
|
135
|
+
console.error(err);
|
|
136
|
+
throw new Error(`An unknown error occurred while updating the name for role ${role.name}.`);
|
|
137
|
+
}
|
|
138
|
+
return response;
|
|
139
|
+
}
|
|
140
|
+
async delete(id) {
|
|
141
|
+
const role = await this.findById(id);
|
|
142
|
+
if (!role)
|
|
143
|
+
throw new Error('Role to be deleted does not exist.');
|
|
144
|
+
if (!(await this.mayDelete(role)))
|
|
145
|
+
throw new Error(`Current user is not permitted to delete role ${role.name}.`);
|
|
146
|
+
try {
|
|
147
|
+
await deleteRole(id);
|
|
148
|
+
return new ValidatedResponse({ success: true });
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
console.error(err);
|
|
152
|
+
throw new Error(`An unknown error occurred while attempting to delete role ${role.name}.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async addRoleToUser(roleId, userId) {
|
|
156
|
+
const role = await this.findById(roleId);
|
|
157
|
+
if (!role)
|
|
158
|
+
throw new Error('Role to be assigned does not exist.');
|
|
159
|
+
if (!(await this.mayAssign(role)))
|
|
160
|
+
throw new Error(`Current user is not permitted to assign users to role ${role.name}.`);
|
|
161
|
+
const user = await this.svc(UserService).findById(userId);
|
|
162
|
+
if (!user)
|
|
163
|
+
throw new Error('Cannot assign role to user who does not exist');
|
|
164
|
+
try {
|
|
165
|
+
await addRoleToUser(roleId, user.internalId);
|
|
166
|
+
return new ValidatedResponse({ success: true });
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
console.error(err);
|
|
170
|
+
throw new Error(`An unknown error occurred while trying to assign role ${role.name} to user ${user.id}.`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
async removeRoleFromUser(roleId, userId) {
|
|
174
|
+
const role = await this.findById(roleId);
|
|
175
|
+
if (!role)
|
|
176
|
+
throw new Error('Role to be unassigned does not exist.');
|
|
177
|
+
if (!(await this.mayAssign(role)))
|
|
178
|
+
throw new Error(`Current user is not permitted to unassign users from role ${role.name}.`);
|
|
179
|
+
const user = await this.svc(UserService).findById(userId);
|
|
180
|
+
if (!user)
|
|
181
|
+
throw new Error('Cannot remove role from user who does not exist');
|
|
182
|
+
try {
|
|
183
|
+
const removed = await removeRoleFromUser(roleId, user.internalId);
|
|
184
|
+
if (removed) {
|
|
185
|
+
return new ValidatedResponse({ success: true });
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const response = new ValidatedResponse();
|
|
189
|
+
response.addMessage(`Role ${role.name} not assigned to user ${user.id}`);
|
|
190
|
+
return response;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
console.error(err);
|
|
195
|
+
throw new Error(`An unknown error occurred while trying to remove role ${role.name} from user ${user.id}.`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async addRoleToGroup(groupId, roleId) {
|
|
199
|
+
const [role, group] = await Promise.all([this.findById(roleId), this.svc(GroupService).findById(groupId)]);
|
|
200
|
+
if (!role)
|
|
201
|
+
throw new Error('Role to be updated does not exist.');
|
|
202
|
+
if (!group)
|
|
203
|
+
throw new Error('Group to be assigned does not exist.');
|
|
204
|
+
if (!(await this.mayAssign(role)))
|
|
205
|
+
throw new Error(`Current user is not permitted to assign role ${role.name} to group ${group.name}.`);
|
|
206
|
+
try {
|
|
207
|
+
await addRoleToGroup(groupId, roleId);
|
|
208
|
+
return new ValidatedResponse({ success: true });
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
console.error(err);
|
|
212
|
+
throw new Error(`An unknown error occurred while adding role ${role.name} to group ${group.name}.`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async removeRoleFromGroup(groupId, roleId) {
|
|
216
|
+
const [role, group] = await Promise.all([this.findById(roleId), this.svc(GroupService).findById(groupId)]);
|
|
217
|
+
if (!role)
|
|
218
|
+
throw new Error('Role to be updated does not exist.');
|
|
219
|
+
if (!group)
|
|
220
|
+
throw new Error('Group to be assigned does not exist.');
|
|
221
|
+
if (!(await this.mayAssign(role)))
|
|
222
|
+
throw new Error(`Current user is not permitted remove role ${role.name} from group ${group.name}.`);
|
|
223
|
+
try {
|
|
224
|
+
const removed = await removeRoleFromGroup(groupId, roleId);
|
|
225
|
+
if (removed) {
|
|
226
|
+
return new ValidatedResponse({ success: true });
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
return ValidatedResponse.error(`Role ${role.name} was not assigned to group ${group.name}.`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
console.error(err);
|
|
234
|
+
throw new Error(`An unknown error occurred while removing role ${role.name} from group ${group.name}.`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async getRoleForRule(roleId) {
|
|
238
|
+
return await this.loaders.get(rolesByIdLoader).load(roleId);
|
|
239
|
+
}
|
|
240
|
+
async mayView(role) {
|
|
241
|
+
if (await this.haveGlobalPerm('manageUsers'))
|
|
242
|
+
return true;
|
|
243
|
+
this.currentRolesSet ?? (this.currentRolesSet = new Set((await this.currentRoles()).map(r => r.id)));
|
|
244
|
+
return this.currentRolesSet.has(role.id);
|
|
245
|
+
}
|
|
246
|
+
async mayViewManagerUI() {
|
|
247
|
+
return await this.haveGlobalPerm('manageUsers');
|
|
248
|
+
}
|
|
249
|
+
async mayCreate() {
|
|
250
|
+
return await this.haveGlobalPerm('manageUsers');
|
|
251
|
+
}
|
|
252
|
+
async mayUpdate(role) {
|
|
253
|
+
return await this.haveGlobalPerm('manageUsers');
|
|
254
|
+
}
|
|
255
|
+
async mayDelete(role) {
|
|
256
|
+
return await this.haveGlobalPerm('manageUsers');
|
|
257
|
+
}
|
|
258
|
+
async mayAssign(role) {
|
|
259
|
+
return await this.haveGlobalPerm('manageUsers');
|
|
260
|
+
}
|
|
261
|
+
async mayCreateRules(role) {
|
|
262
|
+
return await this.haveGlobalPerm('manageUsers');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=role.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role.service.js","sourceRoot":"","sources":["../../src/role/role.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EACL,cAAc,EAAE,YAAY,EAAE,WAAW,EAAoB,YAAY,EACzE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAClE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,EAC5G,MAAM,gBAAgB,CAAA;AAEvB,MAAM,eAAe,GAAG,IAAI,gBAAgB,CAAC;IAC3C,KAAK,EAAE,KAAK,EAAE,GAAa,EAAE,EAAE;QAC7B,OAAO,MAAM,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IAChC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,oBAAoB,GAAG,IAAI,gBAAgB,CAAC;IAChD,KAAK,EAAE,KAAK,EAAE,QAAkB,EAAE,EAAE;QAClC,OAAO,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAC1C,CAAC;IACD,QAAQ,EAAE,eAAe;CAC1B,CAAC,CAAA;AAEF,MAAM,mBAAmB,GAAG,IAAI,gBAAgB,CAAC;IAC/C,KAAK,EAAE,KAAK,EAAE,OAAiB,EAAE,EAAE;QACjC,OAAO,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACxC,CAAC;IACD,QAAQ,EAAE,eAAe;CAC1B,CAAC,CAAA;AAEF,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,KAAK,CAAC,IAAI,CAAE,MAAmB;QAC7B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAA;QACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;SACvD;QACD,OAAO,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,EAAU;QACxB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,SAAS,CAAE,GAAa;QAC5B,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK,CAAC,aAAa,CAAE,OAAe,EAAE,MAAgB;QACpD,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,EAAE;YACX,oBAAoB;YACpB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACjF,iCAAiC;YACjC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,YAAY,CAAC,GAAG,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;gBAC1B,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;YACjE,CAAC,CAAC,CACH,CAAA;YACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;YACpD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBACjC,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAA;aACtD;iBAAM;gBACL,KAAK,GAAG,gBAAgB,CAAA;aACzB;SACF;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,YAAY,CAAE,MAAc,EAAE,MAAgB;QAClD,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SAChE;aAAM;YACL,wBAAwB;YACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YACxE,iCAAiC;YACjC,MAAM,CAAC,KAAK,EAAE,GAAG,wBAAwB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClD,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAClF,CAAC,CAAA;YACF,MAAM,aAAa,GAAG,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;YACnE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBACjC,OAAO,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,aAAa,CAAC,EAAE,IAAI,CAAC,CAAA;aAClD;iBAAM;gBACL,OAAO,aAAa,CAAA;aACrB;SACF;IACH,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,cAAoB;IAArD;;QACE,QAAG,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAiLrC,CAAC;IA/KC,KAAK,CAAC,IAAI,CAAE,MAAmB;QAC7B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;IACnE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,EAAU;QACxB,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACnE,CAAC;IAED,KAAK,CAAC,SAAS,CAAE,GAAa;QAC5B,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,KAAK,CAAC,aAAa,CAAE,OAAe,EAAE,MAAgB;QACpD,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;IACrF,CAAC;IAED,KAAK,CAAC,YAAY,CAAE,MAAc,EAAE,MAAgB;QAClD,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnF,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,IAAY;QACxB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;QAChG,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAA;QACrC,IAAI;YACF,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;YACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;YAChD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;YACvB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;SACrB;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE;gBAC/B,QAAQ,CAAC,UAAU,CAAC,QAAQ,IAAI,kBAAkB,EAAE,MAAM,CAAC,CAAA;gBAC3D,OAAO,QAAQ,CAAA;aAChB;YACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,GAAG,CAAC,CAAA;SAC1E;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,EAAU,EAAE,IAAY;QACpC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;QAC/D,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;QACzG,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAA;QACrC,IAAI;YACF,MAAM,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;YACpB,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;YACvB,QAAQ,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;SAC5C;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE;gBAC/B,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,uBAAuB,EAAE,MAAM,CAAC,CAAA;gBAC3D,OAAO,QAAQ,CAAA;aAChB;YACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,IAAI,KAAK,CAAC,8DAA8D,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;SAC5F;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,EAAU;QACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACpC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAChE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QAChH,IAAI;YACF,MAAM,UAAU,CAAC,EAAE,CAAC,CAAA;YACpB,OAAO,IAAI,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;SAChD;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,IAAI,KAAK,CAAC,6DAA6D,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;SAC3F;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAE,MAAc,EAAE,MAAc;QACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACjE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QACzH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACzD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAC3E,IAAI;YACF,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;YAC5C,OAAO,IAAI,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;SAChD;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,IAAI,KAAK,CAAC,yDAAyD,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;SAC1G;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAE,MAAc,EAAE,MAAc;QACtD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QACnE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QAC7H,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACzD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QAC7E,IAAI;YACF,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;YACjE,IAAI,OAAO,EAAE;gBACX,OAAO,IAAI,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aAChD;iBAAM;gBACL,MAAM,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAA;gBACxC,QAAQ,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,yBAAyB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;gBACxE,OAAO,QAAQ,CAAA;aAChB;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,IAAI,KAAK,CAAC,yDAAyD,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;SAC5G;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAE,OAAe,EAAE,MAAc;QACnD,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC1G,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAChE,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACnE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,IAAI,CAAC,IAAI,aAAa,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;QACvI,IAAI;YACF,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YACrC,OAAO,IAAI,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;SAChD;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,CAAC,IAAI,aAAa,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;SACpG;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAE,OAAe,EAAE,MAAc;QACxD,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC1G,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QAChE,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACnE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,IAAI,CAAC,IAAI,eAAe,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;QACtI,IAAI;YACF,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;YAC1D,IAAI,OAAO,EAAE;gBACX,OAAO,IAAI,iBAAiB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;aAChD;iBAAM;gBACL,OAAO,iBAAiB,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,8BAA8B,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;aAC7F;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,CAAC,IAAI,eAAe,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;SACxG;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAE,MAAc;QAClC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC7D,CAAC;IAGD,KAAK,CAAC,OAAO,CAAE,IAAU;QACvB,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;YAAE,OAAO,IAAI,CAAA;QACzD,IAAI,CAAC,eAAe,KAApB,IAAI,CAAC,eAAe,GAAK,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAA;QAC5E,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,SAAS,CAAE,IAAU;QACzB,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,SAAS,CAAE,IAAU;QACzB,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,SAAS,CAAE,IAAU;QACzB,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,CAAC,cAAc,CAAE,IAAU;QAC9B,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;IACjD,CAAC;CACF"}
|
package/dist/run.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/run.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* eslint-disable import/first */
|
|
2
|
+
import { install } from 'source-map-support';
|
|
3
|
+
install();
|
|
4
|
+
import { DGServer } from './index.js';
|
|
5
|
+
import { fixtures } from './fixtures.js';
|
|
6
|
+
import { PageTemplate1, PageTemplate2, PageTemplate3, PageTemplate4, LinkComponent, PanelComponent, QuoteComponent, ColorData, BuildingData, ArticleData } from './fixturetemplates.js';
|
|
7
|
+
async function main() {
|
|
8
|
+
const server = new DGServer();
|
|
9
|
+
await server.start({
|
|
10
|
+
fixtures,
|
|
11
|
+
templates: [
|
|
12
|
+
PageTemplate1,
|
|
13
|
+
PageTemplate2,
|
|
14
|
+
PageTemplate3,
|
|
15
|
+
PageTemplate4,
|
|
16
|
+
LinkComponent,
|
|
17
|
+
PanelComponent,
|
|
18
|
+
QuoteComponent,
|
|
19
|
+
ColorData,
|
|
20
|
+
BuildingData,
|
|
21
|
+
ArticleData
|
|
22
|
+
]
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
main().catch(e => {
|
|
26
|
+
console.error(e);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,CAAA;AACT,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEvL,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAA;IAC7B,MAAM,MAAM,CAAC,KAAK,CAAC;QACjB,QAAQ;QACR,SAAS,EAAE;YACT,aAAa;YACb,aAAa;YACb,aAAa;YACb,aAAa;YACb,aAAa;YACb,cAAc;YACd,cAAc;YACd,SAAS;YACT,YAAY;YACZ,WAAW;SACZ;KACF,CAAC,CAAA;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { GraphQLScalarType, Kind } from 'graphql';
|
|
2
|
+
import { DateTime } from 'luxon';
|
|
3
|
+
export const DateTimeScalar = new GraphQLScalarType({
|
|
4
|
+
name: 'DateTime',
|
|
5
|
+
description: 'Date and Time in ISO 8601 string format. JSON parser should convert to javascript Date type.',
|
|
6
|
+
serialize(value) {
|
|
7
|
+
return value.toISO();
|
|
8
|
+
},
|
|
9
|
+
parseValue(value) {
|
|
10
|
+
return DateTime.fromISO(value);
|
|
11
|
+
},
|
|
12
|
+
parseLiteral(ast) {
|
|
13
|
+
if (ast.kind === Kind.STRING) {
|
|
14
|
+
return DateTime.fromISO(ast.value);
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=datetime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datetime.js","sourceRoot":"","sources":["../../src/scalars/datetime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAa,MAAM,SAAS,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC;IAClD,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,8FAA8F;IAE3G,SAAS,CAAE,KAAe;QACxB,OAAO,KAAK,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAED,UAAU,CAAE,KAAa;QACvB,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;IAED,YAAY,CAAE,GAAc;QAC1B,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;YAC5B,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;SACnC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scalars/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { GraphQLScalarType } from 'graphql';
|
|
2
|
+
export const JsonData = new GraphQLScalarType({
|
|
3
|
+
name: 'JsonData',
|
|
4
|
+
description: 'Unstructured JSON data.',
|
|
5
|
+
serialize(value) {
|
|
6
|
+
return value;
|
|
7
|
+
},
|
|
8
|
+
parseValue(value) {
|
|
9
|
+
return value;
|
|
10
|
+
},
|
|
11
|
+
parseLiteral(ast) {
|
|
12
|
+
return ast.value;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=jsondata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsondata.js","sourceRoot":"","sources":["../../src/scalars/jsondata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE3C,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;IAC5C,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,yBAAyB;IACtC,SAAS,CAAE,KAAU;QACnB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,UAAU,CAAE,KAAU;QACpB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,YAAY,CAAE,GAAQ;QACpB,OAAO,GAAG,CAAC,KAAK,CAAA;IAClB,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { GraphQLScalarType, Kind } from 'graphql';
|
|
2
|
+
function makeSafe(str) {
|
|
3
|
+
return str.toLocaleLowerCase().replace(/[^a-z0-9_-]/, '-').replace(/-+/, '-');
|
|
4
|
+
}
|
|
5
|
+
export class UrlSafeString extends String {
|
|
6
|
+
}
|
|
7
|
+
export const UrlSafeStringScalar = new GraphQLScalarType({
|
|
8
|
+
name: 'UrlSafeString',
|
|
9
|
+
description: 'This string must only contain URL-safe and lower-case characters.',
|
|
10
|
+
serialize(value) {
|
|
11
|
+
return value;
|
|
12
|
+
},
|
|
13
|
+
parseValue(value) {
|
|
14
|
+
if (typeof value !== 'string') {
|
|
15
|
+
throw new Error('UrlSafeString must be a string');
|
|
16
|
+
}
|
|
17
|
+
return makeSafe(value);
|
|
18
|
+
},
|
|
19
|
+
parseLiteral(ast) {
|
|
20
|
+
if (ast.kind !== Kind.STRING) {
|
|
21
|
+
throw new Error('UrlSafeString must be a string');
|
|
22
|
+
}
|
|
23
|
+
if (typeof ast.custom === 'undefined')
|
|
24
|
+
ast.custom = makeSafe(ast.value);
|
|
25
|
+
return ast.custom;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=urlsafestring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlsafestring.js","sourceRoot":"","sources":["../../src/scalars/urlsafestring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAEjD,SAAS,QAAQ,CAAE,GAAW;IAC5B,OAAO,GAAG,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,OAAO,aAAc,SAAQ,MAAM;CAAG;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,iBAAiB,CAAC;IACvD,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,mEAAmE;IAChF,SAAS,CAAE,KAAa;QACtB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,UAAU,CAAE,KAAa;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;SAClD;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IACD,YAAY,CAAE,GAAQ;QACpB,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;SAClD;QACD,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,WAAW;YAAE,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACvE,OAAO,GAAG,CAAC,MAAM,CAAA;IACnB,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Site, SiteFilter, CreateSiteInput, VersionedService, UpdateSiteInput } from '../internal.js';
|
|
2
|
+
export declare function getSites(filter?: SiteFilter): Promise<Site[]>;
|
|
3
|
+
export declare function getSitesByOrganization(orgIds: string[]): Promise<Site[]>;
|
|
4
|
+
export declare function getSitesByTemplate(templateIds: number[], atLeastOneTree?: boolean): Promise<{
|
|
5
|
+
key: any;
|
|
6
|
+
value: Site;
|
|
7
|
+
}[]>;
|
|
8
|
+
export declare function getSitesByGroupIds(groupIds: string[]): Promise<{
|
|
9
|
+
key: any;
|
|
10
|
+
value: Site;
|
|
11
|
+
}[]>;
|
|
12
|
+
export declare function createSite(versionedService: VersionedService, userId: string, args: CreateSiteInput): Promise<Site>;
|
|
13
|
+
export declare function updateSite(site: Site, siteArgs: UpdateSiteInput): Promise<void>;
|
|
14
|
+
export declare function deleteSite(site: Site, currentUserInternalId: number): Promise<number>;
|
|
15
|
+
export declare function undeleteSite(site: Site): Promise<number>;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import db from 'mysql2-async/db';
|
|
2
|
+
import { unique } from 'txstate-utils';
|
|
3
|
+
import { Site, PagetreeType, formatSavedAtVersion } from '../internal.js';
|
|
4
|
+
import { nanoid } from 'nanoid';
|
|
5
|
+
const columns = ['sites.id', 'sites.name', 'sites.launchHost', 'sites.launchPath', 'sites.primaryPagetreeId', 'sites.rootAssetFolderId', 'sites.organizationId', 'sites.ownerId', 'sites.deletedAt', 'sites.deletedBy'];
|
|
6
|
+
function processFilters(filter) {
|
|
7
|
+
const binds = [];
|
|
8
|
+
const where = [];
|
|
9
|
+
if (filter?.ids?.length) {
|
|
10
|
+
where.push(`sites.id IN (${db.in(binds, filter.ids)})`);
|
|
11
|
+
}
|
|
12
|
+
if (filter?.names?.length) {
|
|
13
|
+
where.push(`sites.name IN (${db.in(binds, filter.names)})`);
|
|
14
|
+
}
|
|
15
|
+
if (filter?.launched != null) {
|
|
16
|
+
if (filter.launched) {
|
|
17
|
+
where.push('sites.launchHost IS NOT NULL');
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
where.push('sites.launchHost IS NULL');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (filter?.launchUrls?.length) {
|
|
24
|
+
const ors = [];
|
|
25
|
+
for (const launchUrl of filter.launchUrls) {
|
|
26
|
+
ors.push('(sites.launchHost = ? AND sites.launchPath like ?)');
|
|
27
|
+
db.in(binds, [launchUrl.host, `${launchUrl.path}%`]);
|
|
28
|
+
}
|
|
29
|
+
where.push(ors.join(' OR '));
|
|
30
|
+
}
|
|
31
|
+
if (filter?.assetRootIds?.length) {
|
|
32
|
+
where.push(`sites.rootAssetFolderId IN (${db.in(binds, filter.assetRootIds)})`);
|
|
33
|
+
}
|
|
34
|
+
return { where, binds };
|
|
35
|
+
}
|
|
36
|
+
export async function getSites(filter) {
|
|
37
|
+
const { binds, where } = processFilters(filter);
|
|
38
|
+
let query = `SELECT ${columns.join(', ')} FROM sites`;
|
|
39
|
+
if (where.length) {
|
|
40
|
+
query += ` WHERE (${where.join(') AND (')})`;
|
|
41
|
+
}
|
|
42
|
+
const sites = await db.getall(query + ' ORDER BY sites.name', binds);
|
|
43
|
+
return sites.map(s => new Site(s));
|
|
44
|
+
}
|
|
45
|
+
export async function getSitesByOrganization(orgIds) {
|
|
46
|
+
const binds = [];
|
|
47
|
+
const where = [];
|
|
48
|
+
where.push(`sites.organizationId IN (${db.in(binds, orgIds)})`);
|
|
49
|
+
const sites = await db.getall(`SELECT ${columns.join(', ')} FROM sites
|
|
50
|
+
WHERE (${where.join(') AND (')})`, binds);
|
|
51
|
+
return sites.map(s => new Site(s));
|
|
52
|
+
}
|
|
53
|
+
export async function getSitesByTemplate(templateIds, atLeastOneTree) {
|
|
54
|
+
const binds = [];
|
|
55
|
+
const wholeSites = await db.getall(`SELECT ${columns.join(', ')}, sites_templates.templateId as templateId FROM sites
|
|
56
|
+
INNER JOIN sites_templates ON sites.id = sites_templates.siteId
|
|
57
|
+
WHERE sites_templates.templateId IN (${db.in(binds, templateIds)})`, binds);
|
|
58
|
+
if (!atLeastOneTree) {
|
|
59
|
+
return wholeSites.map(s => ({ key: s.templateId, value: new Site(s) }));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// also return any sites where one or more pagetrees are able to use the template
|
|
63
|
+
const binds2 = [];
|
|
64
|
+
const sitesWithPagetreesWithTemplate = await db.getall(`SELECT ${columns.join(', ')}, pagetrees_templates.templateId as templateId FROM sites
|
|
65
|
+
INNER JOIN pagetrees ON pagetrees.siteId = sites.id
|
|
66
|
+
INNER JOIN pagetrees_templates ON pagetrees_templates.pagetreeId = pagetrees.id
|
|
67
|
+
WHERE pagetrees_templates.templateId IN (${db.in(binds2, templateIds)})`, binds2);
|
|
68
|
+
const sites = unique([...wholeSites, ...sitesWithPagetreesWithTemplate], 'id');
|
|
69
|
+
return sites.map(s => ({ key: s.templateId, value: new Site(s) }));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export async function getSitesByGroupIds(groupIds) {
|
|
73
|
+
const rows = await db.getall(`SELECT s.*, gs.groupId
|
|
74
|
+
FROM sites s
|
|
75
|
+
INNER JOIN groups_sites gs ON gs.siteId=s.id
|
|
76
|
+
WHERE s.id IN (${db.in([], groupIds)})`, groupIds);
|
|
77
|
+
return rows.map(r => ({ key: r.groupId, value: new Site(r) }));
|
|
78
|
+
}
|
|
79
|
+
export async function createSite(versionedService, userId, args) {
|
|
80
|
+
return await db.transaction(async (db) => {
|
|
81
|
+
// create the site, get the internal id for the page template
|
|
82
|
+
const [siteId, templateInternalId] = await Promise.all([
|
|
83
|
+
db.insert('INSERT INTO sites (name) VALUES (?)', [args.name]),
|
|
84
|
+
db.getval('SELECT id FROM templates WHERE `key`=?', [args.rootPageTemplateKey])
|
|
85
|
+
]);
|
|
86
|
+
// create the assetfolder
|
|
87
|
+
// create the primary pagetree
|
|
88
|
+
// add root page template key to list of templates approved for the site
|
|
89
|
+
const [folderId, pagetreeId] = await Promise.all([
|
|
90
|
+
db.insert('INSERT INTO assetfolders (siteId, path, name, guid) VALUES (?,?,?,?)', [siteId, '/', args.name, nanoid(10)]),
|
|
91
|
+
db.insert('INSERT INTO pagetrees (siteId, type, name, createdAt) VALUES (?,?,?, NOW())', [siteId, PagetreeType.PRIMARY, args.name]),
|
|
92
|
+
db.insert('INSERT INTO sites_templates (siteId, templateId) VALUES (?,?)', [siteId, templateInternalId])
|
|
93
|
+
]);
|
|
94
|
+
await db.update('UPDATE sites SET primaryPagetreeId = ?, rootAssetFolderId = ? WHERE id = ?', [pagetreeId, folderId, siteId]);
|
|
95
|
+
// create the root page.
|
|
96
|
+
const dataId = await versionedService.create('page', { templateKey: args.rootPageTemplateKey, savedAtVersion: formatSavedAtVersion(args.schemaVersion) }, [{ name: 'template', values: [args.rootPageTemplateKey] }], userId, db);
|
|
97
|
+
await db.insert(`
|
|
98
|
+
INSERT INTO pages (name, path, displayOrder, pagetreeId, dataId, linkId)
|
|
99
|
+
VALUES (?,?,?,?,?,?)`, [args.name, '/', 1, pagetreeId, dataId, nanoid(10)]);
|
|
100
|
+
return new Site(await db.getrow('SELECT * FROM sites WHERE id=?', [siteId]));
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
export async function updateSite(site, siteArgs) {
|
|
104
|
+
const sitesUpdates = [];
|
|
105
|
+
const sitesBinds = [];
|
|
106
|
+
if (siteArgs.name) {
|
|
107
|
+
sitesUpdates.push('name = ?');
|
|
108
|
+
sitesBinds.push(siteArgs.name);
|
|
109
|
+
}
|
|
110
|
+
if (siteArgs.organizationId) {
|
|
111
|
+
sitesUpdates.push('organizationId = ?');
|
|
112
|
+
sitesBinds.push(siteArgs.organizationId);
|
|
113
|
+
}
|
|
114
|
+
if (siteArgs.launchHost) {
|
|
115
|
+
sitesUpdates.push('launchHost = ?');
|
|
116
|
+
sitesBinds.push(siteArgs.launchHost);
|
|
117
|
+
}
|
|
118
|
+
if (siteArgs.launchPath) {
|
|
119
|
+
sitesUpdates.push('launchPath = ?');
|
|
120
|
+
sitesBinds.push(siteArgs.launchPath);
|
|
121
|
+
}
|
|
122
|
+
return await db.transaction(async (db) => {
|
|
123
|
+
if (siteArgs.ownerId) {
|
|
124
|
+
const ownerId = await db.getval('SELECT id FROM users WHERE login = ?', [siteArgs.ownerId]);
|
|
125
|
+
if (ownerId) {
|
|
126
|
+
sitesUpdates.push('ownerId = ?');
|
|
127
|
+
sitesBinds.push(ownerId);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
sitesBinds.push(site.id);
|
|
131
|
+
if (sitesUpdates.length) {
|
|
132
|
+
await db.update(`UPDATE sites
|
|
133
|
+
SET ${sitesUpdates.join(', ')}
|
|
134
|
+
WHERE id = ?`, sitesBinds);
|
|
135
|
+
if (siteArgs.name) {
|
|
136
|
+
// if the site is renamed, the root assetfolder and root page for all the pagetrees in the site need to be renamed too
|
|
137
|
+
await db.update('UPDATE assetfolders SET name = ? WHERE id = ?', [siteArgs.name, site.rootAssetFolderInternalId]);
|
|
138
|
+
await db.update(`UPDATE pages
|
|
139
|
+
INNER JOIN pagetrees on pages.pagetreeId = pagetrees.id
|
|
140
|
+
INNER JOIN sites ON pagetrees.siteId = sites.id
|
|
141
|
+
SET pages.name = ?
|
|
142
|
+
WHERE sites.id = ? AND pages.path = '/'`, [siteArgs.name, site.id]);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (siteArgs.managerIds?.length) {
|
|
146
|
+
const userBinds = [];
|
|
147
|
+
const userIds = await db.getvals(`SELECT id from users WHERE login IN (${db.in(userBinds, siteArgs.managerIds)})`, userBinds);
|
|
148
|
+
await db.delete('DELETE FROM sites_managers WHERE siteId = ?', [site.id]);
|
|
149
|
+
const managerBinds = [];
|
|
150
|
+
for (const id of userIds) {
|
|
151
|
+
managerBinds.push(site.id);
|
|
152
|
+
managerBinds.push(id);
|
|
153
|
+
}
|
|
154
|
+
await db.insert(`INSERT INTO sites_managers (siteId, userId) VALUES ${userIds.map(u => '(?,?)').join(', ')}`, managerBinds);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
export async function deleteSite(site, currentUserInternalId) {
|
|
159
|
+
return await db.update('UPDATE sites SET deletedAt = NOW(), deletedBy = ? WHERE id = ?', [currentUserInternalId, site.id]);
|
|
160
|
+
}
|
|
161
|
+
export async function undeleteSite(site) {
|
|
162
|
+
return await db.update('UPDATE sites SET deletedAt = NULL, deletedBy = NULL WHERE id = ?', [site.id]);
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=site.database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site.database.js","sourceRoot":"","sources":["../../src/site/site.database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,IAAI,EAA+B,YAAY,EAAqC,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACzI,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,MAAM,OAAO,GAAa,CAAC,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAA;AAEjO,SAAS,cAAc,CAAE,MAAmB;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;QACvB,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;KACxD;IACD,IAAI,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;QACzB,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;KAC5D;IACD,IAAI,MAAM,EAAE,QAAQ,IAAI,IAAI,EAAE;QAC5B,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;SAC3C;aAAM;YACL,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;SACvC;KACF;IACD,IAAI,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;QAC9B,MAAM,GAAG,GAAG,EAAE,CAAA;QACd,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE;YACzC,GAAG,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;YAC9D,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;SACrD;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;KAC7B;IACD,IAAI,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE;QAChC,KAAK,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;KAChF;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAE,MAAmB;IACjD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IAC/C,IAAI,KAAK,GAAG,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAA;IACrD,IAAI,KAAK,CAAC,MAAM,EAAE;QAChB,KAAK,IAAI,WAAW,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAA;KAC7C;IACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,sBAAsB,EAAE,KAAK,CAAC,CAAA;IACpE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAE,MAAgB;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;IAE/D,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;0CAClB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACxE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAE,WAAqB,EAAE,cAAwB;IACvF,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;wEAEO,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC1G,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACxE;SAAM;QACL,iFAAiF;QACjF,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,MAAM,8BAA8B,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;uFAGA,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACzH,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,8BAA8B,CAAC,EAAE,IAAI,CAAC,CAAA;QAC9E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACnE;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAE,QAAkB;IAC1D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC;;;iDAGkB,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAChF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAE,gBAAkC,EAAE,MAAc,EAAE,IAAqB;IACzG,OAAO,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;QACrC,6DAA6D;QAC7D,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,EAAE,CAAC,MAAM,CAAC,qCAAqC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,EAAE,CAAC,MAAM,CAAC,wCAAwC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SAChF,CAAC,CAAA;QACF,yBAAyB;QACzB,8BAA8B;QAC9B,wEAAwE;QACxE,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/C,EAAE,CAAC,MAAM,CAAC,sEAAsE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACvH,EAAE,CAAC,MAAM,CAAC,6EAA6E,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACnI,EAAE,CAAC,MAAM,CAAC,+DAA+D,EAAE,CAAC,MAAM,EAAE,kBAAmB,CAAC,CAAC;SAC1G,CAAC,CAAA;QACF,MAAM,EAAE,CAAC,MAAM,CAAC,4EAA4E,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QAC7H,wBAAwB;QACxB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,mBAAmB,EAAE,cAAc,EAAE,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;QACjO,MAAM,EAAE,CAAC,MAAM,CAAC;;2BAEO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC7E,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,gCAAgC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAE,IAAU,EAAE,QAAyB;IACrE,MAAM,YAAY,GAAa,EAAE,CAAA;IACjC,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,IAAI,QAAQ,CAAC,IAAI,EAAE;QACjB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC7B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;KAC/B;IACD,IAAI,QAAQ,CAAC,cAAc,EAAE;QAC3B,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QACvC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;KACzC;IACD,IAAI,QAAQ,CAAC,UAAU,EAAE;QACvB,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACnC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;KACrC;IACD,IAAI,QAAQ,CAAC,UAAU,EAAE;QACvB,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACnC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;KACrC;IACD,OAAO,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;QACrC,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,CAAS,sCAAsC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;YACnG,IAAI,OAAO,EAAE;gBACX,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBAChC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;aACzB;SACF;QACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACxB,IAAI,YAAY,CAAC,MAAM,EAAE;YACvB,MAAM,EAAE,CAAC,MAAM,CAAC;8BACQ,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;qCAChB,EAAE,UAAU,CAAC,CAAA;YAC5C,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACjB,sHAAsH;gBACtH,MAAM,EAAE,CAAC,MAAM,CAAC,+CAA+C,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAA;gBACjH,MAAM,EAAE,CAAC,MAAM,CAAC;;;;kEAI0C,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;aACtF;SACF;QACD,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE;YAC/B,MAAM,SAAS,GAAa,EAAE,CAAA;YAC9B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAS,wCAAwC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YACrI,MAAM,EAAE,CAAC,MAAM,CAAC,6CAA6C,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YACzE,MAAM,YAAY,GAAa,EAAE,CAAA;YACjC,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE;gBACxB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC1B,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;aACtB;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,sDAAsD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;SAC5H;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAE,IAAU,EAAE,qBAA6B;IACzE,OAAO,MAAM,EAAE,CAAC,MAAM,CAAC,gEAAgE,EAAE,CAAC,qBAAqB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AAC5H,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,IAAU;IAC5C,OAAO,MAAM,EAAE,CAAC,MAAM,CAAC,kEAAkE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AACvG,CAAC"}
|