mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
* bring in shell impl * add `$` to global bun scope * Expose shell parse func on debug mode * Expose lex tokens and add tests * refactor parser to have better ast * assigns and export * pipeline kinda working * Decouple Subprocess spawning code from JS stuff * Subprocess works! * Conditional execution * Support JS objects in template expression * More complete redirection * Properly drain stdin/stdout/stderr and fix crash from deallocating JSC memory * Return errors in parser * Support command substitution * wip brace expansion stuff * Rearrange some files * expansion wip * Brace expansion working * wip brace expansion * refactor brace algorithm * wip brace expansion on shell * fix brace expansion * Working nested brace expansion! * brace expansion in shell variable assignment only set the last expanded * stuff * Small little perf things * benchmark and test and stuff * stuff * fix nested braces but its also kinda broken * attempt to fix complicated nested braces * test * Use fast tokenized algorithm for non nested braces, use parsed algorithm for nested braces * fix nested braces one and for all * small stuff * Not sure if that made a difference * revert that * good speed optimization * rip * Environment variables, builtin/native shell cmds * Fix tests * Support `cd`, `pwd`, add boilerplate for glob expansion * Support `which` * Support `rm` * wip * wip * escaping and abstract shell char iterator * strpool unicode * Brace expansion support unicode, disallow invalid surrogates in shell script * shell choose ascii or unicode lexer depending on input * fix bugs write tests * kinda start async stuff * HOLY SHIT big refactor of Subprocess woops forget to commit this ...and this * HOLY MOLY it works * Refactor some stuff, start eval word expansion * interpret all the nodes * stuff * stuff * stuff * kind of works but doesnt * Buffered output works * no need to heap allocate autosizer * Fix bug * Fix some stuff * unprotect * move out dummy shell thing * Bring back assignments * create expansion state so it can be non blocking for expansions that need IO (glob, cmd subst) * glob back in action * Setup builtin non blocking IO commands and implement export big issue is control flow is really fcked up here need to fix that * make Cmd state machine use a loop so control flow is a bit more clear * rename stuff * move that * Implement the echo builtin again * implement cd again but non blocking io * Fix ls and use proper write function to prevent blockign writes * Implement which * holy moly big port std.fs.deleteTree * fix compile errors * Okay that works * rm works thatsnice * damn * split it out * rm async implementation * fix rm bug for nested * Work on files as well * prevent root from being deleted * rm error handling * oops * pwd and fix some script exec bug * Implement `mv` * stub out mv to work accross filesystems * move it around * woops * boilerplate for ls and options * more boilerplate * stuff * that got lost in merge * upgrade shell stuff zig 0.12.0-dev.1828+225fe6ddb * Implement basic ls * smol cleanup * Fix stream, response redirect stdin * No longer need spawn to be abstract * Custom promise * move around some stuff * shell promise returns shell output * make tht work for builtins * refactor IO abstractions to work with JS or mini event loop * woops * scaffolding for refactor * refactor builtins to make event loop refactor easier * Fix parsing edge case on assignments, fix expansion on cmd assignments * change subproc to work with any event loop * Finish refactoring subproc * move global abstraction out * big refactor boys * holy moly: integrate into cli and fix allll the compile errors * okay works in bun run now * actually tick the event loop lol * Fix more stuff * Support comments * Fix some tests * delete that * Properly report errors when failing to spawn command * fix a whole bunch of tests * fix a whole bunch of tests again * . * Fix rm * Fix some exit code bugs, write force rm from deno, fix ls stderr * fix `rm -d` * fix `rm -d` * Fix boolean logic * error on subshells (e.g. `true && (echo hi && echo lol)`) * Move out shell state from interpreter struct * Cmd substitution supports arbitrary script, not just a single cmd * Some escaping/quotation tests * Fix stuff add more tests: - cmd substitution quotations - escape backticks in single quots * ALOT of stuff: - fix proper subshell inheritance of env for cmd subst - fix: was wrong, assignments don't run in subshell in conditionals - fix lexing chained vars `$VAR$VAR` - more tests * Fix subtle bugs * Fix crazy redirect to arraybuffer bug * more crazy echo edgecases * Proper lexer errors instead of just panicking lol * yoops * Proper parsing errors * Errors for bun run shell script * Fix redirecting to file * More test fix bugs yay * Fix redirect on builtins * Open redirection fds with O_TRUNC * Fix lexing invalid variables and add ability to change cwd from JS api * yoops * Fix `.cwd()` * `$PWD` and fix redirection bugs * `$PWD` and fix redirection bugs * Get rid of some `FIXME`s * throw errors in some places instead of panicking * Print some errors to stderr * Get rid of some more panics again * Handle errors on glob * pwd test * `.env()` * copy-on-write abstraction * Reference counted env strings + fix some tests * deinit cwd * Put commands into a pipeline properly * deinit Expansion and Assigns properly * comments * Comments * Make it compile * Update types * [autofix.ci] apply automated fixes * Only one WaiterThread * Fix lifetimes and clean up interface * Update shell.ts * Add lazy test * Remove some dead code * Update shell.zig * Fix memory leak * Fix crash with empty braces * [autofix.ci] apply automated fixes * Linux build + bun.sh * Update subproc.zig * Update interpreter.zig * Update interpreter.zig * Fix some stuff that broke * Fix Windows compile errors * Fix some fd leaks * Fix ls * Fix a bunch of stuff * Fix quiet * Update leak tests fix rm bug * More reproducible tests * [autofix.ci] apply automated fixes * more mem leak tests * [autofix.ci] apply automated fixes * Fix merge conflict * Fix test not actually using temp directory * Update bunshell.test.ts * Shell instance * Capture async context * Increase test timeouts * [autofix.ci] apply automated fixes * Escape * [autofix.ci] apply automated fixes * Fix crash * Add more methods * [autofix.ci] apply automated fixes * Fix leak * Treat file(path) blobs as a file path string * Create bunshell-file.test.ts * Support Blob input * Fix leak + organize imports * doc * Update shell.md * Update shell.md * Update shell.md * Update shell.md * Update CMakeLists.txt * Fix segfault by cloning error path so it's not freed by arena * deinit ShellErr * Delete dead code * fix really stupid segfault * don't deinit shell ls task in event loop * Fix ls bug * Fix tests * make truly lazy * allow more things in the shell substitution and escape whitespace * Fix newline and exit when finishing shell in `bun run` --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
111 lines
5.7 KiB
Zig
111 lines
5.7 KiB
Zig
// Top-level so it can access all files
|
|
pub const is_bindgen = @import("std").meta.globalOption("bindgen", bool) orelse false;
|
|
pub const Debugger = @import("./bun.js/bindings/Debugger.zig").Debugger;
|
|
pub const napi = @import("./napi/napi.zig");
|
|
pub usingnamespace @import("./bun.js/bindings/exports.zig");
|
|
pub usingnamespace @import("./bun.js/bindings/bindings.zig");
|
|
pub usingnamespace @import("./bun.js/event_loop.zig");
|
|
pub usingnamespace @import("./bun.js/base.zig");
|
|
pub const RareData = @import("./bun.js/rare_data.zig");
|
|
pub const Shimmer = @import("./bun.js/bindings/shimmer.zig").Shimmer;
|
|
pub usingnamespace @import("./bun.js/javascript.zig");
|
|
pub usingnamespace @import("./bun.js/module_loader.zig");
|
|
pub const C = @import("./bun.js/javascript_core_c_api.zig");
|
|
pub const WebCore = @import("./bun.js/webcore.zig");
|
|
pub const BuildMessage = @import("./bun.js/BuildMessage.zig").BuildMessage;
|
|
pub const ResolveMessage = @import("./bun.js/ResolveMessage.zig").ResolveMessage;
|
|
pub const Cloudflare = struct {
|
|
pub const HTMLRewriter = @import("./bun.js/api/html_rewriter.zig").HTMLRewriter;
|
|
pub const ContentOptions = @import("./bun.js/api/html_rewriter.zig").ContentOptions;
|
|
pub const Element = @import("./bun.js/api/html_rewriter.zig").Element;
|
|
pub const Comment = @import("./bun.js/api/html_rewriter.zig").Comment;
|
|
pub const TextChunk = @import("./bun.js/api/html_rewriter.zig").TextChunk;
|
|
pub const DocType = @import("./bun.js/api/html_rewriter.zig").DocType;
|
|
pub const DocEnd = @import("./bun.js/api/html_rewriter.zig").DocEnd;
|
|
pub const EndTag = @import("./bun.js/api/html_rewriter.zig").EndTag;
|
|
pub const AttributeIterator = @import("./bun.js/api/html_rewriter.zig").AttributeIterator;
|
|
};
|
|
pub const Jest = @import("./bun.js/test/jest.zig");
|
|
pub const Expect = @import("./bun.js/test/expect.zig");
|
|
pub const Snapshot = @import("./bun.js/test/snapshot.zig");
|
|
pub const API = struct {
|
|
pub const Glob = @import("./bun.js/api/glob.zig");
|
|
pub const Shell = @import("./shell/shell.zig");
|
|
pub const JSBundler = @import("./bun.js/api/JSBundler.zig").JSBundler;
|
|
pub const BuildArtifact = @import("./bun.js/api/JSBundler.zig").BuildArtifact;
|
|
pub const JSTranspiler = @import("./bun.js/api/JSTranspiler.zig");
|
|
pub const HTTPServer = @import("./bun.js/api/server.zig").HTTPServer;
|
|
pub const ServerConfig = @import("./bun.js/api/server.zig").ServerConfig;
|
|
pub const ServerWebSocket = @import("./bun.js/api/server.zig").ServerWebSocket;
|
|
pub const HTTPSServer = @import("./bun.js/api/server.zig").HTTPSServer;
|
|
pub const DebugHTTPServer = @import("./bun.js/api/server.zig").DebugHTTPServer;
|
|
pub const DebugHTTPSServer = @import("./bun.js/api/server.zig").DebugHTTPSServer;
|
|
pub const AnyRequestContext = @import("./bun.js/api/server.zig").AnyRequestContext;
|
|
pub const Bun = @import("./bun.js/api/bun.zig");
|
|
pub const FileSystemRouter = @import("./bun.js/api/filesystem_router.zig").FileSystemRouter;
|
|
pub const MatchedRoute = @import("./bun.js/api/filesystem_router.zig").MatchedRoute;
|
|
pub const TCPSocket = @import("./bun.js/api/bun/socket.zig").TCPSocket;
|
|
pub const TLSSocket = @import("./bun.js/api/bun/socket.zig").TLSSocket;
|
|
pub const Listener = @import("./bun.js/api/bun/socket.zig").Listener;
|
|
pub const H2FrameParser = @import("./bun.js/api/bun/h2_frame_parser.zig").H2FrameParser;
|
|
};
|
|
pub const DNS = @import("./bun.js/api/bun/dns_resolver.zig");
|
|
pub const FFI = @import("./bun.js/api/ffi.zig").FFI;
|
|
pub const Node = struct {
|
|
pub usingnamespace @import("./bun.js/node/types.zig");
|
|
pub usingnamespace @import("./bun.js/node/node_fs.zig");
|
|
pub usingnamespace @import("./bun.js/node/node_fs_watcher.zig");
|
|
pub usingnamespace @import("./bun.js/node/node_fs_stat_watcher.zig");
|
|
pub usingnamespace @import("./bun.js/node/node_fs_binding.zig");
|
|
pub usingnamespace @import("./bun.js/node/node_os.zig");
|
|
pub const fs = @import("./bun.js/node/node_fs_constant.zig");
|
|
pub const Util = struct {
|
|
pub const parseArgs = @import("./bun.js/node/util/parse_args.zig").parseArgs;
|
|
};
|
|
};
|
|
|
|
comptime {
|
|
if (!is_bindgen) {
|
|
@export(Node.Util.parseArgs, .{ .name = "Bun__NodeUtil__jsParseArgs" });
|
|
}
|
|
}
|
|
|
|
pub const Maybe = Node.Maybe;
|
|
pub const jsNumber = @This().JSValue.jsNumber;
|
|
pub const jsBoolean = @This().JSValue.jsBoolean;
|
|
const std = @import("std");
|
|
|
|
const Output = @import("./output.zig");
|
|
const __jsc_log = Output.scoped(.JSC, true);
|
|
pub inline fn markBinding(src: std.builtin.SourceLocation) void {
|
|
if (comptime is_bindgen) unreachable;
|
|
__jsc_log("{s} ({s}:{d})", .{ src.fn_name, src.file, src.line });
|
|
}
|
|
pub const Subprocess = @import("./bun.js/api/bun.zig").Subprocess;
|
|
pub const ResourceUsage = @import("./bun.js/api/bun.zig").ResourceUsage;
|
|
|
|
/// Generated code! To regenerate, run:
|
|
///
|
|
/// make codegen
|
|
///
|
|
/// This file is generated by:
|
|
/// 1. `bun src/bun.js/scripts/generate-classes.ts`
|
|
/// 2. Scan for **/*.classes.ts files in src/bun.js/src
|
|
/// 3. Generate a JS wrapper for each class in:
|
|
/// - Zig: generated_classes.zig
|
|
/// - C++: ZigGeneratedClasses.h, ZigGeneratedClasses.cpp
|
|
/// 4. For the Zig code to successfully compile:
|
|
/// - Add it to generated_classes_list.zig
|
|
/// - pub usingnamespace JSC.Codegen.JSMyClassName;
|
|
/// 5. make clean-bindings && make bindings -j10
|
|
///
|
|
pub const Codegen = struct {
|
|
pub const GeneratedClasses = @import("ZigGeneratedClasses");
|
|
pub usingnamespace GeneratedClasses;
|
|
pub usingnamespace @import("./bun.js/bindings/codegen.zig");
|
|
};
|
|
|
|
pub const GeneratedClassesList = @import("./bun.js/bindings/generated_classes_list.zig").Classes;
|
|
|
|
pub const RuntimeTranspilerCache = @import("./bun.js/RuntimeTranspilerCache.zig").RuntimeTranspilerCache;
|