UNPKG

@reactionable/cli

Version:
111 lines 4.48 kB
"use strict"; 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