esbuild.mjs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import * as esbuild from "esbuild"
  2. import * as fs from "fs"
  3. import * as path from "path"
  4. import { fileURLToPath } from "url"
  5. import { getGitSha, copyPaths, copyLocales, copyWasms, generatePackageJson } from "@roo-code/build"
  6. const __filename = fileURLToPath(import.meta.url)
  7. const __dirname = path.dirname(__filename)
  8. async function main() {
  9. const name = "extension-nightly"
  10. const production = process.argv.includes("--production")
  11. const minify = production
  12. const sourcemap = !production
  13. const overrideJson = JSON.parse(fs.readFileSync(path.join(__dirname, "package.nightly.json"), "utf8"))
  14. console.log(`[${name}] name: ${overrideJson.name}`)
  15. console.log(`[${name}] version: ${overrideJson.version}`)
  16. const gitSha = getGitSha()
  17. console.log(`[${name}] gitSha: ${gitSha}`)
  18. /**
  19. * @type {import('esbuild').BuildOptions}
  20. */
  21. const buildOptions = {
  22. bundle: true,
  23. minify,
  24. sourcemap,
  25. logLevel: "silent",
  26. format: "cjs",
  27. sourcesContent: false,
  28. platform: "node",
  29. define: {
  30. "process.env.PKG_NAME": '"roo-code-nightly"',
  31. "process.env.PKG_VERSION": `"${overrideJson.version}"`,
  32. "process.env.PKG_OUTPUT_CHANNEL": '"Roo-Code-Nightly"',
  33. ...(gitSha ? { "process.env.PKG_SHA": `"${gitSha}"` } : {}),
  34. },
  35. }
  36. const srcDir = path.join(__dirname, "..", "..", "src")
  37. const buildDir = path.join(__dirname, "build")
  38. const distDir = path.join(buildDir, "dist")
  39. console.log(`[${name}] srcDir: ${srcDir}`)
  40. console.log(`[${name}] buildDir: ${buildDir}`)
  41. console.log(`[${name}] distDir: ${distDir}`)
  42. if (fs.existsSync(distDir)) {
  43. console.log(`[${name}] Cleaning dist directory: ${distDir}`)
  44. fs.rmSync(distDir, { recursive: true, force: true })
  45. }
  46. /**
  47. * @type {import('esbuild').Plugin[]}
  48. */
  49. const plugins = [
  50. {
  51. name: "copyPaths",
  52. setup(build) {
  53. build.onEnd(() => {
  54. copyPaths(
  55. [
  56. ["../README.md", "README.md"],
  57. ["../CHANGELOG.md", "CHANGELOG.md"],
  58. ["../LICENSE", "LICENSE"],
  59. ["../.env", ".env", { optional: true }],
  60. [".vscodeignore", ".vscodeignore"],
  61. ["assets", "assets"],
  62. ["integrations", "integrations"],
  63. ["node_modules/vscode-material-icons/generated", "assets/vscode-material-icons"],
  64. ["../webview-ui/audio", "webview-ui/audio"],
  65. ],
  66. srcDir,
  67. buildDir,
  68. )
  69. })
  70. },
  71. },
  72. {
  73. name: "generatePackageJson",
  74. setup(build) {
  75. build.onEnd(() => {
  76. const packageJson = JSON.parse(fs.readFileSync(path.join(srcDir, "package.json"), "utf8"))
  77. const generatedPackageJson = generatePackageJson({
  78. packageJson,
  79. overrideJson,
  80. substitution: ["roo-cline", "roo-code-nightly"],
  81. })
  82. fs.writeFileSync(path.join(buildDir, "package.json"), JSON.stringify(generatedPackageJson, null, 2))
  83. console.log(`[generatePackageJson] Generated package.json`)
  84. let count = 0
  85. fs.readdirSync(path.join(srcDir)).forEach((file) => {
  86. if (file.startsWith("package.nls")) {
  87. fs.copyFileSync(path.join(srcDir, file), path.join(buildDir, file))
  88. count++
  89. }
  90. })
  91. console.log(`[generatePackageJson] Copied ${count} package.nls*.json files to ${buildDir}`)
  92. const nlsPkg = JSON.parse(fs.readFileSync(path.join(srcDir, "package.nls.json"), "utf8"))
  93. const nlsNightlyPkg = JSON.parse(
  94. fs.readFileSync(path.join(__dirname, "package.nls.nightly.json"), "utf8"),
  95. )
  96. fs.writeFileSync(
  97. path.join(buildDir, "package.nls.json"),
  98. JSON.stringify({ ...nlsPkg, ...nlsNightlyPkg }, null, 2),
  99. )
  100. console.log(`[generatePackageJson] Generated package.nls.json`)
  101. })
  102. },
  103. },
  104. {
  105. name: "copyWasms",
  106. setup(build) {
  107. build.onEnd(() => copyWasms(srcDir, distDir))
  108. },
  109. },
  110. {
  111. name: "copyLocales",
  112. setup(build) {
  113. build.onEnd(() => copyLocales(srcDir, distDir))
  114. },
  115. },
  116. ]
  117. /**
  118. * @type {import('esbuild').BuildOptions}
  119. */
  120. const extensionBuildOptions = {
  121. ...buildOptions,
  122. plugins,
  123. entryPoints: [path.join(srcDir, "extension.ts")],
  124. outfile: path.join(distDir, "extension.js"),
  125. external: ["vscode"],
  126. }
  127. /**
  128. * @type {import('esbuild').BuildOptions}
  129. */
  130. const workerBuildOptions = {
  131. ...buildOptions,
  132. entryPoints: [path.join(srcDir, "workers", "countTokens.ts")],
  133. outdir: path.join(distDir, "workers"),
  134. }
  135. const [extensionBuildContext, workerBuildContext] = await Promise.all([
  136. esbuild.context(extensionBuildOptions),
  137. esbuild.context(workerBuildOptions),
  138. ])
  139. await Promise.all([
  140. extensionBuildContext.rebuild(),
  141. extensionBuildContext.dispose(),
  142. workerBuildContext.rebuild(),
  143. workerBuildContext.dispose(),
  144. ])
  145. }
  146. main().catch((e) => {
  147. console.error(e)
  148. process.exit(1)
  149. })