UNPKG

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
"use strict"; 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;