mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-05-21 03:43:02 +00:00
81 lines
2.4 KiB
TypeScript
81 lines
2.4 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2026 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import { describe, expect, it, vi } from 'vitest';
|
|
vi.unmock('fs');
|
|
vi.unmock('node:fs');
|
|
import * as esbuild from 'esbuild';
|
|
import path from 'node:path';
|
|
import { mkdtempSync, writeFileSync, rmSync } from 'node:fs';
|
|
import { tmpdir } from 'node:os';
|
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
const projectRoot = path.resolve(__dirname, '../../');
|
|
|
|
describe('proxy-agent bundle shape', () => {
|
|
it('preserves named constructors after ESM splitting', async () => {
|
|
const tmpDir = mkdtempSync(path.join(tmpdir(), 'gemini-proxy-test-'));
|
|
const entryFile = path.join(tmpDir, 'entry.ts');
|
|
|
|
// Create a minimal entry file that dynamically imports the proxy agents
|
|
writeFileSync(
|
|
entryFile,
|
|
`
|
|
export async function getAgents() {
|
|
const httpsMod = await import('https-proxy-agent');
|
|
const httpMod = await import('http-proxy-agent');
|
|
return {
|
|
https: httpsMod,
|
|
http: httpMod,
|
|
};
|
|
}
|
|
`,
|
|
);
|
|
|
|
// Bundle with the exact same splitting config and aliases as cliConfig
|
|
await esbuild.build({
|
|
entryPoints: { gemini: entryFile },
|
|
outdir: path.join(tmpDir, 'bundle'),
|
|
bundle: true,
|
|
splitting: true,
|
|
format: 'esm',
|
|
platform: 'node',
|
|
outExtension: { '.js': '.mjs' },
|
|
alias: {
|
|
'https-proxy-agent': path.resolve(
|
|
projectRoot,
|
|
'packages/cli/src/patches/https-proxy-agent.ts',
|
|
),
|
|
'http-proxy-agent': path.resolve(
|
|
projectRoot,
|
|
'packages/cli/src/patches/http-proxy-agent.ts',
|
|
),
|
|
},
|
|
});
|
|
|
|
// Import the bundled chunk
|
|
const bundledEntryUrl = pathToFileURL(
|
|
path.join(tmpDir, 'bundle/gemini.mjs'),
|
|
).href;
|
|
const { getAgents } = await import(bundledEntryUrl);
|
|
|
|
const { https, http } = await getAgents();
|
|
|
|
// Verify named exports exist
|
|
expect(typeof https.HttpsProxyAgent).toBe('function');
|
|
expect(typeof http.HttpProxyAgent).toBe('function');
|
|
|
|
// Verify they are constructable
|
|
expect(() => new https.HttpsProxyAgent('http://127.0.0.1:9')).not.toThrow();
|
|
expect(() => new http.HttpProxyAgent('http://127.0.0.1:9')).not.toThrow();
|
|
|
|
// Cleanup
|
|
rmSync(tmpDir, { recursive: true, force: true });
|
|
});
|
|
});
|