@tomgiee/tsdp 1.0.1 → 1.1.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 (68) hide show
  1. package/README.md +0 -39
  2. package/dist/src/builder/media-builder.d.ts.map +1 -1
  3. package/dist/src/builder/media-builder.js +5 -12
  4. package/dist/src/builder/session-builder.d.ts.map +1 -1
  5. package/dist/src/builder/session-builder.js +4 -14
  6. package/dist/src/index.d.ts +6 -10
  7. package/dist/src/index.d.ts.map +1 -1
  8. package/dist/src/index.js +37 -49
  9. package/dist/src/parser/core.d.ts +366 -0
  10. package/dist/src/parser/core.d.ts.map +1 -0
  11. package/dist/src/parser/core.js +802 -0
  12. package/dist/src/parser/field-parser.d.ts +51 -8
  13. package/dist/src/parser/field-parser.d.ts.map +1 -1
  14. package/dist/src/parser/field-parser.js +91 -23
  15. package/dist/src/parser/media-parser.d.ts +1 -1
  16. package/dist/src/parser/media-parser.d.ts.map +1 -1
  17. package/dist/src/parser/media-parser.js +9 -15
  18. package/dist/src/parser/session-parser.d.ts.map +1 -1
  19. package/dist/src/parser/session-parser.js +16 -17
  20. package/dist/src/parser/time-parser.d.ts +1 -1
  21. package/dist/src/parser/time-parser.d.ts.map +1 -1
  22. package/dist/src/parser/time-parser.js +8 -8
  23. package/dist/src/serializer/fields.d.ts +167 -0
  24. package/dist/src/serializer/fields.d.ts.map +1 -0
  25. package/dist/src/serializer/fields.js +320 -0
  26. package/dist/src/serializer/media-serializer.js +6 -7
  27. package/dist/src/serializer/session-serializer.js +13 -15
  28. package/dist/src/types/attributes.d.ts.map +1 -1
  29. package/dist/src/types/fields.d.ts +5 -5
  30. package/dist/src/types/fields.d.ts.map +1 -1
  31. package/dist/src/types/fields.js +4 -4
  32. package/dist/src/types/media.d.ts +9 -10
  33. package/dist/src/types/media.d.ts.map +1 -1
  34. package/dist/src/types/media.js +2 -4
  35. package/dist/src/types/network.d.ts +15 -56
  36. package/dist/src/types/network.d.ts.map +1 -1
  37. package/dist/src/types/network.js +3 -34
  38. package/dist/src/types/primitives.d.ts +3 -147
  39. package/dist/src/types/primitives.d.ts.map +1 -1
  40. package/dist/src/types/primitives.js +2 -171
  41. package/dist/src/types/session.d.ts +14 -14
  42. package/dist/src/types/session.d.ts.map +1 -1
  43. package/dist/src/types/time.d.ts +4 -4
  44. package/dist/src/types/time.d.ts.map +1 -1
  45. package/dist/src/types/time.js +8 -6
  46. package/dist/src/utils/address-parser.d.ts +4 -4
  47. package/dist/src/utils/address-parser.d.ts.map +1 -1
  48. package/dist/src/utils/address-parser.js +9 -16
  49. package/dist/src/validator/validator.d.ts +94 -0
  50. package/dist/src/validator/validator.d.ts.map +1 -0
  51. package/dist/src/validator/validator.js +573 -0
  52. package/dist/tests/unit/parser/attribute-parser.test.js +106 -107
  53. package/dist/tests/unit/parser/field-parser.test.js +66 -66
  54. package/dist/tests/unit/parser/media-parser.test.js +38 -38
  55. package/dist/tests/unit/parser/primitive-parser.test.js +89 -90
  56. package/dist/tests/unit/parser/scanner.test.js +32 -32
  57. package/dist/tests/unit/parser/time-parser.test.js +22 -22
  58. package/dist/tests/unit/serializer/attribute-serializer.test.js +22 -22
  59. package/dist/tests/unit/serializer/field-serializer.test.js +57 -57
  60. package/dist/tests/unit/serializer/media-serializer.test.js +5 -6
  61. package/dist/tests/unit/serializer/session-serializer.test.js +24 -24
  62. package/dist/tests/unit/serializer/time-serializer.test.js +16 -16
  63. package/dist/tests/unit/types/network.test.js +21 -56
  64. package/dist/tests/unit/types/primitives.test.js +0 -39
  65. package/dist/tests/unit/validator/media-validator.test.js +34 -35
  66. package/dist/tests/unit/validator/semantic-validator.test.js +36 -37
  67. package/dist/tests/unit/validator/session-validator.test.js +54 -54
  68. package/package.json +1 -1
@@ -3,28 +3,28 @@
3
3
  * Tests for scanner.ts
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const scanner_1 = require("../../../src/parser/scanner");
6
+ const core_1 = require("../../../src/parser/core");
7
7
  const errors_1 = require("../../../src/types/errors");
8
8
  describe('Scanner', () => {
9
9
  describe('basic operations', () => {
10
10
  it('should peek at current character', () => {
11
- const scanner = new scanner_1.Scanner('abc');
11
+ const scanner = new core_1.Scanner('abc');
12
12
  expect(scanner.peek()).toBe('a');
13
13
  expect(scanner.peek()).toBe('a'); // Peek doesn't advance
14
14
  });
15
15
  it('should return null when peeking at EOF', () => {
16
- const scanner = new scanner_1.Scanner('');
16
+ const scanner = new core_1.Scanner('');
17
17
  expect(scanner.peek()).toBeNull();
18
18
  });
19
19
  it('should advance through characters', () => {
20
- const scanner = new scanner_1.Scanner('abc');
20
+ const scanner = new core_1.Scanner('abc');
21
21
  expect(scanner.advance()).toBe('a');
22
22
  expect(scanner.advance()).toBe('b');
23
23
  expect(scanner.advance()).toBe('c');
24
24
  expect(scanner.advance()).toBeNull();
25
25
  });
26
26
  it('should peek ahead', () => {
27
- const scanner = new scanner_1.Scanner('abcdef');
27
+ const scanner = new core_1.Scanner('abcdef');
28
28
  expect(scanner.peekAhead(0)).toBe('a');
29
29
  expect(scanner.peekAhead(1)).toBe('b');
30
30
  expect(scanner.peekAhead(5)).toBe('f');
@@ -33,7 +33,7 @@ describe('Scanner', () => {
33
33
  });
34
34
  describe('position tracking', () => {
35
35
  it('should track line and column', () => {
36
- const scanner = new scanner_1.Scanner('abc\ndef');
36
+ const scanner = new core_1.Scanner('abc\ndef');
37
37
  const pos1 = scanner.getPosition();
38
38
  expect(pos1.line).toBe(1);
39
39
  expect(pos1.column).toBe(1);
@@ -51,7 +51,7 @@ describe('Scanner', () => {
51
51
  expect(pos3.column).toBe(1);
52
52
  });
53
53
  it('should handle CRLF line endings', () => {
54
- const scanner = new scanner_1.Scanner('a\r\nb');
54
+ const scanner = new core_1.Scanner('a\r\nb');
55
55
  scanner.advance(); // 'a'
56
56
  scanner.advance(); // '\r\n'
57
57
  const pos = scanner.getPosition();
@@ -60,7 +60,7 @@ describe('Scanner', () => {
60
60
  expect(scanner.peek()).toBe('b');
61
61
  });
62
62
  it('should handle CR line endings', () => {
63
- const scanner = new scanner_1.Scanner('a\rb');
63
+ const scanner = new core_1.Scanner('a\rb');
64
64
  scanner.advance(); // 'a'
65
65
  scanner.advance(); // '\r'
66
66
  const pos = scanner.getPosition();
@@ -69,7 +69,7 @@ describe('Scanner', () => {
69
69
  expect(scanner.peek()).toBe('b');
70
70
  });
71
71
  it('should handle LF line endings', () => {
72
- const scanner = new scanner_1.Scanner('a\nb');
72
+ const scanner = new core_1.Scanner('a\nb');
73
73
  scanner.advance(); // 'a'
74
74
  scanner.advance(); // '\n'
75
75
  const pos = scanner.getPosition();
@@ -80,19 +80,19 @@ describe('Scanner', () => {
80
80
  });
81
81
  describe('readUntil', () => {
82
82
  it('should read until string delimiter', () => {
83
- const scanner = new scanner_1.Scanner('hello world');
83
+ const scanner = new core_1.Scanner('hello world');
84
84
  const result = scanner.readUntil(' ');
85
85
  expect(result).toBe('hello');
86
86
  expect(scanner.peek()).toBe(' ');
87
87
  });
88
88
  it('should read until regex delimiter', () => {
89
- const scanner = new scanner_1.Scanner('abc123def');
89
+ const scanner = new core_1.Scanner('abc123def');
90
90
  const result = scanner.readUntil(/\d/);
91
91
  expect(result).toBe('abc');
92
92
  expect(scanner.peek()).toBe('1');
93
93
  });
94
94
  it('should read entire input if delimiter not found', () => {
95
- const scanner = new scanner_1.Scanner('hello');
95
+ const scanner = new core_1.Scanner('hello');
96
96
  const result = scanner.readUntil('x');
97
97
  expect(result).toBe('hello');
98
98
  expect(scanner.isEOF()).toBe(true);
@@ -100,13 +100,13 @@ describe('Scanner', () => {
100
100
  });
101
101
  describe('readWhile', () => {
102
102
  it('should read while predicate is true', () => {
103
- const scanner = new scanner_1.Scanner('12345abc');
103
+ const scanner = new core_1.Scanner('12345abc');
104
104
  const result = scanner.readWhile(ch => ch >= '0' && ch <= '9');
105
105
  expect(result).toBe('12345');
106
106
  expect(scanner.peek()).toBe('a');
107
107
  });
108
108
  it('should return empty string if predicate immediately false', () => {
109
- const scanner = new scanner_1.Scanner('abc');
109
+ const scanner = new core_1.Scanner('abc');
110
110
  const result = scanner.readWhile(ch => ch >= '0' && ch <= '9');
111
111
  expect(result).toBe('');
112
112
  expect(scanner.peek()).toBe('a');
@@ -114,17 +114,17 @@ describe('Scanner', () => {
114
114
  });
115
115
  describe('whitespace handling', () => {
116
116
  it('should skip spaces and tabs', () => {
117
- const scanner = new scanner_1.Scanner(' \t abc');
117
+ const scanner = new core_1.Scanner(' \t abc');
118
118
  scanner.skipWhitespace();
119
119
  expect(scanner.peek()).toBe('a');
120
120
  });
121
121
  it('should not skip newlines', () => {
122
- const scanner = new scanner_1.Scanner(' \n abc');
122
+ const scanner = new core_1.Scanner(' \n abc');
123
123
  scanner.skipWhitespace();
124
124
  expect(scanner.peek()).toBe('\n');
125
125
  });
126
126
  it('should skip to next line', () => {
127
- const scanner = new scanner_1.Scanner('hello world\nnext line');
127
+ const scanner = new core_1.Scanner('hello world\nnext line');
128
128
  scanner.skipToNextLine();
129
129
  expect(scanner.peek()).toBe('n');
130
130
  const pos = scanner.getPosition();
@@ -133,39 +133,39 @@ describe('Scanner', () => {
133
133
  });
134
134
  describe('expect methods', () => {
135
135
  it('should expect exact string', () => {
136
- const scanner = new scanner_1.Scanner('v=0');
136
+ const scanner = new core_1.Scanner('v=0');
137
137
  scanner.expect('v=');
138
138
  expect(scanner.peek()).toBe('0');
139
139
  });
140
140
  it('should throw if string not matched', () => {
141
- const scanner = new scanner_1.Scanner('o=test');
141
+ const scanner = new core_1.Scanner('o=test');
142
142
  expect(() => scanner.expect('v=')).toThrow(errors_1.ParseError);
143
143
  });
144
144
  it('should throw if string extends past EOF', () => {
145
- const scanner = new scanner_1.Scanner('v');
145
+ const scanner = new core_1.Scanner('v');
146
146
  expect(() => scanner.expect('v=')).toThrow(errors_1.ParseError);
147
147
  });
148
148
  it('should expect character with predicate', () => {
149
- const scanner = new scanner_1.Scanner('a123');
149
+ const scanner = new core_1.Scanner('a123');
150
150
  const ch = scanner.expectChar(c => c >= 'a' && c <= 'z', 'lowercase letter');
151
151
  expect(ch).toBe('a');
152
152
  expect(scanner.peek()).toBe('1');
153
153
  });
154
154
  it('should throw if character does not match predicate', () => {
155
- const scanner = new scanner_1.Scanner('123');
155
+ const scanner = new core_1.Scanner('123');
156
156
  expect(() => scanner.expectChar(c => c >= 'a' && c <= 'z', 'lowercase letter')).toThrow(errors_1.ParseError);
157
157
  });
158
158
  it('should expect space', () => {
159
- const scanner = new scanner_1.Scanner(' abc');
159
+ const scanner = new core_1.Scanner(' abc');
160
160
  scanner.expectSpace();
161
161
  expect(scanner.peek()).toBe('a');
162
162
  });
163
163
  it('should throw if not space', () => {
164
- const scanner = new scanner_1.Scanner('abc');
164
+ const scanner = new core_1.Scanner('abc');
165
165
  expect(() => scanner.expectSpace()).toThrow(errors_1.ParseError);
166
166
  });
167
167
  it('should expect end of line (CRLF)', () => {
168
- const scanner = new scanner_1.Scanner('test\r\nnext');
168
+ const scanner = new core_1.Scanner('test\r\nnext');
169
169
  scanner.advance();
170
170
  scanner.advance();
171
171
  scanner.advance();
@@ -174,7 +174,7 @@ describe('Scanner', () => {
174
174
  expect(scanner.peek()).toBe('n');
175
175
  });
176
176
  it('should expect end of line (LF)', () => {
177
- const scanner = new scanner_1.Scanner('test\nnext');
177
+ const scanner = new core_1.Scanner('test\nnext');
178
178
  scanner.advance();
179
179
  scanner.advance();
180
180
  scanner.advance();
@@ -183,7 +183,7 @@ describe('Scanner', () => {
183
183
  expect(scanner.peek()).toBe('n');
184
184
  });
185
185
  it('should accept EOF as EOL', () => {
186
- const scanner = new scanner_1.Scanner('test');
186
+ const scanner = new core_1.Scanner('test');
187
187
  scanner.advance();
188
188
  scanner.advance();
189
189
  scanner.advance();
@@ -191,13 +191,13 @@ describe('Scanner', () => {
191
191
  scanner.expectEOL(); // Should not throw at EOF
192
192
  });
193
193
  it('should throw if not at EOL', () => {
194
- const scanner = new scanner_1.Scanner('test');
194
+ const scanner = new core_1.Scanner('test');
195
195
  expect(() => scanner.expectEOL()).toThrow(errors_1.ParseError);
196
196
  });
197
197
  });
198
198
  describe('utility methods', () => {
199
199
  it('should check if at EOF', () => {
200
- const scanner = new scanner_1.Scanner('ab');
200
+ const scanner = new core_1.Scanner('ab');
201
201
  expect(scanner.isEOF()).toBe(false);
202
202
  scanner.advance();
203
203
  expect(scanner.isEOF()).toBe(false);
@@ -205,13 +205,13 @@ describe('Scanner', () => {
205
205
  expect(scanner.isEOF()).toBe(true);
206
206
  });
207
207
  it('should get remaining input', () => {
208
- const scanner = new scanner_1.Scanner('hello world');
208
+ const scanner = new core_1.Scanner('hello world');
209
209
  scanner.advance();
210
210
  scanner.advance();
211
211
  expect(scanner.getRemainingInput()).toBe('llo world');
212
212
  });
213
213
  it('should get substring', () => {
214
- const scanner = new scanner_1.Scanner('hello world');
214
+ const scanner = new core_1.Scanner('hello world');
215
215
  scanner.advance();
216
216
  scanner.advance();
217
217
  scanner.advance();
@@ -221,7 +221,7 @@ describe('Scanner', () => {
221
221
  });
222
222
  describe('error context', () => {
223
223
  it('should provide context in error messages', () => {
224
- const scanner = new scanner_1.Scanner('v=0\no=test 123 456 IN IP4 192.168.1.1\ns=Session');
224
+ const scanner = new core_1.Scanner('v=0\no=test 123 456 IN IP4 192.168.1.1\ns=Session');
225
225
  scanner.advance();
226
226
  scanner.advance();
227
227
  scanner.advance();
@@ -3,46 +3,46 @@
3
3
  * Tests for time-parser.ts
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const scanner_1 = require("../../../src/parser/scanner");
6
+ const core_1 = require("../../../src/parser/core");
7
7
  const time_parser_1 = require("../../../src/parser/time-parser");
8
8
  const errors_1 = require("../../../src/types/errors");
9
9
  const time_1 = require("../../../src/types/time");
10
10
  describe('time-parser', () => {
11
11
  describe('parseTimingField', () => {
12
12
  it('should parse permanent timing (0 to 0)', () => {
13
- const scanner = new scanner_1.Scanner('0 0');
13
+ const scanner = new core_1.Scanner('0 0');
14
14
  const timing = (0, time_parser_1.parseTimingField)(scanner);
15
15
  expect(timing.startTime).toBe(0);
16
16
  expect(timing.stopTime).toBe(0);
17
17
  });
18
18
  it('should parse bounded timing', () => {
19
- const scanner = new scanner_1.Scanner('2873397496 2873404696');
19
+ const scanner = new core_1.Scanner('2873397496 2873404696');
20
20
  const timing = (0, time_parser_1.parseTimingField)(scanner);
21
21
  expect(timing.startTime).toBe(2873397496);
22
22
  expect(timing.stopTime).toBe(2873404696);
23
23
  });
24
24
  it('should parse open-ended session (0 stop time)', () => {
25
- const scanner = new scanner_1.Scanner('3724394400 0');
25
+ const scanner = new core_1.Scanner('3724394400 0');
26
26
  const timing = (0, time_parser_1.parseTimingField)(scanner);
27
27
  expect(timing.startTime).toBe(3724394400);
28
28
  expect(timing.stopTime).toBe(0);
29
29
  });
30
30
  it('should throw for missing stop time', () => {
31
- const scanner = new scanner_1.Scanner('123456');
31
+ const scanner = new core_1.Scanner('123456');
32
32
  expect(() => (0, time_parser_1.parseTimingField)(scanner)).toThrow(errors_1.ParseError);
33
33
  });
34
34
  it('should throw for negative start time', () => {
35
- const scanner = new scanner_1.Scanner('-1 0');
35
+ const scanner = new core_1.Scanner('-1 0');
36
36
  expect(() => (0, time_parser_1.parseTimingField)(scanner)).toThrow(errors_1.ParseError);
37
37
  });
38
38
  it('should throw when start > stop (both non-zero)', () => {
39
- expect(() => (0, time_parser_1.parseTimingField)(new scanner_1.Scanner('2000 1000'))).toThrow(errors_1.ParseError);
40
- expect(() => (0, time_parser_1.parseTimingField)(new scanner_1.Scanner('2000 1000'))).toThrow('Start time must be before');
39
+ expect(() => (0, time_parser_1.parseTimingField)(new core_1.Scanner('2000 1000'))).toThrow(errors_1.ParseError);
40
+ expect(() => (0, time_parser_1.parseTimingField)(new core_1.Scanner('2000 1000'))).toThrow('Start time must be before');
41
41
  });
42
42
  });
43
43
  describe('parseRepeatField', () => {
44
44
  it('should parse repeat with single offset', () => {
45
- const scanner = new scanner_1.Scanner('7d 1h 0');
45
+ const scanner = new core_1.Scanner('7d 1h 0');
46
46
  const repeat = (0, time_parser_1.parseRepeatField)(scanner);
47
47
  expect(repeat.interval).toEqual({ value: 7, unit: 'days' });
48
48
  expect(repeat.duration).toEqual({ value: 1, unit: 'hours' });
@@ -50,7 +50,7 @@ describe('time-parser', () => {
50
50
  expect(repeat.offsets[0]).toEqual({ value: 0, unit: 'seconds' });
51
51
  });
52
52
  it('should parse repeat with multiple offsets', () => {
53
- const scanner = new scanner_1.Scanner('7d 1h 0 25h');
53
+ const scanner = new core_1.Scanner('7d 1h 0 25h');
54
54
  const repeat = (0, time_parser_1.parseRepeatField)(scanner);
55
55
  expect(repeat.interval).toEqual({ value: 7, unit: 'days' });
56
56
  expect(repeat.duration).toEqual({ value: 1, unit: 'hours' });
@@ -59,14 +59,14 @@ describe('time-parser', () => {
59
59
  expect(repeat.offsets[1]).toEqual({ value: 25, unit: 'hours' });
60
60
  });
61
61
  it('should parse repeat with seconds (no suffix)', () => {
62
- const scanner = new scanner_1.Scanner('604800 3600 0 90000');
62
+ const scanner = new core_1.Scanner('604800 3600 0 90000');
63
63
  const repeat = (0, time_parser_1.parseRepeatField)(scanner);
64
64
  expect(repeat.interval).toEqual({ value: 604800, unit: 'seconds' });
65
65
  expect(repeat.duration).toEqual({ value: 3600, unit: 'seconds' });
66
66
  expect(repeat.offsets).toHaveLength(2);
67
67
  });
68
68
  it('should parse repeat with mixed units', () => {
69
- const scanner = new scanner_1.Scanner('7d 90m 0 1800 25h');
69
+ const scanner = new core_1.Scanner('7d 90m 0 1800 25h');
70
70
  const repeat = (0, time_parser_1.parseRepeatField)(scanner);
71
71
  expect(repeat.interval).toEqual({ value: 7, unit: 'days' });
72
72
  expect(repeat.duration).toEqual({ value: 90, unit: 'minutes' });
@@ -76,24 +76,24 @@ describe('time-parser', () => {
76
76
  expect(repeat.offsets[2]).toEqual({ value: 25, unit: 'hours' });
77
77
  });
78
78
  it('should throw for missing duration', () => {
79
- const scanner = new scanner_1.Scanner('7d');
79
+ const scanner = new core_1.Scanner('7d');
80
80
  expect(() => (0, time_parser_1.parseRepeatField)(scanner)).toThrow(errors_1.ParseError);
81
81
  });
82
82
  it('should throw for missing offsets', () => {
83
- expect(() => (0, time_parser_1.parseRepeatField)(new scanner_1.Scanner('7d 1h'))).toThrow(errors_1.ParseError);
84
- expect(() => (0, time_parser_1.parseRepeatField)(new scanner_1.Scanner('7d 1h'))).toThrow('at least one offset');
83
+ expect(() => (0, time_parser_1.parseRepeatField)(new core_1.Scanner('7d 1h'))).toThrow(errors_1.ParseError);
84
+ expect(() => (0, time_parser_1.parseRepeatField)(new core_1.Scanner('7d 1h'))).toThrow('at least one offset');
85
85
  });
86
86
  });
87
87
  describe('parseTimezoneField', () => {
88
88
  it('should parse single timezone adjustment', () => {
89
- const scanner = new scanner_1.Scanner('2882844526 -1h');
89
+ const scanner = new core_1.Scanner('2882844526 -1h');
90
90
  const timezone = (0, time_parser_1.parseTimezoneField)(scanner);
91
91
  expect(timezone.adjustments).toHaveLength(1);
92
92
  expect(timezone.adjustments[0].time).toBe(2882844526);
93
93
  expect(timezone.adjustments[0].offset).toEqual({ value: -1, unit: 'hours' });
94
94
  });
95
95
  it('should parse multiple timezone adjustments', () => {
96
- const scanner = new scanner_1.Scanner('2882844526 -1h 2898848070 0');
96
+ const scanner = new core_1.Scanner('2882844526 -1h 2898848070 0');
97
97
  const timezone = (0, time_parser_1.parseTimezoneField)(scanner);
98
98
  expect(timezone.adjustments).toHaveLength(2);
99
99
  expect(timezone.adjustments[0].time).toBe(2882844526);
@@ -102,29 +102,29 @@ describe('time-parser', () => {
102
102
  expect(timezone.adjustments[1].offset).toEqual({ value: 0, unit: 'seconds' });
103
103
  });
104
104
  it('should parse timezone with positive offset', () => {
105
- const scanner = new scanner_1.Scanner('3034423619 1h');
105
+ const scanner = new core_1.Scanner('3034423619 1h');
106
106
  const timezone = (0, time_parser_1.parseTimezoneField)(scanner);
107
107
  expect(timezone.adjustments).toHaveLength(1);
108
108
  expect(timezone.adjustments[0].offset).toEqual({ value: 1, unit: 'hours' });
109
109
  });
110
110
  it('should parse timezone with seconds offset', () => {
111
- const scanner = new scanner_1.Scanner('2882844526 -3600');
111
+ const scanner = new core_1.Scanner('2882844526 -3600');
112
112
  const timezone = (0, time_parser_1.parseTimezoneField)(scanner);
113
113
  expect(timezone.adjustments[0].offset).toEqual({ value: -3600, unit: 'seconds' });
114
114
  });
115
115
  it('should parse timezone with days offset', () => {
116
- const scanner = new scanner_1.Scanner('2882844526 -1d 2898848070 1d');
116
+ const scanner = new core_1.Scanner('2882844526 -1d 2898848070 1d');
117
117
  const timezone = (0, time_parser_1.parseTimezoneField)(scanner);
118
118
  expect(timezone.adjustments).toHaveLength(2);
119
119
  expect(timezone.adjustments[0].offset).toEqual({ value: -1, unit: 'days' });
120
120
  expect(timezone.adjustments[1].offset).toEqual({ value: 1, unit: 'days' });
121
121
  });
122
122
  it('should throw for missing offset', () => {
123
- const scanner = new scanner_1.Scanner('2882844526');
123
+ const scanner = new core_1.Scanner('2882844526');
124
124
  expect(() => (0, time_parser_1.parseTimezoneField)(scanner)).toThrow(errors_1.ParseError);
125
125
  });
126
126
  it('should throw for empty timezone field', () => {
127
- const scanner = new scanner_1.Scanner('');
127
+ const scanner = new core_1.Scanner('');
128
128
  expect(() => (0, time_parser_1.parseTimezoneField)(scanner)).toThrow(errors_1.ParseError);
129
129
  expect(() => (0, time_parser_1.parseTimezoneField)(scanner)).toThrow('at least one adjustment');
130
130
  });
@@ -3,75 +3,75 @@
3
3
  * Tests for attribute-serializer.ts
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const attribute_serializer_1 = require("../../../src/serializer/attribute-serializer");
6
+ const fields_1 = require("../../../src/serializer/fields");
7
7
  const attributes_1 = require("../../../src/types/attributes");
8
8
  describe('attribute-serializer', () => {
9
9
  describe('serializeAttributeField', () => {
10
10
  describe('property attributes', () => {
11
11
  it('should serialize recvonly attribute', () => {
12
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createRecvonly)())).toBe('a=recvonly');
12
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createRecvonly)())).toBe('a=recvonly');
13
13
  });
14
14
  it('should serialize sendrecv attribute', () => {
15
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createSendrecv)())).toBe('a=sendrecv');
15
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createSendrecv)())).toBe('a=sendrecv');
16
16
  });
17
17
  it('should serialize sendonly attribute', () => {
18
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createSendonly)())).toBe('a=sendonly');
18
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createSendonly)())).toBe('a=sendonly');
19
19
  });
20
20
  it('should serialize inactive attribute', () => {
21
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createInactive)())).toBe('a=inactive');
21
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createInactive)())).toBe('a=inactive');
22
22
  });
23
23
  it('should serialize custom property attribute', () => {
24
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createPropertyAttribute)('myattr'))).toBe('a=myattr');
24
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createPropertyAttribute)('myattr'))).toBe('a=myattr');
25
25
  });
26
26
  });
27
27
  describe('value attributes', () => {
28
28
  it('should serialize rtpmap attribute', () => {
29
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createRtpmap)(0, 'PCMU', 8000))).toBe('a=rtpmap:0 PCMU/8000');
29
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createRtpmap)(0, 'PCMU', 8000))).toBe('a=rtpmap:0 PCMU/8000');
30
30
  });
31
31
  it('should serialize rtpmap with encoding params', () => {
32
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createRtpmap)(97, 'L16', 8000, 2))).toBe('a=rtpmap:97 L16/8000/2');
32
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createRtpmap)(97, 'L16', 8000, 2))).toBe('a=rtpmap:97 L16/8000/2');
33
33
  });
34
34
  it('should serialize fmtp attribute', () => {
35
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createFmtp)('96', 'profile-level-id=42e01f'))).toBe('a=fmtp:96 profile-level-id=42e01f');
35
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createFmtp)('96', 'profile-level-id=42e01f'))).toBe('a=fmtp:96 profile-level-id=42e01f');
36
36
  });
37
37
  it('should serialize ptime attribute', () => {
38
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createPtime)(20))).toBe('a=ptime:20');
38
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createPtime)(20))).toBe('a=ptime:20');
39
39
  });
40
40
  it('should serialize maxptime attribute', () => {
41
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createMaxptime)(150))).toBe('a=maxptime:150');
41
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createMaxptime)(150))).toBe('a=maxptime:150');
42
42
  });
43
43
  it('should serialize custom value attribute', () => {
44
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('customattr', 'customvalue'))).toBe('a=customattr:customvalue');
44
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('customattr', 'customvalue'))).toBe('a=customattr:customvalue');
45
45
  });
46
46
  it('should serialize value with colons', () => {
47
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('candidate', '1 1 UDP 2130706431 192.168.1.1 8998 typ host'))).toBe('a=candidate:1 1 UDP 2130706431 192.168.1.1 8998 typ host');
47
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('candidate', '1 1 UDP 2130706431 192.168.1.1 8998 typ host'))).toBe('a=candidate:1 1 UDP 2130706431 192.168.1.1 8998 typ host');
48
48
  });
49
49
  it('should serialize cat attribute', () => {
50
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('cat', 'conference'))).toBe('a=cat:conference');
50
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('cat', 'conference'))).toBe('a=cat:conference');
51
51
  });
52
52
  it('should serialize tool attribute', () => {
53
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('tool', 'my-sdp-tool v1.0'))).toBe('a=tool:my-sdp-tool v1.0');
53
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('tool', 'my-sdp-tool v1.0'))).toBe('a=tool:my-sdp-tool v1.0');
54
54
  });
55
55
  it('should serialize orient attribute', () => {
56
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('orient', 'landscape'))).toBe('a=orient:landscape');
56
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('orient', 'landscape'))).toBe('a=orient:landscape');
57
57
  });
58
58
  it('should serialize type attribute', () => {
59
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('type', 'broadcast'))).toBe('a=type:broadcast');
59
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('type', 'broadcast'))).toBe('a=type:broadcast');
60
60
  });
61
61
  it('should serialize charset attribute', () => {
62
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('charset', 'UTF-8'))).toBe('a=charset:UTF-8');
62
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('charset', 'UTF-8'))).toBe('a=charset:UTF-8');
63
63
  });
64
64
  it('should serialize sdplang attribute', () => {
65
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('sdplang', 'en-US'))).toBe('a=sdplang:en-US');
65
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('sdplang', 'en-US'))).toBe('a=sdplang:en-US');
66
66
  });
67
67
  it('should serialize lang attribute', () => {
68
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('lang', 'fr'))).toBe('a=lang:fr');
68
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('lang', 'fr'))).toBe('a=lang:fr');
69
69
  });
70
70
  it('should serialize framerate attribute', () => {
71
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('framerate', '29.97'))).toBe('a=framerate:29.97');
71
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('framerate', '29.97'))).toBe('a=framerate:29.97');
72
72
  });
73
73
  it('should serialize quality attribute', () => {
74
- expect((0, attribute_serializer_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('quality', '8'))).toBe('a=quality:8');
74
+ expect((0, fields_1.serializeAttributeField)((0, attributes_1.createValueAttribute)('quality', '8'))).toBe('a=quality:8');
75
75
  });
76
76
  });
77
77
  });