/// import CLI = require('commander'); import Fs = require('fs'); import Path = require('path'); import ChildProcess = require('child_process') import assert = require('assert'); import PreviewServer = require('./server'); var Parser = require('./parser'); var Package = require('../package.json'); var MapboxGLStyleSpec = require('mapbox-gl-style-spec'); var Reload = require('reload'); var ENCODING = "utf8"; CLI.version(Package.version) CLI.usage('[=stdin [=stdout]]'); CLI.option('-p, --preview', 'Start a webserver to preview changes in GL JS'); CLI.option('-w, --watch', 'Monitor the source file for changes and automatically recompile'); CLI.parse(process.argv) compile(); if (CLI['watch']) { assert(CLI.args[0]) Fs.watchFile(CLI.args[0], {interval: 100}, () => { compile(); }); } if (CLI['preview']) { assert(CLI.args[1], 'You must provide an output filename with --preview'); var server = PreviewServer(Path.resolve(CLI.args[1])); server.listen(3000, function () { console.log('Server listening at http://localhost:3000'); }); } function compile() { console.log("\n\nStarting compilation"); var inputStream = CLI.args[0] ? Fs.createReadStream(CLI.args[0]) : process.stdin; var outputStream = CLI.args[1] ? Fs.createWriteStream(CLI.args[1]) : process.stdout; inputStream.setEncoding(ENCODING); inputStream.on("error", (error) => {throw error}); outputStream.on("error", (error) => {throw error}); var input:string = "" inputStream.on("data", (chunk) => {input += chunk}) inputStream.on("end", () => { try { var output = JSON.stringify(Parser.parse(input).evaluate(), null, 2) + "\n"; MapboxGLStyleSpec.validate(output); if (outputStream == process.stdout) { outputStream.write(output, ENCODING); } else { outputStream.end(output, ENCODING); } assert(CLI.args[1]); console.log("Done compilation"); } catch (e) { console.log(e.toString()) console.log(e.stack) } }); }