| |
| |
| |
| |
| |
| "use strict"; |
|
|
| const DescriptionFileUtils = require("./DescriptionFileUtils"); |
|
|
| |
| |
| |
|
|
| module.exports = class DescriptionFilePlugin { |
| |
| |
| |
| |
| |
| |
| constructor(source, filenames, pathIsFile, target) { |
| this.source = source; |
| this.filenames = filenames; |
| this.pathIsFile = pathIsFile; |
| this.target = target; |
| } |
|
|
| |
| |
| |
| |
| apply(resolver) { |
| const target = resolver.ensureHook(this.target); |
| resolver |
| .getHook(this.source) |
| .tapAsync( |
| "DescriptionFilePlugin", |
| (request, resolveContext, callback) => { |
| const { path } = request; |
| if (!path) return callback(); |
| const directory = this.pathIsFile |
| ? DescriptionFileUtils.cdUp(path) |
| : path; |
| if (!directory) return callback(); |
| DescriptionFileUtils.loadDescriptionFile( |
| resolver, |
| directory, |
| this.filenames, |
| request.descriptionFilePath |
| ? { |
| path: request.descriptionFilePath, |
| content: request.descriptionFileData, |
| directory: |
| |
| (request.descriptionFileRoot), |
| } |
| : undefined, |
| resolveContext, |
| (err, result) => { |
| if (err) return callback(err); |
| if (!result) { |
| if (resolveContext.log) { |
| resolveContext.log( |
| `No description file found in ${directory} or above`, |
| ); |
| } |
| return callback(); |
| } |
| const relativePath = `.${path |
| .slice(result.directory.length) |
| .replace(/\\/g, "/")}`; |
| |
| const obj = { |
| ...request, |
| descriptionFilePath: result.path, |
| descriptionFileData: result.content, |
| descriptionFileRoot: result.directory, |
| relativePath, |
| }; |
| resolver.doResolve( |
| target, |
| obj, |
| `using description file: ${result.path} (relative path: ${relativePath})`, |
| resolveContext, |
| (err, result) => { |
| if (err) return callback(err); |
|
|
| |
| if (result === undefined) return callback(null, null); |
| callback(null, result); |
| }, |
| ); |
| }, |
| ); |
| }, |
| ); |
| } |
| }; |
|
|