2
0

buildUtils.js 3.4 KB

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