Server code in typescript.

This commit is contained in:
John Livingston 2021-04-07 16:52:38 +02:00
parent dca4e67b35
commit 8b11c10e32
4 changed files with 143 additions and 10 deletions

88
package-lock.json generated
View File

@ -98,12 +98,94 @@
"integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==",
"dev": true "dev": true
}, },
"@tsconfig/node12": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.7.tgz",
"integrity": "sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==",
"dev": true
},
"@types/body-parser": {
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==",
"dev": true,
"requires": {
"@types/connect": "*",
"@types/node": "*"
}
},
"@types/connect": {
"version": "3.4.34",
"resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz",
"integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/express": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz",
"integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==",
"dev": true,
"requires": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.18",
"@types/qs": "*",
"@types/serve-static": "*"
}
},
"@types/express-serve-static-core": {
"version": "4.17.19",
"resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz",
"integrity": "sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==",
"dev": true,
"requires": {
"@types/node": "*",
"@types/qs": "*",
"@types/range-parser": "*"
}
},
"@types/json5": { "@types/json5": {
"version": "0.0.29", "version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
"integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
"dev": true "dev": true
}, },
"@types/mime": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
"dev": true
},
"@types/node": {
"version": "14.14.37",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz",
"integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==",
"dev": true
},
"@types/qs": {
"version": "6.9.6",
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz",
"integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==",
"dev": true
},
"@types/range-parser": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
"integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==",
"dev": true
},
"@types/serve-static": {
"version": "1.13.9",
"resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz",
"integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==",
"dev": true,
"requires": {
"@types/mime": "^1",
"@types/node": "*"
}
},
"@webassemblyjs/ast": { "@webassemblyjs/ast": {
"version": "1.8.5", "version": "1.8.5",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
@ -4843,6 +4925,12 @@
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
"dev": true "dev": true
}, },
"typescript": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz",
"integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==",
"dev": true
},
"union-value": { "union-value": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",

View File

@ -24,6 +24,9 @@
"dependencies": {}, "dependencies": {},
"devDependencies": { "devDependencies": {
"@purtuga/esm-webpack-plugin": "^1.1.1", "@purtuga/esm-webpack-plugin": "^1.1.1",
"@tsconfig/node12": "^1.0.7",
"@types/express": "^4.17.11",
"@types/node": "^14.14.37",
"converse.js": "^7.0.5", "converse.js": "^7.0.5",
"eslint": "^7.20.0", "eslint": "^7.20.0",
"eslint-config-standard": "^16.0.2", "eslint-config-standard": "^16.0.2",
@ -32,6 +35,7 @@
"eslint-plugin-promise": "^4.3.1", "eslint-plugin-promise": "^4.3.1",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"svgo": "^2.2.1", "svgo": "^2.2.1",
"typescript": "^4.2.3",
"webpack": "^4.41.2", "webpack": "^4.41.2",
"webpack-cli": "^3.3.10" "webpack-cli": "^3.3.10"
}, },
@ -50,7 +54,7 @@
"build:converse": "mkdir -p dist/client/conversejs && cp -r node_modules/converse.js/dist/* dist/client/conversejs/", "build:converse": "mkdir -p dist/client/conversejs && cp -r node_modules/converse.js/dist/* dist/client/conversejs/",
"build:images": "mkdir -p dist/client/images && npx svgo -f public/images/ -o dist/client/images/", "build:images": "mkdir -p dist/client/images && npx svgo -f public/images/ -o dist/client/images/",
"build:webpack": "webpack --mode=production", "build:webpack": "webpack --mode=production",
"build:server": "mkdir -p dist/server && cp ./server/main.js dist/server/", "build:server": "npx tsc --build server/tsconfig.json",
"build:serverconverse": "mkdir -p dist/server/conversejs && cp conversejs/index.html dist/server/conversejs/", "build:serverconverse": "mkdir -p dist/server/conversejs && cp conversejs/index.html dist/server/conversejs/",
"build": "npm-run-all -s clean -p build:converse build:images build:webpack build:server build:serverconverse", "build": "npm-run-all -s clean -p build:converse build:images build:webpack build:server build:serverconverse",
"lint": "npx eslint --ext .js ." "lint": "npx eslint --ext .js ."

View File

@ -1,17 +1,31 @@
import type { NextFunction, Request, Response } from 'express'
const path = require('path') const path = require('path')
const fs = require('fs').promises const fs = require('fs').promises
type RegisterServerOptions = {
registerHook: any,
registerSetting: any,
settingsManager: any,
storageManager: any,
videoCategoryManager: any,
videoLicenceManager: any,
videoLanguageManager: any,
getRouter: any,
peertubeHelpers: any
}
async function register ({ async function register ({
_registerHook, registerHook,
registerSetting, registerSetting,
settingsManager, settingsManager,
_storageManager, storageManager,
_videoCategoryManager, videoCategoryManager,
_videoLicenceManager, videoLicenceManager,
_videoLanguageManager, videoLanguageManager,
getRouter, getRouter,
peertubeHelpers peertubeHelpers
}) { }: RegisterServerOptions): Promise<any> {
registerSetting({ registerSetting({
name: 'chat-auto-display', name: 'chat-auto-display',
label: 'Automatically open the chat', label: 'Automatically open the chat',
@ -142,8 +156,8 @@ async function register ({
const converseJSIndex = await fs.readFile(path.resolve(__dirname, './conversejs/index.html')) const converseJSIndex = await fs.readFile(path.resolve(__dirname, './conversejs/index.html'))
const router = getRouter() const router = getRouter()
router.get('/ping', (req, res) => res.json({ message: 'pong' })) router.get('/ping', (req: Request, res: Response) => res.json({ message: 'pong' }))
router.get('/webchat', async (req, res, next) => { router.get('/webchat', async (req: Request, res: Response, next: NextFunction) => {
try { try {
const settings = await settingsManager.getSettings([ const settings = await settingsManager.getSettings([
'chat-use-builtin', 'chat-room', 'chat-server', 'chat-use-builtin', 'chat-room', 'chat-server',
@ -168,7 +182,7 @@ async function register ({
// be /webchat/:videoId // be /webchat/:videoId
// const id = req.param('videoId') // const id = req.param('videoId')
// const video = await peertubeHelpers.videos.loadByIdOrUUID(id) // const video = await peertubeHelpers.videos.loadByIdOrUUID(id)
let url = req.query.url let url: string = req.query.url as string || ''
if (!url) { if (!url) {
throw new Error('Missing url parameter)') throw new Error('Missing url parameter)')
} }

27
server/tsconfig.json Normal file
View File

@ -0,0 +1,27 @@
{
"extends": "@tsconfig/node12/tsconfig.json",
"compilerOptions": {
"moduleResolution": "node", // Tell tsc to look in node_modules for modules
"strict": true, // That implies alwaysStrict, noImplicitAny, noImplicitThis
"alwaysStrict": true, // should already be true because of strict:true
"noImplicitAny": true, // should already be true because of strict:true
"noImplicitThis": true, // should already be true because of strict:true
"noImplicitReturns": true,
"strictBindCallApply": true, // should already be true because of strict:true
"noUnusedLocals": true,
"removeComments": true,
"sourceMap": true,
// "composite": true,
// "declaration": true,
// "tsBuildInfoFile": "./dist/server/main.tsbuildinfo",
// "rootDir": "server",
"outDir": "../dist/server",
// "baseUrl": "./server/",
"paths": {},
},
"include": ["./**/*"],
"exclude": []
}