cddl 0.13.1 → 0.14.0
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.
- package/.release-it.json +12 -0
- package/LICENSE +1 -1
- package/README.md +4 -4
- package/package.json +12 -26
- package/src/ast.ts +180 -0
- package/src/cli/commands/repl.ts +33 -0
- package/src/cli/commands/validate.ts +44 -0
- package/src/cli/constants.ts +1 -0
- package/src/cli/index.ts +18 -0
- package/src/constants.ts +16 -0
- package/src/index.ts +11 -0
- package/src/lexer.ts +238 -0
- package/src/parser.ts +967 -0
- package/src/tokens.ts +50 -0
- package/src/utils.ts +37 -0
- package/tests/__snapshots__/complex_types.test.ts.snap +80 -0
- package/tests/__snapshots__/examples.test.ts.snap +1077 -0
- package/tests/__snapshots__/group-choices.test.ts.snap +278 -0
- package/tests/__snapshots__/parser.test.ts.snap +3045 -0
- package/tests/__snapshots__/webdriver-local.test.ts.snap +11192 -0
- package/tests/__snapshots__/webdriver-remote.test.ts.snap +16378 -0
- package/tests/commands/repl.test.ts +52 -0
- package/tests/commands/validate.test.ts +66 -0
- package/tests/complex_types.test.ts +18 -0
- package/tests/examples.test.ts +25 -0
- package/tests/group-choices.test.ts +103 -0
- package/tests/lexer.test.ts +63 -0
- package/tests/module.test.ts +21 -0
- package/tests/parser.test.ts +44 -0
- package/tests/webdriver-local.test.ts +15 -0
- package/tests/webdriver-remote.test.ts +15 -0
- package/tsconfig.json +11 -0
package/src/tokens.ts
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export type TokenType = string
|
|
2
|
+
|
|
3
|
+
export type Token = {
|
|
4
|
+
Type: TokenType
|
|
5
|
+
Literal: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export enum Tokens {
|
|
9
|
+
ILLEGAL = 'ILLEGAL',
|
|
10
|
+
EOF = 'EOF',
|
|
11
|
+
NL = '\n',
|
|
12
|
+
SPACE = ' ',
|
|
13
|
+
UNDERSCORE = '_',
|
|
14
|
+
DOLLAR = '$',
|
|
15
|
+
ATSIGN = '@',
|
|
16
|
+
CARET = '^',
|
|
17
|
+
HASH = '#',
|
|
18
|
+
TILDE = '~',
|
|
19
|
+
|
|
20
|
+
// Identifiers + literals,
|
|
21
|
+
IDENT = 'IDENT',
|
|
22
|
+
INT = 'INT',
|
|
23
|
+
COMMENT = 'COMMENT',
|
|
24
|
+
STRING = 'STRING',
|
|
25
|
+
NUMBER = 'NUMBER',
|
|
26
|
+
FLOAT = 'FLOAT',
|
|
27
|
+
|
|
28
|
+
// Operators,
|
|
29
|
+
ASSIGN = '=',
|
|
30
|
+
PLUS = '+',
|
|
31
|
+
MINUS = '-',
|
|
32
|
+
SLASH = '/',
|
|
33
|
+
QUEST = '?',
|
|
34
|
+
ASTERISK = '*',
|
|
35
|
+
|
|
36
|
+
// Delimiters,
|
|
37
|
+
COMMA = ',',
|
|
38
|
+
DOT = '.',
|
|
39
|
+
COLON = ':',
|
|
40
|
+
SEMICOLON = ';',
|
|
41
|
+
LPAREN = '(',
|
|
42
|
+
RPAREN = ')',
|
|
43
|
+
LBRACE = '{',
|
|
44
|
+
RBRACE = '}',
|
|
45
|
+
LBRACK = '[',
|
|
46
|
+
RBRACK = ']',
|
|
47
|
+
LT = '<',
|
|
48
|
+
GT = '>',
|
|
49
|
+
QUOT = '"'
|
|
50
|
+
}
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Tokens, Token } from './tokens.js'
|
|
2
|
+
|
|
3
|
+
export function isLetter (ch: string): boolean {
|
|
4
|
+
return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z'
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function isAlphabeticCharacter (ch: string): boolean {
|
|
8
|
+
return isLetter(ch) || ch === Tokens.ATSIGN || ch === Tokens.UNDERSCORE || ch === Tokens.DOLLAR
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function isDigit (ch: string): boolean {
|
|
12
|
+
return !isNaN(ch as unknown as number) && ch !== Tokens.NL && ch !== Tokens.SPACE
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function hasSpecialNumberCharacter (ch: number) {
|
|
16
|
+
return (
|
|
17
|
+
ch === Tokens.MINUS.charCodeAt(0) ||
|
|
18
|
+
ch === Tokens.DOT.charCodeAt(0) ||
|
|
19
|
+
ch === 'x'.charCodeAt(0) ||
|
|
20
|
+
ch === 'b'.charCodeAt(0)
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function parseNumberValue (token: Token): string | number {
|
|
25
|
+
if (token.Type === Tokens.FLOAT) {
|
|
26
|
+
return parseFloat(token.Literal)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (
|
|
30
|
+
token.Literal.includes('x') ||
|
|
31
|
+
token.Literal.includes('b')
|
|
32
|
+
) {
|
|
33
|
+
return token.Literal
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return parseInt(token.Literal, 10)
|
|
37
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`complex types > can parse complex types correctly 1`] = `
|
|
4
|
+
{
|
|
5
|
+
"Comments": [],
|
|
6
|
+
"IsChoiceAddition": false,
|
|
7
|
+
"Name": "LocalValue",
|
|
8
|
+
"PropertyType": [
|
|
9
|
+
{
|
|
10
|
+
"Type": "group",
|
|
11
|
+
"Unwrapped": false,
|
|
12
|
+
"Value": "ArrayLocalValue",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"Comments": [],
|
|
16
|
+
"IsChoiceAddition": false,
|
|
17
|
+
"Name": "",
|
|
18
|
+
"Properties": [
|
|
19
|
+
{
|
|
20
|
+
"Comments": [],
|
|
21
|
+
"HasCut": false,
|
|
22
|
+
"Name": "",
|
|
23
|
+
"Occurrence": {
|
|
24
|
+
"m": 1,
|
|
25
|
+
"n": 1,
|
|
26
|
+
},
|
|
27
|
+
"Type": [
|
|
28
|
+
{
|
|
29
|
+
"Type": "group",
|
|
30
|
+
"Unwrapped": false,
|
|
31
|
+
"Value": "DateLocalValue",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
"Type": "group",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"Type": "group",
|
|
40
|
+
"Unwrapped": false,
|
|
41
|
+
"Value": "MapLocalValue",
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"Type": "group",
|
|
45
|
+
"Unwrapped": false,
|
|
46
|
+
"Value": "ObjectLocalValue",
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"Comments": [],
|
|
50
|
+
"IsChoiceAddition": false,
|
|
51
|
+
"Name": "",
|
|
52
|
+
"Properties": [
|
|
53
|
+
{
|
|
54
|
+
"Comments": [],
|
|
55
|
+
"HasCut": false,
|
|
56
|
+
"Name": "",
|
|
57
|
+
"Occurrence": {
|
|
58
|
+
"m": 1,
|
|
59
|
+
"n": 1,
|
|
60
|
+
},
|
|
61
|
+
"Type": [
|
|
62
|
+
{
|
|
63
|
+
"Type": "group",
|
|
64
|
+
"Unwrapped": false,
|
|
65
|
+
"Value": "RegExpLocalValue",
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
"Type": "group",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"Type": "group",
|
|
74
|
+
"Unwrapped": false,
|
|
75
|
+
"Value": "SetLocalValue",
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
"Type": "variable",
|
|
79
|
+
}
|
|
80
|
+
`;
|