aboutsummaryrefslogblamecommitdiffhomepage
path: root/server/tools/repl.ts
blob: 6800ff8ab99b10259ee69ad425cbdfd720c3e644 (plain) (tree)














































































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