mirror of
https://github.com/oven-sh/bun
synced 2026-02-15 05:12:29 +00:00
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>
61 lines
3.2 KiB
Zig
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");
|