buildUtils.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. const { build } = require("esbuild");
  2. const { sassPlugin } = require("esbuild-sass-plugin");
  3. const fs = require("fs");
  4. const browserConfig = {
  5. entryPoints: ["index.ts"],
  6. bundle: true,
  7. format: "esm",
  8. plugins: [sassPlugin()],
  9. };
  10. // Will be used later for treeshaking
  11. // function getFiles(dir, files = []) {
  12. // const fileList = fs.readdirSync(dir);
  13. // for (const file of fileList) {
  14. // const name = `${dir}/${file}`;
  15. // if (
  16. // name.includes("node_modules") ||
  17. // name.includes("config") ||
  18. // name.includes("package.json") ||
  19. // name.includes("main.js") ||
  20. // name.includes("index-node.ts") ||
  21. // name.endsWith(".d.ts") ||
  22. // name.endsWith(".md")
  23. // ) {
  24. // continue;
  25. // }
  26. // if (fs.statSync(name).isDirectory()) {
  27. // getFiles(name, files);
  28. // } else if (
  29. // name.match(/\.(sa|sc|c)ss$/) ||
  30. // name.match(/\.(woff|woff2|eot|ttf|otf)$/) ||
  31. // name.match(/locales\/[^/]+\.json$/)
  32. // ) {
  33. // continue;
  34. // } else {
  35. // files.push(name);
  36. // }
  37. // }
  38. // return files;
  39. // }
  40. const createESMBrowserBuild = async () => {
  41. // Development unminified build with source maps
  42. const browserDev = await build({
  43. ...browserConfig,
  44. outdir: "dist/browser/dev",
  45. sourcemap: true,
  46. metafile: true,
  47. define: {
  48. "import.meta.env": JSON.stringify({ DEV: true }),
  49. },
  50. });
  51. fs.writeFileSync(
  52. "meta-browser-dev.json",
  53. JSON.stringify(browserDev.metafile),
  54. );
  55. // production minified build without sourcemaps
  56. const browserProd = await build({
  57. ...browserConfig,
  58. outdir: "dist/browser/prod",
  59. minify: true,
  60. metafile: true,
  61. define: {
  62. "import.meta.env": JSON.stringify({ PROD: true }),
  63. },
  64. });
  65. fs.writeFileSync(
  66. "meta-browser-prod.json",
  67. JSON.stringify(browserProd.metafile),
  68. );
  69. };
  70. const rawConfig = {
  71. entryPoints: ["index.ts"],
  72. bundle: true,
  73. format: "esm",
  74. packages: "external",
  75. plugins: [sassPlugin()],
  76. };
  77. // const BASE_PATH = `${path.resolve(`${__dirname}/..`)}`;
  78. // const filesinExcalidrawPackage = getFiles(`${BASE_PATH}/packages/utils`);
  79. // const filesToTransform = filesinExcalidrawPackage.filter((file) => {
  80. // return !(
  81. // file.includes("/__tests__/") ||
  82. // file.includes(".test.") ||
  83. // file.includes("/tests/") ||
  84. // file.includes("example")
  85. // );
  86. // });
  87. const createESMRawBuild = async () => {
  88. // Development unminified build with source maps
  89. const rawDev = await build({
  90. ...rawConfig,
  91. outdir: "dist/dev",
  92. sourcemap: true,
  93. metafile: true,
  94. define: {
  95. "import.meta.env": JSON.stringify({ DEV: true }),
  96. },
  97. });
  98. fs.writeFileSync("meta-raw-dev.json", JSON.stringify(rawDev.metafile));
  99. // production minified build without sourcemaps
  100. const rawProd = await build({
  101. ...rawConfig,
  102. outdir: "dist/prod",
  103. minify: true,
  104. metafile: true,
  105. define: {
  106. "import.meta.env": JSON.stringify({ PROD: true }),
  107. },
  108. });
  109. fs.writeFileSync("meta-raw-prod.json", JSON.stringify(rawProd.metafile));
  110. };
  111. createESMRawBuild();
  112. createESMBrowserBuild();