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
This commit is contained in:
lutangar 2021-11-09 13:49:08 +01:00 committed by Chocobozzz
parent 8b03e2ce1a
commit b8fa3e8c73
20 changed files with 131 additions and 55 deletions

2
.gitignore vendored
View file

@ -53,4 +53,4 @@ yarn-error.log
# TypeScript
*.tsbuildinfo
/types
/types/dist/

View file

@ -1 +0,0 @@
export * from './types'

View file

@ -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/**/*"]
}

View file

@ -1 +0,0 @@
export * from './server/types'

View file

@ -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)",

View file

@ -7,5 +7,6 @@
"references": [
{ "path": "../" },
],
"files": [],
"exclude": [ ] // Overwrite exclude property
}

View file

@ -1,7 +1,7 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../types/server",
"outDir": "../types/dist/server",
"stripInternal": true,
"removeComments": false,
"emitDeclarationOnly": true

View file

@ -1,6 +1,7 @@
{
"extends": "../tsconfig.base.json",
"compilerOptions": {
"outDir": "../dist/shared"
"outDir": "../dist/shared",
}
}

View file

@ -1,7 +1,7 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../types/shared",
"outDir": "../types/dist/shared",
"stripInternal": true,
"removeComments": false,
"emitDeclarationOnly": true

View file

@ -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`.

View file

@ -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,

View file

@ -6,7 +6,11 @@
"paths": {
"@server/*": [ "server/*" ],
"@shared/*": [ "shared/*" ]
}
},
"typeRoots": [
"server/typings",
"node_modules/@types"
]
},
"references": [
{ "path": "./shared" },

View file

@ -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"],
}

19
types/README.md Normal file
View file

@ -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.

View file

@ -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'))
}

View file

@ -0,0 +1 @@
export * from '@client/types'

View file

@ -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"]
}

1
types/src/index.ts Normal file
View file

@ -0,0 +1 @@
export * from '@server/types'

16
types/tsconfig.dist.json Normal file
View file

@ -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/*" ]
}
}
}

23
types/tsconfig.json Normal file
View file

@ -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"],
}