cddl 0.15.0 → 0.17.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.
Files changed (46) hide show
  1. package/LICENSE +1 -1
  2. package/build/parser.d.ts.map +1 -1
  3. package/build/parser.js +26 -2
  4. package/package.json +5 -1
  5. package/.release-it.ts +0 -10
  6. package/docs/README.md +0 -47
  7. package/docs/arrays.md +0 -356
  8. package/docs/ast-structure.md +0 -166
  9. package/docs/basic-types.md +0 -243
  10. package/docs/cddl-cheatsheet.md +0 -231
  11. package/docs/comments.md +0 -307
  12. package/docs/groups.md +0 -351
  13. package/docs/operators.md +0 -466
  14. package/docs/properties.md +0 -334
  15. package/docs/ranges.md +0 -339
  16. package/docs/references.md +0 -340
  17. package/docs/variables.md +0 -335
  18. package/src/ast.ts +0 -180
  19. package/src/cli/commands/repl.ts +0 -33
  20. package/src/cli/commands/validate.ts +0 -44
  21. package/src/cli/constants.ts +0 -1
  22. package/src/cli/index.ts +0 -18
  23. package/src/constants.ts +0 -16
  24. package/src/index.ts +0 -12
  25. package/src/lexer.ts +0 -238
  26. package/src/parser.ts +0 -967
  27. package/src/tokens.ts +0 -50
  28. package/src/utils.ts +0 -96
  29. package/tests/__snapshots__/complex_types.test.ts.snap +0 -80
  30. package/tests/__snapshots__/examples.test.ts.snap +0 -1077
  31. package/tests/__snapshots__/group-choices.test.ts.snap +0 -278
  32. package/tests/__snapshots__/parser.test.ts.snap +0 -3045
  33. package/tests/__snapshots__/webdriver-local.test.ts.snap +0 -11192
  34. package/tests/__snapshots__/webdriver-remote.test.ts.snap +0 -16350
  35. package/tests/commands/repl.test.ts +0 -52
  36. package/tests/commands/validate.test.ts +0 -66
  37. package/tests/complex_types.test.ts +0 -18
  38. package/tests/examples.test.ts +0 -25
  39. package/tests/group-choices.test.ts +0 -103
  40. package/tests/lexer.test.ts +0 -63
  41. package/tests/module.test.ts +0 -21
  42. package/tests/parser.test.ts +0 -44
  43. package/tests/utils.test.ts +0 -211
  44. package/tests/webdriver-local.test.ts +0 -15
  45. package/tests/webdriver-remote.test.ts +0 -15
  46. package/tsconfig.json +0 -11
@@ -1,52 +0,0 @@
1
- import { describe, it, vi, expect } from 'vitest'
2
- import repl from 'node:repl'
3
- import { builder, handler, evaluate } from '../../src/cli/commands/repl.js'
4
- import { Tokens } from '../../src/tokens.js'
5
-
6
- describe('repl command', () => {
7
- it('builder', () => {
8
- const yargs: any = {}
9
- yargs.epilogue = vi.fn().mockReturnValue(yargs)
10
- yargs.help = vi.fn().mockReturnValue(yargs)
11
- builder(yargs)
12
-
13
- expect(yargs.epilogue).toHaveBeenCalledTimes(1)
14
- expect(yargs.help).toHaveBeenCalledTimes(1)
15
- })
16
-
17
- describe('handler', () => {
18
- it('starts repl', () => {
19
- const startSpy = vi.spyOn(repl, 'start').mockReturnValue({} as any)
20
- handler()
21
- expect(startSpy).toHaveBeenCalledWith(expect.objectContaining({
22
- prompt: '> ',
23
- eval: evaluate
24
- }))
25
- startSpy.mockRestore()
26
- })
27
- })
28
-
29
- describe('evaluate', () => {
30
- it('returns error if no input', () => {
31
- const cb = vi.fn()
32
- evaluate('', {}, '', cb)
33
- expect(cb).toHaveBeenCalledWith(expect.any(Error), null)
34
- })
35
-
36
- it('tokenizes input using Lexer', () => {
37
- const cb = vi.fn()
38
- const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
39
-
40
- evaluate('foo = 1', {}, '', cb)
41
-
42
- expect(consoleSpy).toHaveBeenCalledTimes(3) // foo, =, 1
43
- expect(consoleSpy).toHaveBeenNthCalledWith(1, expect.objectContaining({ Type: Tokens.IDENT, Literal: 'foo' }))
44
- expect(consoleSpy).toHaveBeenNthCalledWith(2, expect.objectContaining({ Type: Tokens.ASSIGN, Literal: '=' }))
45
- expect(consoleSpy).toHaveBeenNthCalledWith(3, expect.objectContaining({ Type: Tokens.NUMBER, Literal: '1' }))
46
-
47
- expect(cb).toHaveBeenCalledWith(null, null)
48
-
49
- consoleSpy.mockRestore()
50
- })
51
- })
52
- })
@@ -1,66 +0,0 @@
1
- import url from 'node:url'
2
- import path from 'node:path'
3
- import { describe, it, vi, expect, beforeEach, afterAll } from 'vitest'
4
- import { builder, handler } from '../../src/cli/commands/validate.js'
5
-
6
- const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
7
- const validCDDL = path.join(__dirname, '..', '..', '..', '..', 'examples', 'webdriver', 'local.cddl')
8
- const buggyCDDL = path.join(__dirname, '..', '..', '..', '..', 'examples', 'commons', 'buggy.cddl')
9
-
10
- describe('validate command', () => {
11
- it('builder', () => {
12
- const yargs: any = {}
13
- yargs.epilogue = vi.fn().mockReturnValue(yargs)
14
- yargs.help = vi.fn().mockReturnValue(yargs)
15
- builder(yargs)
16
-
17
- expect(yargs.epilogue).toBeCalledTimes(1)
18
- expect(yargs.help).toBeCalledTimes(1)
19
- })
20
-
21
- describe('handler', () => {
22
- const consoleLogOrig = console.log.bind(console)
23
- const consoleErrorOrig = console.error.bind(console)
24
- const processExitOrig = process.exit.bind(process)
25
-
26
- beforeEach(() => {
27
- // @ts-expect-error
28
- process.exit = vi.fn()
29
- console.log = vi.fn()
30
- console.error = vi.fn()
31
- })
32
-
33
- afterAll(() => {
34
- process.exit = processExitOrig
35
- console.log = consoleLogOrig
36
- console.error = consoleErrorOrig
37
- })
38
-
39
- it('fails if file does not exist', () => {
40
- handler({ filePath: '/foo/bar', _: [], $0: '' })
41
- expect(process.exit).toBeCalledTimes(1)
42
- expect(console.error).toBeCalledTimes(1)
43
- expect(process.exit).toBeCalledWith(1)
44
- })
45
-
46
- it('fails if cddl file is buggy', () => {
47
- handler({ filePath: buggyCDDL, _: [], $0: '' })
48
- expect(process.exit).toBeCalledTimes(1)
49
- expect(console.error).toBeCalledTimes(1)
50
- expect(process.exit).toBeCalledWith(1)
51
- })
52
-
53
- it('passes if cddl file is valid', () => {
54
- handler({ filePath: validCDDL, _: [], $0: '' })
55
- expect(process.exit).toBeCalledTimes(0)
56
- expect(console.log).toBeCalledTimes(1)
57
- })
58
-
59
- it('handles relative paths', () => {
60
- handler({ filePath: 'relative/path/to/file.cddl', _: [], $0: '' })
61
- expect(process.exit).toBeCalledTimes(1)
62
- expect(console.error).toBeCalledTimes(1)
63
- expect(process.exit).toBeCalledWith(1)
64
- })
65
- })
66
- })
@@ -1,18 +0,0 @@
1
- import url from 'node:url'
2
- import path from 'node:path'
3
- import { describe, it, expect } from 'vitest'
4
-
5
- import Parser from '../src/parser.js'
6
-
7
- const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
8
-
9
- describe('complex types', () => {
10
- it('can parse complex types correctly', () => {
11
- const p = new Parser(path.join(__dirname, '..', '..', '..', 'examples', 'commons', 'complex_types.cddl'))
12
- const ast = p.parse()
13
- const localValue = ast.find((item: any) => item.Name === 'LocalValue')
14
-
15
- expect(localValue).toBeDefined()
16
- expect(localValue).toMatchSnapshot()
17
- })
18
- })
@@ -1,25 +0,0 @@
1
- import url from 'node:url'
2
- import path from 'node:path'
3
- import { describe, it, expect } from 'vitest'
4
-
5
- import Parser from '../src/parser.js'
6
-
7
- const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
8
-
9
- describe('examples', () => {
10
- describe('common', () => {
11
- const testCases: { name: string, fixture: string }[] = [
12
- { name: 'can parse group choice', fixture: 'group_choice.cddl' },
13
- { name: 'can parse literals', fixture: 'literals.cddl' },
14
- { name: 'can parse mixin union', fixture: 'mixin_union.cddl' },
15
- { name: 'can parse named group choice', fixture: 'named_group_choice.cddl' }
16
- ]
17
-
18
- for (const { name, fixture } of testCases) {
19
- it(name, async () => {
20
- const p = new Parser(path.join(__dirname, '..', '..', '..', 'examples', 'commons', fixture))
21
- expect(p.parse()).toMatchSnapshot()
22
- })
23
- }
24
- })
25
- })
@@ -1,103 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest'
2
- import Parser from '../src/parser.js'
3
- import * as fs from 'node:fs'
4
-
5
- vi.mock('node:fs')
6
-
7
- describe('Group Choice Parsing', () => {
8
- const parse = (cddl: string) => {
9
- vi.mocked(fs.readFileSync).mockReturnValue(cddl)
10
- const parser = new Parser('dummy.cddl')
11
- return parser.parse()
12
- }
13
-
14
- beforeEach(() => {
15
- vi.clearAllMocks()
16
- })
17
-
18
- describe('Group Choice (//)', () => {
19
- it('should verify group choice operator //', () => {
20
- const cddl = `
21
- mygroup = (int // text)
22
- `
23
- const ast = parse(cddl)
24
- expect(ast).toMatchSnapshot()
25
- })
26
-
27
- it('should throw error when group choice operator // is at start of group', () => {
28
- const cddl = `
29
- mygroup = (// int)
30
- `
31
- expect(() => parse(cddl)).toThrowError('Unexpected group choice operator "//" at start of group')
32
- })
33
-
34
- it('should parse nested group choice', () => {
35
- const cddl = `
36
- mygroup = ((int // text))
37
- `
38
- const ast = parse(cddl)
39
- expect(ast).toMatchSnapshot()
40
- })
41
-
42
- it('should parse group choice with multiple items', () => {
43
- const cddl = `
44
- mygroup = (int, text // float)
45
- `
46
- const ast = parse(cddl)
47
- expect(ast).toMatchSnapshot()
48
- })
49
- })
50
-
51
- describe('Map Group Choice', () => {
52
- it('should parse group choice inside map', () => {
53
- const cddl = `
54
- mymap = {
55
- "a" => 1 //
56
- "b" => 2
57
- }
58
- `
59
- const ast = parse(cddl)
60
- expect(ast).toMatchSnapshot()
61
- })
62
- })
63
-
64
- describe('Type Choice (/)', () => {
65
- it('should parse type choice inside group', () => {
66
- const cddl = `
67
- mygroup = (int / text)
68
- `
69
- const ast = parse(cddl)
70
- expect(ast).toMatchSnapshot()
71
- })
72
-
73
- // This tests the change: closingTokens.includes(Tokens.RPAREN) && this.peekToken.Type === Tokens.SLASH
74
- it('should correctly handle slash in mixed context', () => {
75
- const cddl = `
76
- myrule = [ (int / text) ]
77
- `
78
- const ast = parse(cddl)
79
- expect(ast).toMatchSnapshot()
80
- })
81
- })
82
-
83
- describe('Blocks with Braces', () => {
84
- // Covers changes in openSegment and parseAssignmentValue regarding Tokens.LBRACE
85
- it('should parse nested group inside map', () => {
86
- // This relates to the removal of special LPAREN handling inside LBRACE in openSegment
87
- const cddl = `
88
- myrule = { (int) }
89
- `
90
- const ast = parse(cddl)
91
- // Expecting parsing to succeed and structure to be correct
92
- expect(ast).toMatchSnapshot()
93
- })
94
-
95
- it('should parse bare group inside brace', () => {
96
- const cddl = `
97
- myrule = { int }
98
- `
99
- const ast = parse(cddl)
100
- expect(ast).toMatchSnapshot()
101
- })
102
- })
103
- })
@@ -1,63 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
-
3
- import { Tokens } from '../src/tokens.js'
4
- import Lexer from '../src/lexer.js'
5
-
6
- describe('lexer', () => {
7
- it('should allow to read token', () => {
8
- const input = '=+(){},/<>'
9
- const tests = [
10
- [Tokens.ASSIGN, '='],
11
- [Tokens.PLUS, '+'],
12
- [Tokens.LPAREN, '('],
13
- [Tokens.RPAREN, ')'],
14
- [Tokens.LBRACE, '{'],
15
- [Tokens.RBRACE, '}'],
16
- [Tokens.COMMA, ','],
17
- [Tokens.SLASH, '/'],
18
- [Tokens.LT, '<'],
19
- [Tokens.GT, '>']
20
- ]
21
-
22
- const l = new Lexer(input)
23
- for (const [Type, Literal] of tests) {
24
- const token = l.nextToken()
25
- expect(token.Type).toBe(Type)
26
- expect(token.Literal).toBe(Literal)
27
- }
28
- })
29
-
30
- it('should read identifiers and comments', () => {
31
- const input = ' headers, ; Headers for the recipient'
32
- const tests = [
33
- [Tokens.IDENT, 'headers'],
34
- [Tokens.COMMA, ','],
35
- [Tokens.COMMENT, '; Headers for the recipient']
36
- ]
37
-
38
- const l = new Lexer(input)
39
- for (const [Type, Literal] of tests) {
40
- const token = l.nextToken()
41
- expect(token.Type).toBe(Type)
42
- expect(token.Literal).toBe(Literal)
43
- }
44
- })
45
-
46
- it('should correctly report location info', () => {
47
- const input = 'a = 1'
48
- const l = new Lexer(input)
49
-
50
- // consume tokens until EOF
51
- while (l.nextToken().Type !== 'EOF') {}
52
-
53
- // consume more EOFs to push position further
54
- for (let i = 0; i < 10; ++i) {
55
- l.nextToken()
56
- }
57
-
58
- // This should trigger the fallback
59
- const locEnd = l.getLocation()
60
- expect(locEnd.line).toBe(0)
61
- expect(locEnd.position).toBe(0)
62
- })
63
- })
@@ -1,21 +0,0 @@
1
- import url from 'node:url'
2
- import path from 'node:path'
3
- import { describe, it, expect } from 'vitest'
4
-
5
- import CDDL from '../src/index.js'
6
-
7
- const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
8
- const validCDDL = path.join(__dirname, '..', '..', '..', 'examples', 'commons', 'arrays.cddl')
9
- const buggyCDDL = path.join(__dirname, '..', '..', '..', 'examples', 'commons', 'buggy.cddl')
10
-
11
- describe('validate', () => {
12
- it('should return a json in success case', () => {
13
- const ast = CDDL.parse(validCDDL)
14
- expect(typeof ast).toBe('object')
15
- })
16
-
17
- it('should throw an error if invalud', () => {
18
- expect(() => CDDL.parse(buggyCDDL))
19
- .toThrow()
20
- })
21
- })
@@ -1,44 +0,0 @@
1
- import url from 'node:url'
2
- import path from 'node:path'
3
- import fs from 'node:fs'
4
- import { describe, it, expect, vi } from 'vitest'
5
-
6
- import Parser from '../src/parser.js'
7
-
8
- const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
9
-
10
- describe('parser', () => {
11
- const testCases: { name: string, fixture: string }[] = [
12
- { name: 'should correctly parse CDDL file', fixture: 'example.cddl' },
13
- { name: 'can parse compositions', fixture: 'compositions.cddl' },
14
- { name: 'can parse ranges', fixture: 'ranges.cddl' },
15
- { name: 'can parse occurrences', fixture: 'occurrences.cddl' },
16
- { name: 'can parse arrays', fixture: 'arrays.cddl' },
17
- { name: 'can parse unwrapped arrays', fixture: 'unwrapping.cddl' },
18
- { name: 'can parse comments', fixture: 'comments.cddl' },
19
- { name: 'can parse choices', fixture: 'choices.cddl' },
20
- { name: 'can parse nested groups', fixture: 'nested.cddl' },
21
- { name: 'can parse operators', fixture: 'operators.cddl' }
22
- ]
23
-
24
- for (const { name, fixture } of testCases) {
25
- it(name, async () => {
26
- const p = new Parser(path.join(__dirname, '..', '..', '..', 'examples', 'commons', fixture))
27
- expect(p.parse()).toMatchSnapshot()
28
- })
29
- }
30
-
31
- it('throws if group identifier is missing', () => {
32
- vi.spyOn(fs, 'readFileSync').mockReturnValue('=')
33
- const p = new Parser('foo.cddl')
34
- expect(() => p.parse()).toThrow('group identifier expected')
35
- vi.restoreAllMocks()
36
- })
37
-
38
- it('throws if assignment operator is missing', () => {
39
- vi.spyOn(fs, 'readFileSync').mockReturnValue('groupName bar')
40
- const p = new Parser('foo.cddl')
41
- expect(() => p.parse()).toThrow('group identifier expected')
42
- vi.restoreAllMocks()
43
- })
44
- })
@@ -1,211 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
-
3
- import type {
4
- Array as CDDLArray,
5
- Assignment,
6
- Comment,
7
- Group,
8
- NativeTypeWithOperator,
9
- Property,
10
- PropertyReference,
11
- Variable
12
- } from '../src/ast.js'
13
- import { Tokens, type Token } from '../src/tokens.js'
14
- import {
15
- hasSpecialNumberCharacter,
16
- isAlphabeticCharacter,
17
- isCDDLArray,
18
- isDigit,
19
- isGroup,
20
- isLetter,
21
- isLiteralWithValue,
22
- isNamedGroupReference,
23
- isNativeTypeWithOperator,
24
- isProperty,
25
- isPropertyReference,
26
- isRange,
27
- isUnNamedProperty,
28
- isVariable,
29
- parseNumberValue,
30
- pascalCase
31
- } from '../src/utils.js'
32
-
33
- const comments: Comment[] = []
34
-
35
- function createVariable (): Variable {
36
- return {
37
- Type: 'variable',
38
- Name: 'my-variable',
39
- IsChoiceAddition: false,
40
- PropertyType: 'tstr',
41
- Comments: comments
42
- }
43
- }
44
-
45
- function createGroup (): Group {
46
- return {
47
- Type: 'group',
48
- Name: 'my-group',
49
- IsChoiceAddition: false,
50
- Properties: [],
51
- Comments: comments
52
- }
53
- }
54
-
55
- function createArray (): CDDLArray {
56
- return {
57
- Type: 'array',
58
- Name: 'my-array',
59
- Values: [],
60
- Comments: comments
61
- }
62
- }
63
-
64
- function createProperty (overrides: Partial<Property> = {}): Property {
65
- return {
66
- HasCut: false,
67
- Occurrence: { n: 1, m: 1 },
68
- Name: 'foo',
69
- Type: 'tstr',
70
- Comments: comments,
71
- ...overrides
72
- }
73
- }
74
-
75
- describe('utils', () => {
76
- describe('character helpers', () => {
77
- it('should detect letters and alphabetic characters', () => {
78
- expect(isLetter('a')).toBe(true)
79
- expect(isLetter('Z')).toBe(true)
80
- expect(isLetter('1')).toBe(false)
81
-
82
- expect(isAlphabeticCharacter('a')).toBe(true)
83
- expect(isAlphabeticCharacter(Tokens.ATSIGN)).toBe(true)
84
- expect(isAlphabeticCharacter(Tokens.UNDERSCORE)).toBe(true)
85
- expect(isAlphabeticCharacter(Tokens.DOLLAR)).toBe(true)
86
- expect(isAlphabeticCharacter('-')).toBe(false)
87
- })
88
-
89
- it('should detect digits and special number characters', () => {
90
- expect(isDigit('1')).toBe(true)
91
- expect(isDigit('0')).toBe(true)
92
- expect(isDigit('a')).toBe(false)
93
- expect(isDigit(Tokens.NL)).toBe(false)
94
- expect(isDigit(Tokens.SPACE)).toBe(false)
95
-
96
- expect(hasSpecialNumberCharacter(Tokens.MINUS.charCodeAt(0))).toBe(true)
97
- expect(hasSpecialNumberCharacter(Tokens.DOT.charCodeAt(0))).toBe(true)
98
- expect(hasSpecialNumberCharacter('x'.charCodeAt(0))).toBe(true)
99
- expect(hasSpecialNumberCharacter('b'.charCodeAt(0))).toBe(true)
100
- expect(hasSpecialNumberCharacter('1'.charCodeAt(0))).toBe(false)
101
- })
102
- })
103
-
104
- describe('number parsing helpers', () => {
105
- it('should parse floats, integers and prefixed numbers', () => {
106
- const floatToken: Token = { Type: Tokens.FLOAT, Literal: '12.5' }
107
- const intToken: Token = { Type: Tokens.INT, Literal: '42' }
108
- const hexToken: Token = { Type: Tokens.INT, Literal: '0x10' }
109
- const binaryToken: Token = { Type: Tokens.INT, Literal: '0b10' }
110
-
111
- expect(parseNumberValue(floatToken)).toBe(12.5)
112
- expect(parseNumberValue(intToken)).toBe(42)
113
- expect(parseNumberValue(hexToken)).toBe('0x10')
114
- expect(parseNumberValue(binaryToken)).toBe('0b10')
115
- })
116
- })
117
-
118
- describe('name helpers', () => {
119
- it('should convert names to pascal case', () => {
120
- expect(pascalCase('my-example_name')).toBe('MyExampleName')
121
- })
122
- })
123
-
124
- describe('assignment guards', () => {
125
- it('should detect variables, groups and arrays', () => {
126
- const variable: Assignment = createVariable()
127
- const group: Assignment = createGroup()
128
- const array: Assignment = createArray()
129
-
130
- expect(isVariable(variable)).toBe(true)
131
- expect(isVariable(group)).toBe(false)
132
-
133
- expect(isGroup(group)).toBe(true)
134
- expect(isGroup(variable)).toBe(false)
135
-
136
- expect(isCDDLArray(array)).toBe(true)
137
- expect(isCDDLArray(group)).toBe(false)
138
- })
139
- })
140
-
141
- describe('property guards', () => {
142
- it('should detect named and unnamed properties', () => {
143
- const property = createProperty()
144
- const unnamedProperty = createProperty({ Name: '' })
145
-
146
- expect(isProperty(property)).toBe(true)
147
- expect(isProperty({ Name: 'foo' })).toBe(false)
148
-
149
- expect(isUnNamedProperty(unnamedProperty)).toBe(true)
150
- expect(isUnNamedProperty(property)).toBe(false)
151
- })
152
- })
153
-
154
- describe('reference and operator guards', () => {
155
- it('should detect property references and named group references', () => {
156
- const groupReference: PropertyReference = {
157
- Type: 'group',
158
- Value: 'my-group',
159
- Unwrapped: false
160
- }
161
- const numericGroupReference: PropertyReference = {
162
- Type: 'group',
163
- Value: 123,
164
- Unwrapped: false
165
- }
166
-
167
- expect(isPropertyReference(groupReference)).toBe(true)
168
- expect(isPropertyReference({ Type: 'group' })).toBe(false)
169
-
170
- expect(isNamedGroupReference(groupReference)).toBe(true)
171
- expect(isNamedGroupReference(numericGroupReference)).toBe(false)
172
- })
173
-
174
- it('should detect native types with operators and ranges', () => {
175
- const nativeTypeWithOperator: NativeTypeWithOperator = {
176
- Type: {
177
- Type: 'group',
178
- Value: 'my-group',
179
- Unwrapped: false
180
- },
181
- Operator: {
182
- Type: 'default',
183
- Value: 'tstr'
184
- }
185
- }
186
- const rangeReference: PropertyReference = {
187
- Type: 'range',
188
- Value: {
189
- Min: 0,
190
- Max: 10,
191
- Inclusive: true
192
- },
193
- Unwrapped: false
194
- }
195
-
196
- expect(isNativeTypeWithOperator(nativeTypeWithOperator)).toBe(true)
197
- expect(isNativeTypeWithOperator({ Type: 'tstr' })).toBe(false)
198
-
199
- expect(isRange({ Type: rangeReference })).toBe(true)
200
- expect(isRange({ Type: 'range' })).toBe(false)
201
- })
202
- })
203
-
204
- describe('literal guards', () => {
205
- it('should detect literals with values', () => {
206
- expect(isLiteralWithValue({ Type: 'literal', Value: 'foo' })).toBe(true)
207
- expect(isLiteralWithValue({ Type: 'literal' })).toBe(false)
208
- expect(isLiteralWithValue({ Type: 'group', Value: 'foo' })).toBe(false)
209
- })
210
- })
211
- })
@@ -1,15 +0,0 @@
1
- import url from 'node:url'
2
- import path from 'node:path'
3
- import { describe, it, expect } from 'vitest'
4
-
5
- import Parser from '../src/parser.js'
6
-
7
- const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
8
-
9
- describe('webdriver local cddl', () => {
10
- it('can parse local.cddl', () => {
11
- const filePath = path.join(__dirname, '..', '..', '..', 'examples', 'webdriver', 'local.cddl')
12
- const p = new Parser(filePath)
13
- expect(p.parse()).toMatchSnapshot()
14
- })
15
- })
@@ -1,15 +0,0 @@
1
- import url from 'node:url'
2
- import path from 'node:path'
3
- import { describe, it, expect } from 'vitest'
4
-
5
- import Parser from '../src/parser.js'
6
-
7
- const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
8
-
9
- describe('webdriver remote cddl', () => {
10
- it('can parse remote.cddl', () => {
11
- const filePath = path.join(__dirname, '..', '..', '..', 'examples', 'webdriver', 'remote.cddl')
12
- const p = new Parser(filePath)
13
- expect(p.parse()).toMatchSnapshot()
14
- })
15
- })
package/tsconfig.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "extends": "../../tsconfig",
3
- "compilerOptions": {
4
- "outDir": "build",
5
- "rootDir": "src",
6
- },
7
- "types": ["node"],
8
- "include": [
9
- "src/**/*",
10
- ]
11
- }