From 34f8ad90aba32e7bb83e033185d96f7c80e79667 Mon Sep 17 00:00:00 2001 From: Claude Bot Date: Mon, 8 Sep 2025 05:39:26 +0000 Subject: [PATCH] Remove unused files from repository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Delete unused libtcc1.a.macos-aarch64 archive (never referenced, ARM64 doesn't need x64 compiler runtime) - Remove misctools/publish-examples.js (references non-existent examples/ directory) - Remove misctools/headers-cleaner.js (no references in codebase or build scripts) The libtcc1.a.macos-aarch64 file was never used because: - FFI code only compiles libtcc1.c on x64 platforms (Environment.isX64 check) - ARM64 has native 64-bit operations and doesn't need these compiler runtime functions - No equivalent files exist for other platforms The misctools scripts were last modified in 2022 and are no longer used. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- misctools/headers-cleaner.js | 90 ---------------- misctools/publish-examples.js | 137 ------------------------- src/bun.js/api/libtcc1.a.macos-aarch64 | Bin 29988 -> 0 bytes 3 files changed, 227 deletions(-) delete mode 100644 misctools/headers-cleaner.js delete mode 100644 misctools/publish-examples.js delete mode 100644 src/bun.js/api/libtcc1.a.macos-aarch64 diff --git a/misctools/headers-cleaner.js b/misctools/headers-cleaner.js deleted file mode 100644 index 9c74e1ba38..0000000000 --- a/misctools/headers-cleaner.js +++ /dev/null @@ -1,90 +0,0 @@ -// this file is intended to be runnable both from node and bun -var { readFileSync, writeFileSync } = require("fs"); -var { join } = require("path"); - -const destination = join(__dirname, "../src/bun.js/bindings/headers.zig"); -const replacements = join(__dirname, "../src/bun.js/bindings/headers-replacements.zig"); - -console.log("Writing to", destination); -var output = "// GENERATED CODE - DO NOT MODIFY BY HAND\n\n"; -var input = readFileSync(destination, "utf8"); - -const first_extern = input.indexOf("extern fn"); -const first_extern_line = input.indexOf("\n", first_extern - 128); -const last_extern_fn = input.lastIndexOf("extern"); -const last_extern_fn_line = input.indexOf("\n", last_extern_fn); -const keep = (input.substring(0, first_extern_line) + input.substring(last_extern_fn_line)) - .split("\n") - .filter(a => /const (JSC|WTF|Web)_/gi.test(a) && !a.includes("JSValue") && !a.includes("CatchScope")) - .join("\n") - .trim(); - -input = keep + input.slice(first_extern_line, last_extern_fn_line); -input = input.replaceAll("*WebCore__", "*bindings."); -input = input.replaceAll("*JSC__", "*bindings."); -input = input.replaceAll("[*c] JSC__", "[*c]bindings."); -input = input.replaceAll("[*c]JSC__", "[*c]bindings."); -input = input.replaceAll("[*c]bindings.JSGlobalObject", "*bindings.JSGlobalObject"); -input = input.replaceAll("[*c]bindings.JSPromise", "?*bindings.JSPromise"); -input = input.replaceAll("[*c]const bindings.JSPromise", "?*const bindings.JSPromise"); - -input = input.replaceAll("[*c] const JSC__", "[*c]const bindings."); -input = input.replaceAll("[*c]Inspector__ScriptArguments", "[*c]bindings.ScriptArguments"); - -input = input - .replaceAll("VirtualMachine", "bindings.VirtualMachine") - .replaceAll("bindings.bindings.VirtualMachine", "bindings.VirtualMachine"); - -input = input.replaceAll("?*JSC__JSGlobalObject", "*bindings.JSGlobalObject"); -input = input.replaceAll("?*bindings.CallFrame", "*bindings.CallFrame"); -input = input.replaceAll("[*c]bindings.VM", "*bindings.VM"); - -const hardcode = { - "[*c][*c]JSC__Exception": "*?*JSC__Exception ", - "[*c]?*anyopaque": "[*c]*anyopaque", - "[*c]JSC__JSGlobalObject": "?*JSC__JSGlobalObject", -}; - -for (let key in hardcode) { - const value = hardcode[key]; - input = input.replaceAll(key, value); -} - -const remove = [ - "pub const __darwin", - "pub const _", - "pub const __builtin", - "pub const int", - "pub const INT", - "pub const uint", - "pub const UINT", - "pub const WCHAR", - "pub const wchar", - "pub const intmax", - "pub const INTMAX", - "pub const uintmax", - "pub const UINTMAX", - "pub const max_align_t", - "pub const ZigErrorCode", - "pub const JSClassRef", - "pub const __", -]; -var lines = input.split("\n"); -for (let prefix of remove) { - for (let i = 0; i < lines.length; i++) { - const line = lines[i]; - if (line.startsWith(prefix)) { - lines[i] = ""; - } - } -} -for (let i = 0; i < lines.length; i++) { - const line = lines[i]; - if (line.includes("struct_")) { - lines[i] = ""; - continue; - } -} -input = lines.filter(a => a.length > 0).join("\n"); - -writeFileSync(destination, output + "\n" + readFileSync(replacements, "utf8").trim() + "\n" + input.trim() + "\n"); diff --git a/misctools/publish-examples.js b/misctools/publish-examples.js deleted file mode 100644 index dcbb0d3eb1..0000000000 --- a/misctools/publish-examples.js +++ /dev/null @@ -1,137 +0,0 @@ -const fs = require("fs"); -const path = require("path"); -const { execSync } = require("child_process"); - -const exec = (cmd, opts = {}) => { - console.log("$", cmd); - return execSync(cmd, { - ...opts, - env: { CI: "true", ...process.env, ...(opts.env || {}) }, - }); -}; - -const DRY_RUN = !!process.env.DRY_RUN; - -var count = 0; - -const examplesFolderEntries = fs.readdirSync(path.join(process.cwd(), "examples"), { withFileTypes: true }); - -const packageNames = []; - -for (let folder of examplesFolderEntries) { - if (!folder.isDirectory()) continue; - const absolute = path.resolve(process.cwd(), "examples", folder.name); - - let packageJSONText; - - try { - packageJSONText = fs.readFileSync(path.join(absolute, "package.json"), "utf8"); - } catch { - continue; - } - - let packageJSON = JSON.parse(packageJSONText); - - if (!packageJSON.name) continue; - if (!packageJSON.name.startsWith("@bun-examples")) continue; - - var version = "0.0.1"; - try { - const _versions = exec(`npm view ${packageJSON.name} versions --json`).toString().trim(); - - if (_versions.length > 0) { - const versionsArray = JSON.parse(_versions); - version = versionsArray[versionsArray.length - 1]; - } - } catch (exception) { - console.error(exception); - } - var retryCount = 5; - - // Never commit lockfiles - try { - fs.rmSync(path.join(absolute, "package-lock.json")); - } catch (exception) {} - - try { - fs.rmSync(path.join(absolute, "yarn.lock")); - } catch (exception) {} - - try { - fs.rmSync(path.join(absolute, "pnpm-lock.yaml")); - } catch (exception) {} - - try { - fs.copyFileSync(path.join(absolute, ".gitignore"), path.join(absolute, "gitignore")); - } catch (exception) {} - - restart: while (retryCount-- > 0) { - packageJSON.version = require("semver").inc(packageJSON.version, "patch"); - if ("private" in packageJSON) delete packageJSON.private; - if ("license" in packageJSON) delete packageJSON.license; - if ("main" in packageJSON && !("module" in packageJSON)) { - packageJSON.module = packageJSON.main; - delete packageJSON.main; - } - - fs.writeFileSync(path.join(absolute, "package.json"), JSON.stringify(packageJSON, null, 2)); - try { - exec(`npm version patch --force --no-commit-hooks --no-git-tag-version`, { - cwd: absolute, - }); - - packageJSON = JSON.parse(fs.readFileSync(path.join(absolute, "package.json"), "utf8")); - version = packageJSON.version; - } catch (e) { - if (e.code !== "E404") { - throw e; - } - } - - try { - exec(`npm publish ${DRY_RUN ? "--dry-run" : ""} --access public --registry https://registry.npmjs.org/`, { - cwd: absolute, - }); - packageNames.push([ - packageJSON.name, - { - version: packageJSON.version, - description: packageJSON.description || "", - }, - ]); - count++; - break; - } catch (exception) { - continue restart; - } - } -} - -if (packageNames.length > 0) { - const packageJSON = { - name: "bun-examples-all", - private: false, - version: `0.0.${Date.now()}`, - description: "All bun-examples", - examples: Object.fromEntries(packageNames), - }; - const dir = path.join(process.cwd(), "examples/bun-examples-all"); - try { - fs.rmSync(dir, { - recursive: true, - force: true, - }); - } catch (exception) {} - - try { - fs.mkdirSync(dir, { - recursive: true, - }); - } catch (exception) {} - fs.writeFileSync(path.join(dir, "package.json"), JSON.stringify(packageJSON, null, 2)); - exec(`npm publish ${DRY_RUN ? "--dry-run" : ""} --access public --registry https://registry.npmjs.org/`, { - cwd: dir, - }); -} - -console.log(`Published ${count} packages`); diff --git a/src/bun.js/api/libtcc1.a.macos-aarch64 b/src/bun.js/api/libtcc1.a.macos-aarch64 deleted file mode 100644 index 60696b61176ee2c2bd97bbc379b073c6e24b0061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29988 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 a<80>RHcP)9*B$8w`Gd5~U!vc5{r>|V@eRuW