From 584286cfd9b53eee8f1189a3ad98462c77eb8fb9 Mon Sep 17 00:00:00 2001 From: matt korwel Date: Sun, 8 Jun 2025 02:05:55 -0700 Subject: [PATCH] fix(deps): externalize tree-sitter (#840) Submitting without approval to fix broken deployment on main. But also, we should lock this down. --- esbuild.config.js | 29 +++++++++++++++++++++++++++++ eslint.config.js | 2 +- package-lock.json | 17 ++++++++--------- package.json | 13 ++++++++++--- packages/core/package.json | 7 ------- scripts/esbuild-banner.js | 11 +++++++++++ 6 files changed, 59 insertions(+), 20 deletions(-) create mode 100644 esbuild.config.js create mode 100644 scripts/esbuild-banner.js diff --git a/esbuild.config.js b/esbuild.config.js new file mode 100644 index 00000000..7dae9e37 --- /dev/null +++ b/esbuild.config.js @@ -0,0 +1,29 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import esbuild from 'esbuild'; + +esbuild + .build({ + entryPoints: ['packages/cli/index.ts'], + bundle: true, + outfile: 'bundle/gemini.js', + platform: 'node', + format: 'esm', + banner: { + js: `import { createRequire } from 'module'; const require = createRequire(import.meta.url); globalThis.__filename = require('url').fileURLToPath(import.meta.url); globalThis.__dirname = require('path').dirname(globalThis.__filename);`, + }, + external: [ + 'tree-sitter', + 'tree-sitter-c-sharp', + 'tree-sitter-go', + 'tree-sitter-java', + 'tree-sitter-python', + 'tree-sitter-rust', + 'tree-sitter-typescript', + ], + }) + .catch(() => process.exit(1)); diff --git a/eslint.config.js b/eslint.config.js index 6865ca4c..9bf13cde 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -155,7 +155,7 @@ export default tseslint.config( }, // extra settings for scripts that we run directly with node { - files: ['./scripts/**/*.js'], + files: ['./scripts/**/*.js', 'esbuild.config.js'], languageOptions: { globals: { process: 'readonly', diff --git a/package-lock.json b/package-lock.json index 3dadcb4f..8af3f4dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,13 @@ "packages/*" ], "dependencies": { - "tree-sitter-rust": "^0.21.0" + "tree-sitter": "^0.21.0", + "tree-sitter-c-sharp": "^0.21.0", + "tree-sitter-go": "^0.21.0", + "tree-sitter-java": "^0.21.0", + "tree-sitter-python": "^0.21.0", + "tree-sitter-rust": "^0.21.0", + "tree-sitter-typescript": "^0.21.0" }, "bin": { "gemini": "bundle/gemini.js" @@ -10404,14 +10410,7 @@ "fast-glob": "^3.3.3", "minimatch": "^10.0.0", "shell-quote": "^1.8.2", - "strip-ansi": "^7.1.0", - "tree-sitter": "^0.21.0", - "tree-sitter-c-sharp": "^0.21.0", - "tree-sitter-go": "^0.21.0", - "tree-sitter-java": "^0.21.0", - "tree-sitter-python": "^0.21.0", - "tree-sitter-rust": "^0.21.0", - "tree-sitter-typescript": "^0.21.0" + "strip-ansi": "^7.1.0" }, "devDependencies": { "@types/diff": "^7.0.2", diff --git a/package.json b/package.json index 068dad1e..04239d58 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "auth:docker": "gcloud auth configure-docker us-west1-docker.pkg.dev", "auth": "npm run auth:npm && npm run auth:docker", "prerelease:dev": "npm run prerelease:version --workspaces && npm run prerelease:deps --workspaces", - "bundle": "npm run generate && node_modules/.bin/esbuild packages/cli/index.ts --bundle --outfile=bundle/gemini.js --platform=node --format=esm --banner:js=\"import { createRequire } from 'module'; const require = createRequire(import.meta.url); globalThis.__filename = require('url').fileURLToPath(import.meta.url); globalThis.__dirname = require('path').dirname(globalThis.__filename);\" && bash scripts/copy_bundle_assets.sh", + "bundle": "npm run generate && node esbuild.config.js", "build:cli": "npm run build --workspace packages/cli", "build:core": "npm run build --workspace packages/core", "build:packages": "npm run build:core && npm run build:cli", @@ -42,7 +42,8 @@ "files": [ "bundle/", "README.md", - "LICENSE" + "LICENSE", + "node_modules/tree-sitter-*/build/Release/*.node" ], "devDependencies": { "@types/micromatch": "^4.0.9", @@ -66,6 +67,12 @@ "yargs": "^17.7.2" }, "dependencies": { - "tree-sitter-rust": "^0.21.0" + "tree-sitter": "^0.21.0", + "tree-sitter-c-sharp": "^0.21.0", + "tree-sitter-go": "^0.21.0", + "tree-sitter-java": "^0.21.0", + "tree-sitter-python": "^0.21.0", + "tree-sitter-rust": "^0.21.0", + "tree-sitter-typescript": "^0.21.0" } } diff --git a/packages/core/package.json b/packages/core/package.json index 6be05df0..ae6e6fc7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -29,13 +29,6 @@ "minimatch": "^10.0.0", "shell-quote": "^1.8.2", "strip-ansi": "^7.1.0", - "tree-sitter": "^0.21.0", - "tree-sitter-c-sharp": "^0.21.0", - "tree-sitter-go": "^0.21.0", - "tree-sitter-java": "^0.21.0", - "tree-sitter-python": "^0.21.0", - "tree-sitter-rust": "^0.21.0", - "tree-sitter-typescript": "^0.21.0", "@opentelemetry/api": "^1.9.0", "@opentelemetry/sdk-node": "^0.52.0", "@opentelemetry/exporter-trace-otlp-grpc": "^0.52.0", diff --git a/scripts/esbuild-banner.js b/scripts/esbuild-banner.js new file mode 100644 index 00000000..98b14617 --- /dev/null +++ b/scripts/esbuild-banner.js @@ -0,0 +1,11 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// esbuild-banner.js +import { createRequire } from 'module'; +const require = createRequire(import.meta.url); +globalThis.__filename = require('url').fileURLToPath(import.meta.url); +globalThis.__dirname = require('path').dirname(globalThis.__filename);