UNPKG

1.5 kBJavaScriptView Raw
1#!/usr/bin/env node
2const peg = require('pegjs')
3const tspegjs = require("ts-pegjs");
4const fs = require('fs')
5const {outputFileSync} = require('fs-extra')
6const grammar = fs.readFileSync('./src/parser.pegjs', 'utf-8')
7
8// TS
9const srcString = peg.generate(grammar, {
10 plugins: [tspegjs],
11 output: 'source',
12 tspegjs: {
13 customHeader: `
14import {
15 MessageFormatElement,
16 LiteralElement,
17 ArgumentElement,
18 NumberElement,
19 DateElement,
20 TimeElement,
21 SelectElement,
22 PluralElement,
23 PluralOrSelectOption,
24 TYPE
25} from './types'`
26 },
27 returnTypes: {
28 argument: 'string',
29 ws: 'string',
30 digit: 'string',
31 hexDigit: 'string',
32 quoteEscapedChar: 'string',
33 apostrophe: 'string',
34 escape: 'string',
35 char: 'string',
36 chars: 'string',
37 varName: 'string',
38 number: 'number',
39 start: 'MessageFormatElement[]',
40 message: 'MessageFormatElement[]',
41 literalElement: 'LiteralElement',
42 argumentElement: 'ArgumentElement',
43 selectElement: 'SelectElement',
44 pluralElement: 'PluralElement',
45 selectOption: 'PluralOrSelectOption',
46 pluralOption: 'PluralOrSelectOption',
47 simpleFormatElement: `
48| NumberElement
49| DateElement
50| TimeElement
51`
52 }
53})
54
55const REGEX = /ParseFunction = \((.*?)\) => (any);/g
56
57outputFileSync('src/parser.ts', srcString.replace(REGEX, 'ParseFunction = ($1) => MessageFormatElement[];'))
\No newline at end of file