From 407796aab613b76403c9d3d15f69c47e2194098a Mon Sep 17 00:00:00 2001 From: KVNLS Date: Fri, 13 Oct 2023 20:23:54 +0200 Subject: [PATCH] fix: add custom esbuild plugin to extract json --- .../tools/config/renderer.esbuild.js | 51 ++++++++++++++----- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/apps/ledger-live-desktop/tools/config/renderer.esbuild.js b/apps/ledger-live-desktop/tools/config/renderer.esbuild.js index 47a943694d87..6c1d355ae5f0 100644 --- a/apps/ledger-live-desktop/tools/config/renderer.esbuild.js +++ b/apps/ledger-live-desktop/tools/config/renderer.esbuild.js @@ -1,4 +1,6 @@ const path = require("path"); +const fs = require("fs"); +const crypto = require("crypto"); const { AliasPlugin, HtmlPlugin, @@ -9,6 +11,15 @@ const { const { DOTENV_FILE } = require("../utils"); const common = require("./common.esbuild"); +const ensureDirectoryExistence = filePath => { + const dirname = path.dirname(filePath); + if (fs.existsSync(dirname)) { + return true; + } + ensureDirectoryExistence(dirname); + fs.mkdirSync(dirname); +}; + module.exports = { ...common, entryPoints: ["src/renderer/index.ts"], @@ -18,6 +29,7 @@ module.exports = { target: ["chrome114"], format: "iife", mainFields: ["browser", "module", "main"], + assetNames: "assets/[name]-[hash]", external: [...nodeExternals, ...electronRendererExternals], resolveExtensions: process.env.V3 ? [".v3.tsx", ".v3.ts", ".tsx", ".ts", ".js", ".jsx", ".json"] @@ -44,18 +56,31 @@ module.exports = { ], }), DotEnvPlugin(DOTENV_FILE), - // { - // name: "Side Effects", - // setup(build) { - // build.onResolve({ filter: /\.woff2$/ }, async args => { - // if (args.importer.endsWith("libs/ui/packages/react/lib/assets/fonts.js")) { - // console.log(args.path); - // return { - // sideEffects: true, - // }; - // } - // }); - // }, - // }, + { + name: "assets-plugin", + setup(build) { + build.onResolve({ filter: /\.(json)$/ }, args => { + if (args.resolveDir.includes("ledger-live-desktop/src")) { + const sourcePath = path.resolve(args.resolveDir, args.path); + const fileContent = fs.readFileSync(sourcePath); + + const hash = crypto.createHash("sha1").update(fileContent).digest("hex"); + + const fileName = `${hash}-${path.basename(args.path)}`; + const targetPath = path.resolve(".webpack/assets", fileName); + + ensureDirectoryExistence(targetPath); + fs.copyFileSync(sourcePath, targetPath); + + return { + path: targetPath, + external: true, + }; + } + + return undefined; + }); + }, + }, ], };