@git.zone/tstest 1.11.5 → 2.2.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 (47) hide show
  1. package/dist_ts/00_commitinfo_data.js +2 -2
  2. package/dist_ts/index.js +24 -2
  3. package/dist_ts/tstest.classes.tap.parser.d.ts +10 -5
  4. package/dist_ts/tstest.classes.tap.parser.js +239 -99
  5. package/dist_ts/tstest.classes.tap.parser.old.d.ts +50 -0
  6. package/dist_ts/tstest.classes.tap.parser.old.js +332 -0
  7. package/dist_ts/tstest.classes.tstest.d.ts +1 -0
  8. package/dist_ts/tstest.classes.tstest.js +93 -4
  9. package/dist_ts/tstest.logging.d.ts +4 -0
  10. package/dist_ts/tstest.logging.js +36 -1
  11. package/dist_ts/tstest.plugins.d.ts +2 -1
  12. package/dist_ts/tstest.plugins.js +3 -2
  13. package/dist_ts_tapbundle/index.d.ts +1 -3
  14. package/dist_ts_tapbundle/index.js +3 -5
  15. package/dist_ts_tapbundle/tapbundle.classes.settingsmanager.d.ts +36 -0
  16. package/dist_ts_tapbundle/tapbundle.classes.settingsmanager.js +114 -0
  17. package/dist_ts_tapbundle/tapbundle.classes.tap.d.ts +26 -3
  18. package/dist_ts_tapbundle/tapbundle.classes.tap.js +218 -22
  19. package/dist_ts_tapbundle/tapbundle.classes.taptest.d.ts +5 -0
  20. package/dist_ts_tapbundle/tapbundle.classes.taptest.js +161 -7
  21. package/dist_ts_tapbundle/tapbundle.classes.taptools.d.ts +14 -0
  22. package/dist_ts_tapbundle/tapbundle.classes.taptools.js +24 -1
  23. package/dist_ts_tapbundle/tapbundle.expect.wrapper.d.ts +11 -0
  24. package/dist_ts_tapbundle/tapbundle.expect.wrapper.js +71 -0
  25. package/dist_ts_tapbundle/tapbundle.interfaces.d.ts +27 -0
  26. package/dist_ts_tapbundle/tapbundle.interfaces.js +2 -0
  27. package/dist_ts_tapbundle/tapbundle.utilities.diff.d.ts +5 -0
  28. package/dist_ts_tapbundle/tapbundle.utilities.diff.js +179 -0
  29. package/dist_ts_tapbundle_protocol/index.d.ts +6 -0
  30. package/dist_ts_tapbundle_protocol/index.js +11 -0
  31. package/dist_ts_tapbundle_protocol/protocol.emitter.d.ts +55 -0
  32. package/dist_ts_tapbundle_protocol/protocol.emitter.js +155 -0
  33. package/dist_ts_tapbundle_protocol/protocol.parser.d.ts +79 -0
  34. package/dist_ts_tapbundle_protocol/protocol.parser.js +359 -0
  35. package/dist_ts_tapbundle_protocol/protocol.types.d.ts +111 -0
  36. package/dist_ts_tapbundle_protocol/protocol.types.js +19 -0
  37. package/package.json +2 -1
  38. package/readme.hints.md +166 -5
  39. package/readme.md +134 -3
  40. package/readme.plan.md +145 -56
  41. package/ts/00_commitinfo_data.ts +1 -1
  42. package/ts/index.ts +22 -1
  43. package/ts/tspublish.json +1 -1
  44. package/ts/tstest.classes.tap.parser.ts +271 -110
  45. package/ts/tstest.classes.tstest.ts +112 -5
  46. package/ts/tstest.logging.ts +43 -0
  47. package/ts/tstest.plugins.ts +2 -0
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Generate a diff between two values
3
+ */
4
+ export function generateDiff(expected, actual, context = 3) {
5
+ // Handle same values
6
+ if (expected === actual) {
7
+ return null;
8
+ }
9
+ // Determine diff type based on values
10
+ if (typeof expected === 'string' && typeof actual === 'string') {
11
+ return generateStringDiff(expected, actual, context);
12
+ }
13
+ else if (Array.isArray(expected) && Array.isArray(actual)) {
14
+ return generateArrayDiff(expected, actual);
15
+ }
16
+ else if (expected && actual && typeof expected === 'object' && typeof actual === 'object') {
17
+ return generateObjectDiff(expected, actual);
18
+ }
19
+ else {
20
+ return generatePrimitiveDiff(expected, actual);
21
+ }
22
+ }
23
+ /**
24
+ * Generate diff for primitive values
25
+ */
26
+ function generatePrimitiveDiff(expected, actual) {
27
+ return {
28
+ type: 'primitive',
29
+ changes: [{
30
+ type: 'modify',
31
+ oldValue: expected,
32
+ newValue: actual
33
+ }]
34
+ };
35
+ }
36
+ /**
37
+ * Generate diff for strings (line-by-line)
38
+ */
39
+ function generateStringDiff(expected, actual, context) {
40
+ const expectedLines = expected.split('\n');
41
+ const actualLines = actual.split('\n');
42
+ const changes = [];
43
+ // Simple line-by-line diff
44
+ const maxLines = Math.max(expectedLines.length, actualLines.length);
45
+ for (let i = 0; i < maxLines; i++) {
46
+ const expectedLine = expectedLines[i];
47
+ const actualLine = actualLines[i];
48
+ if (expectedLine === undefined) {
49
+ changes.push({
50
+ type: 'add',
51
+ line: i,
52
+ content: actualLine
53
+ });
54
+ }
55
+ else if (actualLine === undefined) {
56
+ changes.push({
57
+ type: 'remove',
58
+ line: i,
59
+ content: expectedLine
60
+ });
61
+ }
62
+ else if (expectedLine !== actualLine) {
63
+ changes.push({
64
+ type: 'remove',
65
+ line: i,
66
+ content: expectedLine
67
+ });
68
+ changes.push({
69
+ type: 'add',
70
+ line: i,
71
+ content: actualLine
72
+ });
73
+ }
74
+ }
75
+ return {
76
+ type: 'string',
77
+ changes,
78
+ context
79
+ };
80
+ }
81
+ /**
82
+ * Generate diff for arrays
83
+ */
84
+ function generateArrayDiff(expected, actual) {
85
+ const changes = [];
86
+ const maxLength = Math.max(expected.length, actual.length);
87
+ for (let i = 0; i < maxLength; i++) {
88
+ const expectedItem = expected[i];
89
+ const actualItem = actual[i];
90
+ if (i >= expected.length) {
91
+ changes.push({
92
+ type: 'add',
93
+ path: [String(i)],
94
+ newValue: actualItem
95
+ });
96
+ }
97
+ else if (i >= actual.length) {
98
+ changes.push({
99
+ type: 'remove',
100
+ path: [String(i)],
101
+ oldValue: expectedItem
102
+ });
103
+ }
104
+ else if (!deepEqual(expectedItem, actualItem)) {
105
+ changes.push({
106
+ type: 'modify',
107
+ path: [String(i)],
108
+ oldValue: expectedItem,
109
+ newValue: actualItem
110
+ });
111
+ }
112
+ }
113
+ return {
114
+ type: 'array',
115
+ changes
116
+ };
117
+ }
118
+ /**
119
+ * Generate diff for objects
120
+ */
121
+ function generateObjectDiff(expected, actual) {
122
+ const changes = [];
123
+ const allKeys = new Set([...Object.keys(expected), ...Object.keys(actual)]);
124
+ for (const key of allKeys) {
125
+ const expectedValue = expected[key];
126
+ const actualValue = actual[key];
127
+ if (!(key in expected)) {
128
+ changes.push({
129
+ type: 'add',
130
+ path: [key],
131
+ newValue: actualValue
132
+ });
133
+ }
134
+ else if (!(key in actual)) {
135
+ changes.push({
136
+ type: 'remove',
137
+ path: [key],
138
+ oldValue: expectedValue
139
+ });
140
+ }
141
+ else if (!deepEqual(expectedValue, actualValue)) {
142
+ changes.push({
143
+ type: 'modify',
144
+ path: [key],
145
+ oldValue: expectedValue,
146
+ newValue: actualValue
147
+ });
148
+ }
149
+ }
150
+ return {
151
+ type: 'object',
152
+ changes
153
+ };
154
+ }
155
+ /**
156
+ * Deep equality check
157
+ */
158
+ function deepEqual(a, b) {
159
+ if (a === b)
160
+ return true;
161
+ if (a === null || b === null)
162
+ return false;
163
+ if (typeof a !== typeof b)
164
+ return false;
165
+ if (typeof a === 'object') {
166
+ if (Array.isArray(a) && Array.isArray(b)) {
167
+ if (a.length !== b.length)
168
+ return false;
169
+ return a.every((item, index) => deepEqual(item, b[index]));
170
+ }
171
+ const keysA = Object.keys(a);
172
+ const keysB = Object.keys(b);
173
+ if (keysA.length !== keysB.length)
174
+ return false;
175
+ return keysA.every(key => deepEqual(a[key], b[key]));
176
+ }
177
+ return false;
178
+ }
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLnV0aWxpdGllcy5kaWZmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfdGFwYnVuZGxlL3RhcGJ1bmRsZS51dGlsaXRpZXMuZGlmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsUUFBYSxFQUFFLE1BQVcsRUFBRSxVQUFrQixDQUFDO0lBQzFFLHFCQUFxQjtJQUNyQixJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDL0QsT0FBTyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzVELE9BQU8saUJBQWlCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7U0FBTSxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVGLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMscUJBQXFCLENBQUMsUUFBYSxFQUFFLE1BQVc7SUFDdkQsT0FBTztRQUNMLElBQUksRUFBRSxXQUFXO1FBQ2pCLE9BQU8sRUFB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
@@ -0,0 +1,6 @@
1
+ export * from './protocol.types.js';
2
+ export * from './protocol.emitter.js';
3
+ export * from './protocol.parser.js';
4
+ export { ProtocolEmitter } from './protocol.emitter.js';
5
+ export { ProtocolParser } from './protocol.parser.js';
6
+ export { PROTOCOL_MARKERS, PROTOCOL_VERSION } from './protocol.types.js';
@@ -0,0 +1,11 @@
1
+ // Protocol V2 - Isomorphic implementation for improved TAP protocol
2
+ // This module is designed to work in both browser and Node.js environments
3
+ export * from './protocol.types.js';
4
+ export * from './protocol.emitter.js';
5
+ export * from './protocol.parser.js';
6
+ // Re-export main classes for convenience
7
+ export { ProtocolEmitter } from './protocol.emitter.js';
8
+ export { ProtocolParser } from './protocol.parser.js';
9
+ // Re-export constants
10
+ export { PROTOCOL_MARKERS, PROTOCOL_VERSION } from './protocol.types.js';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGVfcHJvdG9jb2wvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0VBQW9FO0FBQ3BFLDJFQUEyRTtBQUUzRSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyx5Q0FBeUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxzQkFBc0I7QUFDdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUMifQ==
@@ -0,0 +1,55 @@
1
+ import type { ITestResult, IPlanLine, ISnapshotData, IErrorBlock, ITestEvent } from './protocol.types.js';
2
+ /**
3
+ * ProtocolEmitter generates Protocol V2 messages
4
+ * This class is used by tapbundle to emit test results in the new protocol format
5
+ */
6
+ export declare class ProtocolEmitter {
7
+ /**
8
+ * Emit protocol version header
9
+ */
10
+ emitProtocolHeader(): string;
11
+ /**
12
+ * Emit TAP version line
13
+ */
14
+ emitTapVersion(version?: number): string;
15
+ /**
16
+ * Emit test plan
17
+ */
18
+ emitPlan(plan: IPlanLine): string;
19
+ /**
20
+ * Emit a test result
21
+ */
22
+ emitTest(result: ITestResult): string[];
23
+ /**
24
+ * Emit a comment line
25
+ */
26
+ emitComment(comment: string): string;
27
+ /**
28
+ * Emit bailout
29
+ */
30
+ emitBailout(reason: string): string;
31
+ /**
32
+ * Emit snapshot data
33
+ */
34
+ emitSnapshot(snapshot: ISnapshotData): string[];
35
+ /**
36
+ * Emit error block
37
+ */
38
+ emitError(error: IErrorBlock): string[];
39
+ /**
40
+ * Emit test event
41
+ */
42
+ emitEvent(event: ITestEvent): string;
43
+ /**
44
+ * Check if metadata should be inline
45
+ */
46
+ private shouldUseInlineMetadata;
47
+ /**
48
+ * Create inline metadata string
49
+ */
50
+ private createInlineMetadata;
51
+ /**
52
+ * Create block metadata lines
53
+ */
54
+ private createBlockMetadata;
55
+ }
@@ -0,0 +1,155 @@
1
+ import { PROTOCOL_MARKERS, PROTOCOL_VERSION } from './protocol.types.js';
2
+ /**
3
+ * ProtocolEmitter generates Protocol V2 messages
4
+ * This class is used by tapbundle to emit test results in the new protocol format
5
+ */
6
+ export class ProtocolEmitter {
7
+ /**
8
+ * Emit protocol version header
9
+ */
10
+ emitProtocolHeader() {
11
+ return `${PROTOCOL_MARKERS.START}${PROTOCOL_MARKERS.PROTOCOL_PREFIX}${PROTOCOL_VERSION}${PROTOCOL_MARKERS.END}`;
12
+ }
13
+ /**
14
+ * Emit TAP version line
15
+ */
16
+ emitTapVersion(version = 13) {
17
+ return `TAP version ${version}`;
18
+ }
19
+ /**
20
+ * Emit test plan
21
+ */
22
+ emitPlan(plan) {
23
+ if (plan.skipAll) {
24
+ return `1..0 # Skipped: ${plan.skipAll}`;
25
+ }
26
+ return `${plan.start}..${plan.end}`;
27
+ }
28
+ /**
29
+ * Emit a test result
30
+ */
31
+ emitTest(result) {
32
+ const lines = [];
33
+ // Build the basic TAP line
34
+ let tapLine = result.ok ? 'ok' : 'not ok';
35
+ tapLine += ` ${result.testNumber}`;
36
+ tapLine += ` - ${result.description}`;
37
+ // Add directive if present
38
+ if (result.directive) {
39
+ tapLine += ` # ${result.directive.type.toUpperCase()}`;
40
+ if (result.directive.reason) {
41
+ tapLine += ` ${result.directive.reason}`;
42
+ }
43
+ }
44
+ // Add inline metadata for simple cases
45
+ if (result.metadata && this.shouldUseInlineMetadata(result.metadata)) {
46
+ const metaStr = this.createInlineMetadata(result.metadata);
47
+ if (metaStr) {
48
+ tapLine += ` ${metaStr}`;
49
+ }
50
+ }
51
+ lines.push(tapLine);
52
+ // Add block metadata for complex cases
53
+ if (result.metadata && !this.shouldUseInlineMetadata(result.metadata)) {
54
+ lines.push(...this.createBlockMetadata(result.metadata, result.testNumber));
55
+ }
56
+ return lines;
57
+ }
58
+ /**
59
+ * Emit a comment line
60
+ */
61
+ emitComment(comment) {
62
+ return `# ${comment}`;
63
+ }
64
+ /**
65
+ * Emit bailout
66
+ */
67
+ emitBailout(reason) {
68
+ return `Bail out! ${reason}`;
69
+ }
70
+ /**
71
+ * Emit snapshot data
72
+ */
73
+ emitSnapshot(snapshot) {
74
+ const lines = [];
75
+ lines.push(`${PROTOCOL_MARKERS.START}${PROTOCOL_MARKERS.SNAPSHOT_PREFIX}${snapshot.name}${PROTOCOL_MARKERS.END}`);
76
+ if (snapshot.format === 'json') {
77
+ lines.push(JSON.stringify(snapshot.content, null, 2));
78
+ }
79
+ else {
80
+ lines.push(String(snapshot.content));
81
+ }
82
+ lines.push(`${PROTOCOL_MARKERS.START}${PROTOCOL_MARKERS.SNAPSHOT_END}${PROTOCOL_MARKERS.END}`);
83
+ return lines;
84
+ }
85
+ /**
86
+ * Emit error block
87
+ */
88
+ emitError(error) {
89
+ const lines = [];
90
+ lines.push(`${PROTOCOL_MARKERS.START}${PROTOCOL_MARKERS.ERROR_PREFIX}${PROTOCOL_MARKERS.END}`);
91
+ lines.push(JSON.stringify(error, null, 2));
92
+ lines.push(`${PROTOCOL_MARKERS.START}${PROTOCOL_MARKERS.ERROR_END}${PROTOCOL_MARKERS.END}`);
93
+ return lines;
94
+ }
95
+ /**
96
+ * Emit test event
97
+ */
98
+ emitEvent(event) {
99
+ const eventJson = JSON.stringify(event);
100
+ return `${PROTOCOL_MARKERS.START}${PROTOCOL_MARKERS.EVENT_PREFIX}${eventJson}${PROTOCOL_MARKERS.END}`;
101
+ }
102
+ /**
103
+ * Check if metadata should be inline
104
+ */
105
+ shouldUseInlineMetadata(metadata) {
106
+ // Use inline for simple metadata (time, retry, simple skip/todo)
107
+ const hasComplexData = metadata.error ||
108
+ metadata.custom ||
109
+ (metadata.tags && metadata.tags.length > 0) ||
110
+ metadata.file ||
111
+ metadata.line;
112
+ return !hasComplexData;
113
+ }
114
+ /**
115
+ * Create inline metadata string
116
+ */
117
+ createInlineMetadata(metadata) {
118
+ const parts = [];
119
+ if (metadata.time !== undefined) {
120
+ parts.push(`time:${metadata.time}`);
121
+ }
122
+ if (metadata.retry !== undefined) {
123
+ parts.push(`retry:${metadata.retry}`);
124
+ }
125
+ if (metadata.skip) {
126
+ return `${PROTOCOL_MARKERS.START}${PROTOCOL_MARKERS.SKIP_PREFIX}${metadata.skip}${PROTOCOL_MARKERS.END}`;
127
+ }
128
+ if (metadata.todo) {
129
+ return `${PROTOCOL_MARKERS.START}${PROTOCOL_MARKERS.TODO_PREFIX}${metadata.todo}${PROTOCOL_MARKERS.END}`;
130
+ }
131
+ if (parts.length > 0) {
132
+ return `${PROTOCOL_MARKERS.START}${parts.join(',')}${PROTOCOL_MARKERS.END}`;
133
+ }
134
+ return '';
135
+ }
136
+ /**
137
+ * Create block metadata lines
138
+ */
139
+ createBlockMetadata(metadata, testNumber) {
140
+ const lines = [];
141
+ // Create a clean metadata object without skip/todo (handled inline)
142
+ const blockMeta = { ...metadata };
143
+ delete blockMeta.skip;
144
+ delete blockMeta.todo;
145
+ // Emit metadata block
146
+ const metaJson = JSON.stringify(blockMeta);
147
+ lines.push(`${PROTOCOL_MARKERS.START}${PROTOCOL_MARKERS.META_PREFIX}${metaJson}${PROTOCOL_MARKERS.END}`);
148
+ // Emit separate error block if present
149
+ if (metadata.error) {
150
+ lines.push(...this.emitError({ testNumber, error: metadata.error }));
151
+ }
152
+ return lines;
153
+ }
154
+ }
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wuZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3RhcGJ1bmRsZV9wcm90b2NvbC9wcm90b2NvbC5lbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2pCLE1BQU0scUJBQXFCLENBQUM7QUFFN0I7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDMUI7O09BRUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbEgsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLFVBQWtCLEVBQUU7UUFDeEMsT0FBTyxlQUFlLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxJQUFlO1FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sbUJBQW1CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxNQUFtQjtRQUNqQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFFM0IsMkJBQTJCO1FBQzNCLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzFDLE9BQU8sSUFBSSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFdEMsMkJBQTJCO1FB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
@@ -0,0 +1,79 @@
1
+ import type { IProtocolMessage } from './protocol.types.js';
2
+ /**
3
+ * ProtocolParser parses Protocol V2 messages
4
+ * This class is used by tstest to parse test results from the new protocol format
5
+ */
6
+ export declare class ProtocolParser {
7
+ private protocolVersion;
8
+ private inBlock;
9
+ private blockType;
10
+ private blockContent;
11
+ /**
12
+ * Parse a single line and return protocol messages
13
+ */
14
+ parseLine(line: string): IProtocolMessage[];
15
+ /**
16
+ * Parse protocol version header
17
+ */
18
+ private parseProtocolVersion;
19
+ /**
20
+ * Parse TAP version line
21
+ */
22
+ private parseTapVersion;
23
+ /**
24
+ * Parse plan line
25
+ */
26
+ private parsePlan;
27
+ /**
28
+ * Parse bailout
29
+ */
30
+ private parseBailout;
31
+ /**
32
+ * Parse event
33
+ */
34
+ private parseEvent;
35
+ /**
36
+ * Check if line is a comment
37
+ */
38
+ private isComment;
39
+ /**
40
+ * Parse test result line
41
+ */
42
+ private parseTestResult;
43
+ /**
44
+ * Extract inline metadata from line
45
+ */
46
+ private extractInlineMetadata;
47
+ /**
48
+ * Remove inline metadata from line
49
+ */
50
+ private removeInlineMetadata;
51
+ /**
52
+ * Extract protocol data with specific prefix
53
+ */
54
+ private extractProtocolData;
55
+ /**
56
+ * Check if line starts a block
57
+ */
58
+ private isBlockStart;
59
+ /**
60
+ * Check if line ends a block
61
+ */
62
+ private isBlockEnd;
63
+ /**
64
+ * Extract block type from start line
65
+ */
66
+ private extractBlockType;
67
+ /**
68
+ * Finalize current block
69
+ */
70
+ private finalizeBlock;
71
+ /**
72
+ * Escape regex special characters
73
+ */
74
+ private escapeRegex;
75
+ /**
76
+ * Get protocol version
77
+ */
78
+ getProtocolVersion(): string | null;
79
+ }