1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #!/usr/bin/env node
- var fs = require("fs"),
- commander = require("commander"),
- topojson = require("../");
- commander
- .version(require("../package.json").version)
- .usage("[options] <n> [file]")
- .description("Quantizes TopoJSON.")
- .option("-o, --out <file>", "output topology file name; defaults to “-” for stdout", "-")
- .parse(process.argv);
- if (commander.args.length < 1) {
- console.error();
- console.error(" error: missing quantization parameter n");
- console.error();
- process.exit(1);
- } else if (commander.args.length > 2) {
- console.error();
- console.error(" error: multiple input files");
- console.error();
- process.exit(1);
- } else if (commander.args.length === 1) {
- commander.args.push("-");
- }
- if (!(Math.floor(commander.args[0]) >= 2)) {
- console.error();
- console.error(" error: invalid quantization parameter " + commander.args[0]);
- console.error();
- process.exit(1);
- }
- read(commander.args[1]).then(quantize).then(write(commander.out)).catch(abort);
- function read(file) {
- return new Promise(function(resolve, reject) {
- var data = [], stream = file === "-" ? process.stdin : fs.createReadStream(file);
- stream
- .on("data", function(d) { data.push(d); })
- .on("end", function() { resolve(JSON.parse(Buffer.concat(data))); })
- .on("error", reject);
- });
- }
- function quantize(topology) {
- return topojson.quantize(topology, +commander.args[0]);
- }
- function write(file) {
- var stream = (file === "-" ? process.stdout : fs.createWriteStream(file)).on("error", handleEpipe);
- return function(topology) {
- return new Promise(function(resolve, reject) {
- stream.on("error", reject)[stream === process.stdout ? "write" : "end"](JSON.stringify(topology) + "\n", function(error) {
- if (error) reject(error);
- else resolve();
- });
- });
- };
- }
- function handleEpipe(error) {
- if (error.code === "EPIPE" || error.errno === "EPIPE") {
- process.exit(0);
- }
- }
- function abort(error) {
- console.error();
- console.error(" error: " + error.message);
- console.error();
- process.exit(1);
- }
|