bit-bin
Version:
<a href="https://opensource.org/licenses/Apache-2.0"><img alt="apache" src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a> <a href="https://github.com/teambit/bit/blob/master/CONTRIBUTING.md"><img alt="prs" src="https://img.shields.io/b
366 lines (274 loc) • 7.67 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _fs() {
const data = _interopRequireDefault(require("fs"));
_fs = function () {
return data;
};
return data;
}
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
function _moduleDefinition() {
const data = _interopRequireDefault(require("module-definition"));
_moduleDefinition = function () {
return data;
};
return data;
}
function _nodeSourceWalk() {
const data = _interopRequireDefault(require("node-source-walk"));
_nodeSourceWalk = function () {
return data;
};
return data;
}
function _detectiveAmd() {
const data = _interopRequireDefault(require("detective-amd"));
_detectiveAmd = function () {
return data;
};
return data;
}
function _detectiveStylus() {
const data = _interopRequireDefault(require("detective-stylus"));
_detectiveStylus = function () {
return data;
};
return data;
}
function _detectiveEs() {
const data = _interopRequireDefault(require("../detectives/detective-es6"));
_detectiveEs = function () {
return data;
};
return data;
}
function _detectiveLess() {
const data = _interopRequireDefault(require("../detectives/detective-less"));
_detectiveLess = function () {
return data;
};
return data;
}
function _detectiveSass() {
const data = _interopRequireDefault(require("../detectives/detective-sass"));
_detectiveSass = function () {
return data;
};
return data;
}
function _detectiveScss() {
const data = _interopRequireDefault(require("../detectives/detective-scss"));
_detectiveScss = function () {
return data;
};
return data;
}
function _detectiveCss() {
const data = _interopRequireDefault(require("../detectives/detective-css"));
_detectiveCss = function () {
return data;
};
return data;
}
function _detectiveTypescript() {
const data = _interopRequireDefault(require("../detectives/detective-typescript"));
_detectiveTypescript = function () {
return data;
};
return data;
}
function _detectiveStylable() {
const data = _interopRequireDefault(require("../detectives/detective-stylable"));
_detectiveStylable = function () {
return data;
};
return data;
}
function _detectiveVue() {
const data = _interopRequireDefault(require("../detectives/detective-vue"));
_detectiveVue = function () {
return data;
};
return data;
}
function _constants() {
const data = require("../../../../../constants");
_constants = function () {
return data;
};
return data;
}
/**
* this file had been forked from https://github.com/dependents/node-precinct
*/
const debug = require('debug')('precinct'); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
const natives = process.binding('natives');
/**
* Finds the list of dependencies for the given file
*
* @param {String|Object} content - File's content or AST
* @param {Object} [options]
* @param {String} [options.type] - The type of content being passed in. Useful if you want to use a non-js detective
* @return {String[]}
*/
// eslint-disable-next-line complexity
function precinct(content, options) {
options = options || {};
let dependencies = [];
let ast;
let type = options.type; // Legacy form backCompat where type was the second parameter
if (typeof options === 'string') {
type = options;
options = {};
}
debug('options given: ', options); // We assume we're dealing with a JS file
if (!type && typeof content !== 'object') {
const walker = new (_nodeSourceWalk().default)();
try {
// Parse once and distribute the AST to all detectives
ast = walker.parse(content); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
precinct.ast = ast;
} catch (e) {
// In case a previous call had it populated
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
precinct.ast = null;
debug('could not parse content: %s', e.message);
throw e;
} // SASS files shouldn't be parsed by Acorn
} else {
ast = content;
if (typeof content === 'object') {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
precinct.ast = content;
}
}
type = options.useContent ? _moduleDefinition().default.fromSource(content) : type || _moduleDefinition().default.fromSource(ast);
debug('module type: ', type);
let theDetective;
switch (type) {
case 'commonjs':
case 'es6':
theDetective = _detectiveEs().default;
break;
case 'amd':
theDetective = _detectiveAmd().default;
break;
case 'sass':
theDetective = _detectiveSass().default;
break;
case 'less':
theDetective = _detectiveLess().default;
break;
case 'scss':
theDetective = _detectiveScss().default;
break;
case 'css':
theDetective = _detectiveCss().default;
break;
case 'stylus':
theDetective = _detectiveStylus().default;
break;
case 'ts':
case 'tsx':
theDetective = _detectiveTypescript().default;
break;
case 'stylable':
theDetective = _detectiveStylable().default;
break;
case 'vue':
theDetective = _detectiveVue().default;
break;
default:
break;
}
if (theDetective) {
dependencies = type === 'vue' ? theDetective(ast, options) : theDetective(ast, options[type] || {});
} // For non-JS files that we don't parse
if (theDetective && theDetective.ast) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
precinct.ast = theDetective.ast;
}
return dependencies;
}
function assign(o1, o2) {
// eslint-disable-next-line
for (const key in o2) {
// eslint-disable-next-line
if (o2.hasOwnProperty(key)) {
o1[key] = o2[key];
}
}
return o1;
}
/**
* Returns the dependencies for the given file path
*
* @param {String} filename
* @param {Object} [options]
* @param {Boolean} [options.includeCore=true] - Whether or not to include core modules in the dependency list
* @return {String[]}
*/
precinct.paperwork = function (filename, options) {
options = assign({
includeCore: true
}, options || {});
const content = _fs().default.readFileSync(filename, 'utf8');
const ext = _path().default.extname(filename);
const getType = () => {
if (filename.endsWith('.st.css')) {
return 'stylable';
}
switch (ext) {
case '.css':
case '.scss':
case '.sass':
case '.less':
case '.ts':
case '.vue':
return ext.replace('.', '');
case '.styl':
return 'stylus';
case '.tsx':
if (!options.ts) options.ts = {};
options.ts.jsx = true;
return 'ts';
case '.jsx':
return 'es6';
default:
return null;
}
};
const getDeps = () => {
if (_constants().SUPPORTED_EXTENSIONS.includes(ext)) return precinct(content, options);
debug(`skipping unsupported file ${filename}`);
return [];
};
const type = getType();
options.type = type;
const deps = getDeps();
if (deps && !options.includeCore) {
if (Array.isArray(deps)) {
return deps.filter(function (d) {
return !natives[d];
});
}
return Object.keys(deps).reduce((acc, value) => {
if (!natives[value]) acc[value] = deps[value];
return acc;
}, {});
}
return deps;
};
var _default = precinct;
exports.default = _default;
;