Files
ai-course/node_modules/eslint-plugin-import/lib/rules/dynamic-import-chunkname.js

172 lines
21 KiB
JavaScript
Raw Permalink Normal View History

'use strict';var _contextCompat = require('eslint-module-utils/contextCompat');
var _vm = require('vm');var _vm2 = _interopRequireDefault(_vm);
var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
module.exports = {
meta: {
type: 'suggestion',
docs: {
category: 'Style guide',
description: 'Enforce a leading comment with the webpackChunkName for dynamic imports.',
url: (0, _docsUrl2['default'])('dynamic-import-chunkname') },
schema: [{
type: 'object',
properties: {
importFunctions: {
type: 'array',
uniqueItems: true,
items: {
type: 'string' } },
allowEmpty: {
type: 'boolean' },
webpackChunknameFormat: {
type: 'string' } } }],
hasSuggestions: true },
create: function () {function create(context) {
var config = context.options[0];var _ref =
config || {},_ref$importFunctions = _ref.importFunctions,importFunctions = _ref$importFunctions === undefined ? [] : _ref$importFunctions,_ref$allowEmpty = _ref.allowEmpty,allowEmpty = _ref$allowEmpty === undefined ? false : _ref$allowEmpty;var _ref2 =
config || {},_ref2$webpackChunknam = _ref2.webpackChunknameFormat,webpackChunknameFormat = _ref2$webpackChunknam === undefined ? '([0-9a-zA-Z-_/.]|\\[(request|index)\\])+' : _ref2$webpackChunknam;
var paddedCommentRegex = /^ (\S[\s\S]+\S) $/;
var commentStyleRegex = /^( ((webpackChunkName: .+)|((webpackPrefetch|webpackPreload): (true|false|-?[0-9]+))|(webpackIgnore: (true|false))|((webpackInclude|webpackExclude): \/.*\/)|(webpackMode: ["'](lazy|lazy-once|eager|weak)["'])|(webpackExports: (['"]\w+['"]|\[(['"]\w+['"], *)+(['"]\w+['"]*)\]))),?)+ $/;
var chunkSubstrFormat = 'webpackChunkName: ["\']' + String(webpackChunknameFormat) + '["\'],? ';
var chunkSubstrRegex = new RegExp(chunkSubstrFormat);
var eagerModeFormat = 'webpackMode: ["\']eager["\'],? ';
var eagerModeRegex = new RegExp(eagerModeFormat);
function run(node, arg) {
var sourceCode = (0, _contextCompat.getSourceCode)(context);
var leadingComments = sourceCode.getCommentsBefore ?
sourceCode.getCommentsBefore(arg) // This method is available in ESLint >= 4.
: sourceCode.getComments(arg).leading; // This method is deprecated in ESLint 7.
if ((!leadingComments || leadingComments.length === 0) && !allowEmpty) {
context.report({
node: node,
message: 'dynamic imports require a leading comment with the webpack chunkname' });
return;
}
var isChunknamePresent = false;
var isEagerModePresent = false;var _iteratorNormalCompletion = true;var _didIteratorError = false;var _iteratorError = undefined;try {
for (var _iterator = leadingComments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {var comment = _step.value;
if (comment.type !== 'Block') {
context.report({
node: node,
message: 'dynamic imports require a /* foo */ style comment, not a // foo comment' });
return;
}
if (!paddedCommentRegex.test(comment.value)) {
context.report({
node: node,
message: 'dynamic imports require a block comment padded with spaces - /* foo */' });
return;
}
try {
// just like webpack itself does
_vm2['default'].runInNewContext('(function() {return {' + String(comment.value) + '}})()');
} catch (error) {
context.report({
node: node,
message: 'dynamic imports require a "webpack" comment with valid syntax' });
return;
}
if (!commentStyleRegex.test(comment.value)) {
context.report({
node: node,
message: 'dynamic imports require a "webpack" comment with valid syntax' });
return;
}
if (eagerModeRegex.test(comment.value)) {
isEagerModePresent = true;
}
if (chunkSubstrRegex.test(comment.value)) {
isChunknamePresent = true;
}
}} catch (err) {_didIteratorError = true;_iteratorError = err;} finally {try {if (!_iteratorNormalCompletion && _iterator['return']) {_iterator['return']();}} finally {if (_didIteratorError) {throw _iteratorError;}}}
if (isChunknamePresent && isEagerModePresent) {
context.report({
node: node,
message: 'dynamic imports using eager mode do not need a webpackChunkName',
suggest: [
{
desc: 'Remove webpackChunkName',
fix: function () {function fix(fixer) {var _iteratorNormalCompletion2 = true;var _didIteratorError2 = false;var _iteratorError2 = undefined;try {
for (var _iterator2 = leadingComments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {var _comment = _step2.value;
if (chunkSubstrRegex.test(_comment.value)) {
var replacement = _comment.value.replace(chunkSubstrRegex, '').trim().replace(/,$/, '');
if (replacement === '') {
return fixer.remove(_comment);
} else {
return fixer.replaceText(_comment, '/* ' + String(replacement) + ' */');
}
}
}} catch (err) {_didIteratorError2 = true;_iteratorError2 = err;} finally {try {if (!_iteratorNormalCompletion2 && _iterator2['return']) {_iterator2['return']();}} finally {if (_didIteratorError2) {throw _iteratorError2;}}}
}return fix;}() },
{
desc: 'Remove webpackMode',
fix: function () {function fix(fixer) {var _iteratorNormalCompletion3 = true;var _didIteratorError3 = false;var _iteratorError3 = undefined;try {
for (var _iterator3 = leadingComments[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {var _comment2 = _step3.value;
if (eagerModeRegex.test(_comment2.value)) {
var replacement = _comment2.value.replace(eagerModeRegex, '').trim().replace(/,$/, '');
if (replacement === '') {
return fixer.remove(_comment2);
} else {
return fixer.replaceText(_comment2, '/* ' + String(replacement) + ' */');
}
}
}} catch (err) {_didIteratorError3 = true;_iteratorError3 = err;} finally {try {if (!_iteratorNormalCompletion3 && _iterator3['return']) {_iterator3['return']();}} finally {if (_didIteratorError3) {throw _iteratorError3;}}}
}return fix;}() }] });
}
if (!isChunknamePresent && !allowEmpty && !isEagerModePresent) {
context.report({
node: node,
message: 'dynamic imports require a leading comment in the form /*' +
chunkSubstrFormat + '*/' });
}
}
return {
ImportExpression: function () {function ImportExpression(node) {
run(node, node.source);
}return ImportExpression;}(),
CallExpression: function () {function CallExpression(node) {
if (node.callee.type !== 'Import' && importFunctions.indexOf(node.callee.name) < 0) {
return;
}
run(node, node.arguments[0]);
}return CallExpression;}() };
}return create;}() };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9keW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwiZGVzY3JpcHRpb24iLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaW1wb3J0RnVuY3Rpb25zIiwidW5pcXVlSXRlbXMiLCJpdGVtcyIsImFsbG93RW1wdHkiLCJ3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0IiwiaGFzU3VnZ2VzdGlvbnMiLCJjcmVhdGUiLCJjb250ZXh0IiwiY29uZmlnIiwib3B0aW9ucyIsInBhZGRlZENvbW1lbnRSZWdleCIsImNvbW1lbnRTdHlsZVJlZ2V4IiwiY2h1bmtTdWJzdHJGb3JtYXQiLCJjaHVua1N1YnN0clJlZ2V4IiwiUmVnRXhwIiwiZWFnZXJNb2RlRm9ybWF0IiwiZWFnZXJNb2RlUmVnZXgiLCJydW4iLCJub2RlIiwiYXJnIiwic291cmNlQ29kZSIsImxlYWRpbmdDb21tZW50cyIsImdldENvbW1lbnRzQmVmb3JlIiwiZ2V0Q29tbWVudHMiLCJsZWFkaW5nIiwibGVuZ3RoIiwicmVwb3J0IiwibWVzc2FnZSIsImlzQ2h1bmtuYW1lUHJlc2VudCIsImlzRWFnZXJNb2RlUHJlc2VudCIsImNvbW1lbnQiLCJ0ZXN0IiwidmFsdWUiLCJ2bSIsInJ1bkluTmV3Q29udGV4dCIsImVycm9yIiwic3VnZ2VzdCIsImRlc2MiLCJmaXgiLCJmaXhlciIsInJlcGxhY2VtZW50IiwicmVwbGFjZSIsInRyaW0iLCJyZW1vdmUiLCJyZXBsYWNlVGV4dCIsIkltcG9ydEV4cHJlc3Npb24iLCJzb3VyY2UiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImluZGV4T2YiLCJuYW1lIiwiYXJndW1lbnRzIl0sIm1hcHBpbmdzIjoiYUFBQTtBQUNBLHdCOztBQUVBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxZ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