📄 no-restricted-imports.ts¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 10 |
| 📦 Imports | 14 |
| 📊 Variables & Constants | 9 |
| 📑 Type Aliases | 2 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/eslint-plugin/src/rules/no-restricted-imports.ts
📦 Imports¶
| Name | Source |
|---|---|
TSESTree |
@typescript-eslint/utils |
JSONSchema4AnyOfSchema |
@typescript-eslint/utils/json-schema |
JSONSchema4ArraySchema |
@typescript-eslint/utils/json-schema |
JSONSchema4ObjectSchema |
@typescript-eslint/utils/json-schema |
ArrayOfStringOrObject |
eslint/lib/rules/no-restricted-imports |
ArrayOfStringOrObjectPatterns |
eslint/lib/rules/no-restricted-imports |
RuleListener |
eslint/lib/rules/no-restricted-imports |
Ignore |
ignore |
AST_NODE_TYPES |
@typescript-eslint/utils |
ignore |
ignore |
InferMessageIdsTypeFromRule |
../util |
InferOptionsTypeFromRule |
../util |
createRule |
../util |
getESLintCoreRule |
../util/getESLintCoreRule |
Variables & Constants¶
| Name | Type | Kind | Value | Exported |
|---|---|---|---|---|
baseSchema |
{ anyOf: [unknown, { items: [{ properties: { paths: { items: { anyOf: [{ type: "string"; }, { properties: JSONSchema4ObjectSchema; required: string[]; type: "object"; }]; }; type: "array"; }; patterns: { anyOf: [{ items: { type: "string"; }; type: "array"; }, { ...; }]; }; }; type: "object"; }]; type: "array"; }]; } |
const | `baseRule.meta.schema as { | |
| anyOf: [ | ||||
| unknown, | ||||
| { | ||||
| items: [ | ||||
| { | ||||
| properties: { | ||||
| paths: { | ||||
| items: { | ||||
| anyOf: [ | ||||
| { type: 'string' }, | ||||
| { | ||||
| properties: JSONSchema4ObjectSchema['properties']; | ||||
| required: string[]; | ||||
| type: 'object'; | ||||
| }, | ||||
| ]; | ||||
| }; | ||||
| type: 'array'; | ||||
| }; | ||||
| patterns: { | ||||
| anyOf: [ | ||||
| { items: { type: 'string' }; type: 'array' }, | ||||
| { | ||||
| items: { | ||||
| properties: JSONSchema4ObjectSchema['properties']; | ||||
| required: string[]; | ||||
| type: 'object'; | ||||
| }; | ||||
| type: 'array'; | ||||
| }, | ||||
| ]; | ||||
| }; | ||||
| }; | ||||
| type: 'object'; | ||||
| }, | ||||
| ]; | ||||
| type: 'array'; | ||||
| }, | ||||
| ]; | ||||
| }` | ✗ | |||
allowTypeImportsOptionSchema |
JSONSchema4ObjectSchema['properties'] |
const | `{ | |
| allowTypeImports: { | ||||
| type: 'boolean', | ||||
| description: 'Whether to allow type-only imports for a path.', | ||||
| }, | ||||
| }` | ✗ | |||
arrayOfStringsOrObjects |
JSONSchema4ArraySchema |
const | `{ | |
| type: 'array', | ||||
| items: { | ||||
| anyOf: [ | ||||
| { type: 'string' }, | ||||
| { | ||||
| type: 'object', | ||||
| additionalProperties: false, | ||||
| properties: { | ||||
| ...tryAccess( | ||||
| () => | ||||
| baseSchema.anyOf[1].items[0].properties.paths.items.anyOf[1] | ||||
| .properties, | ||||
| undefined, | ||||
| ), | ||||
| ...allowTypeImportsOptionSchema, | ||||
| }, | ||||
| required: tryAccess( | ||||
| () => | ||||
| baseSchema.anyOf[1].items[0].properties.paths.items.anyOf[1] | ||||
| .required, | ||||
| undefined, | ||||
| ), | ||||
| }, | ||||
| ], | ||||
| }, | ||||
| uniqueItems: true, | ||||
| }` | ✗ | |||
arrayOfStringsOrObjectPatterns |
JSONSchema4AnyOfSchema |
const | `{ | |
| anyOf: [ | ||||
| { | ||||
| type: 'array', | ||||
| items: { | ||||
| type: 'string', | ||||
| }, | ||||
| uniqueItems: true, | ||||
| }, | ||||
| { | ||||
| type: 'array', | ||||
| items: { | ||||
| type: 'object', | ||||
| additionalProperties: false, | ||||
| properties: { | ||||
| ...tryAccess( | ||||
| () => | ||||
| baseSchema.anyOf[1].items[0].properties.patterns.anyOf[1].items | ||||
| .properties, | ||||
| undefined, | ||||
| ), | ||||
| ...allowTypeImportsOptionSchema, | ||||
| }, | ||||
| required: tryAccess( | ||||
| () => | ||||
| baseSchema.anyOf[1].items[0].properties.patterns.anyOf[1].items | ||||
| .required, | ||||
| [], | ||||
| ), | ||||
| }, | ||||
| uniqueItems: true, | ||||
| }, | ||||
| ], | ||||
| }` | ✗ | |||
schema |
JSONSchema4AnyOfSchema |
const | `{ | |
| anyOf: [ | ||||
| arrayOfStringsOrObjects, | ||||
| { | ||||
| type: 'array', | ||||
| additionalItems: false, | ||||
| items: [ | ||||
| { | ||||
| type: 'object', | ||||
| additionalProperties: false, | ||||
| properties: { | ||||
| paths: arrayOfStringsOrObjects, | ||||
| patterns: arrayOfStringsOrObjectPatterns, | ||||
| }, | ||||
| }, | ||||
| ], | ||||
| }, | ||||
| ], | ||||
| }` | ✗ | |||
allowedTypeImportPathNameSet |
Set<string> |
const | new Set<string>() |
✗ |
allowedImportTypeMatchers |
Ignore[] |
const | [] |
✗ |
allowedImportTypeRegexMatchers |
RegExp[] |
const | [] |
✗ |
synthesizedImport |
TSESTree.ImportDeclaration |
const | `{ | |
| ...node, | ||||
| type: AST_NODE_TYPES.ImportDeclaration, | ||||
| assertions: [], | ||||
| attributes: [], | ||||
| source: node.moduleReference.expression, | ||||
| specifiers: [ | ||||
| { | ||||
| ...node.id, | ||||
| type: AST_NODE_TYPES.ImportDefaultSpecifier, | ||||
| local: node.id, | ||||
| // @ts-expect-error -- parent types are incompatible but it's fine for the purposes of this extension | ||||
| parent: node.id.parent, | ||||
| }, | ||||
| ], | ||||
| }` | ✗ |
Functions¶
tryAccess(getter: () => T, fallback: T): T¶
Code
- Parameters:
getter: () => Tfallback: T- Return Type:
T - Calls:
getter
isObjectOfPaths(obj: unknown): obj is { paths: ArrayOfStringOrObject }¶
Code
- Parameters:
obj: unknown- Return Type:
obj is { paths: ArrayOfStringOrObject } - Calls:
Object.hasOwn
isObjectOfPatterns(obj: unknown): obj is { patterns: ArrayOfStringOrObjectPatterns }¶
Code
- Parameters:
obj: unknown- Return Type:
obj is { patterns: ArrayOfStringOrObjectPatterns } - Calls:
Object.hasOwn
isOptionsArrayOfStringOrObject(options: Options): options is ArrayOfStringOrObject¶
Code
- Parameters:
options: Options- Return Type:
options is ArrayOfStringOrObject - Calls:
isObjectOfPathsisObjectOfPatterns
getRestrictedPaths(options: Options): ArrayOfStringOrObject¶
Code
- Parameters:
options: Options- Return Type:
ArrayOfStringOrObject - Calls:
isOptionsArrayOfStringOrObjectisObjectOfPaths
getRestrictedPatterns(options: Options): ArrayOfStringOrObjectPatterns¶
Code
- Parameters:
options: Options- Return Type:
ArrayOfStringOrObjectPatterns - Calls:
isObjectOfPatterns
shouldCreateRule(baseRules: RuleListener, options: Options): baseRules is Exclude<RuleListener, Record<string, never>>¶
Code
function shouldCreateRule(
baseRules: RuleListener,
options: Options,
): baseRules is Exclude<RuleListener, Record<string, never>> {
if (Object.keys(baseRules).length === 0 || options.length === 0) {
return false;
}
if (!isOptionsArrayOfStringOrObject(options)) {
return !!(options[0].paths?.length || options[0].patterns?.length);
}
return true;
}
- Parameters:
baseRules: RuleListeneroptions: Options- Return Type:
baseRules is Exclude<RuleListener, Record<string, never>> - Calls:
Object.keysisOptionsArrayOfStringOrObject
isAllowedTypeImportPath(importSource: string): boolean¶
Code
- Parameters:
importSource: string- Return Type:
boolean - Calls:
allowedTypeImportPathNameSet.has
isAllowedTypeImportPattern(importSource: string): boolean¶
Code
- Parameters:
importSource: string- Return Type:
boolean - Calls:
allowedImportTypeMatchers.somematcher.ignoresallowedImportTypeRegexMatchers.someregex.test- Internal Comments:
checkImportNode(node: TSESTree.ImportDeclaration): void¶
Code
function checkImportNode(node: TSESTree.ImportDeclaration): void {
if (
node.importKind === 'type' ||
(node.specifiers.length > 0 &&
node.specifiers.every(
specifier =>
specifier.type === AST_NODE_TYPES.ImportSpecifier &&
specifier.importKind === 'type',
))
) {
const importSource = node.source.value.trim();
if (
!isAllowedTypeImportPath(importSource) &&
!isAllowedTypeImportPattern(importSource)
) {
return rules.ImportDeclaration(node);
}
} else {
return rules.ImportDeclaration(node);
}
}
- Parameters:
node: TSESTree.ImportDeclaration- Return Type:
void - Calls:
node.specifiers.everynode.source.value.trimisAllowedTypeImportPathisAllowedTypeImportPatternrules.ImportDeclaration