Files
bun.sh/src/bun.js/api.zig
Claude Bot f95ef85afa feat: implement Bun.Browser API for browser automation
Add comprehensive browser automation API using Chrome DevTools Protocol:

Core Features:
- Bun.browser() function to launch Chrome/Chromium instances
- Browser class with CDP connection management
- Page class for tab control and interaction
- Input interfaces: Keyboard, Mouse, Touchscreen
- Element and JSHandle classes for DOM manipulation

API Implementation:
- Browser.launch() with configurable options (headless, args, etc.)
- Page navigation: goto(), goBack(), goForward(), reload()
- Content manipulation: content(), setContent(), title()
- JavaScript evaluation: evaluate(), evaluateHandle()
- Element interaction: querySelector(), click(), type()
- Screenshots: screenshot() with various formats
- Viewport control: setViewport(), emulate()
- Cookie management: setCookie(), cookies(), deleteCookie()
- Event handling: on(), off(), once()
- Network control: setUserAgent(), setExtraHTTPHeaders()

Browser Automation:
- Automatic Chrome process spawning with proper flags
- WebSocket connection to Chrome DevTools Protocol
- Support for headless and headful modes
- Proper cleanup and resource management
- Error handling for common failure scenarios

Testing:
- Basic API exposure tests
- Integration tests with real browser instances
- DOM interaction and JavaScript evaluation tests
- Screenshot and viewport manipulation tests
- Multi-page handling tests

This replaces Puppeteer with a native Bun implementation for
browser automation tasks including web scraping, testing,
and automated browser interactions.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-14 04:15:51 +00:00

61 lines
3.2 KiB
Zig

//! "api" in this context means "the Bun APIs", as in "the exposed JS APIs"
/// `globalThis.Bun`
pub const Bun = @import("api/BunObject.zig");
pub const Subprocess = @import("api/bun/subprocess.zig");
pub const HashObject = @import("api/HashObject.zig");
pub const UnsafeObject = @import("api/UnsafeObject.zig");
pub const TOMLObject = @import("api/TOMLObject.zig");
pub const Timer = @import("api/Timer.zig");
pub const FFIObject = @import("api/FFIObject.zig");
pub const AnyRequestContext = @import("api/server.zig").AnyRequestContext;
pub const AnyServer = @import("api/server.zig").AnyServer;
pub const BuildArtifact = @import("api/JSBundler.zig").BuildArtifact;
pub const BuildMessage = @import("BuildMessage.zig").BuildMessage;
pub const DNS = @import("api/bun/dns_resolver.zig");
pub const DebugHTTPSServer = @import("api/server.zig").DebugHTTPSServer;
pub const DebugHTTPServer = @import("api/server.zig").DebugHTTPServer;
pub const FFI = @import("api/ffi.zig").FFI;
pub const HTMLRewriter = @import("api/html_rewriter.zig");
pub const FileSystemRouter = @import("api/filesystem_router.zig").FileSystemRouter;
pub const Glob = @import("api/glob.zig");
pub const H2FrameParser = @import("api/bun/h2_frame_parser.zig").H2FrameParser;
pub const HTMLBundle = @import("api/server/HTMLBundle.zig");
pub const HTTPSServer = @import("api/server.zig").HTTPSServer;
pub const HTTPServer = @import("api/server.zig").HTTPServer;
pub const JSBundler = @import("api/JSBundler.zig").JSBundler;
pub const JSTranspiler = @import("api/JSTranspiler.zig");
pub const Listener = @import("api/bun/socket.zig").Listener;
pub const MatchedRoute = @import("api/filesystem_router.zig").MatchedRoute;
pub const NativeBrotli = @import("node/zlib/NativeBrotli.zig");
pub const NativeZlib = @import("node/zlib/NativeZlib.zig");
pub const NodeHTTPResponse = @import("api/server.zig").NodeHTTPResponse;
pub const Postgres = @import("../sql/postgres.zig");
pub const ResolveMessage = @import("ResolveMessage.zig").ResolveMessage;
pub const SavedRequest = @import("api/server.zig").SavedRequest;
pub const ServerConfig = @import("api/server.zig").ServerConfig;
pub const ServerWebSocket = @import("api/server.zig").ServerWebSocket;
pub const Shell = @import("../shell/shell.zig");
pub const SocketAddress = @import("api/bun/socket.zig").SocketAddress;
pub const TCPSocket = @import("api/bun/socket.zig").TCPSocket;
pub const TLSSocket = @import("api/bun/socket.zig").TLSSocket;
pub const SocketHandlers = @import("api/bun/socket.zig").Handlers;
pub const UDPSocket = @import("api/bun/udp_socket.zig").UDPSocket;
pub const Valkey = @import("../valkey/js_valkey.zig").JSValkeyClient;
pub const BlockList = @import("./node/net/BlockList.zig");
pub const NativeZstd = @import("./node/zlib/NativeZstd.zig");
// Browser automation API
pub const Browser = @import("api/Browser.zig").Browser;
pub const Page = @import("api/Page.zig").Page;
pub const ElementHandle = @import("api/Page.zig").ElementHandle;
pub const Keyboard = @import("api/Page.zig").Keyboard;
pub const Mouse = @import("api/Page.zig").Mouse;
pub const Touchscreen = @import("api/Page.zig").Touchscreen;
pub const JSHandle = @import("api/Page.zig").JSHandle;
pub const napi = @import("../napi/napi.zig");
pub const node = @import("node.zig");