mirror of
https://github.com/cline/cline.git
synced 2026-09-01 15:11:04 +08:00
1ecb24544f
* fix: Generate type-safe code for the Vscode Protobus service
This commit establishes a fully type-safe ProtoBus system by fixing the streaming
response handler type definitions and completing the protobuf-driven architecture.
Key improvements:
• **Complete type safety**: ProtoBus is now completely type-safe with compile-time
validation of all gRPC service definitions, request/response types, and handler
signatures
• **Simplified message creation**: No longer need to manually call `Message.create({...})`
- the generated code handles message instantiation automatically
• **Automated proto parsing**: Eliminated manual parsing of proto files - the build
system now automatically generates TypeScript definitions from protobuf schemas
• **Proto files as source of truth**: Service names, method names, and message types
are now definitively controlled by the proto files, ensuring consistency across
the entire codebase
• **Handler type checking**: ProtoBus handlers are fully type-checked including:
- Request and response type validation
- Handler method name verification against proto definitions
- Streaming vs unary handler signature enforcement
This establishes a robust, type-safe foundation for all gRPC communication between
the extension host and webview components.
* Remove commented out code in script
* Just call handlers directly
28 lines
739 B
JavaScript
28 lines
739 B
JavaScript
import * as fs from "fs/promises"
|
|
import * as path from "path"
|
|
/**
|
|
* Write `contents` to `filePath`, creating any necessary directories in `filePath`.
|
|
*/
|
|
export async function writeFileWithMkdirs(filePath, content) {
|
|
await fs.mkdir(path.dirname(filePath), { recursive: true })
|
|
await fs.writeFile(filePath, content)
|
|
}
|
|
|
|
export async function rmrf(path) {
|
|
await fs.rm(path, { force: true, recursive: true })
|
|
}
|
|
|
|
/**
|
|
* Remove an empty dir, do nothing if the directory doesn't exist or is not empty.
|
|
*/
|
|
export async function rmdir(path) {
|
|
try {
|
|
await fs.rmdir(path)
|
|
} catch (error) {
|
|
if (error.code !== "ENOTEMPTY" && error.code !== "ENOENT") {
|
|
// Only re-throw if it's not "not empty" or "doesn't exist"
|
|
throw error
|
|
}
|
|
}
|
|
}
|