aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/test.yml2
-rw-r--r--package.json2
-rwxr-xr-xscripts/ci.sh5
-rwxr-xr-xscripts/release.sh2
-rwxr-xr-xscripts/test.sh1
-rw-r--r--support/doc/plugins/guide.md24
-rw-r--r--tsconfig.base.json2
-rw-r--r--types/generate-package.ts5
-rw-r--r--types/src/client/tsconfig.json3
-rw-r--r--types/src/index.ts2
-rw-r--r--types/tests/test.ts32
-rw-r--r--types/tsconfig.dist.json2
-rw-r--r--types/tsconfig.json6
-rw-r--r--yarn.lock16
14 files changed, 78 insertions, 26 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 030ec3790..6bd759c06 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -39,7 +39,7 @@ jobs:
39 strategy: 39 strategy:
40 fail-fast: false 40 fail-fast: false
41 matrix: 41 matrix:
42 test_suite: [ client, api-1, api-2, api-3, api-4, cli-plugin, lint, external-plugins ] 42 test_suite: [ types, client, api-1, api-2, api-3, api-4, cli-plugin, lint, external-plugins ]
43 43
44 env: 44 env:
45 PGUSER: peertube 45 PGUSER: peertube
diff --git a/package.json b/package.json
index c9717b5e9..5c133e186 100644
--- a/package.json
+++ b/package.json
@@ -63,6 +63,7 @@
63 "nodemon": "nodemon", 63 "nodemon": "nodemon",
64 "ts-node": "ts-node", 64 "ts-node": "ts-node",
65 "eslint": "eslint", 65 "eslint": "eslint",
66 "resolve-tspaths": "resolve-tspaths",
66 "concurrently": "concurrently", 67 "concurrently": "concurrently",
67 "mocha": "mocha", 68 "mocha": "mocha",
68 "ci": "bash ./scripts/ci.sh", 69 "ci": "bash ./scripts/ci.sh",
@@ -203,6 +204,7 @@
203 "mocha": "^9.0.0", 204 "mocha": "^9.0.0",
204 "nodemon": "^2.0.1", 205 "nodemon": "^2.0.1",
205 "proxy": "^1.0.2", 206 "proxy": "^1.0.2",
207 "resolve-tspaths": "^0.1.2",
206 "socket.io-client": "^4.0.1", 208 "socket.io-client": "^4.0.1",
207 "source-map-support": "^0.5.0", 209 "source-map-support": "^0.5.0",
208 "supertest": "^6.0.1", 210 "supertest": "^6.0.1",
diff --git a/scripts/ci.sh b/scripts/ci.sh
index a628cbced..070a104cc 100755
--- a/scripts/ci.sh
+++ b/scripts/ci.sh
@@ -40,7 +40,10 @@ findTestFiles () {
40 find $1 -type f -name "*.js" $exception | xargs echo 40 find $1 -type f -name "*.js" $exception | xargs echo
41} 41}
42 42
43if [ "$1" = "client" ]; then 43if [ "$1" = "types" ]; then
44 npm run generate-types-package
45 npm run tsc -- --noEmit --esModuleInterop types/tests/test.ts
46elif [ "$1" = "client" ]; then
44 npm run build 47 npm run build
45 48
46 feedsFiles=$(findTestFiles ./dist/server/tests/feeds) 49 feedsFiles=$(findTestFiles ./dist/server/tests/feeds)
diff --git a/scripts/release.sh b/scripts/release.sh
index 7681de90d..409a52977 100755
--- a/scripts/release.sh
+++ b/scripts/release.sh
@@ -121,5 +121,5 @@ rm -f "./client/dist/embed-stats.json"
121 121
122# Release types package 122# Release types package
123npm run generate-types-package 123npm run generate-types-package
124cd types 124cd types/dist
125npm publish --access public 125npm publish --access public
diff --git a/scripts/test.sh b/scripts/test.sh
index 2dc79c6ce..4d1d8720a 100755
--- a/scripts/test.sh
+++ b/scripts/test.sh
@@ -2,6 +2,7 @@
2 2
3set -eu 3set -eu
4 4
5npm run ci -- types
5npm run ci -- client 6npm run ci -- client
6npm run ci -- cli-plugin 7npm run ci -- cli-plugin
7npm run ci -- api-1 8npm run ci -- api-1
diff --git a/support/doc/plugins/guide.md b/support/doc/plugins/guide.md
index 0a91460f5..26fcb8987 100644
--- a/support/doc/plugins/guide.md
+++ b/support/doc/plugins/guide.md
@@ -37,7 +37,6 @@
37 - [Update README](#update-readme) 37 - [Update README](#update-readme)
38 - [Update package.json](#update-packagejson) 38 - [Update package.json](#update-packagejson)
39 - [Write code](#write-code) 39 - [Write code](#write-code)
40 - [Typescript](#typescript)
41 - [Add translations](#add-translations) 40 - [Add translations](#add-translations)
42 - [Build your plugin](#build-your-plugin) 41 - [Build your plugin](#build-your-plugin)
43 - [Test your plugin/theme](#test-your-plugintheme) 42 - [Test your plugin/theme](#test-your-plugintheme)
@@ -880,22 +879,23 @@ And if you don't need CSS or client script files, use an empty `array`:
880### Write code 879### Write code
881 880
882Now you can register hooks or settings, write CSS and add static directories to your plugin or your theme :) 881Now you can register hooks or settings, write CSS and add static directories to your plugin or your theme :)
882It's up to you to check the code you write will be compatible with the PeerTube NodeJS version, and will be supported by web browsers.
883
884**JavaScript**
883 885
884**Caution:** It's up to you to check the code you write will be compatible with the PeerTube NodeJS version,
885and will be supported by web browsers.
886If you want to write modern JavaScript, please use a transpiler like [Babel](https://babeljs.io/). 886If you want to write modern JavaScript, please use a transpiler like [Babel](https://babeljs.io/).
887If you want to use __Typescript__ see section below.
888 887
889### Typescript 888**Typescript**
889
890If you want to use __Typescript__, you can add __PeerTube__ types as dev dependencies:
890 891
891You can add __PeerTube__ types as dev dependencies:
892``` 892```
893npm install --save-dev @peertube/peertube-types 893npm install --save-dev @peertube/peertube-types
894``` 894```
895 895
896This package exposes *server* definition files by default: 896This package exposes *server* definition files by default:
897```ts 897```ts
898import { RegisterServerOptions } from '@peertube/peertube-types/server/types' 898import { RegisterServerOptions } from '@peertube/peertube-types'
899 899
900export async function register ({ registerHook }: RegisterServerOptions) { 900export async function register ({ registerHook }: RegisterServerOptions) {
901 registerHook({ 901 registerHook({
@@ -907,8 +907,8 @@ export async function register ({ registerHook }: RegisterServerOptions) {
907 907
908But it also exposes client types and various models used in __PeerTube__: 908But it also exposes client types and various models used in __PeerTube__:
909```ts 909```ts
910import { RegisterClientOptions } from '@larriereguichet/peertube-types/client/types'; 910import { Video } from '@peertube/peertube-types';
911import { Video } from '@larriereguichet/peertube-types/shared'; 911import { RegisterClientOptions } from '@peertube/peertube-types/client';
912 912
913function register({ registerHook, peertubeHelpers }: RegisterClientOptions) { 913function register({ registerHook, peertubeHelpers }: RegisterClientOptions) {
914 registerHook({ 914 registerHook({
@@ -926,16 +926,14 @@ function register({ registerHook, peertubeHelpers }: RegisterClientOptions) {
926 fetch(`${peertubeHelpers.getBaseRouterRoute()}/videos/${video.uuid}/captions`, { 926 fetch(`${peertubeHelpers.getBaseRouterRoute()}/videos/${video.uuid}/captions`, {
927 method: 'PUT', 927 method: 'PUT',
928 headers: peertubeHelpers.getAuthHeader(), 928 headers: peertubeHelpers.getAuthHeader(),
929 }) 929 }).then((res) => res.json())
930 .then((res) => res.json()) 930 .then((data) => console.log('Hi %s.', data));
931 .then((data) => console.log('Hi %s.', data));
932 }, 931 },
933 }); 932 });
934} 933}
935 934
936export { register }; 935export { register };
937``` 936```
938> Other types are accessible from the shared path `@peertube/peertube-types/shared`.
939 937
940### Add translations 938### Add translations
941 939
diff --git a/tsconfig.base.json b/tsconfig.base.json
index a323b0d05..85e3ac213 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -27,7 +27,7 @@
27 "paths": { 27 "paths": {
28 "@server/*": [ "server/*" ], 28 "@server/*": [ "server/*" ],
29 "@shared/*": [ "shared/*" ], 29 "@shared/*": [ "shared/*" ],
30 "@client/*": [ "client/src/*" ], 30 "@client/*": [ "client/src/*" ]
31 }, 31 },
32 "resolveJsonModule": true, 32 "resolveJsonModule": true,
33 "strict": false, 33 "strict": false,
diff --git a/types/generate-package.ts b/types/generate-package.ts
index a4f049a31..ae061f9b0 100644
--- a/types/generate-package.ts
+++ b/types/generate-package.ts
@@ -23,6 +23,7 @@ async function run () {
23 23
24 await remove(typesDistPath) 24 await remove(typesDistPath)
25 execSync('npm run tsc -- -b --verbose types', { stdio: 'inherit' }) 25 execSync('npm run tsc -- -b --verbose types', { stdio: 'inherit' })
26 execSync(`npm run resolve-tspaths -- --project ${distTsConfigPath} --src ${typesDistPath} --out ${typesDistPath}`, { stdio: 'inherit' })
26 27
27 const allDependencies = Object.assign( 28 const allDependencies = Object.assign(
28 mainPackageJson.dependencies, 29 mainPackageJson.dependencies,
@@ -69,9 +70,5 @@ async function run () {
69 console.log(`Writing git ignore to ${typesDistGitIgnorePath}`) 70 console.log(`Writing git ignore to ${typesDistGitIgnorePath}`)
70 await writeFile(typesDistGitIgnorePath, '*.tsbuildinfo') 71 await writeFile(typesDistGitIgnorePath, '*.tsbuildinfo')
71 72
72 console.log('Copying tsconfig files')
73 await copyFile(distTsConfigPath, resolve(typesDistPath, './tsconfig.json'))
74 await copyFile(resolve(cwd(), './tsconfig.base.json'), resolve(typesDistPath, './tsconfig.base.json'))
75
76 await copyFile(resolve(typesPath, './README.md'), resolve(typesDistPath, './README.md')) 73 await copyFile(resolve(typesPath, './README.md'), resolve(typesDistPath, './README.md'))
77} 74}
diff --git a/types/src/client/tsconfig.json b/types/src/client/tsconfig.json
index 199273538..dea4c131c 100644
--- a/types/src/client/tsconfig.json
+++ b/types/src/client/tsconfig.json
@@ -1,6 +1,9 @@
1{ 1{
2 "extends": "../../../tsconfig.base.json", 2 "extends": "../../../tsconfig.base.json",
3 "compilerOptions": { 3 "compilerOptions": {
4 "stripInternal": true,
5 "removeComments": false,
6 "emitDeclarationOnly": true,
4 "outDir": "../../dist/client/", 7 "outDir": "../../dist/client/",
5 "rootDir": "./", 8 "rootDir": "./",
6 "tsBuildInfoFile": "../../dist/tsconfig.client.types.tsbuildinfo" 9 "tsBuildInfoFile": "../../dist/tsconfig.client.types.tsbuildinfo"
diff --git a/types/src/index.ts b/types/src/index.ts
index f1325777f..a8adca287 100644
--- a/types/src/index.ts
+++ b/types/src/index.ts
@@ -1 +1,3 @@
1export * from '@server/types' 1export * from '@server/types'
2export * from '@server/types/models'
3export * from '@shared/models'
diff --git a/types/tests/test.ts b/types/tests/test.ts
new file mode 100644
index 000000000..8c53320a1
--- /dev/null
+++ b/types/tests/test.ts
@@ -0,0 +1,32 @@
1import { RegisterServerOptions, Video } from '../dist'
2import { RegisterClientOptions } from '../dist/client'
3
4function register1 ({ registerHook }: RegisterServerOptions) {
5 registerHook({
6 target: 'action:application.listening',
7 handler: () => console.log('hello')
8 })
9}
10
11function 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/types/tsconfig.dist.json b/types/tsconfig.dist.json
index fc2dbe45b..fbc92712b 100644
--- a/types/tsconfig.dist.json
+++ b/types/tsconfig.dist.json
@@ -5,7 +5,7 @@
5 "node_modules/@types", 5 "node_modules/@types",
6 "client/node_modules/@types" 6 "client/node_modules/@types"
7 ], 7 ],
8 "baseUrl": "./", 8 "baseUrl": "./dist",
9 "paths": { 9 "paths": {
10 "@server/*": [ "server/*" ], 10 "@server/*": [ "server/*" ],
11 "@shared/*": [ "shared/*" ], 11 "@shared/*": [ "shared/*" ],
diff --git a/types/tsconfig.json b/types/tsconfig.json
index 8f09c4a83..514683886 100644
--- a/types/tsconfig.json
+++ b/types/tsconfig.json
@@ -7,10 +7,11 @@
7 "outDir": "./dist/", 7 "outDir": "./dist/",
8 "baseUrl": "./src/", 8 "baseUrl": "./src/",
9 "rootDir": "./src/", 9 "rootDir": "./src/",
10 "tsBuildInfoFile": "./dist/tsconfig.server.types.tsbuildinfo",
10 "paths": { 11 "paths": {
11 "@server/*": [ "../../server/*" ], 12 "@server/*": [ "../../server/*" ],
12 "@shared/*": [ "../../shared/*" ], 13 "@shared/*": [ "../../shared/*" ],
13 "@client/*": [ "../../client/src/*" ], 14 "@client/*": [ "../../client/src/*" ]
14 } 15 }
15 }, 16 },
16 "references": [ 17 "references": [
@@ -18,6 +19,5 @@
18 { "path": "../server/tsconfig.types.json" }, 19 { "path": "../server/tsconfig.types.json" },
19 { "path": "./src/client/tsconfig.json" } 20 { "path": "./src/client/tsconfig.json" }
20 ], 21 ],
21 "files": ["./src/index.ts"], 22 "files": ["./src/index.ts"]
22} 23}
23
diff --git a/yarn.lock b/yarn.lock
index 8c9527cf9..c0efa2203 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3070,6 +3070,11 @@ combined-stream@^1.0.6, combined-stream@^1.0.8:
3070 dependencies: 3070 dependencies:
3071 delayed-stream "~1.0.0" 3071 delayed-stream "~1.0.0"
3072 3072
3073commander@8.2.0:
3074 version "8.2.0"
3075 resolved "https://registry.yarnpkg.com/commander/-/commander-8.2.0.tgz#37fe2bde301d87d47a53adeff8b5915db1381ca8"
3076 integrity sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==
3077
3073commander@^2.19.0, commander@^2.7.1: 3078commander@^2.19.0, commander@^2.7.1:
3074 version "2.20.3" 3079 version "2.20.3"
3075 resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 3080 resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
@@ -4207,7 +4212,7 @@ fast-fifo@^1.0.0:
4207 resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.0.0.tgz#9bc72e6860347bb045a876d1c5c0af11e9b984e7" 4212 resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.0.0.tgz#9bc72e6860347bb045a876d1c5c0af11e9b984e7"
4208 integrity sha512-4VEXmjxLj7sbs8J//cn2qhRap50dGzF5n8fjay8mau+Jn4hxSeR3xPFwxMaQq/pDaq7+KQk0PAbC2+nWDkJrmQ== 4213 integrity sha512-4VEXmjxLj7sbs8J//cn2qhRap50dGzF5n8fjay8mau+Jn4hxSeR3xPFwxMaQq/pDaq7+KQk0PAbC2+nWDkJrmQ==
4209 4214
4210fast-glob@^3.1.1: 4215fast-glob@3.2.7, fast-glob@^3.1.1:
4211 version "3.2.7" 4216 version "3.2.7"
4212 resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" 4217 resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1"
4213 integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== 4218 integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==
@@ -7472,6 +7477,15 @@ resolve-from@^4.0.0:
7472 resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 7477 resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
7473 integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 7478 integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
7474 7479
7480resolve-tspaths@^0.1.2:
7481 version "0.1.2"
7482 resolved "https://registry.yarnpkg.com/resolve-tspaths/-/resolve-tspaths-0.1.2.tgz#621c78f2372dea919f7cecf4f228e7fd6dbd8d45"
7483 integrity sha512-HBU+9gBL/CWzCXudGVJAOGph9xspBShW2Ay8cngXMB8fLBkv8Oz/yoe/LC9cCAzuZouul9YNRyKQKdr/GEFR3w==
7484 dependencies:
7485 ansi-colors "4.1.1"
7486 commander "8.2.0"
7487 fast-glob "3.2.7"
7488
7475resolve@^1.10.1, resolve@^1.15.1, resolve@^1.18.1, resolve@^1.20.0: 7489resolve@^1.10.1, resolve@^1.15.1, resolve@^1.18.1, resolve@^1.20.0:
7476 version "1.20.0" 7490 version "1.20.0"
7477 resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 7491 resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"