UNPKG

@gobstones/gobstones-gbb-parser

Version:

A Parser/Stringifier for GBB (Gobstones Board) file format

72 lines (67 loc) 2.86 kB
import { GBB } from './index'; import { GBBParsingOptions } from './parser'; import { GBBStringifyingOptions } from './stringifier'; import { cli } from '@gobstones/gobstones-core/cli'; import { intl } from './translations'; // eslint-disable-next-line @typescript-eslint/no-var-requires const packageJSON = require('../package.json'); interface CLIArguments { language: string; file: string; out: string; pretty: boolean; } // Read from the package.json in order to retrieve the name and version const name = (packageJSON.name as string).split('/').slice(-1).pop(); const versionNumber = packageJSON.version; cli({ translator: intl, texts: { name, versionNumber, help: 'cli.descriptions.help', tool: 'cli.descriptions.tool', language: 'cli.descriptions.language', languageError: 'cli.errors.language', version: 'cli.descriptions.version' } }) .command('parse [gbbString]', 'cli.descriptions.parse', (cmd) => { cmd.input('cli.descriptions.in', 'cli.errors.file') .output('cli.descriptions.out') .option('pretty', 'cli.descriptions.pretty') .action((app, _, opts: CLIArguments) => { app.outputHelpOnNoArgs(); const gbbString = app.read(); const parseOpts: GBBParsingOptions = { language: opts.language }; const jsonBoard = GBB.parse(gbbString, parseOpts); const result = JSON.stringify(jsonBoard, undefined, opts.pretty ? 2 : undefined); app.write(result); }); }) .command('stringify [jsonBoard]', 'cli.descriptions.stringify', (cmd) => { cmd.input('cli.descriptions.in', 'cli.errors.file') .output('cli.descriptions.out') .option('pretty', 'cli.descriptions.pretty') .action((app, _, opts: CLIArguments) => { app.outputHelpOnNoArgs(); const jsonBoardString = app.read(); const jsonBoard = JSON.parse(jsonBoardString); const stringifyOpts: GBBStringifyingOptions = { language: opts.language, useFullColorNames: opts.pretty, declareColorsWithZeroStones: false, declareColorsWithAllZeroStones: false, separators: { betweenKeywords: opts.pretty ? 'newline' : 'space', betweenColors: 'space', colorKeyToNumber: opts.pretty ? 'tab' : 'space', betweenCoordinates: 'space', keywordToCoordinates: 'space' } }; const result = GBB.stringify(jsonBoard, stringifyOpts); app.write(result); }); }) .run();