bigint-crypto-utils/node_modules/eslint-plugin-import/lib/rules/export.js

172 lines
17 KiB
JavaScript
Raw Normal View History

'use strict';
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _ExportMap = require('../ExportMap');
var _ExportMap2 = _interopRequireDefault(_ExportMap);
var _docsUrl = require('../docsUrl');
var _docsUrl2 = _interopRequireDefault(_docsUrl);
var _arrayIncludes = require('array-includes');
var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/*
Notes on Typescript namespaces aka TSModuleDeclaration:
There are two forms:
- active namespaces: namespace Foo {} / module Foo {}
- ambient modules; declare module "eslint-plugin-import" {}
active namespaces:
- cannot contain a default export
- cannot contain an export all
- cannot contain a multi name export (export { a, b })
- can have active namespaces nested within them
ambient namespaces:
- can only be defined in .d.ts files
- cannot be nested within active namespaces
- have no other restrictions
*/
const rootProgram = 'root';
const tsTypePrefix = 'type:';
/**
* Detect function overloads like:
* ```ts
* export function foo(a: number);
* export function foo(a: string);
* export function foo(a: number|string) { return a; }
* ```
* @param {Set<Object>} nodes
* @returns {boolean}
*/
function isTypescriptFunctionOverloads(nodes) {
const types = new Set(Array.from(nodes, node => node.parent.type));
return types.size === 2 && types.has('TSDeclareFunction') && types.has('FunctionDeclaration');
}
module.exports = {
meta: {
type: 'problem',
docs: {
url: (0, _docsUrl2.default)('export')
}
},
create: function (context) {
const namespace = new Map([[rootProgram, new Map()]]);
function addNamed(name, node, parent, isType) {
if (!namespace.has(parent)) {
namespace.set(parent, new Map());
}
const named = namespace.get(parent);
const key = isType ? `${tsTypePrefix}${name}` : name;
let nodes = named.get(key);
if (nodes == null) {
nodes = new Set();
named.set(key, nodes);
}
nodes.add(node);
}
function getParent(node) {
if (node.parent && node.parent.type === 'TSModuleBlock') {
return node.parent.parent;
}
// just in case somehow a non-ts namespace export declaration isn't directly
// parented to the root Program node
return rootProgram;
}
return {
'ExportDefaultDeclaration': node => addNamed('default', node, getParent(node)),
'ExportSpecifier': node => addNamed(node.exported.name, node.exported, getParent(node)),
'ExportNamedDeclaration': function (node) {
if (node.declaration == null) return;
const parent = getParent(node);
// support for old typescript versions
const isTypeVariableDecl = node.declaration.kind === 'type';
if (node.declaration.id != null) {
if ((0, _arrayIncludes2.default)(['TSTypeAliasDeclaration', 'TSInterfaceDeclaration'], node.declaration.type)) {
addNamed(node.declaration.id.name, node.declaration.id, parent, true);
} else {
addNamed(node.declaration.id.name, node.declaration.id, parent, isTypeVariableDecl);
}
}
if (node.declaration.declarations != null) {
for (let declaration of node.declaration.declarations) {
(0, _ExportMap.recursivePatternCapture)(declaration.id, v => addNamed(v.name, v, parent, isTypeVariableDecl));
}
}
},
'ExportAllDeclaration': function (node) {
if (node.source == null) return; // not sure if this is ever true
const remoteExports = _ExportMap2.default.get(node.source.value, context);
if (remoteExports == null) return;
if (remoteExports.errors.length) {
remoteExports.reportErrors(context, node);
return;
}
const parent = getParent(node);
let any = false;
remoteExports.forEach((v, name) => name !== 'default' && (any = true) && // poor man's filter
addNamed(name, node, parent));
if (!any) {
context.report(node.source, `No named exports found in module '${node.source.value}'.`);
}
},
'Program:exit': function () {
for (let _ref of namespace) {
var _ref2 = _slicedToArray(_ref, 2);
let named = _ref2[1];
for (let _ref3 of named) {
var _ref4 = _slicedToArray(_ref3, 2);
let name = _ref4[0];
let nodes = _ref4[1];
if (nodes.size <= 1) continue;
if (isTypescriptFunctionOverloads(nodes)) continue;
for (let node of nodes) {
if (name === 'default') {
context.report(node, 'Multiple default exports.');
} else {
context.report(node, `Multiple exports of name '${name.replace(tsTypePrefix, '')}'.`);
}
}
}
}
}
};
}
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnQuanMiXSwibmFtZXMiOlsicm9vdFByb2dyYW0iLCJ0c1R5cGVQcmVmaXgiLCJpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2FkcyIsIm5vZGVzIiwidHlwZXMiLCJTZXQiLCJBcnJheSIsImZyb20iLCJub2RlIiwicGFyZW50IiwidHlwZSIsInNpemUiLCJoYXMiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJ1cmwiLCJjcmVhdGUiLCJjb250ZXh0IiwibmFtZXNwYWNlIiwiTWFwIiwiYWRkTmFtZWQiLCJuYW1lIiwiaXNUeXBlIiwic2V0IiwibmFtZWQiLCJnZXQiLCJrZXkiLCJhZGQiLCJnZXRQYXJlbnQiLCJleHBvcnRlZCIsImRlY2xhcmF0aW9uIiwiaXNUeXBlVmFyaWFibGVEZWNsIiwia2luZCIsImlkIiwiZGVjbGFyYXRpb25zIiwidiIsInNvdXJjZSIsInJlbW90ZUV4cG9ydHMiLCJFeHBvcnRNYXAiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImFueSIsImZvckVhY2giLCJyZXBvcnQiLCJyZXBsYWNlIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxNQUFNQSxjQUFjLE1BQXBCO0FBQ0EsTUFBTUMsZUFBZSxPQUFyQjs7QUFFQTs7Ozs7Ozs7OztBQVVBLFNBQVNDLDZCQUFULENBQXVDQyxLQUF2QyxFQUE4QztBQUM1QyxRQUFNQyxRQUFRLElBQUlDLEdBQUosQ0FBUUMsTUFBTUMsSUFBTixDQUFXSixLQUFYLEVBQWtCSyxRQUFRQSxLQUFLQyxNQUFMLENBQVlDLElBQXRDLENBQVIsQ0FBZDtBQUNBLFNBQU9OLE1BQU1PLElBQU4sS0FBZSxDQUFmLElBQW9CUCxNQUFNUSxHQUFOLENBQVUsbUJBQVYsQ0FBcEIsSUFBc0RSLE1BQU1RLEdBQU4sQ0FBVSxxQkFBVixDQUE3RDtB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