80 lines
3.1 KiB
JavaScript
80 lines
3.1 KiB
JavaScript
|
"use strict";
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
||
|
// See LICENSE in the project root for license information.
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.AstImport = exports.AstImportKind = void 0;
|
||
|
const node_core_library_1 = require("@rushstack/node-core-library");
|
||
|
const AstEntity_1 = require("./AstEntity");
|
||
|
/**
|
||
|
* Indicates the import kind for an `AstImport`.
|
||
|
*/
|
||
|
var AstImportKind;
|
||
|
(function (AstImportKind) {
|
||
|
/**
|
||
|
* An import statement such as `import X from "y";`.
|
||
|
*/
|
||
|
AstImportKind[AstImportKind["DefaultImport"] = 0] = "DefaultImport";
|
||
|
/**
|
||
|
* An import statement such as `import { X } from "y";`.
|
||
|
*/
|
||
|
AstImportKind[AstImportKind["NamedImport"] = 1] = "NamedImport";
|
||
|
/**
|
||
|
* An import statement such as `import * as x from "y";`.
|
||
|
*/
|
||
|
AstImportKind[AstImportKind["StarImport"] = 2] = "StarImport";
|
||
|
/**
|
||
|
* An import statement such as `import x = require("y");`.
|
||
|
*/
|
||
|
AstImportKind[AstImportKind["EqualsImport"] = 3] = "EqualsImport";
|
||
|
/**
|
||
|
* An import statement such as `interface foo { foo: import("bar").a.b.c }`.
|
||
|
*/
|
||
|
AstImportKind[AstImportKind["ImportType"] = 4] = "ImportType";
|
||
|
})(AstImportKind = exports.AstImportKind || (exports.AstImportKind = {}));
|
||
|
/**
|
||
|
* For a symbol that was imported from an external package, this tracks the import
|
||
|
* statement that was used to reach it.
|
||
|
*/
|
||
|
class AstImport extends AstEntity_1.AstSyntheticEntity {
|
||
|
constructor(options) {
|
||
|
super();
|
||
|
this.importKind = options.importKind;
|
||
|
this.modulePath = options.modulePath;
|
||
|
this.exportName = options.exportName;
|
||
|
// We start with this assumption, but it may get changed later if non-type-only import is encountered.
|
||
|
this.isTypeOnlyEverywhere = options.isTypeOnly;
|
||
|
this.key = AstImport.getKey(options);
|
||
|
}
|
||
|
/** {@inheritdoc} */
|
||
|
get localName() {
|
||
|
// abstract
|
||
|
return this.exportName;
|
||
|
}
|
||
|
/**
|
||
|
* Calculates the lookup key used with `AstImport.key`
|
||
|
*/
|
||
|
static getKey(options) {
|
||
|
switch (options.importKind) {
|
||
|
case AstImportKind.DefaultImport:
|
||
|
return `${options.modulePath}:${options.exportName}`;
|
||
|
case AstImportKind.NamedImport:
|
||
|
return `${options.modulePath}:${options.exportName}`;
|
||
|
case AstImportKind.StarImport:
|
||
|
return `${options.modulePath}:*`;
|
||
|
case AstImportKind.EqualsImport:
|
||
|
return `${options.modulePath}:=`;
|
||
|
case AstImportKind.ImportType: {
|
||
|
const subKey = !options.exportName
|
||
|
? '*' // Equivalent to StarImport
|
||
|
: options.exportName.includes('.') // Equivalent to a named export
|
||
|
? options.exportName.split('.')[0]
|
||
|
: options.exportName;
|
||
|
return `${options.modulePath}:${subKey}`;
|
||
|
}
|
||
|
default:
|
||
|
throw new node_core_library_1.InternalError('Unknown AstImportKind');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
exports.AstImport = AstImport;
|
||
|
//# sourceMappingURL=AstImport.js.map
|