buildUtils.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. const fs = require("fs");
  2. const { build } = require("esbuild");
  3. const { sassPlugin } = require("esbuild-sass-plugin");
  4. const { woff2ServerPlugin } = require("./woff2/woff2-esbuild-plugins");
  5. const browserConfig = {
  6. entryPoints: ["index.ts"],
  7. bundle: true,
  8. format: "esm",
  9. plugins: [sassPlugin()],
  10. assetNames: "assets/[name]",
  11. loader: {
  12. ".woff2": "file",
  13. },
  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. };
  80. // const BASE_PATH = `${path.resolve(`${__dirname}/..`)}`;
  81. // const filesinExcalidrawPackage = getFiles(`${BASE_PATH}/packages/utils`);
  82. // const filesToTransform = filesinExcalidrawPackage.filter((file) => {
  83. // return !(
  84. // file.includes("/__tests__/") ||
  85. // file.includes(".test.") ||
  86. // file.includes("/tests/") ||
  87. // file.includes("example")
  88. // );
  89. // });
  90. const createESMRawBuild = async () => {
  91. // Development unminified build with source maps
  92. const rawDev = await build({
  93. ...rawConfig,
  94. outdir: "dist/dev",
  95. sourcemap: true,
  96. metafile: true,
  97. plugins: [sassPlugin(), woff2ServerPlugin({ outdir: "dist/dev/assets" })],
  98. define: {
  99. "import.meta.env": JSON.stringify({ DEV: true }),
  100. },
  101. });
  102. fs.writeFileSync("meta-raw-dev.json", JSON.stringify(rawDev.metafile));
  103. // production minified build without sourcemaps
  104. const rawProd = await build({
  105. ...rawConfig,
  106. outdir: "dist/prod",
  107. minify: true,
  108. metafile: true,
  109. plugins: [
  110. sassPlugin(),
  111. woff2ServerPlugin({ outdir: "dist/prod/assets", generateTtf: true }),
  112. ],
  113. define: {
  114. "import.meta.env": JSON.stringify({ PROD: true }),
  115. },
  116. });
  117. fs.writeFileSync("meta-raw-prod.json", JSON.stringify(rawProd.metafile));
  118. };
  119. createESMRawBuild();
  120. createESMBrowserBuild();