You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.1 KiB
66 lines
2.1 KiB
const httpServer = require('http-server')
|
|
const remixd = require('remixd')
|
|
const path = require('path')
|
|
const merge = require('merge')
|
|
const colors = require('colors')
|
|
|
|
const DEFAULT_OPTIONS = {
|
|
protocol: 'http',
|
|
host: 'localhost',
|
|
port: '8088'
|
|
}
|
|
|
|
module.exports = (embark) => {
|
|
// plugin options
|
|
const readOnly = embark.pluginConfig.readOnly || false
|
|
const {protocol, host, port} = merge.recursive(DEFAULT_OPTIONS, embark.pluginConfig.remixIde)
|
|
|
|
// globals
|
|
const remixIdeUrl = `${protocol}://${host}` + `${port ? `:${port}` : ''}`
|
|
const sharedFolder = path.join(__dirname, '../../')
|
|
const sharedFolderService = remixd.services.sharedFolder
|
|
let server
|
|
|
|
// setup HTTP server
|
|
if (['localhost', '127.0.0.1', '0.0.0.0'].includes(host)) {
|
|
server = httpServer.createServer({
|
|
root: path.join(__dirname, '../../node_modules/remix-ide')
|
|
})
|
|
server.listen(port, '127.0.0.1', function () {
|
|
embark.logger.info('Remix IDE (via embark-remix plugin) available at ' + colors.underline(remixIdeUrl))
|
|
})
|
|
} else {
|
|
embark.logger.info('embark-remix is set to connect to a Remix IDE at ' + colors.underline(remixIdeUrl))
|
|
}
|
|
|
|
// setup Embark service check
|
|
embark.registerServiceCheck('Remix IDE', (cb) => {
|
|
return cb({ name: `Remix IDE ${host}:${port}`, status: 'on' })
|
|
})
|
|
|
|
// setup remixd shared folder service
|
|
const sharedFolderRouter = new remixd.Router(65520, sharedFolderService, { remixIdeUrl }, (webSocket) => {
|
|
sharedFolderService.setWebSocket(webSocket)
|
|
sharedFolderService.setupNotifications(sharedFolder)
|
|
sharedFolderService.sharedFolder(sharedFolder, readOnly)
|
|
})
|
|
const killRemixD = sharedFolderRouter.start()
|
|
const kill = () => {
|
|
if (server) server.close()
|
|
embark.logger.info(colors.red('embark-remix stopped'))
|
|
process.exit()
|
|
}
|
|
|
|
if (process.platform === 'win32') {
|
|
require('readline').createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout
|
|
}).on('SIGINT', function () {
|
|
process.emit('SIGINT')
|
|
})
|
|
}
|
|
|
|
process.on('SIGINT', kill) // catch ctrl-c
|
|
process.on('SIGTERM', kill) // catch kill
|
|
process.on('exit', killRemixD)
|
|
}
|
|
|