add REPL in server/tools/repl.ts (#1248)
This commit is contained in:
parent
6f2ae7a1aa
commit
1e59ca3bac
2 changed files with 210 additions and 0 deletions
79
server/tools/repl.ts
Normal file
79
server/tools/repl.ts
Normal file
|
@ -0,0 +1,79 @@
|
|||
import * as repl from 'repl'
|
||||
import * as path from 'path'
|
||||
import * as _ from 'lodash'
|
||||
import * as uuidv1 from 'uuid/v1'
|
||||
import * as uuidv3 from 'uuid/v3'
|
||||
import * as uuidv4 from 'uuid/v4'
|
||||
import * as uuidv5 from 'uuid/v5'
|
||||
import * as Sequelize from 'sequelize'
|
||||
import * as YoutubeDL from 'youtube-dl'
|
||||
|
||||
import { initDatabaseModels, sequelizeTypescript } from '../initializers'
|
||||
import * as cli from '../tools/cli'
|
||||
import { logger } from '../helpers/logger'
|
||||
import * as constants from '../initializers/constants'
|
||||
import * as modelsUtils from '../models/utils'
|
||||
import * as coreUtils from '../helpers/core-utils'
|
||||
import * as ffmpegUtils from '../helpers/ffmpeg-utils'
|
||||
import * as peertubeCryptoUtils from '../helpers/peertube-crypto'
|
||||
import * as signupUtils from '../helpers/signup'
|
||||
import * as utils from '../helpers/utils'
|
||||
import * as YoutubeDLUtils from '../helpers/youtube-dl'
|
||||
|
||||
let versionCommitHash
|
||||
|
||||
const start = async () => {
|
||||
await initDatabaseModels(true)
|
||||
|
||||
await utils.getVersion().then((data) => {
|
||||
versionCommitHash = data
|
||||
})
|
||||
|
||||
const initContext = (replServer) => {
|
||||
return (context) => {
|
||||
const properties = {
|
||||
context, repl: replServer, env: process.env,
|
||||
lodash: _, path,
|
||||
uuidv1, uuidv3, uuidv4, uuidv5,
|
||||
cli, logger, constants,
|
||||
Sequelize, sequelizeTypescript, modelsUtils,
|
||||
models: sequelizeTypescript.models, transaction: sequelizeTypescript.transaction,
|
||||
query: sequelizeTypescript.query, queryInterface: sequelizeTypescript.getQueryInterface(),
|
||||
YoutubeDL,
|
||||
coreUtils, ffmpegUtils, peertubeCryptoUtils, signupUtils, utils, YoutubeDLUtils
|
||||
}
|
||||
|
||||
for (let prop in properties) {
|
||||
Object.defineProperty(context, prop, {
|
||||
configurable: false,
|
||||
enumerable: true,
|
||||
value: properties[prop]
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const replServer = repl.start({
|
||||
prompt: `PeerTube [${cli.version}] (${versionCommitHash})> `
|
||||
})
|
||||
|
||||
initContext(replServer)(replServer.context)
|
||||
replServer.on('reset', initContext(replServer))
|
||||
|
||||
const resetCommand = {
|
||||
help: 'Reset REPL',
|
||||
action () {
|
||||
this.write('.clear\n')
|
||||
this.displayPrompt()
|
||||
}
|
||||
}
|
||||
replServer.defineCommand('reset', resetCommand)
|
||||
replServer.defineCommand('r', resetCommand)
|
||||
|
||||
}
|
||||
|
||||
start().then((data) => {
|
||||
// do nothing
|
||||
}).catch((err) => {
|
||||
console.error(err)
|
||||
})
|
|
@ -206,3 +206,134 @@ To fix this, you have to run:
|
|||
```
|
||||
$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run update-host
|
||||
```
|
||||
|
||||
### REPL ([Read Eval Print Loop](https://nodejs.org/docs/latest-v8.x/api/repl.html))
|
||||
|
||||
If you want to interact with the application libraries and objects, there is a REPL for that.
|
||||
|
||||
usage: `node ./dist/server/tools/repl.js`
|
||||
|
||||
"The default evaluator will, by default, assign the result of the most recently evaluated expression to the special variable `_` (underscore). Explicitly setting `_` to a value will disable this behavior."
|
||||
|
||||
- type `.help` to list commands available in the repl, notice it starts with a dot
|
||||
- type `.exit` to exit, note that you still have to press CTRL-C to actually exit, or press CTRL-C (3 times) without typing `.exit` to exit
|
||||
- type `context` to list all available objects and libraries in the context, note: `Promise` is also available but it's not listed in the context, in case you need promises for something
|
||||
- type `env` to see the loaded environment variables
|
||||
- type `path` to access path library
|
||||
- type `lodash` to access lodash library
|
||||
- type `uuidv1` to access uuid/v1 library
|
||||
- type `uuidv3` to access uuid/v3 library
|
||||
- type `uuidv4` to access uuid/v4 library
|
||||
- type `uuidv5` to access uuid/v5 library
|
||||
- type `YoutubeDL` to access youtube-dl library
|
||||
- type `cli` to access the cli helpers object
|
||||
- type `logger` to access the logger; if you log to it, it will write to stdout and to the peertube.log file
|
||||
- type `constants` to access the constants loaded by the server
|
||||
- type `coreUtils` to access the core-utils helpers object
|
||||
- type `ffmpegUtils` to access the ffmpeg-utils helpers object
|
||||
- type `peertubeCryptoUtils` to access the peertube-crypto helpers object
|
||||
- type `signupUtils` to access the signup helpers object
|
||||
- type `utils` to access the utils helpers object
|
||||
- type `YoutubeDLUtils` to access the youtube-dl helpers object
|
||||
- type `sequelizeTypescript` to access sequelizeTypescript
|
||||
- type `modelsUtils` to access the models/utils
|
||||
- type `models` to access the shortcut to sequelizeTypescript.models
|
||||
- type `transaction` to access the shortcut to sequelizeTypescript.transaction
|
||||
- type `query` to access the shortcut to sequelizeTypescript.query
|
||||
- type `queryInterface` to access the shortcut to sequelizeTypescript.queryInterface
|
||||
|
||||
#### .help
|
||||
|
||||
```
|
||||
PeerTube [1.0.0] (b10eb595)> .help
|
||||
.break Sometimes you get stuck, this gets you out
|
||||
.clear Break, and also clear the local context
|
||||
.editor Enter editor mode
|
||||
.exit Exit the repl
|
||||
.help Print this help message
|
||||
.load Load JS from a file into the REPL session
|
||||
.r Reset REPL
|
||||
.reset Reset REPL
|
||||
.save Save all evaluated commands in this REPL session to a file
|
||||
PeerTube [1.0.0] (b10eb595)>
|
||||
```
|
||||
|
||||
#### Lodash example
|
||||
|
||||
```
|
||||
PeerTube [1.0.0] (b10eb595)> lodash.keys(context)
|
||||
[ 'global',
|
||||
'console',
|
||||
'DTRACE_NET_SERVER_CONNECTION',
|
||||
'DTRACE_NET_STREAM_END',
|
||||
'DTRACE_HTTP_SERVER_REQUEST',
|
||||
'DTRACE_HTTP_SERVER_RESPONSE',
|
||||
'DTRACE_HTTP_CLIENT_REQUEST',
|
||||
'DTRACE_HTTP_CLIENT_RESPONSE',
|
||||
'process',
|
||||
'Buffer',
|
||||
'clearImmediate',
|
||||
'clearInterval',
|
||||
'clearTimeout',
|
||||
'setImmediate',
|
||||
'setInterval',
|
||||
'setTimeout',
|
||||
'XMLHttpRequest',
|
||||
'compact2string',
|
||||
'module',
|
||||
'require',
|
||||
'path',
|
||||
'repl',
|
||||
'context',
|
||||
'env',
|
||||
'lodash',
|
||||
'uuidv1',
|
||||
'uuidv3',
|
||||
'uuidv4',
|
||||
'uuidv5',
|
||||
'cli',
|
||||
'logger',
|
||||
'constants',
|
||||
'Sequelize',
|
||||
'sequelizeTypescript',
|
||||
'modelsUtils',
|
||||
'models',
|
||||
'transaction',
|
||||
'query',
|
||||
'queryInterface',
|
||||
'YoutubeDL',
|
||||
'coreUtils',
|
||||
'ffmpegUtils',
|
||||
'peertubeCryptoUtils',
|
||||
'signupUtils',
|
||||
'utils',
|
||||
'YoutubeDLUtils' ]
|
||||
PeerTube [1.0.0] (b10eb595)>
|
||||
```
|
||||
|
||||
#### YoutubeDL example
|
||||
```
|
||||
YoutubeDL.getInfo('https://www.youtube.com/watch?v=I5ZN289jjDo', function(err, data) {console.log(err, data)})
|
||||
```
|
||||
|
||||
#### Models examples
|
||||
```
|
||||
PeerTube [1.0.0] (b10eb595)> new models.ActorModel({id: 3}).getVideoChannel().then(function(data){console.log(data.dataValues.name)})
|
||||
Promise {
|
||||
_bitField: 0,
|
||||
_fulfillmentHandler0: undefined,
|
||||
_rejectionHandler0: undefined,
|
||||
_promise0: undefined,
|
||||
_receiver0: undefined }
|
||||
PeerTube [1.0.0] (b10eb595)> Main root channel
|
||||
PeerTube [1.0.0] (b10eb595)> let out; new models.UserModel({id: 1}).getAccount().then(function (data) {out = data.dataValues.id})
|
||||
Promise {
|
||||
_bitField: 0,
|
||||
_fulfillmentHandler0: undefined,
|
||||
_rejectionHandler0: undefined,
|
||||
_promise0: undefined,
|
||||
_receiver0: undefined }
|
||||
PeerTube [1.0.0] (b10eb595)> out
|
||||
2
|
||||
PeerTube [1.0.0] (b10eb595)>
|
||||
```
|
||||
|
|
Loading…
Reference in a new issue