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