types.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import EventEmitter from "events"
  2. import { CommitResult } from "simple-git"
  3. export type CheckpointResult = Partial<CommitResult> & Pick<CommitResult, "commit">
  4. export type CheckpointDiff = {
  5. paths: {
  6. relative: string
  7. absolute: string
  8. }
  9. content: {
  10. before: string
  11. after: string
  12. }
  13. }
  14. export interface CheckpointService {
  15. saveCheckpoint(message: string): Promise<CheckpointResult | undefined>
  16. restoreCheckpoint(commit: string): Promise<void>
  17. getDiff(range: { from?: string; to?: string }): Promise<CheckpointDiff[]>
  18. workspaceDir: string
  19. baseHash?: string
  20. version: number
  21. }
  22. export interface CheckpointServiceOptions {
  23. taskId: string
  24. workspaceDir: string
  25. log?: (message: string) => void
  26. }
  27. /**
  28. * EventEmitter
  29. */
  30. export interface CheckpointEventMap {
  31. initialize: { type: "initialize"; workspaceDir: string; baseHash: string; created: boolean; duration: number }
  32. checkpoint: {
  33. type: "checkpoint"
  34. isFirst: boolean
  35. fromHash: string
  36. toHash: string
  37. duration: number
  38. }
  39. restore: { type: "restore"; commitHash: string; duration: number }
  40. error: { type: "error"; error: Error }
  41. }
  42. export class CheckpointEventEmitter extends EventEmitter {
  43. override emit<K extends keyof CheckpointEventMap>(event: K, data: CheckpointEventMap[K]): boolean {
  44. return super.emit(event, data)
  45. }
  46. override on<K extends keyof CheckpointEventMap>(event: K, listener: (data: CheckpointEventMap[K]) => void): this {
  47. return super.on(event, listener)
  48. }
  49. override off<K extends keyof CheckpointEventMap>(event: K, listener: (data: CheckpointEventMap[K]) => void): this {
  50. return super.off(event, listener)
  51. }
  52. override once<K extends keyof CheckpointEventMap>(event: K, listener: (data: CheckpointEventMap[K]) => void): this {
  53. return super.once(event, listener)
  54. }
  55. }