source: frontend/node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js@ cdcff72

Last change on this file since cdcff72 was 9af201e, checked in by MBK <marija.karapandzova@…>, 12 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 2.8 KB
Line 
1/*
2 MIT License http://www.opensource.org/licenses/mit-license.php
3 Author Tobias Koppers @sokra
4*/
5
6"use strict";
7
8const DescriptionFileUtils = require("./DescriptionFileUtils");
9
10/** @typedef {import("./Resolver")} Resolver */
11/** @typedef {import("./Resolver").ResolveRequest} ResolveRequest */
12/** @typedef {import("./Resolver").ResolveStepHook} ResolveStepHook */
13
14const BACKSLASH_G = /\\/g;
15
16module.exports = class DescriptionFilePlugin {
17 /**
18 * @param {string | ResolveStepHook} source source
19 * @param {string[]} filenames filenames
20 * @param {boolean} pathIsFile pathIsFile
21 * @param {string | ResolveStepHook} target target
22 */
23 constructor(source, filenames, pathIsFile, target) {
24 this.source = source;
25 this.filenames = filenames;
26 this.pathIsFile = pathIsFile;
27 this.target = target;
28 }
29
30 /**
31 * @param {Resolver} resolver the resolver
32 * @returns {void}
33 */
34 apply(resolver) {
35 const target = resolver.ensureHook(this.target);
36 resolver
37 .getHook(this.source)
38 .tapAsync(
39 "DescriptionFilePlugin",
40 (request, resolveContext, callback) => {
41 const { path } = request;
42 if (!path) return callback();
43 const directory = this.pathIsFile
44 ? DescriptionFileUtils.cdUp(path)
45 : path;
46 if (!directory) return callback();
47 DescriptionFileUtils.loadDescriptionFile(
48 resolver,
49 directory,
50 this.filenames,
51 request.descriptionFilePath
52 ? {
53 path: request.descriptionFilePath,
54 content: request.descriptionFileData,
55 directory:
56 /** @type {string} */
57 (request.descriptionFileRoot),
58 }
59 : undefined,
60 resolveContext,
61 (err, result) => {
62 if (err) return callback(err);
63 if (!result) {
64 if (resolveContext.log) {
65 resolveContext.log(
66 `No description file found in ${directory} or above`,
67 );
68 }
69 return callback();
70 }
71 const rawRelative = path.slice(result.directory.length);
72 const relativePath = `.${
73 rawRelative.includes("\\")
74 ? rawRelative.replace(BACKSLASH_G, "/")
75 : rawRelative
76 }`;
77 /** @type {ResolveRequest} */
78 const obj = {
79 ...request,
80 descriptionFilePath: result.path,
81 descriptionFileData: result.content,
82 descriptionFileRoot: result.directory,
83 relativePath,
84 };
85 resolver.doResolve(
86 target,
87 obj,
88 `using description file: ${result.path} (relative path: ${relativePath})`,
89 resolveContext,
90 (err, result) => {
91 if (err) return callback(err);
92
93 // Don't allow other processing
94 if (result === undefined) return callback(null, null);
95 callback(null, result);
96 },
97 );
98 },
99 );
100 },
101 );
102 }
103};
Note: See TracBrowser for help on using the repository browser.