From b8fa3e8c734a46918118afe7976f248cc883f675 Mon Sep 17 00:00:00 2001 From: lutangar Date: Tue, 9 Nov 2021 13:49:08 +0100 Subject: [PATCH] refactor(types): create dedicated folder for types package src fix guide examples and add types package readme refactor(tsconfig): move back base tsconfig to base directory --- .gitignore | 2 +- client/src/index.ts | 1 - client/tsconfig.types.json | 8 ++--- index.ts | 1 - package.json | 4 +-- server/tools/tsconfig.json | 1 + server/tsconfig.types.json | 2 +- shared/tsconfig.json | 3 +- shared/tsconfig.types.json | 2 +- support/doc/plugins/guide.md | 33 +++++++++++++++---- tsconfig.base.json | 4 +-- tsconfig.json | 6 +++- tsconfig.types.json | 16 --------- types/README.md | 19 +++++++++++ .../generate-package.ts | 31 ++++++++--------- types/src/client/index.ts | 1 + types/src/client/tsconfig.json | 12 +++++++ types/src/index.ts | 1 + types/tsconfig.dist.json | 16 +++++++++ types/tsconfig.json | 23 +++++++++++++ 20 files changed, 131 insertions(+), 55 deletions(-) delete mode 100644 client/src/index.ts delete mode 100644 index.ts delete mode 100644 tsconfig.types.json create mode 100644 types/README.md rename scripts/generate-types-package.ts => types/generate-package.ts (67%) create mode 100644 types/src/client/index.ts create mode 100644 types/src/client/tsconfig.json create mode 100644 types/src/index.ts create mode 100644 types/tsconfig.dist.json create mode 100644 types/tsconfig.json diff --git a/.gitignore b/.gitignore index ac1d6a99a..0ec17217d 100644 --- a/.gitignore +++ b/.gitignore @@ -53,4 +53,4 @@ yarn-error.log # TypeScript *.tsbuildinfo -/types +/types/dist/ diff --git a/client/src/index.ts b/client/src/index.ts deleted file mode 100644 index c9f6f047d..000000000 --- a/client/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './types' diff --git a/client/tsconfig.types.json b/client/tsconfig.types.json index 35a5e92cc..1f5c86161 100644 --- a/client/tsconfig.types.json +++ b/client/tsconfig.types.json @@ -4,15 +4,15 @@ "stripInternal": true, "removeComments": false, "declaration": true, - "outDir": "../types/client/", + "outDir": "../types/dist/client/", "emitDeclarationOnly": true, "composite": true, "rootDir": "src/", - "tsBuildInfoFile": "../types/client.tsbuildinfo" + "tsBuildInfoFile": "../types/dist/tsconfig.client.tsbuildinfo" }, "references": [ { "path": "../shared/tsconfig.types.json" } ], - "files": ["src/index.ts"], - "include": ["src/index.ts", "src/types/**/*"] + "files": ["src/types/index.ts"], + "include": ["src/**/*", "src/types/**/*"] } diff --git a/index.ts b/index.ts deleted file mode 100644 index 4c65e3d02..000000000 --- a/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './server/types' diff --git a/package.json b/package.json index 7bfe8aadc..88d8329e6 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "build:embed": "bash ./scripts/build/embed.sh", "build:server": "bash ./scripts/build/server.sh", "build:client": "bash ./scripts/build/client.sh", - "build:types": "tsc -b --verbose tsconfig.types.json", + "build:types": "tsc -b --verbose types", "clean:client": "bash ./scripts/clean/client/index.sh", "clean:server:test": "bash ./scripts/clean/server/test.sh", "i18n:update": "bash ./scripts/i18n/update.sh", @@ -53,7 +53,7 @@ "test": "bash ./scripts/test.sh", "help": "bash ./scripts/help.sh", "generate-cli-doc": "bash ./scripts/generate-cli-doc.sh", - "generate-types-package": "ts-node ./scripts/generate-types-package.ts", + "generate-types-package": "ts-node ./types/generate-package.ts", "parse-log": "node ./dist/scripts/parse-log.js", "prune-storage": "node ./dist/scripts/prune-storage.js", "postinstall": "test -n \"$NOCLIENT\" || (cd client && yarn install --pure-lockfile)", diff --git a/server/tools/tsconfig.json b/server/tools/tsconfig.json index 575133ec8..61e6b8739 100644 --- a/server/tools/tsconfig.json +++ b/server/tools/tsconfig.json @@ -7,5 +7,6 @@ "references": [ { "path": "../" }, ], + "files": [], "exclude": [ ] // Overwrite exclude property } diff --git a/server/tsconfig.types.json b/server/tsconfig.types.json index 26697bd45..824834066 100644 --- a/server/tsconfig.types.json +++ b/server/tsconfig.types.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "../types/server", + "outDir": "../types/dist/server", "stripInternal": true, "removeComments": false, "emitDeclarationOnly": true diff --git a/shared/tsconfig.json b/shared/tsconfig.json index 95892077b..88107e27f 100644 --- a/shared/tsconfig.json +++ b/shared/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../tsconfig.base.json", "compilerOptions": { - "outDir": "../dist/shared" + "outDir": "../dist/shared", + } } diff --git a/shared/tsconfig.types.json b/shared/tsconfig.types.json index 18c470059..b01d12e53 100644 --- a/shared/tsconfig.types.json +++ b/shared/tsconfig.types.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "outDir": "../types/shared", + "outDir": "../types/dist/shared", "stripInternal": true, "removeComments": false, "emitDeclarationOnly": true diff --git a/support/doc/plugins/guide.md b/support/doc/plugins/guide.md index 5c96d1b03..92cc20db0 100644 --- a/support/doc/plugins/guide.md +++ b/support/doc/plugins/guide.md @@ -889,12 +889,12 @@ If you want to use __Typescript__ see section below. You can add __PeerTube__ types as dev dependencies: ``` -npm install --dev @peertube/peertube-types +npm install --save-dev @peertube/peertube-types ``` This package exposes *server* definition files by default: ```ts -import { RegisterServerOptions } from '@peertube/peertube-types' +import { RegisterServerOptions } from '@peertube/peertube-types/server/types' export async function register ({ registerHook }: RegisterServerOptions) { registerHook({ @@ -906,14 +906,33 @@ export async function register ({ registerHook }: RegisterServerOptions) { But it also exposes client types and various models used in __PeerTube__: ```ts -import { RegisterClientOptions } from '@peertube/peertube-types/client' +import { RegisterClientOptions } from '@larriereguichet/peertube-types/client/types'; +import { Video } from '@larriereguichet/peertube-types/shared'; -export function register ({ registerHook, peertubeHelpers }: RegisterClientOptions) { +function register({ registerHook, peertubeHelpers }: RegisterClientOptions) { registerHook({ - target: 'action:application.init', - handler: () => onApplicationInit(peertubeHelpers) - }) + target: 'action:admin-plugin-settings.init', + handler: ({ npmName }: { npmName: string }) => { + if ('peertube-plugin-transcription' !== npmName) { + return; + } + }, + }); + + registerHook({ + target: 'action:video-watch.video.loaded', + handler: ({ video }: { video: Video }) => { + fetch(`${peertubeHelpers.getBaseRouterRoute()}/videos/${video.uuid}/captions`, { + method: 'PUT', + headers: peertubeHelpers.getAuthHeader(), + }) + .then((res) => res.json()) + .then((data) => console.log('Hi %s.', data)); + }, + }); } + +export { register }; ``` > Other types are accessible from the shared path `@peertube/peertube-types/shared`. diff --git a/tsconfig.base.json b/tsconfig.base.json index 349c4de6c..f579c703a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -24,10 +24,10 @@ "client/node_modules/@types" ], "baseUrl": "./", - "outDir": "./dist/", "paths": { "@server/*": [ "server/*" ], - "@shared/*": [ "shared/*" ] + "@shared/*": [ "shared/*" ], + "@client/*": [ "client/src/*" ], }, "resolveJsonModule": true, "strict": false, diff --git a/tsconfig.json b/tsconfig.json index 8f1d5b6fb..cb7937f99 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,7 +6,11 @@ "paths": { "@server/*": [ "server/*" ], "@shared/*": [ "shared/*" ] - } + }, + "typeRoots": [ + "server/typings", + "node_modules/@types" + ] }, "references": [ { "path": "./shared" }, diff --git a/tsconfig.types.json b/tsconfig.types.json deleted file mode 100644 index b6898e294..000000000 --- a/tsconfig.types.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "stripInternal": true, - "removeComments": false, - "emitDeclarationOnly": true, - "outDir": "./types/" - }, - "references": [ - { "path": "./shared/tsconfig.types.json" }, - { "path": "./server/tsconfig.types.json" }, - { "path": "./client/tsconfig.types.json" } - ], - "files": ["./index.ts"], -} - diff --git a/types/README.md b/types/README.md new file mode 100644 index 000000000..adeca48e5 --- /dev/null +++ b/types/README.md @@ -0,0 +1,19 @@ +# PeerTube typings + +These **Typescript** *types* are mainly used to write **PeerTube** plugins. + +## Installation + +Npm: +``` +npm install --save-dev @peertube/peertube-types +``` + +Yarn: +``` +yarn add --dev @peertube/peertube-types +``` + +## Usage + +> See [contribute-plugins](https://docs.joinpeertube.org/contribute-plugins?id=typescript) **Typescript** section of the doc. diff --git a/scripts/generate-types-package.ts b/types/generate-package.ts similarity index 67% rename from scripts/generate-types-package.ts rename to types/generate-package.ts index 3543fa472..e0bdd721a 100644 --- a/scripts/generate-types-package.ts +++ b/types/generate-package.ts @@ -14,11 +14,12 @@ run() async function run () { execSync('npm run build:types', { stdio: 'inherit' }) const typesPath = resolve(cwd(), './types/') - const typesPackageJsonPath = resolve(typesPath, './package.json') - const typesGitIgnorePath = resolve(typesPath, './.gitignore') + const typesDistPath = resolve(cwd(), typesPath, './dist/') + const typesDistPackageJsonPath = resolve(typesDistPath, './package.json') + const typesDistGitIgnorePath = resolve(typesDistPath, './.gitignore') const mainPackageJson = await readJson(resolve(cwd(), './package.json')) - const tsConfigPath = resolve(cwd(), './tsconfig.json') - const tsConfig = await readJson(tsConfigPath) + const distTsConfigPath = resolve(cwd(), typesPath, './tsconfig.dist.json') + const distTsConfig = await readJson(distTsConfigPath) const clientPackageJson = await readJson(resolve(cwd(), './client/package.json')) const allDependencies = Object.assign( @@ -34,7 +35,7 @@ async function run () { depcheck.detector.requireCallExpression, depcheck.detector.importDeclaration ], - ignoreMatches: Object.keys(tsConfig?.compilerOptions?.paths || []), + ignoreMatches: Object.keys(distTsConfig?.compilerOptions?.paths || []), package: { dependencies: allDependencies } } @@ -60,19 +61,15 @@ async function run () { repository, dependencies } - console.log(`Writing package.json to ${typesPackageJsonPath}`) - await writeJSON(typesPackageJsonPath, typesPackageJson, { spaces: 2 }) + console.log(`Writing package.json to ${typesDistPackageJsonPath}`) + await writeJSON(typesDistPackageJsonPath, typesPackageJson, { spaces: 2 }) - console.log(`Writing git ignore to ${typesGitIgnorePath}`) - await writeFile(typesGitIgnorePath, '*.tsbuildinfo') + console.log(`Writing git ignore to ${typesDistGitIgnorePath}`) + await writeFile(typesDistGitIgnorePath, '*.tsbuildinfo') console.log('Copying tsconfig files') - await copyFile(tsConfigPath, resolve(typesPath, './tsconfig.json')) - await copyFile(resolve(cwd(), './tsconfig.base.json'), resolve(typesPath, './tsconfig.base.json')) - tsConfig.references.map(({ path }) => path).forEach((path) => { - const src = resolve(cwd(), path, '/tsconfig.json') - const dest = resolve(typesPath, path, './tsconfig.json') - console.log(`${src} -> ${dest}`) - copyFile(src, dest).catch((e) => console.error(e)) - }) + await copyFile(distTsConfigPath, resolve(typesDistPath, './tsconfig.json')) + await copyFile(resolve(cwd(), './tsconfig.base.json'), resolve(typesDistPath, './tsconfig.base.json')) + + await copyFile(resolve(typesPath, './README.md'), resolve(typesDistPath, './README.md')) } diff --git a/types/src/client/index.ts b/types/src/client/index.ts new file mode 100644 index 000000000..5ee10ecb8 --- /dev/null +++ b/types/src/client/index.ts @@ -0,0 +1 @@ +export * from '@client/types' diff --git a/types/src/client/tsconfig.json b/types/src/client/tsconfig.json new file mode 100644 index 000000000..199273538 --- /dev/null +++ b/types/src/client/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "../../dist/client/", + "rootDir": "./", + "tsBuildInfoFile": "../../dist/tsconfig.client.types.tsbuildinfo" + }, + "references": [ + { "path": "../../../client/tsconfig.types.json" } + ], + "files": ["index.ts"] +} diff --git a/types/src/index.ts b/types/src/index.ts new file mode 100644 index 000000000..f1325777f --- /dev/null +++ b/types/src/index.ts @@ -0,0 +1 @@ +export * from '@server/types' diff --git a/types/tsconfig.dist.json b/types/tsconfig.dist.json new file mode 100644 index 000000000..d9c3fdfc3 --- /dev/null +++ b/types/tsconfig.dist.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "typeRoots": [ + "node_modules/@types", + "client/node_modules/@types" + ], + "baseUrl": "./", + "paths": { + "@server/*": [ "server/*" ], + "@shared/*": [ "shared/*" ], + "@client/*": [ "client/*" ] + } + } +} + diff --git a/types/tsconfig.json b/types/tsconfig.json new file mode 100644 index 000000000..8f09c4a83 --- /dev/null +++ b/types/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "stripInternal": true, + "removeComments": false, + "emitDeclarationOnly": true, + "outDir": "./dist/", + "baseUrl": "./src/", + "rootDir": "./src/", + "paths": { + "@server/*": [ "../../server/*" ], + "@shared/*": [ "../../shared/*" ], + "@client/*": [ "../../client/src/*" ], + } + }, + "references": [ + { "path": "../shared/tsconfig.types.json" }, + { "path": "../server/tsconfig.types.json" }, + { "path": "./src/client/tsconfig.json" } + ], + "files": ["./src/index.ts"], +} +