molstar
Version:
A comprehensive macromolecular library.
51 lines (50 loc) • 2.98 kB
JavaScript
;
/**
* Copyright (c) 2026 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author Adam Midlik <midlik@gmail.com>
*
* Command-line application for converting MolViewSpec MVSJ into MSVX files
* Build: npm run build
* Run: node lib/commonjs/cli/mvs/mvs-mvsj-to-mvsx -i examples/mvs/1cbs.mvsj -o tmp/1cbs.mvsx
*/
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const argparse_1 = require("argparse");
const fs_1 = tslib_1.__importDefault(require("fs"));
const mvs_data_1 = require("../../extensions/mvs/mvs-data.js");
const data_source_1 = require("../../mol-util/data-source.js");
(0, data_source_1.setFSModule)(fs_1.default);
/** Return parsed command line arguments for `main` */
function parseArguments() {
const parser = new argparse_1.ArgumentParser({ description: 'Command-line application for converting MolViewSpec MVSJ into MSVX files' });
parser.add_argument('-i', '--input', { required: true, nargs: '+', help: 'Input file(s) in .mvsj format.' });
parser.add_argument('-o', '--output', { required: false, nargs: '+', help: 'File path(s) for output files in .mvsx format (one output path for each input file). If ommitted, filenames will be created automatically by replacing file extension.' });
parser.add_argument('--base-uri', { help: 'Base URI/path used to resolve relative URIs in the input file (default: path of the input file itself). Use `--base-uri .` for using the current working directory as base URI.' });
parser.add_argument('--skip-external', { action: 'store_true', help: 'Do not include external resources (i.e. absolute URIs) in the MVSX.' });
const args = parser.parse_args();
if (args.output && args.output.length !== args.input.length) {
parser.error(`argument: --output: must specify the same number of input and output file paths (specified ${args.input.length} input path${args.input.length !== 1 ? 's' : ''} but ${args.output.length} output path${args.output.length !== 1 ? 's' : ''})`);
}
return { ...args };
}
/** Main workflow for converting MVSJ to MVSX files. */
async function main(args) {
var _a, _b, _c;
const cache = {};
for (let i = 0; i < args.input.length; i++) {
const input = args.input[i];
const output = (_b = (_a = args.output) === null || _a === void 0 ? void 0 : _a[i]) !== null && _b !== void 0 ? _b : input.replace(/(\.mvsj)?$/i, '.mvsx');
console.log(`Processing ${input} -> ${output}`);
const mvsj = fs_1.default.readFileSync(input, { encoding: 'utf8' });
const mvsData = mvs_data_1.MVSData.fromMVSJ(mvsj);
const mvsx = await mvs_data_1.MVSData.toMVSX(mvsData, {
baseUri: (_c = args.base_uri) !== null && _c !== void 0 ? _c : input,
skipExternal: args.skip_external,
cache,
});
fs_1.default.writeFileSync(output, mvsx);
}
}
main(parseArguments());