yini-parser 1.0.0-alpha.1 → 1.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +21 -10
  2. package/dist/YINI.d.ts +21 -0
  3. package/dist/{src/YINI.js → YINI.js} +7 -7
  4. package/dist/config/env.d.ts +20 -0
  5. package/dist/core/ErrorDataHandler.d.ts +60 -0
  6. package/dist/core/YINIVisitor.d.ts +149 -0
  7. package/dist/core/objectBuilder.d.ts +6 -0
  8. package/dist/core/types.d.ts +49 -0
  9. package/dist/grammar/YiniLexer.d.ts +68 -0
  10. package/dist/grammar/YiniParser.d.ts +284 -0
  11. package/dist/grammar/YiniParserVisitor.d.ts +143 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/parseEntry.d.ts +2 -0
  14. package/dist/parsers/extractHeaderParts.d.ts +31 -0
  15. package/dist/parsers/extractSignificantYiniLine.d.ts +9 -0
  16. package/dist/parsers/parseBoolean.d.ts +5 -0
  17. package/dist/parsers/parseNull.d.ts +2 -0
  18. package/dist/parsers/parseNumber.d.ts +6 -0
  19. package/dist/parsers/parseSectionHeader.d.ts +13 -0
  20. package/dist/parsers/parseString.d.ts +2 -0
  21. package/dist/utils/pathAndFileName.d.ts +5 -0
  22. package/dist/utils/string.d.ts +42 -0
  23. package/dist/utils/system.d.ts +7 -0
  24. package/dist/yiniHelpers.d.ts +44 -0
  25. package/package.json +17 -18
  26. package/dist/tests/integration/1-core-parsing/parse-bigger-section-nesting-as-object.test.js +0 -83
  27. package/dist/tests/integration/1-core-parsing/parse-section-nesting-w-classic-markers.test.js +0 -170
  28. package/dist/tests/integration/1-core-parsing/parse-section-nesting-w-nsh-markers.test.js +0 -27
  29. package/dist/tests/integration/1-core-parsing/read some values from level 1 and 2.test.js +0 -77
  30. package/dist/tests/integration/1-core-parsing/throw on bad section heads.test.js +0 -162
  31. package/dist/tests/integration/10-special-validation-modes/validation-modes.test.js +0 -38
  32. package/dist/tests/integration/2-file-structure-and-error/able to parse mixed case filenames.test.js +0 -72
  33. package/dist/tests/integration/2-file-structure-and-error/throw error on bad file extensions.test.js +0 -36
  34. package/dist/tests/integration/2-file-structure-and-error/throw error parsing bad content.test.js +0 -80
  35. package/dist/tests/smoke/A-general-smoke.test.js +0 -259
  36. package/dist/tests/smoke/B-parse-inline-smoke.test.js +0 -270
  37. package/dist/tests/smoke/C-traverse-file-smoke.test.js +0 -141
  38. package/dist/tests/smoke/D-parse-file-smoke.test.js +0 -134
  39. package/dist/tests/unit/parsers/extractHeaderParts.unit.test.js +0 -490
  40. package/dist/tests/unit/parsers/parseSectionHeader-classic.unit.test.js +0 -421
  41. package/dist/tests/unit/parsers/parseSectionHeader-nsh.unit.test.js +0 -436
  42. package/dist/tests/unit/parsers/parseSectionHeader-throw-on-invalid.unit.test.js +0 -168
  43. package/dist/tests/unit/utils/utils-pathAndFileName.unit.test.js +0 -80
  44. package/dist/tests/unit/utils/utils-string.unit.test.js +0 -185
  45. package/dist/tests/unit/yiniHelpers.unit.test.js +0 -306
  46. /package/dist/{src/config → config}/env.js +0 -0
  47. /package/dist/{src/core → core}/ErrorDataHandler.js +0 -0
  48. /package/dist/{src/core → core}/YINIVisitor.js +0 -0
  49. /package/dist/{src/core → core}/objectBuilder.js +0 -0
  50. /package/dist/{src/core → core}/types.js +0 -0
  51. /package/dist/{src/grammar → grammar}/YiniLexer.js +0 -0
  52. /package/dist/{src/grammar → grammar}/YiniParser.js +0 -0
  53. /package/dist/{src/grammar → grammar}/YiniParserVisitor.js +0 -0
  54. /package/dist/{src/index.js → index.js} +0 -0
  55. /package/dist/{src/parseEntry.js → parseEntry.js} +0 -0
  56. /package/dist/{src/parsers → parsers}/extractHeaderParts.js +0 -0
  57. /package/dist/{src/parsers → parsers}/extractSignificantYiniLine.js +0 -0
  58. /package/dist/{src/parsers → parsers}/parseBoolean.js +0 -0
  59. /package/dist/{src/parsers → parsers}/parseNull.js +0 -0
  60. /package/dist/{src/parsers → parsers}/parseNumber.js +0 -0
  61. /package/dist/{src/parsers → parsers}/parseSectionHeader.js +0 -0
  62. /package/dist/{src/parsers → parsers}/parseString.js +0 -0
  63. /package/dist/{src/utils → utils}/pathAndFileName.js +0 -0
  64. /package/dist/{src/utils → utils}/string.js +0 -0
  65. /package/dist/{src/utils → utils}/system.js +0 -0
  66. /package/dist/{src/yiniHelpers.js → yiniHelpers.js} +0 -0
@@ -0,0 +1,284 @@
1
+ import { ATN, DFA, FailedPredicateException, Parser, ParserRuleContext, TerminalNode, TokenStream } from 'antlr4';
2
+ import YiniParserVisitor from "./YiniParserVisitor.js";
3
+ export default class YiniParser extends Parser {
4
+ static readonly YINI_MARKER = 1;
5
+ static readonly SECTION_HEAD = 2;
6
+ static readonly TERMINAL_TOKEN = 3;
7
+ static readonly SS = 4;
8
+ static readonly EUR = 5;
9
+ static readonly CARET = 6;
10
+ static readonly TILDE = 7;
11
+ static readonly GT = 8;
12
+ static readonly LT = 9;
13
+ static readonly EQ = 10;
14
+ static readonly HASH = 11;
15
+ static readonly COMMA = 12;
16
+ static readonly COLON = 13;
17
+ static readonly OB = 14;
18
+ static readonly CB = 15;
19
+ static readonly OC = 16;
20
+ static readonly CC = 17;
21
+ static readonly PLUS = 18;
22
+ static readonly DOLLAR = 19;
23
+ static readonly PC = 20;
24
+ static readonly AT = 21;
25
+ static readonly SEMICOLON = 22;
26
+ static readonly BOOLEAN_FALSE = 23;
27
+ static readonly BOOLEAN_TRUE = 24;
28
+ static readonly NULL = 25;
29
+ static readonly EMPTY_OBJECT = 26;
30
+ static readonly EMPTY_LIST = 27;
31
+ static readonly SHEBANG = 28;
32
+ static readonly NUMBER = 29;
33
+ static readonly KEY = 30;
34
+ static readonly IDENT = 31;
35
+ static readonly IDENT_BACKTICKED = 32;
36
+ static readonly STRING = 33;
37
+ static readonly TRIPLE_QUOTED_STRING = 34;
38
+ static readonly SINGLE_OR_DOUBLE = 35;
39
+ static readonly R_AND_C_STRING = 36;
40
+ static readonly HYPER_STRING = 37;
41
+ static readonly ESC_SEQ = 38;
42
+ static readonly ESC_SEQ_BASE = 39;
43
+ static readonly NL = 40;
44
+ static readonly SINGLE_NL = 41;
45
+ static readonly WS = 42;
46
+ static readonly BLOCK_COMMENT = 43;
47
+ static readonly COMMENT = 44;
48
+ static readonly LINE_COMMENT = 45;
49
+ static readonly INLINE_COMMENT = 46;
50
+ static readonly IDENT_INVALID = 47;
51
+ static readonly EOF: number;
52
+ static readonly RULE_yini = 0;
53
+ static readonly RULE_section = 1;
54
+ static readonly RULE_terminal_line = 2;
55
+ static readonly RULE_section_members = 3;
56
+ static readonly RULE_member = 4;
57
+ static readonly RULE_member_colon_list = 5;
58
+ static readonly RULE_value = 6;
59
+ static readonly RULE_object_literal = 7;
60
+ static readonly RULE_objectMemberList = 8;
61
+ static readonly RULE_objectMember = 9;
62
+ static readonly RULE_list = 10;
63
+ static readonly RULE_list_in_brackets = 11;
64
+ static readonly RULE_elements = 12;
65
+ static readonly RULE_element = 13;
66
+ static readonly RULE_number_literal = 14;
67
+ static readonly RULE_null_literal = 15;
68
+ static readonly RULE_string_literal = 16;
69
+ static readonly RULE_string_concat = 17;
70
+ static readonly RULE_boolean_literal = 18;
71
+ static readonly literalNames: (string | null)[];
72
+ static readonly symbolicNames: (string | null)[];
73
+ static readonly ruleNames: string[];
74
+ get grammarFileName(): string;
75
+ get literalNames(): (string | null)[];
76
+ get symbolicNames(): (string | null)[];
77
+ get ruleNames(): string[];
78
+ get serializedATN(): number[];
79
+ protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException;
80
+ constructor(input: TokenStream);
81
+ yini(): YiniContext;
82
+ section(): SectionContext;
83
+ terminal_line(): Terminal_lineContext;
84
+ section_members(): Section_membersContext;
85
+ member(): MemberContext;
86
+ member_colon_list(): Member_colon_listContext;
87
+ value(): ValueContext;
88
+ object_literal(): Object_literalContext;
89
+ objectMemberList(): ObjectMemberListContext;
90
+ objectMember(): ObjectMemberContext;
91
+ list(): ListContext;
92
+ list_in_brackets(): List_in_bracketsContext;
93
+ elements(): ElementsContext;
94
+ element(): ElementContext;
95
+ number_literal(): Number_literalContext;
96
+ null_literal(): Null_literalContext;
97
+ string_literal(): String_literalContext;
98
+ string_concat(): String_concatContext;
99
+ boolean_literal(): Boolean_literalContext;
100
+ static readonly _serializedATN: number[];
101
+ private static __ATN;
102
+ static get _ATN(): ATN;
103
+ static DecisionsToDFA: DFA[];
104
+ }
105
+ export declare class YiniContext extends ParserRuleContext {
106
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
107
+ SHEBANG(): TerminalNode;
108
+ INLINE_COMMENT_list(): TerminalNode[];
109
+ INLINE_COMMENT(i: number): TerminalNode;
110
+ NL_list(): TerminalNode[];
111
+ NL(i: number): TerminalNode;
112
+ YINI_MARKER(): TerminalNode;
113
+ section_list(): SectionContext[];
114
+ section(i: number): SectionContext;
115
+ terminal_line(): Terminal_lineContext;
116
+ EOF(): TerminalNode;
117
+ get ruleIndex(): number;
118
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
119
+ }
120
+ export declare class SectionContext extends ParserRuleContext {
121
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
122
+ section_members(): Section_membersContext;
123
+ SECTION_HEAD(): TerminalNode;
124
+ get ruleIndex(): number;
125
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
126
+ }
127
+ export declare class Terminal_lineContext extends ParserRuleContext {
128
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
129
+ TERMINAL_TOKEN(): TerminalNode;
130
+ NL_list(): TerminalNode[];
131
+ NL(i: number): TerminalNode;
132
+ INLINE_COMMENT(): TerminalNode;
133
+ get ruleIndex(): number;
134
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
135
+ }
136
+ export declare class Section_membersContext extends ParserRuleContext {
137
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
138
+ member_list(): MemberContext[];
139
+ member(i: number): MemberContext;
140
+ get ruleIndex(): number;
141
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
142
+ }
143
+ export declare class MemberContext extends ParserRuleContext {
144
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
145
+ KEY(): TerminalNode;
146
+ EQ(): TerminalNode;
147
+ WS_list(): TerminalNode[];
148
+ WS(i: number): TerminalNode;
149
+ value(): ValueContext;
150
+ NL_list(): TerminalNode[];
151
+ NL(i: number): TerminalNode;
152
+ member_colon_list(): Member_colon_listContext;
153
+ SECTION_HEAD(): TerminalNode;
154
+ section_members(): Section_membersContext;
155
+ get ruleIndex(): number;
156
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
157
+ }
158
+ export declare class Member_colon_listContext extends ParserRuleContext {
159
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
160
+ KEY(): TerminalNode;
161
+ COLON(): TerminalNode;
162
+ WS(): TerminalNode;
163
+ elements(): ElementsContext;
164
+ NL_list(): TerminalNode[];
165
+ NL(i: number): TerminalNode;
166
+ get ruleIndex(): number;
167
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
168
+ }
169
+ export declare class ValueContext extends ParserRuleContext {
170
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
171
+ null_literal(): Null_literalContext;
172
+ string_literal(): String_literalContext;
173
+ number_literal(): Number_literalContext;
174
+ boolean_literal(): Boolean_literalContext;
175
+ list_in_brackets(): List_in_bracketsContext;
176
+ object_literal(): Object_literalContext;
177
+ get ruleIndex(): number;
178
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
179
+ }
180
+ export declare class Object_literalContext extends ParserRuleContext {
181
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
182
+ OC(): TerminalNode;
183
+ objectMemberList(): ObjectMemberListContext;
184
+ CC(): TerminalNode;
185
+ NL_list(): TerminalNode[];
186
+ NL(i: number): TerminalNode;
187
+ EMPTY_OBJECT(): TerminalNode;
188
+ get ruleIndex(): number;
189
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
190
+ }
191
+ export declare class ObjectMemberListContext extends ParserRuleContext {
192
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
193
+ objectMember_list(): ObjectMemberContext[];
194
+ objectMember(i: number): ObjectMemberContext;
195
+ COMMA_list(): TerminalNode[];
196
+ COMMA(i: number): TerminalNode;
197
+ NL_list(): TerminalNode[];
198
+ NL(i: number): TerminalNode;
199
+ EMPTY_OBJECT(): TerminalNode;
200
+ get ruleIndex(): number;
201
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
202
+ }
203
+ export declare class ObjectMemberContext extends ParserRuleContext {
204
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
205
+ KEY(): TerminalNode;
206
+ EQ(): TerminalNode;
207
+ value(): ValueContext;
208
+ WS(): TerminalNode;
209
+ NL_list(): TerminalNode[];
210
+ NL(i: number): TerminalNode;
211
+ get ruleIndex(): number;
212
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
213
+ }
214
+ export declare class ListContext extends ParserRuleContext {
215
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
216
+ elements(): ElementsContext;
217
+ list_in_brackets(): List_in_bracketsContext;
218
+ get ruleIndex(): number;
219
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
220
+ }
221
+ export declare class List_in_bracketsContext extends ParserRuleContext {
222
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
223
+ OB(): TerminalNode;
224
+ elements(): ElementsContext;
225
+ CB(): TerminalNode;
226
+ NL_list(): TerminalNode[];
227
+ NL(i: number): TerminalNode;
228
+ EMPTY_LIST(): TerminalNode;
229
+ get ruleIndex(): number;
230
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
231
+ }
232
+ export declare class ElementsContext extends ParserRuleContext {
233
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
234
+ element(): ElementContext;
235
+ COMMA(): TerminalNode;
236
+ elements(): ElementsContext;
237
+ get ruleIndex(): number;
238
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
239
+ }
240
+ export declare class ElementContext extends ParserRuleContext {
241
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
242
+ value(): ValueContext;
243
+ NL_list(): TerminalNode[];
244
+ NL(i: number): TerminalNode;
245
+ list_in_brackets(): List_in_bracketsContext;
246
+ get ruleIndex(): number;
247
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
248
+ }
249
+ export declare class Number_literalContext extends ParserRuleContext {
250
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
251
+ NUMBER(): TerminalNode;
252
+ get ruleIndex(): number;
253
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
254
+ }
255
+ export declare class Null_literalContext extends ParserRuleContext {
256
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
257
+ NULL(): TerminalNode;
258
+ get ruleIndex(): number;
259
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
260
+ }
261
+ export declare class String_literalContext extends ParserRuleContext {
262
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
263
+ STRING(): TerminalNode;
264
+ string_concat_list(): String_concatContext[];
265
+ string_concat(i: number): String_concatContext;
266
+ get ruleIndex(): number;
267
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
268
+ }
269
+ export declare class String_concatContext extends ParserRuleContext {
270
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
271
+ PLUS(): TerminalNode;
272
+ STRING(): TerminalNode;
273
+ NL_list(): TerminalNode[];
274
+ NL(i: number): TerminalNode;
275
+ get ruleIndex(): number;
276
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
277
+ }
278
+ export declare class Boolean_literalContext extends ParserRuleContext {
279
+ constructor(parser?: YiniParser, parent?: ParserRuleContext, invokingState?: number);
280
+ BOOLEAN_FALSE(): TerminalNode;
281
+ BOOLEAN_TRUE(): TerminalNode;
282
+ get ruleIndex(): number;
283
+ accept<Result>(visitor: YiniParserVisitor<Result>): Result;
284
+ }
@@ -0,0 +1,143 @@
1
+ import { ParseTreeVisitor } from 'antlr4';
2
+ import { YiniContext } from "./YiniParser.js";
3
+ import { SectionContext } from "./YiniParser.js";
4
+ import { Terminal_lineContext } from "./YiniParser.js";
5
+ import { Section_membersContext } from "./YiniParser.js";
6
+ import { MemberContext } from "./YiniParser.js";
7
+ import { Member_colon_listContext } from "./YiniParser.js";
8
+ import { ValueContext } from "./YiniParser.js";
9
+ import { Object_literalContext } from "./YiniParser.js";
10
+ import { ObjectMemberListContext } from "./YiniParser.js";
11
+ import { ObjectMemberContext } from "./YiniParser.js";
12
+ import { ListContext } from "./YiniParser.js";
13
+ import { List_in_bracketsContext } from "./YiniParser.js";
14
+ import { ElementsContext } from "./YiniParser.js";
15
+ import { ElementContext } from "./YiniParser.js";
16
+ import { Number_literalContext } from "./YiniParser.js";
17
+ import { Null_literalContext } from "./YiniParser.js";
18
+ import { String_literalContext } from "./YiniParser.js";
19
+ import { String_concatContext } from "./YiniParser.js";
20
+ import { Boolean_literalContext } from "./YiniParser.js";
21
+ /**
22
+ * This interface defines a complete generic visitor for a parse tree produced
23
+ * by `YiniParser`.
24
+ *
25
+ * @param <Result> The return type of the visit operation. Use `void` for
26
+ * operations with no return type.
27
+ */
28
+ export default class YiniParserVisitor<Result> extends ParseTreeVisitor<Result> {
29
+ /**
30
+ * Visit a parse tree produced by `YiniParser.yini`.
31
+ * @param ctx the parse tree
32
+ * @return the visitor result
33
+ */
34
+ visitYini?: (ctx: YiniContext) => Result;
35
+ /**
36
+ * Visit a parse tree produced by `YiniParser.section`.
37
+ * @param ctx the parse tree
38
+ * @return the visitor result
39
+ */
40
+ visitSection?: (ctx: SectionContext) => Result;
41
+ /**
42
+ * Visit a parse tree produced by `YiniParser.terminal_line`.
43
+ * @param ctx the parse tree
44
+ * @return the visitor result
45
+ */
46
+ visitTerminal_line?: (ctx: Terminal_lineContext) => Result;
47
+ /**
48
+ * Visit a parse tree produced by `YiniParser.section_members`.
49
+ * @param ctx the parse tree
50
+ * @return the visitor result
51
+ */
52
+ visitSection_members?: (ctx: Section_membersContext) => Result;
53
+ /**
54
+ * Visit a parse tree produced by `YiniParser.member`.
55
+ * @param ctx the parse tree
56
+ * @return the visitor result
57
+ */
58
+ visitMember?: (ctx: MemberContext) => Result;
59
+ /**
60
+ * Visit a parse tree produced by `YiniParser.member_colon_list`.
61
+ * @param ctx the parse tree
62
+ * @return the visitor result
63
+ */
64
+ visitMember_colon_list?: (ctx: Member_colon_listContext) => Result;
65
+ /**
66
+ * Visit a parse tree produced by `YiniParser.value`.
67
+ * @param ctx the parse tree
68
+ * @return the visitor result
69
+ */
70
+ visitValue?: (ctx: ValueContext) => Result;
71
+ /**
72
+ * Visit a parse tree produced by `YiniParser.object_literal`.
73
+ * @param ctx the parse tree
74
+ * @return the visitor result
75
+ */
76
+ visitObject_literal?: (ctx: Object_literalContext) => Result;
77
+ /**
78
+ * Visit a parse tree produced by `YiniParser.objectMemberList`.
79
+ * @param ctx the parse tree
80
+ * @return the visitor result
81
+ */
82
+ visitObjectMemberList?: (ctx: ObjectMemberListContext) => Result;
83
+ /**
84
+ * Visit a parse tree produced by `YiniParser.objectMember`.
85
+ * @param ctx the parse tree
86
+ * @return the visitor result
87
+ */
88
+ visitObjectMember?: (ctx: ObjectMemberContext) => Result;
89
+ /**
90
+ * Visit a parse tree produced by `YiniParser.list`.
91
+ * @param ctx the parse tree
92
+ * @return the visitor result
93
+ */
94
+ visitList?: (ctx: ListContext) => Result;
95
+ /**
96
+ * Visit a parse tree produced by `YiniParser.list_in_brackets`.
97
+ * @param ctx the parse tree
98
+ * @return the visitor result
99
+ */
100
+ visitList_in_brackets?: (ctx: List_in_bracketsContext) => Result;
101
+ /**
102
+ * Visit a parse tree produced by `YiniParser.elements`.
103
+ * @param ctx the parse tree
104
+ * @return the visitor result
105
+ */
106
+ visitElements?: (ctx: ElementsContext) => Result;
107
+ /**
108
+ * Visit a parse tree produced by `YiniParser.element`.
109
+ * @param ctx the parse tree
110
+ * @return the visitor result
111
+ */
112
+ visitElement?: (ctx: ElementContext) => Result;
113
+ /**
114
+ * Visit a parse tree produced by `YiniParser.number_literal`.
115
+ * @param ctx the parse tree
116
+ * @return the visitor result
117
+ */
118
+ visitNumber_literal?: (ctx: Number_literalContext) => Result;
119
+ /**
120
+ * Visit a parse tree produced by `YiniParser.null_literal`.
121
+ * @param ctx the parse tree
122
+ * @return the visitor result
123
+ */
124
+ visitNull_literal?: (ctx: Null_literalContext) => Result;
125
+ /**
126
+ * Visit a parse tree produced by `YiniParser.string_literal`.
127
+ * @param ctx the parse tree
128
+ * @return the visitor result
129
+ */
130
+ visitString_literal?: (ctx: String_literalContext) => Result;
131
+ /**
132
+ * Visit a parse tree produced by `YiniParser.string_concat`.
133
+ * @param ctx the parse tree
134
+ * @return the visitor result
135
+ */
136
+ visitString_concat?: (ctx: String_concatContext) => Result;
137
+ /**
138
+ * Visit a parse tree produced by `YiniParser.boolean_literal`.
139
+ * @param ctx the parse tree
140
+ * @return the visitor result
141
+ */
142
+ visitBoolean_literal?: (ctx: Boolean_literalContext) => Result;
143
+ }
@@ -0,0 +1 @@
1
+ export { default } from './YINI';
@@ -0,0 +1,2 @@
1
+ import { IParseMainOptions } from './core/types';
2
+ export declare const parseMain: (yiniContent: string, options?: IParseMainOptions) => any;
@@ -0,0 +1,31 @@
1
+ import { ErrorDataHandler } from '../core/ErrorDataHandler';
2
+ import { SectionContext } from '../grammar/YiniParser';
3
+ /**
4
+ * Check and identify the section header parts via tokenizing the parts and return them as strings.
5
+ * @param rawHeaderLine Raw line with the section header where the header
6
+ * marker will be identified. E.g. does the header start with '^^^' or '^3'
7
+ * and then some identifier.
8
+ *
9
+ * Below, copied from YINI Specification v1.0.0 Beta 7.
10
+ * Form 1: Identifier of Simple Form:
11
+ * - Keys must be non-empty.
12
+ * - Keys are case-sensitive (`Title` and `title` are different).
13
+ * - Can only contain letters (a-z or A-Z), digits (0-9) and underscores `_`.
14
+ * - Must begin with a letter or an underscore `_`.
15
+ * - Note: Cannot contain hyphens (`-`) or periods (`.`).
16
+ *
17
+ * Form 2: Backticked Identifier:
18
+ * - A phrase is a name wrapped in backticks ``` ` ```.
19
+ * - Backticked identifiers must be on a single line and must not contain tabs or new lines unless using escaping codes, except for ordinary spaces.
20
+ * - Special control characters (U+0000–U+001F) must be escaped.
21
+ *
22
+ * @note Returns the parts as strings; each part needs to be analyzed separately against the contraints in the specifications.
23
+ * @returns An object with the identified header parts: marker characters, parsed name, and parsed level string.
24
+ */
25
+ declare const extractHeaderParts: (rawLine: string, errorHandler?: ErrorDataHandler | null, ctx?: SectionContext | null) => {
26
+ strMarkerChars: string;
27
+ strSectionName: string;
28
+ strNumberPart: string;
29
+ isBacktickedName: boolean;
30
+ };
31
+ export default extractHeaderParts;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Extract significant YINI line from YINI content (that may be surrounded by comments.).
3
+ * @param rawYiniContent For example:
4
+ * // This whole line is a comment.
5
+ * ^SectionName# This part is a comment.
6
+ * // This whole line is a comment.
7
+ * @returns Will filter out any comments (before or after) and return only one single significant YINI line.
8
+ */
9
+ export declare const extractYiniLine: (rawYiniContent: string) => string;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Extract boolean literal.
3
+ */
4
+ declare const parseBooleanLiteral: (txt: string) => boolean;
5
+ export default parseBooleanLiteral;
@@ -0,0 +1,2 @@
1
+ declare const parseNullLiteral: (txt: string) => null;
2
+ export default parseNullLiteral;
@@ -0,0 +1,6 @@
1
+ import { TDataType } from '../core/YINIVisitor';
2
+ declare const parseNumberLiteral: (txt: string) => {
3
+ type: TDataType;
4
+ value: number;
5
+ };
6
+ export default parseNumberLiteral;
@@ -0,0 +1,13 @@
1
+ import { ErrorDataHandler } from '../core/ErrorDataHandler';
2
+ import { TSectionHeaderType } from '../core/types';
3
+ import { SectionContext } from '../grammar/YiniParser';
4
+ /**
5
+ * Extract ...
6
+ * @param rawLine Raw line with the section header.
7
+ */
8
+ declare const parseSectionHeader: (rawLine: string, errorHandler: ErrorDataHandler, ctx: null | SectionContext) => {
9
+ markerType: TSectionHeaderType;
10
+ sectionName: string;
11
+ sectionLevel: number;
12
+ };
13
+ export default parseSectionHeader;
@@ -0,0 +1,2 @@
1
+ declare const parseStringLiteral: (raw: string) => string;
2
+ export default parseStringLiteral;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This file contains general path and file name helper functions (utils).
3
+ * @note More specific YINI helper functions should go into yiniHelpers.ts-file.
4
+ */
5
+ export declare const getFileNameExtension: (fullPath: string) => string;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * This file contains general string helper functions (utils).
3
+ * @note More specific YINI helper functions should go into yiniHelpers.ts-file.
4
+ */
5
+ /**
6
+ * Splits a string into an array of lines, handling both LF and CRLF newlines.
7
+ * @param content The input string.
8
+ * @returns Array of lines (strings).
9
+ */
10
+ export declare function splitLines(content: string): string[];
11
+ /**
12
+ * If a string starts and ends with a backtick `, if so trims the
13
+ * first and last character (the backticks).
14
+ */
15
+ export declare const trimBackticks: (str: string) => string;
16
+ /**
17
+ * Returns true if the provided string is enclosed in backticks, e.g. `name`.
18
+ */
19
+ export declare const isEnclosedInBackticks: (str: string) => boolean;
20
+ /**
21
+ * Check if the character is A-Z or a-z.
22
+ * @note The string must be of length 1.
23
+ * @param character A character in a string.
24
+ */
25
+ export declare const isAlpha: (character: string) => boolean;
26
+ /**
27
+ * Check if the character is a digit (number): 0-9.
28
+ * @note The string must be of length 1.
29
+ * @param character A character in a string.
30
+ */
31
+ export declare const isDigit: (character: string) => boolean;
32
+ /**
33
+ * @returns Returns the beginning up to (but not including) any first
34
+ * encountered newline.
35
+ * @note If no newline is found, returns the whole string.
36
+ * @example
37
+ * `SectionName1
38
+ * //value = 11`
39
+ * => 'SectionName1'
40
+ * @deprecated This seems not useful anymore, use stripCommentsAndAfter(..) instead.
41
+ */
42
+ export declare const stripNLAndAfter: (line: string) => string;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * This file contains general system helper functions (utils).
3
+ * @note More specific YINI helper functions should go into yiniHelpers.ts-file.
4
+ */
5
+ export declare const debugPrint: (str?: any) => void;
6
+ export declare const devPrint: (str?: any) => void;
7
+ export declare const printObject: (obj: any) => void;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * This file contains specific YINI helper functions (utils).
3
+ * @note More general helper functions should go into the dir "src/utils/".
4
+ */
5
+ /**
6
+ * Check if the character is a section marker character.
7
+ * @param character A character in a string.
8
+ * @note The string must be of length 1.
9
+ * @throws Will throw if not exactly of length 1.
10
+ */
11
+ export declare const isMarkerCharacter: (character: string) => boolean;
12
+ /**
13
+ * @returns Returns the beginning up to (but not including) any comments
14
+ * starting with //, #, ; or --.
15
+ * @throws Will throw if consisting more than 1 lines.
16
+ */
17
+ export declare const stripCommentsAndAfter: (line: string) => string;
18
+ /**
19
+ * Checks if a string conforms to the identifier rules for section headers and
20
+ * member key names as defined by the YINI specification, following
21
+ * the ANTLR4 lexer rule:
22
+ * IDENT: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*
23
+
24
+ * @throws Will only throw if blank string.
25
+ *
26
+ * @satisfies Should satisfy YINI spec 7, chapter: 3.4. Identifiers, Form 1:
27
+ * Identifier of Simple Form.
28
+ * @link https://github.com/YINI-lang/YINI-spec/blob/develop/YINI-Specification.md#34-identifiers
29
+ */
30
+ export declare const isValidSimpleIdent: (str: string) => boolean;
31
+ /**
32
+ * Checks if a string is a valid backticked phrase/identifier:
33
+ * - Wrapped in backticks.
34
+ * - No raw tabs, newlines, or control characters (U+0000–U+001F), except as
35
+ * escaped sequences (e.g., \n).
36
+ * - May contain ordinary spaces.
37
+ * @note Empty is allowed: ``, as in spec (due to conform with the JSON empty key "").
38
+ * @throws Will only throw if missing enclosed backtick(s).
39
+ *
40
+ * @satisfies Should satisfy YINI spec 7, chapter: 3.4. Identifiers, Form 2:
41
+ * Backticked Identifier.
42
+ * @link https://github.com/YINI-lang/YINI-spec/blob/develop/YINI-Specification.md#34-identifiers
43
+ */
44
+ export declare const isValidBacktickedIdent: (str: string) => boolean;
package/package.json CHANGED
@@ -1,18 +1,28 @@
1
1
  {
2
2
  "name": "yini-parser",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.2",
4
4
  "description": "YINI parser for JavaScript/TypeScript, an INI-inspired configuration format, meant to be readable, and easy to use.",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
5
+ "keywords": [
6
+ "read",
7
+ "yini",
8
+ "config",
9
+ "ini",
10
+ "parser",
11
+ "file",
12
+ "parse",
13
+ "configuration"
14
+ ],
15
+ "homepage": "https://m4se.com/yini-lang.org/",
16
+ "license": "Apache-2.0",
7
17
  "files": [
8
18
  "dist/",
9
- "index.js",
10
- "index.d.ts",
11
19
  "package.json",
12
20
  "README.md",
13
21
  "LICENSE",
14
22
  "CHANGELOG.md"
15
23
  ],
24
+ "main": "dist/index.js",
25
+ "types": "dist/index.d.ts",
16
26
  "exports": {
17
27
  ".": {
18
28
  "import": "./dist/index.js",
@@ -22,20 +32,8 @@
22
32
  },
23
33
  "repository": {
24
34
  "type": "git",
25
- "url": "git+https://github.com/YOUR_USERNAME/yini-parser.git"
35
+ "url": "https://github.com/YINI-lang/yini-parser-typescript.git"
26
36
  },
27
- "keywords": [
28
- "read",
29
- "yini",
30
- "config",
31
- "ini",
32
- "parser",
33
- "file",
34
- "parse",
35
- "configuration"
36
- ],
37
- "author": "Marko K. Seppänen",
38
- "license": "Apache-2.0",
39
37
  "private": false,
40
38
  "scripts": {
41
39
  "start": "cross-env NODE_ENV=production APP_ENV=production node dist/index.js",
@@ -60,6 +58,7 @@
60
58
  "build": "tsc -p ./tsconfig.json",
61
59
  "prepublishOnly": "npm run lint && npm test && npm run build"
62
60
  },
61
+ "author": "Marko K. Seppänen",
63
62
  "dependencies": {
64
63
  "antlr4": "^4.13.2"
65
64
  },