From f8360396ffabd2f95e9ece9c5755173bae0114b6 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 3 Jan 2022 17:13:11 +0100 Subject: Stop using tsconfig register Prefer to replace paths at compile time --- server/helpers/register-ts-paths.ts | 16 -- server/lib/client-html.ts | 5 +- server/middlewares/async.ts | 2 +- .../validators/videos/video-playlists.ts | 2 +- server/middlewares/validators/videos/videos.ts | 2 +- server/tests/register.ts | 3 - server/tools/cli.ts | 8 +- server/tools/peertube-auth.ts | 9 +- server/tools/peertube-get-access-token.ts | 3 - server/tools/peertube-import-videos.ts | 8 +- server/tools/peertube-plugins.ts | 13 +- server/tools/peertube-redundancy.ts | 3 - server/tools/peertube-upload.ts | 3 - server/tools/peertube.ts | 3 - server/tools/tsconfig.json | 9 +- server/types/express-handler.ts | 3 + server/types/express.d.ts | 189 +++++++++++++++++++++ server/types/express.ts | 3 - server/typings/express/index.d.ts | 189 --------------------- 19 files changed, 218 insertions(+), 255 deletions(-) delete mode 100644 server/helpers/register-ts-paths.ts delete mode 100644 server/tests/register.ts create mode 100644 server/types/express-handler.ts create mode 100644 server/types/express.d.ts delete mode 100644 server/types/express.ts delete mode 100644 server/typings/express/index.d.ts (limited to 'server') diff --git a/server/helpers/register-ts-paths.ts b/server/helpers/register-ts-paths.ts deleted file mode 100644 index eec7fed3e..000000000 --- a/server/helpers/register-ts-paths.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { resolve } from 'path' -import tsConfigPaths = require('tsconfig-paths') - -const tsConfig = require('../../tsconfig.json') - -function registerTSPaths () { - // Thanks: https://github.com/dividab/tsconfig-paths/issues/75#issuecomment-458936883 - tsConfigPaths.register({ - baseUrl: resolve(tsConfig.compilerOptions.baseUrl || '', tsConfig.compilerOptions.outDir || ''), - paths: tsConfig.compilerOptions.paths - }) -} - -export { - registerTSPaths -} diff --git a/server/lib/client-html.ts b/server/lib/client-html.ts index e7e439bfe..74788af52 100644 --- a/server/lib/client-html.ts +++ b/server/lib/client-html.ts @@ -3,6 +3,7 @@ import { readFile } from 'fs-extra' import { join } from 'path' import validator from 'validator' import { toCompleteUUID } from '@server/helpers/custom-validators/misc' +import { root } from '@shared/core-utils' import { escapeHTML } from '@shared/core-utils/renderer' import { sha256 } from '@shared/extra-utils' import { HTMLServerConfig } from '@shared/models' @@ -344,11 +345,11 @@ class ClientHtml { { cookie: req.cookies?.clientLanguage, paramLang, acceptLanguage: req.headers['accept-language'] } ) - return join(__dirname, '../../../client/dist/' + buildFileLocale(lang) + '/index.html') + return join(root(), 'client', 'dist', buildFileLocale(lang), 'index.html') } private static getEmbedPath () { - return join(__dirname, '../../../client/dist/standalone/videos/embed.html') + return join(root(), 'client', 'dist', 'standalone', 'videos', 'embed.html') } private static addManifestContentHash (htmlStringPage: string) { diff --git a/server/middlewares/async.ts b/server/middlewares/async.ts index 3d6e38809..9d0193536 100644 --- a/server/middlewares/async.ts +++ b/server/middlewares/async.ts @@ -1,7 +1,7 @@ import { eachSeries } from 'async' import { NextFunction, Request, RequestHandler, Response } from 'express' import { ValidationChain } from 'express-validator' -import { ExpressPromiseHandler } from '@server/types/express' +import { ExpressPromiseHandler } from '@server/types/express-handler' import { retryTransactionWrapper } from '../helpers/database-utils' // Syntactic sugar to avoid try/catch in express controllers diff --git a/server/middlewares/validators/videos/video-playlists.ts b/server/middlewares/validators/videos/video-playlists.ts index ec5a3a9c8..f5fee845e 100644 --- a/server/middlewares/validators/videos/video-playlists.ts +++ b/server/middlewares/validators/videos/video-playlists.ts @@ -1,6 +1,6 @@ import express from 'express' import { body, param, query, ValidationChain } from 'express-validator' -import { ExpressPromiseHandler } from '@server/types/express' +import { ExpressPromiseHandler } from '@server/types/express-handler' import { MUserAccountId } from '@server/types/models' import { HttpStatusCode, diff --git a/server/middlewares/validators/videos/videos.ts b/server/middlewares/validators/videos/videos.ts index 1e727533b..bf5f1c97b 100644 --- a/server/middlewares/validators/videos/videos.ts +++ b/server/middlewares/validators/videos/videos.ts @@ -5,7 +5,7 @@ import { getResumableUploadPath } from '@server/helpers/upload' import { Redis } from '@server/lib/redis' import { isAbleToUploadVideo } from '@server/lib/user' import { getServerActor } from '@server/models/application/application' -import { ExpressPromiseHandler } from '@server/types/express' +import { ExpressPromiseHandler } from '@server/types/express-handler' import { MUserAccountId, MVideoFullLight } from '@server/types/models' import { getAllPrivacies } from '@shared/core-utils' import { HttpStatusCode, ServerErrorCode, UserRight, VideoInclude, VideoPrivacy } from '@shared/models' diff --git a/server/tests/register.ts b/server/tests/register.ts deleted file mode 100644 index af6c8c644..000000000 --- a/server/tests/register.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { registerTSPaths } from '../helpers/register-ts-paths' - -registerTSPaths() diff --git a/server/tools/cli.ts b/server/tools/cli.ts index 00adcedeb..a844b9dcf 100644 --- a/server/tools/cli.ts +++ b/server/tools/cli.ts @@ -2,19 +2,19 @@ import { Command } from 'commander' import { Netrc } from 'netrc-parser' import { join } from 'path' import { createLogger, format, transports } from 'winston' -import { PeerTubeServer } from '@shared/server-commands' +import { loadLanguages } from '@server/initializers/constants' +import { root } from '@shared/core-utils' import { UserRole } from '@shared/models' +import { PeerTubeServer } from '@shared/server-commands' import { VideoPrivacy } from '../../shared/models/videos' import { getAppNumber, isTestInstance } from '../helpers/core-utils' -import { root } from '@shared/core-utils' -import { loadLanguages } from '@server/initializers/constants' let configName = 'PeerTube/CLI' if (isTestInstance()) configName += `-${getAppNumber()}` const config = require('application-config')(configName) -const version = require('../../../package.json').version +const version = require(join(root(), 'package.json')).version async function getAdminTokenOrDie (server: PeerTubeServer, username: string, password: string) { const token = await server.login.getAccessToken(username, password) diff --git a/server/tools/peertube-auth.ts b/server/tools/peertube-auth.ts index afa19ee08..f8ac8b2ab 100644 --- a/server/tools/peertube-auth.ts +++ b/server/tools/peertube-auth.ts @@ -1,12 +1,7 @@ -// eslint-disable @typescript-eslint/no-unnecessary-type-assertion - -import { registerTSPaths } from '../helpers/register-ts-paths' -registerTSPaths() - +import CliTable3 from 'cli-table3' import { OptionValues, program } from 'commander' -import { assignToken, buildServer, getNetrc, getSettings, writeSettings } from './cli' import { isUserUsernameValid } from '../helpers/custom-validators/users' -import CliTable3 from 'cli-table3' +import { assignToken, buildServer, getNetrc, getSettings, writeSettings } from './cli' import prompt = require('prompt') diff --git a/server/tools/peertube-get-access-token.ts b/server/tools/peertube-get-access-token.ts index a67de9180..d59a3632e 100644 --- a/server/tools/peertube-get-access-token.ts +++ b/server/tools/peertube-get-access-token.ts @@ -1,6 +1,3 @@ -import { registerTSPaths } from '../helpers/register-ts-paths' -registerTSPaths() - import { program } from 'commander' import { assignToken, buildServer } from './cli' diff --git a/server/tools/peertube-import-videos.ts b/server/tools/peertube-import-videos.ts index 87aec60ef..661a4cf35 100644 --- a/server/tools/peertube-import-videos.ts +++ b/server/tools/peertube-import-videos.ts @@ -1,12 +1,10 @@ -import { registerTSPaths } from '../helpers/register-ts-paths' -registerTSPaths() - import { program } from 'commander' import { accessSync, constants } from 'fs' import { remove } from 'fs-extra' import { join } from 'path' -import { sha256 } from '@shared/extra-utils' +import { YoutubeDLCLI, YoutubeDLInfo, YoutubeDLInfoBuilder } from '@server/helpers/youtube-dl' import { wait } from '@shared/core-utils' +import { sha256 } from '@shared/extra-utils' import { doRequestAndSaveToFile } from '../helpers/requests' import { assignToken, @@ -16,7 +14,7 @@ import { getLogger, getServerCredentials } from './cli' -import { YoutubeDLCLI, YoutubeDLInfo, YoutubeDLInfoBuilder } from '@server/helpers/youtube-dl' + import prompt = require('prompt') const processOptions = { diff --git a/server/tools/peertube-plugins.ts b/server/tools/peertube-plugins.ts index 9dd3f08c9..47090b3a5 100644 --- a/server/tools/peertube-plugins.ts +++ b/server/tools/peertube-plugins.ts @@ -1,13 +1,8 @@ -// eslint-disable @typescript-eslint/no-unnecessary-type-assertion - -import { registerTSPaths } from '../helpers/register-ts-paths' -registerTSPaths() - -import { program, Command, OptionValues } from 'commander' -import { assignToken, buildServer, getServerCredentials } from './cli' -import { PluginType } from '../../shared/models' -import { isAbsolute } from 'path' import CliTable3 from 'cli-table3' +import { Command, OptionValues, program } from 'commander' +import { isAbsolute } from 'path' +import { PluginType } from '../../shared/models' +import { assignToken, buildServer, getServerCredentials } from './cli' program .name('plugins') diff --git a/server/tools/peertube-redundancy.ts b/server/tools/peertube-redundancy.ts index 12c412b67..2c62a3c19 100644 --- a/server/tools/peertube-redundancy.ts +++ b/server/tools/peertube-redundancy.ts @@ -1,6 +1,3 @@ -import { registerTSPaths } from '../helpers/register-ts-paths' -registerTSPaths() - import CliTable3 from 'cli-table3' import { Command, program } from 'commander' import { uniq } from 'lodash' diff --git a/server/tools/peertube-upload.ts b/server/tools/peertube-upload.ts index 01fb1fe8d..08bd5f2bb 100644 --- a/server/tools/peertube-upload.ts +++ b/server/tools/peertube-upload.ts @@ -1,6 +1,3 @@ -import { registerTSPaths } from '../helpers/register-ts-paths' -registerTSPaths() - import { program } from 'commander' import { access, constants } from 'fs-extra' import { isAbsolute } from 'path' diff --git a/server/tools/peertube.ts b/server/tools/peertube.ts index 9e07640f0..1d3158044 100644 --- a/server/tools/peertube.ts +++ b/server/tools/peertube.ts @@ -1,8 +1,5 @@ #!/usr/bin/env node -import { registerTSPaths } from '../helpers/register-ts-paths' -registerTSPaths() - import { CommandOptions, program } from 'commander' import { getSettings, version } from './cli' diff --git a/server/tools/tsconfig.json b/server/tools/tsconfig.json index 61e6b8739..8264f5b35 100644 --- a/server/tools/tsconfig.json +++ b/server/tools/tsconfig.json @@ -1,11 +1,16 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "../../dist/server/tools" + "baseUrl": "./", + "outDir": "../../dist/server/tools", + "paths": { // FIXME: https://github.com/benyap/resolve-tspaths/issues/10 + "@server/*": [ "../../server/*" ], + "@shared/*": [ "../../shared/*" ] + } }, "include": [ ".", "../typings" ], "references": [ - { "path": "../" }, + { "path": "../" } ], "files": [], "exclude": [ ] // Overwrite exclude property diff --git a/server/types/express-handler.ts b/server/types/express-handler.ts new file mode 100644 index 000000000..e72be36e4 --- /dev/null +++ b/server/types/express-handler.ts @@ -0,0 +1,3 @@ +import { NextFunction, Request, Response } from 'express' + +export type ExpressPromiseHandler = (req: Request, res: Response, next: NextFunction) => Promise diff --git a/server/types/express.d.ts b/server/types/express.d.ts new file mode 100644 index 000000000..1a99b598a --- /dev/null +++ b/server/types/express.d.ts @@ -0,0 +1,189 @@ + +import { OutgoingHttpHeaders } from 'http' +import { RegisterServerAuthExternalOptions } from '@server/types' +import { + MAbuseMessage, + MAbuseReporter, + MAccountBlocklist, + MActorFollowActorsDefault, + MActorUrl, + MChannelBannerAccountDefault, + MStreamingPlaylist, + MVideoChangeOwnershipFull, + MVideoFile, + MVideoFormattableDetails, + MVideoId, + MVideoImmutable, + MVideoLive, + MVideoPlaylistFull, + MVideoPlaylistFullSummary +} from '@server/types/models' +import { MOAuthTokenUser } from '@server/types/models/oauth/oauth-token' +import { MPlugin, MServer, MServerBlocklist } from '@server/types/models/server' +import { MVideoImportDefault } from '@server/types/models/video/video-import' +import { MVideoPlaylistElement, MVideoPlaylistElementVideoUrlPlaylistPrivacy } from '@server/types/models/video/video-playlist-element' +import { MAccountVideoRateAccountVideo } from '@server/types/models/video/video-rate' +import { HttpMethod, PeerTubeProblemDocumentData, ServerErrorCode, VideoCreate } from '@shared/models' +import { File as UploadXFile, Metadata } from '@uploadx/core' +import { RegisteredPlugin } from '../../lib/plugins/plugin-manager' +import { + MAccountDefault, + MActorAccountChannelId, + MActorFollowActorsDefaultSubscription, + MActorFull, + MComment, + MCommentOwnerVideoReply, + MUserDefault, + MVideoBlacklist, + MVideoCaptionVideo, + MVideoFullLight, + MVideoRedundancyVideo, + MVideoShareActor, + MVideoThumbnail +} from '../../types/models' +import { Writable } from 'stream' + +declare module 'express' { + export interface Request { + query: any + method: HttpMethod + } + + // Upload using multer or uploadx middleware + export type MulterOrUploadXFile = UploadXFile | Express.Multer.File + + export type UploadFiles = { + [fieldname: string]: MulterOrUploadXFile[] + } | MulterOrUploadXFile[] + + // Partial object used by some functions to check the file mimetype/extension + export type UploadFileForCheck = { + originalname: string + mimetype: string + } + + export type UploadFilesForCheck = { + [fieldname: string]: UploadFileForCheck[] + } | UploadFileForCheck[] + + // Upload file with a duration added by our middleware + export type VideoUploadFile = Pick & { + duration: number + } + + // Extends Metadata property of UploadX object + export type UploadXFileMetadata = Metadata & VideoCreate & { + previewfile: Express.Multer.File[] + thumbnailfile: Express.Multer.File[] + } + + // Our custom UploadXFile object using our custom metadata + export type CustomUploadXFile = UploadXFile & { metadata: T } + + export type EnhancedUploadXFile = CustomUploadXFile & { + duration: number + path: string + filename: string + } + + // Extends Response with added functions and potential variables passed by middlewares + interface Response { + fail: (options: { + message: string + + title?: string + status?: number + type?: ServerErrorCode + instance?: string + + data?: PeerTubeProblemDocumentData + }) => void + + locals: { + apicache: { + content: string | Buffer + write: Writable['write'] + writeHead: Response['writeHead'] + end: Response['end'] + cacheable: boolean + headers: OutgoingHttpHeaders + } + + docUrl?: string + + videoAPI?: MVideoFormattableDetails + videoAll?: MVideoFullLight + onlyImmutableVideo?: MVideoImmutable + onlyVideo?: MVideoThumbnail + videoId?: MVideoId + + videoLive?: MVideoLive + + videoShare?: MVideoShareActor + + videoFile?: MVideoFile + + videoFileResumable?: EnhancedUploadXFile + + videoImport?: MVideoImportDefault + + videoBlacklist?: MVideoBlacklist + + videoCaption?: MVideoCaptionVideo + + abuse?: MAbuseReporter + abuseMessage?: MAbuseMessage + + videoStreamingPlaylist?: MStreamingPlaylist + + videoChannel?: MChannelBannerAccountDefault + + videoPlaylistFull?: MVideoPlaylistFull + videoPlaylistSummary?: MVideoPlaylistFullSummary + + videoPlaylistElement?: MVideoPlaylistElement + videoPlaylistElementAP?: MVideoPlaylistElementVideoUrlPlaylistPrivacy + + accountVideoRate?: MAccountVideoRateAccountVideo + + videoCommentFull?: MCommentOwnerVideoReply + videoCommentThread?: MComment + + follow?: MActorFollowActorsDefault + subscription?: MActorFollowActorsDefaultSubscription + + nextOwner?: MAccountDefault + videoChangeOwnership?: MVideoChangeOwnershipFull + + account?: MAccountDefault + + actorUrl?: MActorUrl + actorFull?: MActorFull + + user?: MUserDefault + + server?: MServer + + videoRedundancy?: MVideoRedundancyVideo + + accountBlock?: MAccountBlocklist + serverBlock?: MServerBlocklist + + oauth?: { + token: MOAuthTokenUser + } + + signature?: { + actor: MActorAccountChannelId + } + + authenticated?: boolean + + registeredPlugin?: RegisteredPlugin + + externalAuth?: RegisterServerAuthExternalOptions + + plugin?: MPlugin + } + } +} diff --git a/server/types/express.ts b/server/types/express.ts deleted file mode 100644 index e72be36e4..000000000 --- a/server/types/express.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { NextFunction, Request, Response } from 'express' - -export type ExpressPromiseHandler = (req: Request, res: Response, next: NextFunction) => Promise diff --git a/server/typings/express/index.d.ts b/server/typings/express/index.d.ts deleted file mode 100644 index 1a99b598a..000000000 --- a/server/typings/express/index.d.ts +++ /dev/null @@ -1,189 +0,0 @@ - -import { OutgoingHttpHeaders } from 'http' -import { RegisterServerAuthExternalOptions } from '@server/types' -import { - MAbuseMessage, - MAbuseReporter, - MAccountBlocklist, - MActorFollowActorsDefault, - MActorUrl, - MChannelBannerAccountDefault, - MStreamingPlaylist, - MVideoChangeOwnershipFull, - MVideoFile, - MVideoFormattableDetails, - MVideoId, - MVideoImmutable, - MVideoLive, - MVideoPlaylistFull, - MVideoPlaylistFullSummary -} from '@server/types/models' -import { MOAuthTokenUser } from '@server/types/models/oauth/oauth-token' -import { MPlugin, MServer, MServerBlocklist } from '@server/types/models/server' -import { MVideoImportDefault } from '@server/types/models/video/video-import' -import { MVideoPlaylistElement, MVideoPlaylistElementVideoUrlPlaylistPrivacy } from '@server/types/models/video/video-playlist-element' -import { MAccountVideoRateAccountVideo } from '@server/types/models/video/video-rate' -import { HttpMethod, PeerTubeProblemDocumentData, ServerErrorCode, VideoCreate } from '@shared/models' -import { File as UploadXFile, Metadata } from '@uploadx/core' -import { RegisteredPlugin } from '../../lib/plugins/plugin-manager' -import { - MAccountDefault, - MActorAccountChannelId, - MActorFollowActorsDefaultSubscription, - MActorFull, - MComment, - MCommentOwnerVideoReply, - MUserDefault, - MVideoBlacklist, - MVideoCaptionVideo, - MVideoFullLight, - MVideoRedundancyVideo, - MVideoShareActor, - MVideoThumbnail -} from '../../types/models' -import { Writable } from 'stream' - -declare module 'express' { - export interface Request { - query: any - method: HttpMethod - } - - // Upload using multer or uploadx middleware - export type MulterOrUploadXFile = UploadXFile | Express.Multer.File - - export type UploadFiles = { - [fieldname: string]: MulterOrUploadXFile[] - } | MulterOrUploadXFile[] - - // Partial object used by some functions to check the file mimetype/extension - export type UploadFileForCheck = { - originalname: string - mimetype: string - } - - export type UploadFilesForCheck = { - [fieldname: string]: UploadFileForCheck[] - } | UploadFileForCheck[] - - // Upload file with a duration added by our middleware - export type VideoUploadFile = Pick & { - duration: number - } - - // Extends Metadata property of UploadX object - export type UploadXFileMetadata = Metadata & VideoCreate & { - previewfile: Express.Multer.File[] - thumbnailfile: Express.Multer.File[] - } - - // Our custom UploadXFile object using our custom metadata - export type CustomUploadXFile = UploadXFile & { metadata: T } - - export type EnhancedUploadXFile = CustomUploadXFile & { - duration: number - path: string - filename: string - } - - // Extends Response with added functions and potential variables passed by middlewares - interface Response { - fail: (options: { - message: string - - title?: string - status?: number - type?: ServerErrorCode - instance?: string - - data?: PeerTubeProblemDocumentData - }) => void - - locals: { - apicache: { - content: string | Buffer - write: Writable['write'] - writeHead: Response['writeHead'] - end: Response['end'] - cacheable: boolean - headers: OutgoingHttpHeaders - } - - docUrl?: string - - videoAPI?: MVideoFormattableDetails - videoAll?: MVideoFullLight - onlyImmutableVideo?: MVideoImmutable - onlyVideo?: MVideoThumbnail - videoId?: MVideoId - - videoLive?: MVideoLive - - videoShare?: MVideoShareActor - - videoFile?: MVideoFile - - videoFileResumable?: EnhancedUploadXFile - - videoImport?: MVideoImportDefault - - videoBlacklist?: MVideoBlacklist - - videoCaption?: MVideoCaptionVideo - - abuse?: MAbuseReporter - abuseMessage?: MAbuseMessage - - videoStreamingPlaylist?: MStreamingPlaylist - - videoChannel?: MChannelBannerAccountDefault - - videoPlaylistFull?: MVideoPlaylistFull - videoPlaylistSummary?: MVideoPlaylistFullSummary - - videoPlaylistElement?: MVideoPlaylistElement - videoPlaylistElementAP?: MVideoPlaylistElementVideoUrlPlaylistPrivacy - - accountVideoRate?: MAccountVideoRateAccountVideo - - videoCommentFull?: MCommentOwnerVideoReply - videoCommentThread?: MComment - - follow?: MActorFollowActorsDefault - subscription?: MActorFollowActorsDefaultSubscription - - nextOwner?: MAccountDefault - videoChangeOwnership?: MVideoChangeOwnershipFull - - account?: MAccountDefault - - actorUrl?: MActorUrl - actorFull?: MActorFull - - user?: MUserDefault - - server?: MServer - - videoRedundancy?: MVideoRedundancyVideo - - accountBlock?: MAccountBlocklist - serverBlock?: MServerBlocklist - - oauth?: { - token: MOAuthTokenUser - } - - signature?: { - actor: MActorAccountChannelId - } - - authenticated?: boolean - - registeredPlugin?: RegisteredPlugin - - externalAuth?: RegisterServerAuthExternalOptions - - plugin?: MPlugin - } - } -} -- cgit v1.2.3