buildUtils.js 3.2 KB

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