59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package playwright
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
var (
|
|
// ErrPlaywright wraps all Playwright errors.
|
|
// - Use errors.Is to check if the error is a Playwright error.
|
|
// - Use errors.As to cast an error to [Error] if you want to access "Stack".
|
|
ErrPlaywright = errors.New("playwright")
|
|
// ErrTargetClosed usually wraps a reason.
|
|
ErrTargetClosed = errors.New("target closed")
|
|
// ErrTimeout wraps timeout errors. It can be either Playwright TimeoutError or client timeout.
|
|
ErrTimeout = errors.New("timeout")
|
|
)
|
|
|
|
// Error represents a Playwright error
|
|
type Error struct {
|
|
Name string `json:"name"`
|
|
Message string `json:"message"`
|
|
Stack string `json:"stack"`
|
|
}
|
|
|
|
func (e *Error) Error() string {
|
|
return e.Message
|
|
}
|
|
|
|
func (e *Error) Is(target error) bool {
|
|
err, ok := target.(*Error)
|
|
if !ok {
|
|
return false
|
|
}
|
|
if err.Name != e.Name {
|
|
return false
|
|
}
|
|
if e.Name != "Error" {
|
|
return true // same name and not normal error
|
|
}
|
|
return e.Message == err.Message
|
|
}
|
|
|
|
func parseError(err Error) error {
|
|
if err.Name == "TimeoutError" {
|
|
return fmt.Errorf("%w: %w: %w", ErrPlaywright, ErrTimeout, &err)
|
|
} else if err.Name == "TargetClosedError" {
|
|
return fmt.Errorf("%w: %w: %w", ErrPlaywright, ErrTargetClosed, &err)
|
|
}
|
|
return fmt.Errorf("%w: %w", ErrPlaywright, &err)
|
|
}
|
|
|
|
func targetClosedError(reason *string) error {
|
|
if reason == nil {
|
|
return ErrTargetClosed
|
|
}
|
|
return fmt.Errorf("%w: %s", ErrTargetClosed, *reason)
|
|
}
|