#!/usr/bin/env node
import { join } from "path";
import { mkdirSync, writeFileSync } from "fs";
import { makeDirs } from "./utils/file";
import { buildWatch } from "./builder";
import { LiveServer, WebSocketController } from './server/live-server';
const WebSocket = require("ws")
const commander = require('commander');
const program = new commander.Command();
let baseDir = process.cwd()
let component = `
`
var copydir = require('copy-dir');
const version = require('../package.json').version
program.version(version)
.option('-v, --version')
.command('init')
.description('Initiate a new project.')
.action(() => {
console.log("Creating all default files...")
copydir.sync(join(__dirname, '..', 'default'), baseDir)
console.log(" Done.")
// TODO: make the rest of the default files
})
program.command('create ')
.description('Create a new component or controller')
.action((type: string, name) => {
switch (type.toLowerCase()) {
case 'component':
let dirComponents = join(baseDir, 'components')
mkdirSync(dirComponents, { recursive: true })
writeFileSync(join(dirComponents, name + ".component"), component)
break;
case 'controller':
throw new Error('Controller creation not yet implemented.')
default:
console.error("That's not a valid creation type.")
}
})
program.command('develop ')
.description('Develop a component using the live server.')
.action(async (name) => {
const DIR_OUT = join(baseDir, 'dist')
const DIR_SEARCH = join(baseDir, 'components')
const DIR_ROOT = join(baseDir, "components", `${name}.component`)
const DEVELOP_ROOT = join(baseDir, "dist", "develop")
// TODO: combine LiveServer and WebSocketController into one class that extends Server
let liveServer = new LiveServer(DEVELOP_ROOT)
await liveServer.start(8081)
console.log("starting liveserver")
const wss = new WebSocket.Server({ port: 8089 })
let connection
wss.on('connection', (ws) => {
ws.on('message', message => {
// console.log(`Received message => ${message}`)
})
ws.send('ho!')
connection = ws
buildWatch(DIR_OUT, DIR_SEARCH, DIR_ROOT, connection)
});
})
program.parse(process.argv)