import type { Effect, Fiber } from "effect" export class SandboxPromise { interrupted = false constructor( readonly fiber: Fiber.Fiber | undefined, readonly immediate?: Effect.Effect, ) {} } export class SandboxDate { constructor(readonly time: number) {} } export class SandboxRegExp { readonly regex: RegExp constructor(pattern: string, flags: string) { this.regex = new RegExp(pattern, flags) } } export class SandboxMap { readonly map = new Map() } export class SandboxSet { readonly set = new Set() } export class SandboxURLSearchParams { constructor(readonly params: URLSearchParams) {} } export class SandboxURL { readonly searchParams: SandboxURLSearchParams constructor(readonly url: URL) { this.searchParams = new SandboxURLSearchParams(url.searchParams) } } export const isSandboxValue = ( value: unknown, ): value is SandboxDate | SandboxRegExp | SandboxMap | SandboxSet | SandboxURL | SandboxURLSearchParams => value instanceof SandboxDate || value instanceof SandboxRegExp || value instanceof SandboxMap || value instanceof SandboxSet || value instanceof SandboxURL || value instanceof SandboxURLSearchParams