context-BZKy5Nsn.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { parse } from "./context-D49cMElb.js";
  2. import { createRequire } from "node:module";
  3. import { resolve } from "node:path";
  4. import { Buffer } from "node:buffer";
  5. import process from "node:process";
  6. //#region src/webpack/context.ts
  7. function contextOptionsFromCompilation(compilation) {
  8. return {
  9. addWatchFile(file) {
  10. (compilation.fileDependencies ?? compilation.compilationDependencies).add(file);
  11. },
  12. getWatchFiles() {
  13. return Array.from(compilation.fileDependencies ?? compilation.compilationDependencies);
  14. }
  15. };
  16. }
  17. const require = createRequire(import.meta.url);
  18. function getSource(fileSource) {
  19. const webpack = require("webpack");
  20. return new webpack.sources.RawSource(typeof fileSource === "string" ? fileSource : Buffer.from(fileSource.buffer));
  21. }
  22. function createBuildContext(options, compiler, compilation, loaderContext) {
  23. return {
  24. parse,
  25. addWatchFile(id) {
  26. options.addWatchFile(resolve(process.cwd(), id));
  27. },
  28. emitFile(emittedFile) {
  29. const outFileName = emittedFile.fileName || emittedFile.name;
  30. if (emittedFile.source && outFileName) {
  31. if (!compilation) throw new Error("unplugin/webpack: emitFile outside supported hooks (buildStart, buildEnd, load, transform, watchChange)");
  32. compilation.emitAsset(outFileName, getSource(emittedFile.source));
  33. }
  34. },
  35. getWatchFiles() {
  36. return options.getWatchFiles();
  37. },
  38. getNativeBuildContext() {
  39. return {
  40. framework: "webpack",
  41. compiler,
  42. compilation,
  43. loaderContext
  44. };
  45. }
  46. };
  47. }
  48. function createContext(loader) {
  49. return {
  50. error: (error) => loader.emitError(normalizeMessage(error)),
  51. warn: (message) => loader.emitWarning(normalizeMessage(message))
  52. };
  53. }
  54. function normalizeMessage(error) {
  55. const err = new Error(typeof error === "string" ? error : error.message);
  56. if (typeof error === "object") {
  57. err.stack = error.stack;
  58. err.cause = error.meta;
  59. }
  60. return err;
  61. }
  62. //#endregion
  63. export { contextOptionsFromCompilation, createBuildContext, createContext, normalizeMessage };