You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 vuotta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. var __create = Object.create;
  2. var __defProp = Object.defineProperty;
  3. var __getProtoOf = Object.getPrototypeOf;
  4. var __hasOwnProp = Object.prototype.hasOwnProperty;
  5. var __getOwnPropNames = Object.getOwnPropertyNames;
  6. var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  7. var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
  8. var __export = (target, all) => {
  9. for (var name in all)
  10. __defProp(target, name, {get: all[name], enumerable: true});
  11. };
  12. var __exportStar = (target, module2, desc) => {
  13. if (module2 && typeof module2 === "object" || typeof module2 === "function") {
  14. for (let key of __getOwnPropNames(module2))
  15. if (!__hasOwnProp.call(target, key) && key !== "default")
  16. __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
  17. }
  18. return target;
  19. };
  20. var __toModule = (module2) => {
  21. return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
  22. };
  23. __markAsModule(exports);
  24. __export(exports, {
  25. default: () => src_default,
  26. defaultOptions: () => defaultOptions
  27. });
  28. var import_fs_extra = __toModule(require("fs-extra"));
  29. var import_util = __toModule(require("util"));
  30. var import_path = __toModule(require("path"));
  31. var import_tmp = __toModule(require("tmp"));
  32. var import_postcss2 = __toModule(require("postcss"));
  33. var import_postcss_modules = __toModule(require("postcss-modules"));
  34. var import_less = __toModule(require("less"));
  35. var import_stylus = __toModule(require("stylus"));
  36. var import_resolve_file = __toModule(require("resolve-file"));
  37. const defaultOptions = {
  38. plugins: [],
  39. modules: true,
  40. rootDir: process.cwd(),
  41. sassOptions: {},
  42. lessOptions: {},
  43. stylusOptions: {},
  44. fileIsModule: null
  45. };
  46. const postCSSPlugin = ({
  47. plugins = [],
  48. modules = true,
  49. rootDir = process.cwd(),
  50. sassOptions = {},
  51. lessOptions = {},
  52. stylusOptions = {},
  53. fileIsModule
  54. } = defaultOptions) => ({
  55. name: "postcss2",
  56. setup(build) {
  57. const tmpDirPath = import_tmp.default.dirSync().name, modulesMap = [];
  58. const modulesPlugin = (0, import_postcss_modules.default)({
  59. generateScopedName: "[name]__[local]___[hash:base64:5]",
  60. ...typeof modules !== "boolean" ? modules : {},
  61. getJSON(filepath, json, outpath) {
  62. const mapIndex = modulesMap.findIndex((m) => m.path === filepath);
  63. if (mapIndex !== -1) {
  64. modulesMap[mapIndex].map = json;
  65. } else {
  66. modulesMap.push({
  67. path: filepath,
  68. map: json
  69. });
  70. }
  71. if (typeof modules !== "boolean" && typeof modules.getJSON === "function")
  72. return modules.getJSON(filepath, json, outpath);
  73. }
  74. });
  75. build.onResolve({filter: /.\.(css|sass|scss|less|styl)$/}, async (args) => {
  76. if (args.namespace !== "file" && args.namespace !== "")
  77. return;
  78. let sourceFullPath = (0, import_resolve_file.default)(args.path);
  79. if (!sourceFullPath)
  80. sourceFullPath = import_path.default.resolve(args.resolveDir, args.path);
  81. const sourceExt = import_path.default.extname(sourceFullPath);
  82. const sourceBaseName = import_path.default.basename(sourceFullPath, sourceExt);
  83. const isModule = fileIsModule ? fileIsModule(sourceFullPath) : sourceBaseName.match(/\.module$/);
  84. const sourceDir = import_path.default.dirname(sourceFullPath);
  85. const watchFiles = [sourceFullPath];
  86. let tmpFilePath;
  87. if (args.kind === "entry-point") {
  88. const sourceRelDir = import_path.default.relative(import_path.default.dirname(rootDir), import_path.default.dirname(sourceFullPath));
  89. tmpFilePath = import_path.default.resolve(tmpDirPath, sourceRelDir, `${sourceBaseName}.css`);
  90. await (0, import_fs_extra.ensureDir)(import_path.default.dirname(tmpFilePath));
  91. } else {
  92. const uniqueTmpDir = import_path.default.resolve(tmpDirPath, uniqueId());
  93. tmpFilePath = import_path.default.resolve(uniqueTmpDir, `${sourceBaseName}.css`);
  94. }
  95. await (0, import_fs_extra.ensureDir)(import_path.default.dirname(tmpFilePath));
  96. const fileContent = await (0, import_fs_extra.readFile)(sourceFullPath);
  97. let css = sourceExt === ".css" ? fileContent : "";
  98. if (sourceExt === ".sass" || sourceExt === ".scss") {
  99. const sassResult = await renderSass({
  100. ...sassOptions,
  101. file: sourceFullPath
  102. });
  103. css = sassResult.css.toString();
  104. watchFiles.push(...sassResult.stats.includedFiles);
  105. }
  106. if (sourceExt === ".styl")
  107. css = await renderStylus(new import_util.TextDecoder().decode(fileContent), {
  108. ...stylusOptions,
  109. filename: sourceFullPath
  110. });
  111. if (sourceExt === ".less")
  112. css = (await import_less.default.render(new import_util.TextDecoder().decode(fileContent), {
  113. ...lessOptions,
  114. filename: sourceFullPath,
  115. rootpath: import_path.default.dirname(args.path)
  116. })).css;
  117. const result = await (0, import_postcss2.default)(isModule ? [modulesPlugin, ...plugins] : plugins).process(css, {
  118. from: sourceFullPath,
  119. to: tmpFilePath
  120. });
  121. watchFiles.push(...getPostCssDependencies(result.messages));
  122. await (0, import_fs_extra.writeFile)(tmpFilePath, result.css);
  123. return {
  124. namespace: isModule ? "postcss-module" : "file",
  125. path: tmpFilePath,
  126. watchFiles,
  127. pluginData: {
  128. originalPath: sourceFullPath
  129. }
  130. };
  131. });
  132. build.onLoad({filter: /.*/, namespace: "postcss-module"}, async (args) => {
  133. const mod = modulesMap.find(({path: path2}) => path2 === args?.pluginData?.originalPath), resolveDir = import_path.default.dirname(args.path);
  134. return {
  135. resolveDir,
  136. contents: `import ${JSON.stringify(args.path)};
  137. export default ${JSON.stringify(mod && mod.map ? mod.map : {})};`
  138. };
  139. });
  140. }
  141. });
  142. function renderSass(options) {
  143. return new Promise((resolve, reject) => {
  144. getSassImpl().render(options, (e, res) => {
  145. if (e)
  146. reject(e);
  147. else
  148. resolve(res);
  149. });
  150. });
  151. }
  152. function renderStylus(str, options) {
  153. return new Promise((resolve, reject) => {
  154. import_stylus.default.render(str, options, (e, res) => {
  155. if (e)
  156. reject(e);
  157. else
  158. resolve(res);
  159. });
  160. });
  161. }
  162. function getSassImpl() {
  163. let impl = "sass";
  164. try {
  165. require.resolve("sass");
  166. } catch {
  167. try {
  168. require.resolve("node-sass");
  169. impl = "node-sass";
  170. } catch {
  171. throw new Error('Please install "sass" or "node-sass" package');
  172. }
  173. }
  174. return require(impl);
  175. }
  176. function getFilesRecursive(directory) {
  177. return (0, import_fs_extra.readdirSync)(directory).reduce((files, file) => {
  178. const name = import_path.default.join(directory, file);
  179. return (0, import_fs_extra.statSync)(name).isDirectory() ? [...files, ...getFilesRecursive(name)] : [...files, name];
  180. }, []);
  181. }
  182. let idCounter = 0;
  183. function uniqueId() {
  184. return Date.now().toString(16) + (idCounter++).toString(16);
  185. }
  186. function getPostCssDependencies(messages) {
  187. let dependencies = [];
  188. for (const message of messages) {
  189. if (message.type == "dir-dependency") {
  190. dependencies.push(...getFilesRecursive(message.dir));
  191. } else if (message.type == "dependency") {
  192. dependencies.push(message.file);
  193. }
  194. }
  195. return dependencies;
  196. }
  197. var src_default = postCSSPlugin;