72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
const path = require('path');
|
|
const fs = require('fs');
|
|
const debug = require('debug')('stylus-lookup');
|
|
|
|
/**
|
|
* Determines the resolved dependency path according to
|
|
* the Stylus compiler's dependency lookup behavior
|
|
*
|
|
* @param {Object} options
|
|
* @param {String} options.dependency - the import name
|
|
* @param {String} options.filename - the file containing the import
|
|
* @param {String} options.directory - the location of all stylus files
|
|
* @return {String}
|
|
*/
|
|
module.exports = function({dependency: dep, filename, directory} = {}) {
|
|
if (typeof dep === 'undefined') {
|
|
throw new Error('dependency is not supplied');
|
|
}
|
|
if (typeof filename === 'undefined') {
|
|
throw new Error('filename is not supplied');
|
|
}
|
|
if (typeof directory === 'undefined') {
|
|
throw new Error('directory is not supplied');
|
|
}
|
|
|
|
const fileDir = path.dirname(filename);
|
|
|
|
debug('trying to resolve: ' + dep);
|
|
debug('filename: ', filename);
|
|
debug('directory: ', directory);
|
|
|
|
// Use the file's extension if necessary
|
|
const ext = path.extname(dep) ? '' : path.extname(filename);
|
|
let resolved;
|
|
|
|
if (!path.isAbsolute(dep)) {
|
|
resolved = path.resolve(filename, dep) + ext;
|
|
|
|
debug('resolved relative dependency: ' + resolved);
|
|
|
|
if (fs.existsSync(resolved)) {
|
|
return resolved;
|
|
} else {
|
|
debug('resolved file does not exist');
|
|
}
|
|
}
|
|
|
|
const samedir = path.resolve(fileDir, dep) + ext;
|
|
debug('resolving dep about the parent file\'s directory: ' + samedir);
|
|
|
|
if (fs.existsSync(samedir)) {
|
|
return samedir;
|
|
} else {
|
|
debug('resolved file does not exist');
|
|
}
|
|
|
|
// Check for dep/index.styl file
|
|
const indexFile = path.join(path.resolve(fileDir, dep), 'index.styl');
|
|
debug('resolving dep as if it points to an index.styl file: ' + indexFile);
|
|
|
|
if (fs.existsSync(indexFile)) {
|
|
return indexFile;
|
|
} else {
|
|
debug('resolved file does not exist');
|
|
}
|
|
|
|
debug('could not resolve the dependency');
|
|
return '';
|
|
};
|