From 6627dbc957477aa32e21ed1bdc8cd72b928cd616 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 28 Dec 2021 10:18:15 +0100 Subject: Move types package in packages/ --- packages/types/README.md | 19 +++++++++ packages/types/generate-package.ts | 74 +++++++++++++++++++++++++++++++++ packages/types/src/client/index.ts | 1 + packages/types/src/client/tsconfig.json | 15 +++++++ packages/types/src/index.ts | 3 ++ packages/types/tests/test.ts | 32 ++++++++++++++ packages/types/tsconfig.dist.json | 16 +++++++ packages/types/tsconfig.json | 23 ++++++++++ 8 files changed, 183 insertions(+) create mode 100644 packages/types/README.md create mode 100644 packages/types/generate-package.ts create mode 100644 packages/types/src/client/index.ts create mode 100644 packages/types/src/client/tsconfig.json create mode 100644 packages/types/src/index.ts create mode 100644 packages/types/tests/test.ts create mode 100644 packages/types/tsconfig.dist.json create mode 100644 packages/types/tsconfig.json (limited to 'packages') diff --git a/packages/types/README.md b/packages/types/README.md new file mode 100644 index 000000000..adeca48e5 --- /dev/null +++ b/packages/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/packages/types/generate-package.ts b/packages/types/generate-package.ts new file mode 100644 index 000000000..0c14514e7 --- /dev/null +++ b/packages/types/generate-package.ts @@ -0,0 +1,74 @@ +import { execSync } from 'child_process' +import depcheck, { PackageDependencies } from 'depcheck' +import { copyFile, readJson, remove, writeFile, writeJSON } from 'fs-extra' +import { resolve } from 'path' +import { cwd } from 'process' + +run() + .then(() => process.exit(0)) + .catch(err => { + console.error(err) + process.exit(-1) + }) + +async function run () { + const typesPath = resolve(cwd(), './packages/types/') + 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 distTsConfigPath = resolve(cwd(), typesPath, './tsconfig.dist.json') + const distTsConfig = await readJson(distTsConfigPath) + const clientPackageJson = await readJson(resolve(cwd(), './client/package.json')) + + await remove(typesDistPath) + execSync('npm run tsc -- -b --verbose packages/types', { stdio: 'inherit' }) + execSync(`npm run resolve-tspaths -- --project ${distTsConfigPath} --src ${typesDistPath} --out ${typesDistPath}`, { stdio: 'inherit' }) + + const allDependencies = Object.assign( + mainPackageJson.dependencies, + mainPackageJson.devDepencies, + clientPackageJson.dependencies + ) as PackageDependencies + + // https://github.com/depcheck/depcheck#api + const depcheckOptions = { + parsers: { '**/*.ts': depcheck.parser.typescript }, + detectors: [ + depcheck.detector.requireCallExpression, + depcheck.detector.importDeclaration + ], + ignoreMatches: Object.keys(distTsConfig?.compilerOptions?.paths || []), + package: { dependencies: allDependencies } + } + + const { dependencies: unusedDependencies } = await depcheck(resolve(typesPath), depcheckOptions) + console.log(`Removing ${Object.keys(unusedDependencies).length} unused dependencies.`) + const dependencies = Object + .keys(allDependencies) + .filter(dependencyName => !unusedDependencies.includes(dependencyName)) + .reduce((dependencies, dependencyName) => { + dependencies[dependencyName] = allDependencies[dependencyName] + return dependencies + }, {}) + + const { description, version, licence, engines, author, repository } = mainPackageJson + const typesPackageJson = { + name: '@peertube/peertube-types', + description, + version, + private: false, + license: licence, + engines, + author, + repository, + dependencies + } + console.log(`Writing package.json to ${typesDistPackageJsonPath}`) + await writeJSON(typesDistPackageJsonPath, typesPackageJson, { spaces: 2 }) + + console.log(`Writing git ignore to ${typesDistGitIgnorePath}`) + await writeFile(typesDistGitIgnorePath, '*.tsbuildinfo') + + await copyFile(resolve(typesPath, './README.md'), resolve(typesDistPath, './README.md')) +} diff --git a/packages/types/src/client/index.ts b/packages/types/src/client/index.ts new file mode 100644 index 000000000..5ee10ecb8 --- /dev/null +++ b/packages/types/src/client/index.ts @@ -0,0 +1 @@ +export * from '@client/types' diff --git a/packages/types/src/client/tsconfig.json b/packages/types/src/client/tsconfig.json new file mode 100644 index 000000000..bb76fbe21 --- /dev/null +++ b/packages/types/src/client/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "stripInternal": true, + "removeComments": false, + "emitDeclarationOnly": true, + "outDir": "../../dist/client/", + "rootDir": "./", + "tsBuildInfoFile": "../../dist/tsconfig.client.types.tsbuildinfo" + }, + "references": [ + { "path": "../../../../client/tsconfig.types.json" } + ], + "files": ["index.ts"] +} diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts new file mode 100644 index 000000000..a8adca287 --- /dev/null +++ b/packages/types/src/index.ts @@ -0,0 +1,3 @@ +export * from '@server/types' +export * from '@server/types/models' +export * from '@shared/models' diff --git a/packages/types/tests/test.ts b/packages/types/tests/test.ts new file mode 100644 index 000000000..8c53320a1 --- /dev/null +++ b/packages/types/tests/test.ts @@ -0,0 +1,32 @@ +import { RegisterServerOptions, Video } from '../dist' +import { RegisterClientOptions } from '../dist/client' + +function register1 ({ registerHook }: RegisterServerOptions) { + registerHook({ + target: 'action:application.listening', + handler: () => console.log('hello') + }) +} + +function register2 ({ registerHook, peertubeHelpers }: RegisterClientOptions) { + registerHook({ + 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)) + }, + }) +} diff --git a/packages/types/tsconfig.dist.json b/packages/types/tsconfig.dist.json new file mode 100644 index 000000000..fbc92712b --- /dev/null +++ b/packages/types/tsconfig.dist.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "typeRoots": [ + "node_modules/@types", + "client/node_modules/@types" + ], + "baseUrl": "./dist", + "paths": { + "@server/*": [ "server/*" ], + "@shared/*": [ "shared/*" ], + "@client/*": [ "client/*" ] + } + } +} + diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json new file mode 100644 index 000000000..f8e16f6b4 --- /dev/null +++ b/packages/types/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "stripInternal": true, + "removeComments": false, + "emitDeclarationOnly": true, + "outDir": "./dist/", + "baseUrl": "./src/", + "rootDir": "./src/", + "tsBuildInfoFile": "./dist/tsconfig.server.types.tsbuildinfo", + "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"] +} -- cgit v1.2.3