odin-js-fundamentals-part-4/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js

138 lines
16 KiB
JavaScript
Raw Normal View History

2024-01-05 19:30:21 +00:00
'use strict';var _declaredScope = require('eslint-module-utils/declaredScope');var _declaredScope2 = _interopRequireDefault(_declaredScope);
var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap);
var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
function message(deprecation) {
return 'Deprecated' + (deprecation.description ? ': ' + String(deprecation.description) : '.');
}
function getDeprecation(metadata) {
if (!metadata || !metadata.doc) {return;}
return metadata.doc.tags.find(function (t) {return t.title === 'deprecated';});
}
module.exports = {
meta: {
type: 'suggestion',
docs: {
category: 'Helpful warnings',
description: 'Forbid imported names marked with `@deprecated` documentation tag.',
url: (0, _docsUrl2['default'])('no-deprecated') },
schema: [] },
create: function () {function create(context) {
var deprecated = new Map();
var namespaces = new Map();
function checkSpecifiers(node) {
if (node.type !== 'ImportDeclaration') {return;}
if (node.source == null) {return;} // local export, ignore
var imports = _ExportMap2['default'].get(node.source.value, context);
if (imports == null) {return;}
var moduleDeprecation = imports.doc && imports.doc.tags.find(function (t) {return t.title === 'deprecated';});
if (moduleDeprecation) {
context.report({ node: node, message: message(moduleDeprecation) });
}
if (imports.errors.length) {
imports.reportErrors(context, node);
return;
}
node.specifiers.forEach(function (im) {
var imported = void 0;var local = void 0;
switch (im.type) {
case 'ImportNamespaceSpecifier':{
if (!imports.size) {return;}
namespaces.set(im.local.name, imports);
return;
}
case 'ImportDefaultSpecifier':
imported = 'default';
local = im.local.name;
break;
case 'ImportSpecifier':
imported = im.imported.name;
local = im.local.name;
break;
default:return; // can't handle this one
}
// unknown thing can't be deprecated
var exported = imports.get(imported);
if (exported == null) {return;}
// capture import of deep namespace
if (exported.namespace) {namespaces.set(local, exported.namespace);}
var deprecation = getDeprecation(imports.get(imported));
if (!deprecation) {return;}
context.report({ node: im, message: message(deprecation) });
deprecated.set(local, deprecation);
});
}
return {
Program: function () {function Program(_ref) {var body = _ref.body;return body.forEach(checkSpecifiers);}return Program;}(),
Identifier: function () {function Identifier(node) {
if (node.parent.type === 'MemberExpression' && node.parent.property === node) {
return; // handled by MemberExpression
}
// ignore specifier identifiers
if (node.parent.type.slice(0, 6) === 'Import') {return;}
if (!deprecated.has(node.name)) {return;}
if ((0, _declaredScope2['default'])(context, node.name) !== 'module') {return;}
context.report({
node: node,
message: message(deprecated.get(node.name)) });
}return Identifier;}(),
MemberExpression: function () {function MemberExpression(dereference) {
if (dereference.object.type !== 'Identifier') {return;}
if (!namespaces.has(dereference.object.name)) {return;}
if ((0, _declaredScope2['default'])(context, dereference.object.name) !== 'module') {return;}
// go deep
var namespace = namespaces.get(dereference.object.name);
var namepath = [dereference.object.name];
// while property is namespace and parent is member expression, keep validating
while (namespace instanceof _ExportMap2['default'] && dereference.type === 'MemberExpression') {
// ignore computed parts for now
if (dereference.computed) {return;}
var metadata = namespace.get(dereference.property.name);
if (!metadata) {break;}
var deprecation = getDeprecation(metadata);
if (deprecation) {
context.report({ node: dereference.property, message: message(deprecation) });
}
// stash and pop
namepath.push(dereference.property.name);
namespace = metadata.namespace;
dereference = dereference.parent;
}
}return MemberExpression;}() };
}return create;}() };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kZXByZWNhdGVkLmpzIl0sIm5hbWVzIjpbIm1lc3NhZ2UiLCJkZXByZWNhdGlvbiIsImRlc2NyaXB0aW9uIiwiZ2V0RGVwcmVjYXRpb24iLCJtZXRhZGF0YSIsImRvYyIsInRhZ3MiLCJmaW5kIiwidCIsInRpdGxlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImNhdGVnb3J5IiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImRlcHJlY2F0ZWQiLCJNYXAiLCJuYW1lc3BhY2VzIiwiY2hlY2tTcGVjaWZpZXJzIiwibm9kZSIsInNvdXJjZSIsImltcG9ydHMiLCJFeHBvcnRzIiwiZ2V0IiwidmFsdWUiLCJtb2R1bGVEZXByZWNhdGlvbiIsInJlcG9ydCIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInNwZWNpZmllcnMiLCJmb3JFYWNoIiwiaW0iLCJpbXBvcnRlZCIsImxvY2FsIiwic2l6ZSIsInNldCIsIm5hbWUiLCJleHBvcnRlZCIsIm5hbWVzcGFjZSIsIlByb2dyYW0iLCJib2R5IiwiSWRlbnRpZmllciIsInBhcmVudCIsInByb3BlcnR5Iiwic2xpY2UiLCJoYXMiLCJNZW1iZXJFeHByZXNzaW9uIiwiZGVyZWZlcmVuY2UiLCJvYmplY3QiLCJuYW1lcGF0aCIsImNvbXB1dGVkIiwicHVzaCJdLCJtYXBwaW5ncyI6ImFBQUEsa0U7QUFDQSx5QztBQUNBLHFDOztBQUVBLFNBQVNBLE9BQVQsQ0FBaUJDLFdBQWpCLEVBQThCO0FBQzVCLHlCQUFvQkEsWUFBWUMsV0FBWixpQkFBK0JELFlBQVlDLFdBQTNDLElBQTJELEdBQS9FO0FBQ0Q7O0FBRUQsU0FBU0MsY0FBVCxDQUF3QkMsUUFBeEIsRUFBa0M7QUFDaEMsTUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQ0EsU0FBU0MsR0FBM0IsRUFBZ0MsQ0FBRSxPQUFTOztBQUUzQyxTQUFPRCxTQUFTQyxHQUFULENBQWFD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