From d7b4bc19e05358db955e9ef476d211a34db8d0d7 Mon Sep 17 00:00:00 2001 From: rubikscraft Date: Sun, 25 Dec 2022 22:57:26 +0100 Subject: [PATCH] Add route splitting --- .../src/routes/api/info/info.controller.ts | 9 ++++-- frontend/angular.json | 4 +-- frontend/src/app/app.routing.module.ts | 28 +++++++++---------- .../src/app/routes/errors/errors.module.ts | 2 +- .../src/app/routes/images/images.module.ts | 2 +- .../routes/processing/processing.module.ts | 2 +- .../apikeys/settings-apikeys.module.ts | 2 +- .../general/settings-general.module.ts | 2 +- .../settings/roles/settings-roles.module.ts | 2 +- .../app/routes/settings/settings.module.ts | 2 +- .../settings/settings.routing.module.ts | 24 ++++++++-------- .../settings/sharex/settings-sharex.module.ts | 2 +- .../sys-pref/settings-sys-pref.module.ts | 2 +- .../settings/users/settings-users.module.ts | 2 +- .../src/app/routes/upload/upload.module.ts | 2 +- frontend/src/app/routes/user/user.module.ts | 2 +- frontend/src/app/routes/view/view.module.ts | 2 +- .../src/app/services/usage/usage.service.ts | 10 ++++--- shared/src/types/failable.ts | 13 +++++++++ 19 files changed, 66 insertions(+), 48 deletions(-) diff --git a/backend/src/routes/api/info/info.controller.ts b/backend/src/routes/api/info/info.controller.ts index dbd9964..45cd9d8 100644 --- a/backend/src/routes/api/info/info.controller.ts +++ b/backend/src/routes/api/info/info.controller.ts @@ -11,7 +11,7 @@ import { SupportedImageFileTypes, } from 'picsur-shared/dist/dto/mimes.dto'; import { TrackingState } from 'picsur-shared/dist/dto/tracking-state.enum'; -import { ThrowIfFailed } from 'picsur-shared/dist/types'; +import { FallbackIfFailed } from 'picsur-shared/dist/types'; import { HostConfigService } from '../../../config/early/host.config.service'; import { NoPermissions } from '../../../decorators/permissions.decorator'; import { Returns } from '../../../decorators/returns.decorator'; @@ -29,14 +29,17 @@ export class InfoController { @Get() @Returns(InfoResponse) async getInfo(): Promise { - const trackingID = ThrowIfFailed(await this.usageService.getTrackingID()); + const trackingID = FallbackIfFailed( + await this.usageService.getTrackingID(), + null, + ) ?? undefined; return { demo: this.hostConfig.isDemo(), production: this.hostConfig.isProduction(), version: this.hostConfig.getVersion(), tracking: { - id: trackingID ?? undefined, + id: trackingID, state: TrackingState.Detailed, }, }; diff --git a/frontend/angular.json b/frontend/angular.json index 511903e..e95bad1 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -51,8 +51,8 @@ "budgets": [ { "type": "initial", - "maximumWarning": "1500kb", - "maximumError": "2mb" + "maximumWarning": "500kb", + "maximumError": "1mb" }, { "type": "anyComponentStyle", diff --git a/frontend/src/app/app.routing.module.ts b/frontend/src/app/app.routing.module.ts index 14e4842..dbccf15 100644 --- a/frontend/src/app/app.routing.module.ts +++ b/frontend/src/app/app.routing.module.ts @@ -1,13 +1,6 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { PRoutes } from './models/dto/picsur-routes.dto'; -import { ErrorsRouteModule } from './routes/errors/errors.module'; -import { ImagesRouteModule } from './routes/images/images.module'; -import { ProcessingRouteModule } from './routes/processing/processing.module'; -import { SettingsRouteModule } from './routes/settings/settings.module'; -import { UploadRouteModule } from './routes/upload/upload.module'; -import { UserRouteModule } from './routes/user/user.module'; -import { ViewRouteModule } from './routes/view/view.module'; const routes: PRoutes = [ { @@ -17,31 +10,38 @@ const routes: PRoutes = [ }, { path: 'upload', - loadChildren: () => UploadRouteModule, + loadChildren: () => + import('./routes/upload/upload.module').then((m) => m.default), }, { path: 'processing', - loadChildren: () => ProcessingRouteModule, + loadChildren: () => + import('./routes/processing/processing.module').then((m) => m.default), }, { path: 'view', - loadChildren: () => ViewRouteModule, + loadChildren: () => + import('./routes/view/view.module').then((m) => m.default), }, { path: 'user', - loadChildren: () => UserRouteModule, + loadChildren: () => + import('./routes/user/user.module').then((m) => m.default), }, { path: 'images', - loadChildren: () => ImagesRouteModule, + loadChildren: () => + import('./routes/images/images.module').then((m) => m.default), }, { path: 'settings', - loadChildren: () => SettingsRouteModule, + loadChildren: () => + import('./routes/settings/settings.module').then((m) => m.default), }, { path: 'error', - loadChildren: () => ErrorsRouteModule, + loadChildren: () => + import('./routes/errors/errors.module').then((m) => m.default), }, ]; diff --git a/frontend/src/app/routes/errors/errors.module.ts b/frontend/src/app/routes/errors/errors.module.ts index 4b1bf05..1f5ace3 100644 --- a/frontend/src/app/routes/errors/errors.module.ts +++ b/frontend/src/app/routes/errors/errors.module.ts @@ -8,4 +8,4 @@ import { ErrorsRoutingModule } from './errors.routing.module'; declarations: [E404Component, E401Component], imports: [CommonModule, ErrorsRoutingModule], }) -export class ErrorsRouteModule {} +export default class ErrorsRouteModule {} diff --git a/frontend/src/app/routes/images/images.module.ts b/frontend/src/app/routes/images/images.module.ts index a4c313c..6b78689 100644 --- a/frontend/src/app/routes/images/images.module.ts +++ b/frontend/src/app/routes/images/images.module.ts @@ -31,4 +31,4 @@ import { ImagesRoutingModule } from './images.routing.module'; PipesModule, ], }) -export class ImagesRouteModule {} +export default class ImagesRouteModule {} diff --git a/frontend/src/app/routes/processing/processing.module.ts b/frontend/src/app/routes/processing/processing.module.ts index 116f462..3547b15 100644 --- a/frontend/src/app/routes/processing/processing.module.ts +++ b/frontend/src/app/routes/processing/processing.module.ts @@ -14,4 +14,4 @@ import { ProcessingRoutingModule } from './processing.routing.module'; MatProgressSpinnerModule, ], }) -export class ProcessingRouteModule {} +export default class ProcessingRouteModule {} diff --git a/frontend/src/app/routes/settings/apikeys/settings-apikeys.module.ts b/frontend/src/app/routes/settings/apikeys/settings-apikeys.module.ts index 17fc70a..f92a669 100644 --- a/frontend/src/app/routes/settings/apikeys/settings-apikeys.module.ts +++ b/frontend/src/app/routes/settings/apikeys/settings-apikeys.module.ts @@ -34,4 +34,4 @@ import { SettingsApiKeysRoutingModule } from './settings-apikeys.routing.module' FabModule, ], }) -export class SettingsApiKeysRouteModule {} +export default class SettingsApiKeysRouteModule {} diff --git a/frontend/src/app/routes/settings/general/settings-general.module.ts b/frontend/src/app/routes/settings/general/settings-general.module.ts index 6c23a58..68f0d3b 100644 --- a/frontend/src/app/routes/settings/general/settings-general.module.ts +++ b/frontend/src/app/routes/settings/general/settings-general.module.ts @@ -8,4 +8,4 @@ import { SettingsGeneralRoutingModule } from './settings-general.routing.module' declarations: [SettingsGeneralComponent], imports: [CommonModule, SettingsGeneralRoutingModule, PrefOptionModule], }) -export class SettingsGeneralRouteModule {} +export default class SettingsGeneralRouteModule {} diff --git a/frontend/src/app/routes/settings/roles/settings-roles.module.ts b/frontend/src/app/routes/settings/roles/settings-roles.module.ts index 1c1cdc0..f74d999 100644 --- a/frontend/src/app/routes/settings/roles/settings-roles.module.ts +++ b/frontend/src/app/routes/settings/roles/settings-roles.module.ts @@ -37,4 +37,4 @@ import { SettingsRolesRoutingModule } from './settings-roles.routing.module'; ValuesPickerModule, ], }) -export class SettingsRolesRouteModule {} +export default class SettingsRolesRouteModule {} diff --git a/frontend/src/app/routes/settings/settings.module.ts b/frontend/src/app/routes/settings/settings.module.ts index b87d77c..9c6ef69 100644 --- a/frontend/src/app/routes/settings/settings.module.ts +++ b/frontend/src/app/routes/settings/settings.module.ts @@ -15,4 +15,4 @@ import { SettingsSidebarComponent } from './sidebar/settings-sidebar.component'; ], exports: [SettingsRoutingModule], }) -export class SettingsRouteModule {} +export default class SettingsRouteModule {} diff --git a/frontend/src/app/routes/settings/settings.routing.module.ts b/frontend/src/app/routes/settings/settings.routing.module.ts index c8d7c70..75a7a76 100644 --- a/frontend/src/app/routes/settings/settings.routing.module.ts +++ b/frontend/src/app/routes/settings/settings.routing.module.ts @@ -4,13 +4,7 @@ import { Permission } from 'picsur-shared/dist/dto/permissions.enum'; import { PermissionGuard } from 'src/app/guards/permission.guard'; import { PRoutes } from 'src/app/models/dto/picsur-routes.dto'; import { SidebarResolverService } from 'src/app/services/sidebar-resolver/sidebar-resolver.service'; -import { SettingsApiKeysRouteModule } from './apikeys/settings-apikeys.module'; -import { SettingsGeneralRouteModule } from './general/settings-general.module'; -import { SettingsRolesRouteModule } from './roles/settings-roles.module'; -import { SettingsShareXRouteModule } from './sharex/settings-sharex.module'; import { SettingsSidebarComponent } from './sidebar/settings-sidebar.component'; -import { SettingsSysprefRouteModule } from './sys-pref/settings-sys-pref.module'; -import { SettingsUsersRouteModule } from './users/settings-users.module'; const SettingsRoutes: PRoutes = [ { @@ -23,7 +17,8 @@ const SettingsRoutes: PRoutes = [ }, { path: 'general', - loadChildren: () => SettingsGeneralRouteModule, + loadChildren: () => + import('./general/settings-general.module').then((m) => m.default), data: { permissions: [Permission.Settings], page: { @@ -35,7 +30,8 @@ const SettingsRoutes: PRoutes = [ }, { path: 'apikeys', - loadChildren: () => SettingsApiKeysRouteModule, + loadChildren: () => + import('./apikeys/settings-apikeys.module').then((m) => m.default), data: { permissions: [Permission.ApiKey], page: { @@ -47,7 +43,8 @@ const SettingsRoutes: PRoutes = [ }, { path: 'sharex', - loadChildren: () => SettingsShareXRouteModule, + loadChildren: () => + import('./sharex/settings-sharex.module').then((m) => m.default), data: { permissions: [Permission.ApiKey], page: { @@ -59,7 +56,8 @@ const SettingsRoutes: PRoutes = [ }, { path: 'users', - loadChildren: () => SettingsUsersRouteModule, + loadChildren: () => + import('./users/settings-users.module').then((m) => m.default), data: { permissions: [Permission.UserAdmin], page: { @@ -71,7 +69,8 @@ const SettingsRoutes: PRoutes = [ }, { path: 'roles', - loadChildren: () => SettingsRolesRouteModule, + loadChildren: () => + import('./roles/settings-roles.module').then((m) => m.default), data: { permissions: [Permission.RoleAdmin], page: { @@ -83,7 +82,8 @@ const SettingsRoutes: PRoutes = [ }, { path: 'system', - loadChildren: () => SettingsSysprefRouteModule, + loadChildren: () => + import('./sys-pref/settings-sys-pref.module').then((m) => m.default), data: { permissions: [Permission.SysPrefAdmin], page: { diff --git a/frontend/src/app/routes/settings/sharex/settings-sharex.module.ts b/frontend/src/app/routes/settings/sharex/settings-sharex.module.ts index aa3c7fc..05aa25b 100644 --- a/frontend/src/app/routes/settings/sharex/settings-sharex.module.ts +++ b/frontend/src/app/routes/settings/sharex/settings-sharex.module.ts @@ -23,4 +23,4 @@ import { SettingsShareXRoutingModule } from './settings-sharex.routing.module'; MatProgressSpinnerModule, ], }) -export class SettingsShareXRouteModule {} +export default class SettingsShareXRouteModule {} diff --git a/frontend/src/app/routes/settings/sys-pref/settings-sys-pref.module.ts b/frontend/src/app/routes/settings/sys-pref/settings-sys-pref.module.ts index ca942f9..0008e83 100644 --- a/frontend/src/app/routes/settings/sys-pref/settings-sys-pref.module.ts +++ b/frontend/src/app/routes/settings/sys-pref/settings-sys-pref.module.ts @@ -8,4 +8,4 @@ import { SettingsSysprefRoutingModule } from './settings-sys-pref.routing.module declarations: [SettingsSysprefComponent], imports: [CommonModule, SettingsSysprefRoutingModule, PrefOptionModule], }) -export class SettingsSysprefRouteModule {} +export default class SettingsSysprefRouteModule {} diff --git a/frontend/src/app/routes/settings/users/settings-users.module.ts b/frontend/src/app/routes/settings/users/settings-users.module.ts index 48e1fa8..150e2bc 100644 --- a/frontend/src/app/routes/settings/users/settings-users.module.ts +++ b/frontend/src/app/routes/settings/users/settings-users.module.ts @@ -37,4 +37,4 @@ import { SettingsUsersRoutingModule } from './settings-users.routing.module'; ValuesPickerModule, ], }) -export class SettingsUsersRouteModule {} +export default class SettingsUsersRouteModule {} diff --git a/frontend/src/app/routes/upload/upload.module.ts b/frontend/src/app/routes/upload/upload.module.ts index 6af1225..3550a75 100644 --- a/frontend/src/app/routes/upload/upload.module.ts +++ b/frontend/src/app/routes/upload/upload.module.ts @@ -14,4 +14,4 @@ import { UploadRoutingModule } from './upload.routing.module'; NgxDropzoneModule, ], }) -export class UploadRouteModule {} +export default class UploadRouteModule {} diff --git a/frontend/src/app/routes/user/user.module.ts b/frontend/src/app/routes/user/user.module.ts index ea1f3c5..66e288e 100644 --- a/frontend/src/app/routes/user/user.module.ts +++ b/frontend/src/app/routes/user/user.module.ts @@ -23,4 +23,4 @@ import { UserRoutingModule } from './user.routing.module'; ReactiveFormsModule, ], }) -export class UserRouteModule {} +export default class UserRouteModule {} diff --git a/frontend/src/app/routes/view/view.module.ts b/frontend/src/app/routes/view/view.module.ts index ec148b9..0fc80a5 100644 --- a/frontend/src/app/routes/view/view.module.ts +++ b/frontend/src/app/routes/view/view.module.ts @@ -52,4 +52,4 @@ import { ViewRoutingModule } from './view.routing.module'; PipesModule, ], }) -export class ViewRouteModule {} +export default class ViewRouteModule {} diff --git a/frontend/src/app/services/usage/usage.service.ts b/frontend/src/app/services/usage/usage.service.ts index 41550c3..9f66e01 100644 --- a/frontend/src/app/services/usage/usage.service.ts +++ b/frontend/src/app/services/usage/usage.service.ts @@ -1,8 +1,8 @@ import { Inject, Injectable } from '@angular/core'; -import { NAVIGATOR } from '@ng-web-apis/common'; -import * as ackee from 'ackee-tracker'; -import { InfoService } from '../api/info.service'; +import { LOCATION, NAVIGATOR, WINDOW } from '@ng-web-apis/common'; import { Logger } from '../logger/logger.service'; +import { InfoService } from '../api/info.service'; +import type { AckeeInstance } from 'ackee-tracker'; @Injectable({ providedIn: 'root', @@ -13,7 +13,7 @@ export class UsageService { private doNotTrack = false; private SITE_ID = 'c0fa67c0-fb82-42a7-af7e-ef3df28adeb4'; - private instance?: ackee.AckeeInstance; + private instance?: AckeeInstance; constructor( @Inject(NAVIGATOR) private readonly navigator: Navigator, @@ -32,6 +32,8 @@ export class UsageService { private async setup() { if (this.doNotTrack) return; + const ackee = await import('ackee-tracker'); + this.instance = ackee.create('/api/usage/report', { ignoreLocalhost: false, ignoreOwnVisits: false, diff --git a/shared/src/types/failable.ts b/shared/src/types/failable.ts index b4c1ec0..eacc900 100644 --- a/shared/src/types/failable.ts +++ b/shared/src/types/failable.ts @@ -236,6 +236,19 @@ export function ThrowIfFailed(failable: Failable): V { return failable; } +export function FallbackIfFailed( + failable: Failable, + fallback: V, + logger?: { warn: (...args: any) => any }, +): V { + if (HasFailed(failable)) { + if (logger) logger.warn(failable.print()); + return fallback; + } + + return failable; +} + export function Map( failable: Failable, mapper: (value: T) => U,