| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- import * as esbuild from "esbuild"
- import * as fs from "fs"
- import * as path from "path"
- import { fileURLToPath } from "url"
- import { createRequire } from "module"
- import process from "node:process"
- import * as console from "node:console"
- import { copyPaths, copyWasms, copyLocales, setupLocaleWatcher } from "@roo-code/build"
- const __filename = fileURLToPath(import.meta.url)
- const __dirname = path.dirname(__filename)
- async function main() {
- const name = "extension"
- const production = process.argv.includes("--production")
- const watch = process.argv.includes("--watch")
- const minify = production
- const sourcemap = true // Always generate source maps for error handling.
- /**
- * @type {import('esbuild').BuildOptions}
- */
- const buildOptions = {
- bundle: true,
- minify,
- sourcemap,
- logLevel: "silent",
- format: "cjs",
- sourcesContent: false,
- platform: "node",
- // kilocode_change start: for ps-list
- banner: {
- js: "const __importMetaUrl = typeof __filename !== 'undefined' ? require('url').pathToFileURL(__filename).href : undefined;",
- },
- // kilocode_change end
- }
- const srcDir = __dirname
- const buildDir = __dirname
- const distDir = path.join(buildDir, "dist")
- if (fs.existsSync(distDir)) {
- console.log(`[${name}] Cleaning dist directory: ${distDir}`)
- fs.rmSync(distDir, { recursive: true, force: true })
- }
- /**
- * @type {import('esbuild').Plugin[]}
- */
- const plugins = [
- // kilocode_change start
- {
- name: "import-meta-url-plugin",
- setup(build) {
- build.onLoad({ filter: /\.js$/ }, async (args) => {
- const fs = await import("fs")
- let contents = await fs.promises.readFile(args.path, "utf8")
- // Replace import.meta.url with our polyfill
- if (contents.includes("import.meta.url")) {
- contents = contents.replace(/import\.meta\.url/g, "__importMetaUrl")
- }
- return { contents, loader: "js" }
- })
- },
- },
- // kilocode_change end
- {
- name: "copyFiles",
- setup(build) {
- build.onEnd(() => {
- copyPaths(
- [
- ["../README.md", "README.md"],
- ["../CHANGELOG.md", "CHANGELOG.md"],
- ["../LICENSE", "LICENSE"],
- ["../.env", ".env", { optional: true }],
- ["node_modules/vscode-material-icons/generated", "assets/vscode-material-icons"],
- ["../webview-ui/audio", "webview-ui/audio"],
- ],
- srcDir,
- buildDir,
- )
- // Copy walkthrough files to dist directory
- copyPaths([["walkthrough", "walkthrough"]], srcDir, distDir)
- // Copy tree-sitter files to dist directory
- copyPaths([["services/continuedev/tree-sitter", "tree-sitter"]], srcDir, distDir)
- // Copy JSDOM xhr-sync-worker.js to fix runtime resolution
- const jsdomWorkerDest = path.join(distDir, "xhr-sync-worker.js")
- try {
- const require = createRequire(import.meta.url)
- const jsdomModulePath = require.resolve("jsdom/package.json")
- const jsdomDir = path.dirname(jsdomModulePath)
- const jsdomWorkerSource = path.join(jsdomDir, "lib/jsdom/living/xhr/xhr-sync-worker.js")
- if (fs.existsSync(jsdomWorkerSource)) {
- fs.copyFileSync(jsdomWorkerSource, jsdomWorkerDest)
- console.log(`[${name}] Copied JSDOM xhr-sync-worker.js to dist from: ${jsdomWorkerSource}`)
- }
- } catch (error) {
- console.error(`[${name}] Failed to copy JSDOM xhr-sync-worker.js:`, error.message)
- }
- })
- },
- },
- {
- name: "copyWasms",
- setup(build) {
- build.onEnd(() => copyWasms(srcDir, distDir))
- },
- },
- {
- name: "copyLocales",
- setup(build) {
- build.onEnd(() => copyLocales(srcDir, distDir))
- },
- },
- {
- name: "esbuild-problem-matcher",
- setup(build) {
- build.onStart(() => console.log("[esbuild-problem-matcher#onStart]"))
- build.onEnd((result) => {
- result.errors.forEach(({ text, location }) => {
- console.error(`✘ [ERROR] ${text}`)
- if (location && location.file) {
- console.error(` ${location.file}:${location.line}:${location.column}:`)
- }
- })
- console.log("[esbuild-problem-matcher#onEnd]")
- })
- },
- },
- ]
- /**
- * @type {import('esbuild').BuildOptions}
- */
- const extensionConfig = {
- ...buildOptions,
- plugins,
- entryPoints: ["extension.ts"],
- outfile: "dist/extension.js",
- external: ["vscode", "esbuild", "@lancedb/lancedb"],
- }
- /**
- * @type {import('esbuild').BuildOptions}
- */
- const workerConfig = {
- ...buildOptions,
- entryPoints: ["workers/countTokens.ts"],
- outdir: "dist/workers",
- }
- const [extensionCtx, workerCtx] = await Promise.all([
- esbuild.context(extensionConfig),
- esbuild.context(workerConfig),
- ])
- if (watch) {
- await Promise.all([extensionCtx.watch(), workerCtx.watch()])
- copyLocales(srcDir, distDir)
- setupLocaleWatcher(srcDir, distDir)
- } else {
- await Promise.all([extensionCtx.rebuild(), workerCtx.rebuild()])
- await Promise.all([extensionCtx.dispose(), workerCtx.dispose()])
- }
- }
- main().catch((e) => {
- console.error(e)
- process.exit(1)
- })
|