@prantlf/railroad-diagrams
Version:
JavaScript library and command-line tools for drawing railroad syntax diagrams to SVG.
1 lines • 7.7 kB
Source Map (JSON)
{"version":3,"file":"rrd2svg","sources":["../rrd2svg.js"],"sourcesContent":["import { readFileSync } from 'fs';\nimport { join, extname } from 'path';\nimport { safeLoad } from 'js-yaml';\nimport rr, { Diagram, Options } from 'railroad-diagrams';\n\nconst args = process.argv;\nlet standalone = true;\nlet verbose = false;\nlet source, inputType;\n\nfunction usage () {\n console.log(`Generates railroad diagrams from JSON, YAML or JavaScript to SVG.\n\nUsage: rrd2svg [option...] [file]\n\nOptions:\n --[no]-standalone add stylesheet to the SVG element. defaults to true\n --[no]-debug add sizing data into the SVG element. defaults to false\n -i|--input <type> read input from json, yaml or javascript. defaults to json\n -v|--verbose print error stacktrace\n -V|--version print version number\n -h|--help print usage instructions\n\nIf no file name is provided, standard input will be read. If no input type\nis provided, it will be inferred from the file extension: \".json\" -> json,\n\".yaml\" or \".yml\" -> yaml, \".js\" -> javascript.\n \nExamples:\n cat foo.yaml | rrd2svg -i yaml\n rrd2svg foo.json`);\n process.exit(0);\n}\n\nif (!args.length) usage();\n\nfor (let i = 2, l = args.length; i < l; ++i) {\n const arg = args[i];\n let match;\n if ((match = /^(?:-|--)(?:(no)-)?(\\w+)$/.exec(arg))) {\n const value = match[1] !== 'no';\n switch (match[2]) {\n case 'standalone':\n standalone = value;\n continue;\n case 'debug':\n Options.DEBUG = value;\n continue;\n case 'v': case 'verbose':\n verbose = true;\n continue;\n case 'i': case 'input':\n inputType = args[++i];\n if (inputType !== 'json' && inputType !== 'yaml' && inputType !== 'javascript') {\n console.error(`Invalid input type: \"${inputType}\".`);\n process.exit(2);\n }\n continue;\n case 'V': case 'version':\n console.log(JSON.parse(readFileSync(join(\n __dirname, '../package.json'), 'utf-8')).version);\n process.exit(0);\n continue;\n case 'h': case 'help':\n usage();\n }\n console.error(`Unknown option: \"${match[0]}\".`);\n process.exit(2);\n }\n if (source) {\n console.error('More than one file supplied.');\n process.exit(2);\n }\n source = { name: arg, code: readFileSync(arg, 'utf-8') };\n if (inputType === undefined) {\n const ext = extname(arg);\n switch (ext) {\n case '.json': inputType = 'json'; break;\n case '.yml': case '.yaml': inputType = 'yaml'; break;\n case '.js': inputType = 'javascript';\n }\n }\n}\n\nfunction run () {\n try {\n let diagram;\n switch (inputType) {\n case 'javascript':\n diagram = fromJavaScript(source.code); break;\n case 'yaml':\n diagram = Diagram.fromJSON(safeLoad(source.code)); break;\n case 'json':\n default:\n diagram = Diagram.fromJSON(JSON.parse(source.code));\n }\n console.log(diagram[standalone ? 'toStandalone' : 'toString']());\n } catch (error) {\n console.error(`${source.name}: ${error.message}`);\n if (verbose) console.log(error.stack);\n process.exitCode = 1;\n }\n}\n\nfunction fromJavaScript (input) {\n global.rr = rr;\n const diagramFunctions = `const { ${Object.keys(rr).join(', ')} } = rr;`;\n const createDiagram = new Function(`${diagramFunctions}\nreturn ${input}`);\n return createDiagram();\n}\n\nif (source) {\n run();\n} else {\n let input = '';\n process.stdin.setEncoding('utf8');\n process.stdin\n .on('data', chunk => (input += chunk))\n .on('end', () => {\n source = { name: 'snippet', code: input };\n run();\n })\n .resume();\n}\n"],"names":["Options","readFileSync","join","extname","Diagram","safeLoad","rr"],"mappings":"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"}