diff options
Diffstat (limited to 'packages/types')
-rw-r--r-- | packages/types/README.md | 19 | ||||
-rw-r--r-- | packages/types/generate-package.ts | 74 | ||||
-rw-r--r-- | packages/types/src/client/index.ts | 1 | ||||
-rw-r--r-- | packages/types/src/client/tsconfig.json | 15 | ||||
-rw-r--r-- | packages/types/src/index.ts | 3 | ||||
-rw-r--r-- | packages/types/tests/test.ts | 32 | ||||
-rw-r--r-- | packages/types/tsconfig.dist.json | 16 | ||||
-rw-r--r-- | packages/types/tsconfig.json | 23 |
8 files changed, 183 insertions, 0 deletions
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 @@ | |||
1 | # PeerTube typings | ||
2 | |||
3 | These **Typescript** *types* are mainly used to write **PeerTube** plugins. | ||
4 | |||
5 | ## Installation | ||
6 | |||
7 | Npm: | ||
8 | ``` | ||
9 | npm install --save-dev @peertube/peertube-types | ||
10 | ``` | ||
11 | |||
12 | Yarn: | ||
13 | ``` | ||
14 | yarn add --dev @peertube/peertube-types | ||
15 | ``` | ||
16 | |||
17 | ## Usage | ||
18 | |||
19 | > 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 @@ | |||
1 | import { execSync } from 'child_process' | ||
2 | import depcheck, { PackageDependencies } from 'depcheck' | ||
3 | import { copyFile, readJson, remove, writeFile, writeJSON } from 'fs-extra' | ||
4 | import { resolve } from 'path' | ||
5 | import { cwd } from 'process' | ||
6 | |||
7 | run() | ||
8 | .then(() => process.exit(0)) | ||
9 | .catch(err => { | ||
10 | console.error(err) | ||
11 | process.exit(-1) | ||
12 | }) | ||
13 | |||
14 | async function run () { | ||
15 | const typesPath = resolve(cwd(), './packages/types/') | ||
16 | const typesDistPath = resolve(cwd(), typesPath, './dist/') | ||
17 | const typesDistPackageJsonPath = resolve(typesDistPath, './package.json') | ||
18 | const typesDistGitIgnorePath = resolve(typesDistPath, './.gitignore') | ||
19 | const mainPackageJson = await readJson(resolve(cwd(), './package.json')) | ||
20 | const distTsConfigPath = resolve(cwd(), typesPath, './tsconfig.dist.json') | ||
21 | const distTsConfig = await readJson(distTsConfigPath) | ||
22 | const clientPackageJson = await readJson(resolve(cwd(), './client/package.json')) | ||
23 | |||
24 | await remove(typesDistPath) | ||
25 | execSync('npm run tsc -- -b --verbose packages/types', { stdio: 'inherit' }) | ||
26 | execSync(`npm run resolve-tspaths -- --project ${distTsConfigPath} --src ${typesDistPath} --out ${typesDistPath}`, { stdio: 'inherit' }) | ||
27 | |||
28 | const allDependencies = Object.assign( | ||
29 | mainPackageJson.dependencies, | ||
30 | mainPackageJson.devDepencies, | ||
31 | clientPackageJson.dependencies | ||
32 | ) as PackageDependencies | ||
33 | |||
34 | // https://github.com/depcheck/depcheck#api | ||
35 | const depcheckOptions = { | ||
36 | parsers: { '**/*.ts': depcheck.parser.typescript }, | ||
37 | detectors: [ | ||
38 | depcheck.detector.requireCallExpression, | ||
39 | depcheck.detector.importDeclaration | ||
40 | ], | ||
41 | ignoreMatches: Object.keys(distTsConfig?.compilerOptions?.paths || []), | ||
42 | package: { dependencies: allDependencies } | ||
43 | } | ||
44 | |||
45 | const { dependencies: unusedDependencies } = await depcheck(resolve(typesPath), depcheckOptions) | ||
46 | console.log(`Removing ${Object.keys(unusedDependencies).length} unused dependencies.`) | ||
47 | const dependencies = Object | ||
48 | .keys(allDependencies) | ||
49 | .filter(dependencyName => !unusedDependencies.includes(dependencyName)) | ||
50 | .reduce((dependencies, dependencyName) => { | ||
51 | dependencies[dependencyName] = allDependencies[dependencyName] | ||
52 | return dependencies | ||
53 | }, {}) | ||
54 | |||
55 | const { description, version, licence, engines, author, repository } = mainPackageJson | ||
56 | const typesPackageJson = { | ||
57 | name: '@peertube/peertube-types', | ||
58 | description, | ||
59 | version, | ||
60 | private: false, | ||
61 | license: licence, | ||
62 | engines, | ||
63 | author, | ||
64 | repository, | ||
65 | dependencies | ||
66 | } | ||
67 | console.log(`Writing package.json to ${typesDistPackageJsonPath}`) | ||
68 | await writeJSON(typesDistPackageJsonPath, typesPackageJson, { spaces: 2 }) | ||
69 | |||
70 | console.log(`Writing git ignore to ${typesDistGitIgnorePath}`) | ||
71 | await writeFile(typesDistGitIgnorePath, '*.tsbuildinfo') | ||
72 | |||
73 | await copyFile(resolve(typesPath, './README.md'), resolve(typesDistPath, './README.md')) | ||
74 | } | ||
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 @@ | |||
1 | { | ||
2 | "extends": "../../../../tsconfig.base.json", | ||
3 | "compilerOptions": { | ||
4 | "stripInternal": true, | ||
5 | "removeComments": false, | ||
6 | "emitDeclarationOnly": true, | ||
7 | "outDir": "../../dist/client/", | ||
8 | "rootDir": "./", | ||
9 | "tsBuildInfoFile": "../../dist/tsconfig.client.types.tsbuildinfo" | ||
10 | }, | ||
11 | "references": [ | ||
12 | { "path": "../../../../client/tsconfig.types.json" } | ||
13 | ], | ||
14 | "files": ["index.ts"] | ||
15 | } | ||
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 @@ | |||
1 | export * from '@server/types' | ||
2 | export * from '@server/types/models' | ||
3 | 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 @@ | |||
1 | import { RegisterServerOptions, Video } from '../dist' | ||
2 | import { RegisterClientOptions } from '../dist/client' | ||
3 | |||
4 | function register1 ({ registerHook }: RegisterServerOptions) { | ||
5 | registerHook({ | ||
6 | target: 'action:application.listening', | ||
7 | handler: () => console.log('hello') | ||
8 | }) | ||
9 | } | ||
10 | |||
11 | function register2 ({ registerHook, peertubeHelpers }: RegisterClientOptions) { | ||
12 | registerHook({ | ||
13 | target: 'action:admin-plugin-settings.init', | ||
14 | handler: ({ npmName }: { npmName: string }) => { | ||
15 | if ('peertube-plugin-transcription' !== npmName) { | ||
16 | return | ||
17 | } | ||
18 | }, | ||
19 | }) | ||
20 | |||
21 | registerHook({ | ||
22 | target: 'action:video-watch.video.loaded', | ||
23 | handler: ({ video }: { video: Video }) => { | ||
24 | fetch(`${peertubeHelpers.getBaseRouterRoute()}/videos/${video.uuid}/captions`, { | ||
25 | method: 'PUT', | ||
26 | headers: peertubeHelpers.getAuthHeader(), | ||
27 | }) | ||
28 | .then((res) => res.json()) | ||
29 | .then((data) => console.log('Hi %s.', data)) | ||
30 | }, | ||
31 | }) | ||
32 | } | ||
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 @@ | |||
1 | { | ||
2 | "extends": "./tsconfig.json", | ||
3 | "compilerOptions": { | ||
4 | "typeRoots": [ | ||
5 | "node_modules/@types", | ||
6 | "client/node_modules/@types" | ||
7 | ], | ||
8 | "baseUrl": "./dist", | ||
9 | "paths": { | ||
10 | "@server/*": [ "server/*" ], | ||
11 | "@shared/*": [ "shared/*" ], | ||
12 | "@client/*": [ "client/*" ] | ||
13 | } | ||
14 | } | ||
15 | } | ||
16 | |||
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 @@ | |||
1 | { | ||
2 | "extends": "../../tsconfig.base.json", | ||
3 | "compilerOptions": { | ||
4 | "stripInternal": true, | ||
5 | "removeComments": false, | ||
6 | "emitDeclarationOnly": true, | ||
7 | "outDir": "./dist/", | ||
8 | "baseUrl": "./src/", | ||
9 | "rootDir": "./src/", | ||
10 | "tsBuildInfoFile": "./dist/tsconfig.server.types.tsbuildinfo", | ||
11 | "paths": { | ||
12 | "@server/*": [ "../../../server/*" ], | ||
13 | "@shared/*": [ "../../../shared/*" ], | ||
14 | "@client/*": [ "../../../client/src/*" ] | ||
15 | } | ||
16 | }, | ||
17 | "references": [ | ||
18 | { "path": "../../shared/tsconfig.types.json" }, | ||
19 | { "path": "../../server/tsconfig.types.json" }, | ||
20 | { "path": "./src/client/tsconfig.json" } | ||
21 | ], | ||
22 | "files": ["./src/index.ts"] | ||
23 | } | ||