magica
Version:
ImageMagick for browser and Node.js, easy setup, high level API and Command Line Interface, including WASM binary for an easy setup.
78 lines (74 loc) • 3.65 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = require("fs");
const glob_1 = require("glob");
const misc_utils_of_mine_generic_1 = require("misc-utils-of-mine-generic");
const command_1 = require("../main/command");
const main_1 = require("../main/main");
const options_1 = require("../options");
const fileUtil_1 = require("../util/fileUtil");
misc_utils_of_mine_generic_1.flatInstallArrayPrototype();
function cli(options) {
return __awaiter(this, void 0, void 0, function* () {
preconditions(options);
options = Object.assign(Object.assign({}, options_1.getOptions()), options);
options.debug && console.log(`CLI Options: ${JSON.stringify(Object.assign(Object.assign({}, options), { input: null }))}`);
const inputPaths = misc_utils_of_mine_generic_1.asArray(options.input).filter(misc_utils_of_mine_generic_1.isString)
.map(f => glob_1.sync(f)).flat().filter(fs_1.existsSync);
const result = yield main_1.main({
command: command_1.processCommand(options.command),
inputFiles: inputPaths.map(name => ({ name: misc_utils_of_mine_generic_1.basename(name), content: fs_1.readFileSync(name) }))
});
process.stdout.write((result.stdout || []).join('\n') + '\n');
if (result.error || result.stderr) {
process.stderr.write((result.stderr || []).join('\n') + '\n');
}
(result.outputFiles || []).forEach(f => {
if (!fs_1.existsSync(options.outputDir)) {
fs_1.mkdirSync(options.outputDir, { recursive: true });
}
const outputName = misc_utils_of_mine_generic_1.pathJoin(options.outputDir, fileUtil_1.getFileName(f.name));
options.debug && console.log('Writing output file', outputName);
fs_1.writeFileSync(outputName, f.content, { encoding: 'binary' });
});
});
}
exports.cli = cli;
function preconditions(options) {
if (options.help) {
printHelp();
process.exit(0);
}
if (!options.command || !options.input) {
fail('--command and --input are both mandatory. Aborting.');
}
}
function fail(msg, help = false) {
console.error(msg);
help && printHelp();
process.exit(1);
}
function printHelp() {
console.log(`
Usage:
magica --command "identify n.png" --input test/assets/n.png
magica --input test/assets/n.png --command "convert n.png -scale 44% dest/tmp.gif"
Options:
--input: string[]: Input file paths. It can also be glob patterns. For passing more than one use --input multiple times. It's important that the base name of these paths match the file names given in the command.
--command: string | string[]: An ImageMagick command, for example: "convert foo.png -scale 50% bar.gif".
--localNodeFsRoot?: string:
--emscriptenNodeFsRoot?: string:
--help?: boolean: (command line only)
--debug?: boolean:
`);
}
//# sourceMappingURL=cli.js.map