asch-redeploy
Version:
A hassle-free local asch environment
191 lines (177 loc) • 8.95 kB
JavaScript
const inversify = require('inversify')
const helpers = require('inversify-vanillajs-helpers').helpers
require('reflect-metadata')
const SendMoney = require('./orchestration/sendMoney')
const RegisterDapp = require('./orchestration/registerDapp')
const Deploy = require('./orchestration/deploy')
const StartUpCheck = require('./startup/startUpCheck')
const IsConfigValid = require('./startup/isConfigValid')
const CheckFileStructure = require('./startup/checkFileStructure')
const Service = require('./orchestration/service')
const CreateLogDir = require('./orchestration/createLogDir')
const SerializedNewDappId = require('./orchestration/serializedNewDappId')
const CheckPort = require('./startup/checkPort')
const Watcher = require('./orchestration/watcher')
const CheckPublicDistDir = require('./startup/checkPublicDistDir')
const RefuelDapp = require('./orchestration/refuelDapp')
const PathResolution = require('./pathResolution')
const UIA = require('./orchestration/uia/uia')
const RegisterPublisher = require('./orchestration/uia/registerPublisher')
const RegisterAsset = require('./orchestration/uia/registerAsset')
const CreateTokens = require('./orchestration/uia/createTokens')
const CheckBlockchainVersion = require('./startup/checkBlockchainVersion')
const FILETYPES = {
SendMoney: 'SendMoney',
RegisterDapp: 'RegisterDapp',
Deploy: 'Deploy',
StartUpCheck: 'StartUpCheck',
IsConfigValid: 'IsConfigValid',
CheckFileStructure: 'CheckFileStructure',
Service: 'Service',
CreateLogDir: 'CreateLogDir',
SerializedNewDappId: 'SerializedNewDappId',
CheckPort: 'CheckPort',
Watcher: 'Watcher',
CheckPublicDistDir: 'CheckPublicDistDir',
RefuelDapp: 'RefuelDapp',
PathResolution: 'PathResolution',
UIA: 'UIA',
RegisterPublisher: 'RegisterPublisher',
RegisterAsset: 'RegisterAsset',
CreateTokens: 'CreateTokens',
CheckBlockchainVersion: 'CheckBlockchainVersion'
}
const userInput = require('./program').getUserInput()
const Config = require('./startup/loadConfig')(userInput)
const Axios = require('axios')
const Logger = require('./logger')
const AschJS = require('asch-js')
const Promise = require('bluebird')
const DappConfig = require('../dapp.json')
const Utils = require('./utils')
const Fs = require('fs')
const Path = require('path')
const CopyDirectory = require('./orchestration/copyDirectory')
const CheckArch = new (require('./startup/checkArch'))()
const ZSchema = require('z-schema')
const CustomValidators = require('./startup/customValidators')
const ConfigSchema = require('./startup/configSchema')
const EventEmitter = require('events')
const Moment = require('moment')
const Fork = require('child_process').fork
const IsPortAvailable = require('is-port-available')
const Chokidar = require('chokidar')
const CompareVersions = require('compare-versions')
Axios.interceptors.request.use(request => {
Logger.verbose('Axios request:')
let url = JSON.stringify(request.url, null, 2)
let data = JSON.stringify(request.data, null, 2)
Logger.verbose(`url: ${url}`)
Logger.verbose(`\nrequest: ${data}`)
return request
})
Axios.interceptors.response.use(response => {
Logger.verbose('Axios response:')
let data = JSON.stringify(response.data, null, 2)
Logger.verbose(`\nresponse: ${data}`)
return response
})
const DEPENDENCIES = {
Config: 'Config',
Logger: 'Logger',
Axios: 'Axios',
AschJS: 'AschJS',
Promise: 'Promise',
DappConfig: 'DappConfig',
Utils: 'Utils',
Fs: 'Fs',
Path: 'Path',
CopyDirectory: 'CopyDirectory',
CheckArch: 'CheckArch',
ZSchema: 'ZSchema',
CustomValidators: 'CustomValidators',
ConfigSchema: 'ConfigSchema',
EventEmitter: 'EventEmitter',
Moment: 'Moment',
Fork: 'Fork',
IsPortAvailable: 'IsPortAvailable',
Chokidar: 'Chokidar',
CompareVersions: 'CompareVersions'
}
var container = new inversify.Container()
// annotate
helpers.annotate(SendMoney, [DEPENDENCIES.Config, DEPENDENCIES.Logger, DEPENDENCIES.Axios, DEPENDENCIES.AschJS, DEPENDENCIES.Promise])
helpers.annotate(RegisterDapp, [DEPENDENCIES.Config, DEPENDENCIES.DappConfig, DEPENDENCIES.Utils, DEPENDENCIES.Axios, DEPENDENCIES.AschJS, DEPENDENCIES.Logger])
helpers.annotate(Deploy, [DEPENDENCIES.Config, DEPENDENCIES.CopyDirectory, DEPENDENCIES.Path, DEPENDENCIES.Fs])
helpers.annotate(StartUpCheck, [DEPENDENCIES.Config, FILETYPES.IsConfigValid, FILETYPES.CheckFileStructure, DEPENDENCIES.CheckArch, FILETYPES.CheckPort, FILETYPES.CheckPublicDistDir, FILETYPES.CheckBlockchainVersion])
helpers.annotate(IsConfigValid, [DEPENDENCIES.Config, DEPENDENCIES.Logger, DEPENDENCIES.ZSchema, DEPENDENCIES.CustomValidators, DEPENDENCIES.ConfigSchema])
helpers.annotate(CheckFileStructure, [DEPENDENCIES.Config])
helpers.annotate(Service, [DEPENDENCIES.Config, DEPENDENCIES.Logger, DEPENDENCIES.Moment, DEPENDENCIES.Path, DEPENDENCIES.Fs, DEPENDENCIES.EventEmitter, FILETYPES.CreateLogDir, DEPENDENCIES.Fork, FILETYPES.PathResolution])
helpers.annotate(CreateLogDir, [DEPENDENCIES.Config, DEPENDENCIES.Fs, DEPENDENCIES.Path, DEPENDENCIES.Moment])
helpers.annotate(SerializedNewDappId, [DEPENDENCIES.Config, DEPENDENCIES.Fs])
helpers.annotate(CheckPort, [DEPENDENCIES.Config, DEPENDENCIES.IsPortAvailable])
helpers.annotate(Watcher, [DEPENDENCIES.Config, DEPENDENCIES.Logger, DEPENDENCIES.Chokidar, DEPENDENCIES.Moment])
helpers.annotate(CheckPublicDistDir, [DEPENDENCIES.Config, DEPENDENCIES.Fs, DEPENDENCIES.Path])
helpers.annotate(RefuelDapp, [DEPENDENCIES.Config, DEPENDENCIES.Axios, DEPENDENCIES.AschJS, DEPENDENCIES.Logger])
helpers.annotate(PathResolution, [DEPENDENCIES.Config, DEPENDENCIES.Logger, DEPENDENCIES.Path])
helpers.annotate(UIA, [DEPENDENCIES.Config, DEPENDENCIES.Logger, FILETYPES.RegisterPublisher, FILETYPES.RegisterAsset, FILETYPES.CreateTokens])
helpers.annotate(RegisterPublisher, [DEPENDENCIES.Config, DEPENDENCIES.AschJS, DEPENDENCIES.Axios, DEPENDENCIES.Logger, DEPENDENCIES.Promise])
helpers.annotate(RegisterAsset, [DEPENDENCIES.Config, DEPENDENCIES.AschJS, DEPENDENCIES.Axios, DEPENDENCIES.Logger, DEPENDENCIES.Promise])
helpers.annotate(CreateTokens, [DEPENDENCIES.Config, DEPENDENCIES.AschJS, DEPENDENCIES.Axios, DEPENDENCIES.Logger, DEPENDENCIES.Promise])
helpers.annotate(CheckBlockchainVersion, [DEPENDENCIES.Config, DEPENDENCIES.Path, DEPENDENCIES.Fs, DEPENDENCIES.Logger, DEPENDENCIES.CompareVersions])
let setup = function () {
// bindings
container.bind(FILETYPES.SendMoney).to(SendMoney)
container.bind(FILETYPES.RegisterDapp).to(RegisterDapp)
container.bind(FILETYPES.Deploy).to(Deploy)
container.bind(FILETYPES.StartUpCheck).to(StartUpCheck)
container.bind(FILETYPES.IsConfigValid).to(IsConfigValid)
container.bind(FILETYPES.CheckFileStructure).to(CheckFileStructure)
container.bind(FILETYPES.Service).to(Service)
container.bind(FILETYPES.CreateLogDir).to(CreateLogDir)
container.bind(FILETYPES.SerializedNewDappId).to(SerializedNewDappId)
container.bind(FILETYPES.CheckPort).to(CheckPort)
container.bind(FILETYPES.Watcher).to(Watcher)
container.bind(FILETYPES.CheckPublicDistDir).to(CheckPublicDistDir)
container.bind(FILETYPES.RefuelDapp).to(RefuelDapp)
container.bind(FILETYPES.PathResolution).to(PathResolution)
container.bind(FILETYPES.UIA).to(UIA)
container.bind(FILETYPES.RegisterPublisher).to(RegisterPublisher)
container.bind(FILETYPES.RegisterAsset).to(RegisterAsset)
container.bind(FILETYPES.CreateTokens).to(CreateTokens)
container.bind(FILETYPES.CheckBlockchainVersion).to(CheckBlockchainVersion)
// constants or third party libraries
const registerConstantValue = helpers.registerConstantValue(container)
registerConstantValue(DEPENDENCIES.Config, Config)
registerConstantValue(DEPENDENCIES.Logger, Logger)
registerConstantValue(DEPENDENCIES.Axios, Axios)
registerConstantValue(DEPENDENCIES.AschJS, AschJS)
registerConstantValue(DEPENDENCIES.Promise, Promise)
registerConstantValue(DEPENDENCIES.DappConfig, DappConfig)
registerConstantValue(DEPENDENCIES.Utils, Utils)
registerConstantValue(DEPENDENCIES.Fs, Fs)
registerConstantValue(DEPENDENCIES.Path, Path)
registerConstantValue(DEPENDENCIES.CopyDirectory, CopyDirectory)
registerConstantValue(DEPENDENCIES.CheckArch, CheckArch)
registerConstantValue(DEPENDENCIES.ZSchema, ZSchema)
registerConstantValue(DEPENDENCIES.CustomValidators, CustomValidators)
registerConstantValue(DEPENDENCIES.ConfigSchema, ConfigSchema)
registerConstantValue(DEPENDENCIES.EventEmitter, EventEmitter)
registerConstantValue(DEPENDENCIES.Moment, Moment)
registerConstantValue(DEPENDENCIES.Fork, Fork)
registerConstantValue(DEPENDENCIES.IsPortAvailable, IsPortAvailable)
registerConstantValue(DEPENDENCIES.Chokidar, Chokidar)
registerConstantValue(DEPENDENCIES.CompareVersions, CompareVersions)
}
let resetConstants = function () {
container.unbindAll()
setup()
}
setup()
module.exports = {
container,
FILETYPES: FILETYPES,
DEPENDENCIES: DEPENDENCIES,
helpers,
resetConstants
}