BREAKING CHANGE(protocol): Introduce protocol v2 implementation and update build configuration with revised build order, new tspublish files, and enhanced documentation
This commit is contained in:
parent
7d09b39f2b
commit
7b1732abcc
@ -1,5 +1,13 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2025-05-25 - 2.0.0 - BREAKING CHANGE(protocol)
|
||||||
|
Introduce protocol v2 implementation and update build configuration with revised build order, new tspublish files, and enhanced documentation
|
||||||
|
|
||||||
|
- Added ts_tapbundle_protocol directory with isomorphic implementation for protocol v2
|
||||||
|
- Updated readme.hints.md and readme.plan.md to explain the complete replacement of the v1 protocol and new build process
|
||||||
|
- Revised build order in tspublish.json files across ts, ts_tapbundle, ts_tapbundle_node, and ts_tapbundle_protocol
|
||||||
|
- Introduced .claude/settings.local.json with updated permission settings for CLI and build tools
|
||||||
|
|
||||||
## 2025-05-24 - 1.11.5 - fix(tstest)
|
## 2025-05-24 - 1.11.5 - fix(tstest)
|
||||||
Fix timeout handling to correctly evaluate TAP results after killing the test process.
|
Fix timeout handling to correctly evaluate TAP results after killing the test process.
|
||||||
|
|
||||||
|
@ -40,9 +40,17 @@ This project integrates tstest with tapbundle through a modular architecture:
|
|||||||
- Automatically detects browser environment and only enables in browser context
|
- Automatically detects browser environment and only enables in browser context
|
||||||
|
|
||||||
3. **Build System**
|
3. **Build System**
|
||||||
- Uses `tsbuild tsfolders` to compile TypeScript
|
- Uses `tsbuild tsfolders` to compile TypeScript (invoked by `pnpm build`)
|
||||||
- Maintains separate output directories: `/dist_ts/`, `/dist_ts_tapbundle/`, `/dist_ts_tapbundle_node/`
|
- Maintains separate output directories: `/dist_ts/`, `/dist_ts_tapbundle/`, `/dist_ts_tapbundle_node/`, `/dist_ts_tapbundle_protocol/`
|
||||||
- Compilation order is resolved automatically based on dependencies
|
- Compilation order is resolved automatically based on dependencies in tspublish.json files
|
||||||
|
- Protocol imports use compiled dist directories:
|
||||||
|
```typescript
|
||||||
|
// In ts/tstest.classes.tap.parser.ts
|
||||||
|
import { ProtocolParser } from '../dist_ts_tapbundle_protocol/index.js';
|
||||||
|
|
||||||
|
// In ts_tapbundle/tapbundle.classes.tap.ts
|
||||||
|
import { ProtocolEmitter } from '../dist_ts_tapbundle_protocol/index.js';
|
||||||
|
```
|
||||||
|
|
||||||
### Test Scripts
|
### Test Scripts
|
||||||
|
|
||||||
@ -102,6 +110,19 @@ A new internal protocol is being designed that will:
|
|||||||
- Use Unicode delimiters `⟦TSTEST:⟧` that won't conflict with test content
|
- Use Unicode delimiters `⟦TSTEST:⟧` that won't conflict with test content
|
||||||
- Support structured JSON metadata
|
- Support structured JSON metadata
|
||||||
- Allow rich error reporting with stack traces and diffs
|
- Allow rich error reporting with stack traces and diffs
|
||||||
- Maintain backwards compatibility during migration
|
- Completely replace v1 protocol (no backwards compatibility)
|
||||||
|
|
||||||
See `readme.protocol.md` for the full specification and `tapbundle.protocols.ts` for the implementation utilities.
|
### ts_tapbundle_protocol Directory
|
||||||
|
The protocol v2 implementation is contained in a separate `ts_tapbundle_protocol` directory:
|
||||||
|
- **Isomorphic Code**: All protocol code works in both browser and Node.js environments
|
||||||
|
- **No Platform Dependencies**: No Node.js-specific imports, ensuring true cross-platform compatibility
|
||||||
|
- **Clean Separation**: Protocol logic is isolated from platform-specific code in tstest and tapbundle
|
||||||
|
- **Shared Implementation**: Both tstest (parser) and tapbundle (emitter) use the same protocol classes
|
||||||
|
- **Build Process**:
|
||||||
|
- Compiled by `pnpm build` via tsbuild to `dist_ts_tapbundle_protocol/`
|
||||||
|
- Build order managed through tspublish.json files
|
||||||
|
- Other modules import from the compiled dist directory, not source
|
||||||
|
|
||||||
|
This architectural decision ensures the protocol can be used in any JavaScript environment without modification and maintains proper build dependencies.
|
||||||
|
|
||||||
|
See `readme.protocol.md` for the full specification and `ts_tapbundle_protocol/` for the implementation.
|
@ -13,12 +13,27 @@
|
|||||||
- Use Unicode delimiters `⟦TSTEST:META:{}⟧` that won't appear in test names
|
- Use Unicode delimiters `⟦TSTEST:META:{}⟧` that won't appear in test names
|
||||||
- Structured JSON metadata format
|
- Structured JSON metadata format
|
||||||
- Separate protocol blocks for complex data (errors, snapshots)
|
- Separate protocol blocks for complex data (errors, snapshots)
|
||||||
- Backwards compatible with gradual migration
|
- Complete replacement of v1 (no backwards compatibility needed)
|
||||||
|
|
||||||
### Implementation
|
### Implementation
|
||||||
- Phase 1: Add protocol v2 parser alongside v1
|
- Phase 1: Create protocol v2 implementation in ts_tapbundle_protocol
|
||||||
- Phase 2: Generate v2 by default with --legacy flag for v1
|
- Phase 2: Replace all v1 code in both tstest and tapbundle with v2
|
||||||
- Phase 3: Full migration to v2 in next major version
|
- Phase 3: Delete all v1 parsing and generation code
|
||||||
|
|
||||||
|
#### ts_tapbundle_protocol Directory
|
||||||
|
The protocol v2 implementation will be contained in the `ts_tapbundle_protocol` directory as isomorphic TypeScript code:
|
||||||
|
- **Isomorphic Design**: All code must work in both browser and Node.js environments
|
||||||
|
- **No Node.js Imports**: No Node.js-specific modules allowed (no fs, path, child_process, etc.)
|
||||||
|
- **Protocol Classes**: Contains classes implementing all sides of the protocol:
|
||||||
|
- `ProtocolEmitter`: For generating protocol v2 messages (used by tapbundle)
|
||||||
|
- `ProtocolParser`: For parsing protocol v2 messages (used by tstest)
|
||||||
|
- `ProtocolMessage`: Base classes for different message types
|
||||||
|
- `ProtocolTypes`: TypeScript interfaces and types for protocol structures
|
||||||
|
- **Pure TypeScript**: Only browser-compatible APIs and pure TypeScript/JavaScript code
|
||||||
|
- **Build Integration**:
|
||||||
|
- Compiled by `pnpm build` (via tsbuild) to `dist_ts_tapbundle_protocol/`
|
||||||
|
- Build order defined in tspublish.json files
|
||||||
|
- Imported by ts and ts_tapbundle modules from the compiled dist directory
|
||||||
|
|
||||||
See `readme.protocol.md` for detailed specification.
|
See `readme.protocol.md` for detailed specification.
|
||||||
|
|
||||||
@ -183,10 +198,18 @@ tstest --changed
|
|||||||
## Implementation Phases
|
## Implementation Phases
|
||||||
|
|
||||||
### Phase 1: Improved Internal Protocol (Priority: Critical) (NEW)
|
### Phase 1: Improved Internal Protocol (Priority: Critical) (NEW)
|
||||||
1. Implement Protocol V2 parser in tstest
|
1. Create ts_tapbundle_protocol directory with isomorphic protocol v2 implementation
|
||||||
2. Add protocol version negotiation
|
- Implement ProtocolEmitter class for message generation
|
||||||
3. Update tapbundle to generate V2 format with feature flag
|
- Implement ProtocolParser class for message parsing
|
||||||
4. Test with real-world test suites containing special characters
|
- Define ProtocolMessage types and interfaces
|
||||||
|
- Ensure all code is browser and Node.js compatible
|
||||||
|
- Add tspublish.json to configure build order
|
||||||
|
2. Update build configuration to compile ts_tapbundle_protocol first
|
||||||
|
3. Replace TAP parser in tstest with Protocol V2 parser importing from dist_ts_tapbundle_protocol
|
||||||
|
4. Replace TAP generation in tapbundle with Protocol V2 emitter importing from dist_ts_tapbundle_protocol
|
||||||
|
5. Delete all v1 TAP parsing code from tstest
|
||||||
|
6. Delete all v1 TAP generation code from tapbundle
|
||||||
|
7. Test with real-world test suites containing special characters
|
||||||
|
|
||||||
### Phase 2: Test Configuration System (Priority: High)
|
### Phase 2: Test Configuration System (Priority: High)
|
||||||
1. Implement tap.settings() API with TypeScript interfaces
|
1. Implement tap.settings() API with TypeScript interfaces
|
||||||
@ -214,10 +237,10 @@ tstest --changed
|
|||||||
## Technical Considerations
|
## Technical Considerations
|
||||||
|
|
||||||
### API Design Principles
|
### API Design Principles
|
||||||
- Maintain backward compatibility
|
- Clean, modern API design without legacy constraints
|
||||||
- Progressive enhancement approach
|
- Progressive enhancement approach
|
||||||
- Opt-in features to avoid breaking changes
|
- Well-documented features and APIs
|
||||||
- Clear migration paths for new features
|
- Clear, simple interfaces
|
||||||
|
|
||||||
### Performance Goals
|
### Performance Goals
|
||||||
- Minimal overhead for test execution
|
- Minimal overhead for test execution
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@git.zone/tstest',
|
name: '@git.zone/tstest',
|
||||||
version: '1.11.5',
|
version: '2.0.0',
|
||||||
description: 'a test utility to run tests that match test/**/*.ts'
|
description: 'a test utility to run tests that match test/**/*.ts'
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"order": 2
|
"order": 4
|
||||||
}
|
}
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"order": 1
|
"order": 2
|
||||||
}
|
}
|
3
ts_tapbundle_node/tspublish.json
Normal file
3
ts_tapbundle_node/tspublish.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"order": 3
|
||||||
|
}
|
3
ts_tapbundle_protocol/tspublish.json
Normal file
3
ts_tapbundle_protocol/tspublish.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"order": 1
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user