@reactionable/cli
Version:
111 lines • 4.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypescriptImport = void 0;
class TypescriptImport {
constructor(packageName, modules) {
this.packageName = packageName;
this.modules = modules;
}
isLocal() {
return !!/^\./.exec(this.packageName);
}
isDefaultImport() {
return this.modules[TypescriptImport.defaultImport] === TypescriptImport.defaultImport;
}
static fromString(line) {
var _a;
const importRegex = /^\s*import\s((.+)\sfrom\s+)?['"](.+)['"]\s*;?$/;
const matches = importRegex.exec(line.trim());
if (!matches) {
return null;
}
return new TypescriptImport(matches[3].trim(), TypescriptImport.parseImportModules(((_a = matches[2]) === null || _a === void 0 ? void 0 : _a.trim()) || TypescriptImport.defaultImport));
}
static parseImportModules(modules) {
let parsedPodules = {};
modules = modules.trim();
const brakesMatches = /\{(.+)\}/.exec(modules);
if (brakesMatches) {
parsedPodules = Object.assign(parsedPodules, TypescriptImport.parseImportModule(brakesMatches[1]));
modules = modules.replace(brakesMatches[0], "").trim();
}
if (modules.length) {
parsedPodules = Object.assign(parsedPodules, TypescriptImport.parseImportModule(modules, "default"));
}
return parsedPodules;
}
static parseImportModule(importModule, defaultAs = "") {
const parsedPodules = {};
for (const modulePart of importModule.trim().split(",")) {
if (!modulePart.length) {
continue;
}
const moduleParts = modulePart.trim().split("as");
parsedPodules[moduleParts[0].trim()] =
moduleParts.length === 1 ? defaultAs : moduleParts[1].trim();
}
return parsedPodules;
}
addModules(modules) {
this.modules = Object.assign(this.modules, modules);
}
removeModules(modulesToRemove) {
for (const moduleName of Object.keys(this.modules)) {
for (const moduleToRemove of Object.keys(modulesToRemove)) {
if (moduleName === moduleToRemove) {
delete this.modules[moduleName];
}
}
}
}
toString() {
let defaultImport = "";
let globImport = "";
const brakesImports = [];
const orderedModules = {};
const moduleKeys = Object.keys(this.modules);
moduleKeys.sort();
for (const key of moduleKeys) {
orderedModules[key] = this.modules[key];
}
for (const moduleName of Object.keys(orderedModules)) {
if (this.modules[moduleName] === TypescriptImport.defaultImport) {
if (defaultImport.length) {
throw new Error(`Unable to have many imports for package "${this.packageName}": "${defaultImport}, ${moduleName}"`);
}
defaultImport = moduleName;
continue;
}
if (moduleName === TypescriptImport.globImport) {
if (globImport.length) {
throw new Error(`Unable to have many glob imports for package "${this.packageName}": "${globImport}, ${moduleName}"`);
}
globImport = this.modules[moduleName];
continue;
}
let brakesImport = moduleName;
if (this.modules[moduleName].length) {
brakesImport += " as " + this.modules[moduleName];
}
brakesImports.push(brakesImport);
}
let imports = defaultImport;
if (globImport) {
imports += `${imports.length > 0 ? ", " : ""}${TypescriptImport.globImport} as ${globImport}`;
}
if (brakesImports.length) {
imports += `${imports.length > 0 ? ", " : ""}{ ${brakesImports.join(", ")} }`;
}
if (!imports.length) {
return "";
}
if (imports === defaultImport && defaultImport === TypescriptImport.defaultImport) {
return `import '${this.packageName}';`;
}
return `import ${imports} from '${this.packageName}';`;
}
}
exports.TypescriptImport = TypescriptImport;
TypescriptImport.globImport = "*";
TypescriptImport.defaultImport = "default";
//# sourceMappingURL=TypescriptImport.js.map