1 | #!/usr/bin/env node
|
2 | const peg = require('pegjs')
|
3 | const tspegjs = require("ts-pegjs");
|
4 | const fs = require('fs')
|
5 | const {outputFileSync} = require('fs-extra')
|
6 | const grammar = fs.readFileSync('./src/parser.pegjs', 'utf-8')
|
7 |
|
8 |
|
9 | const srcString = peg.generate(grammar, {
|
10 | plugins: [tspegjs],
|
11 | output: 'source',
|
12 | tspegjs: {
|
13 | customHeader: `
|
14 | import {
|
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 |
|
55 | const REGEX = /ParseFunction = \((.*?)\) => (any);/g
|
56 |
|
57 | outputFileSync('src/parser.ts', srcString.replace(REGEX, 'ParseFunction = ($1) => MessageFormatElement[];')) |
\ | No newline at end of file |