{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/bundler/resolve/resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import * as async from \"async\";\nimport * as browserResolve from \"browser-resolve\";\nimport * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\n\nimport { Logger } from \"log4js\";\n\nimport { Configuration } from \"../../shared/configuration\";\nimport { BundleItem } from \"../bundle-item\";\nimport { DependencyWalker } from \"../dependency-walker\";\nimport { SourceReader } from \"./source-reader\";\n\nimport PathTool = require(\"../../shared/path-tool\");\n\nexport class Resolver {\n\n    private shims: any;\n    private bowerPackages: { [key: string]: string; } = {};\n    private filenameCache: string[] = [];\n    private lookupNameCache: { [key: string]: string; } = {};\n\n    constructor(private config: Configuration,\n                private dependencyWalker: DependencyWalker,\n                private log: Logger,\n                private sourceReader: SourceReader) { }\n\n    public initialize() {\n        this.shims = this.config.bundlerOptions.addNodeGlobals ?\n            require(\"./shims\") : undefined;\n        this.log.debug(this.shims);\n        this.cacheBowerPackages();\n    }\n\n    public resolveModule(requiringModule: string,\n                         bundleItem: BundleItem,\n                         buffer: BundleItem[],\n                         onModuleResolved: (bundleItem: BundleItem) => void) {\n\n        if (bundleItem.isTypescriptFile() && !bundleItem.isNpmModule()) {\n            process.nextTick(() => {\n                onModuleResolved(bundleItem);\n            });\n            return;\n        }\n\n        if (bundleItem.isTypingsFile() && !bundleItem.isNpmModule()) {\n            this.tryResolveTypingAsJavascript(bundleItem, onModuleResolved);\n            return;\n        }\n\n        bundleItem.lookupName = bundleItem.isNpmModule() ?\n                bundleItem.moduleName :\n                path.join(path.dirname(requiringModule), bundleItem.moduleName);\n\n        if (this.lookupNameCache[bundleItem.lookupName]) {\n            bundleItem.filename = this.lookupNameCache[bundleItem.lookupName];\n            process.nextTick(() => {\n                onModuleResolved(bundleItem);\n            });\n            return;\n        }\n\n        if (this.config.bundlerOptions.exclude.indexOf(bundleItem.moduleName) !== -1) {\n            this.log.debug(\"Excluding module %s from %s\", bundleItem.moduleName, requiringModule);\n            process.nextTick(() => {\n                onModuleResolved(bundleItem);\n            });\n            return;\n        }\n\n        const onFilenameResolved = () => {\n\n            this.lookupNameCache[bundleItem.lookupName] = bundleItem.filename;\n\n            if (this.isInFilenameCache(bundleItem) || bundleItem.isTypescriptFile()) {\n                process.nextTick(() => {\n                    onModuleResolved(bundleItem);\n                });\n            }\n            else {\n                this.filenameCache.push(bundleItem.filename);\n                this.sourceReader.read(bundleItem, () => {\n                    this.resolveDependencies(bundleItem, buffer, onDependenciesResolved);\n                });\n            }\n        };\n\n        const onDependenciesResolved = () => {\n            buffer.push(bundleItem);\n            return onModuleResolved(bundleItem);\n        };\n\n        this.resolveFilename(requiringModule, bundleItem, onFilenameResolved);\n    }\n\n    private tryResolveTypingAsJavascript(bundleItem: BundleItem,\n                                         onModuleResolved: (bundleItem: BundleItem) => void): void {\n        const jsfile = bundleItem.filename.replace(/.d.ts$/i, \".js\");\n        fs.stat(jsfile, (error: Error, stats: fs.Stats) => {\n            if (!error && stats) {\n                this.log.debug(\"Resolving %s to %s\", bundleItem.filename, jsfile);\n                bundleItem.filename = jsfile;\n            }\n            onModuleResolved(bundleItem);\n        });\n    }\n\n    private cacheBowerPackages(): void {\n        try {\n            const bower = require(\"bower\");\n            bower.commands\n                .list({ map: true }, { offline: true })\n                .on(\"end\", (map: any) => {\n\n                    Object.keys(map.dependencies).forEach((moduleName) => {\n\n                        const pkg = map.dependencies[moduleName];\n                        const files = [\"index.js\", moduleName + \".js\"];\n\n                        if (pkg.pkgMeta && pkg.pkgMeta.main) {\n                            if (Array.isArray(pkg.pkgMeta.main)) {\n                                pkg.pkgMeta.main.forEach((file: any) => {\n                                    files.push(file);\n                                });\n                            }\n                            else {\n                                files.push(pkg.pkgMeta.main);\n                            }\n                        }\n\n                        files.forEach((file) => {\n                            try {\n                                const main = path.join(pkg.canonicalDir, file);\n                                fs.statSync(main);\n                                this.bowerPackages[moduleName] = main;\n                            }\n                            catch (error) {\n                                // noop\n                            }\n                        });\n                    });\n                    this.log.debug(\"Cached bower packages: %s %s\", os.EOL, JSON.stringify(this.bowerPackages, null, 2));\n                });\n        }\n        catch (error) {\n            this.log.debug(\"No bower detected, skipping\");\n        }\n    }\n\n    private isInFilenameCache(bundleItem: BundleItem): boolean {\n        return this.filenameCache.indexOf(bundleItem.filename) !== -1;\n    }\n\n    private resolveCompilerPathModulename(bundleItem: BundleItem): string {\n\n        let moduleName = bundleItem.moduleName;\n\n        if (bundleItem.isNpmModule() && bundleItem.isTypingsFile() &&\n            bundleItem.filename.indexOf(bundleItem.moduleName) === -1) {\n\n            const filename = PathTool.fixWindowsPath(bundleItem.filename);\n            const matches = filename.match(/\\/node_modules\\/(.*)\\//);\n\n            if (matches && matches[1]) {\n                moduleName = matches[1];\n                this.log.debug(\"Resolved module name [%s] to [%s]\", bundleItem.moduleName, moduleName);\n            }\n        }\n\n        return moduleName;\n    }\n\n    private resolveFilename(requiringModule: string, bundleItem: BundleItem, onFilenameResolved: () => void) {\n\n        const moduleName = this.resolveCompilerPathModulename(bundleItem);\n\n        if (this.bowerPackages[moduleName]) {\n            bundleItem.filename = this.bowerPackages[moduleName];\n            this.log.debug(\"Resolved [%s] to bower package: %s\", moduleName, bundleItem.filename);\n            return onFilenameResolved();\n        }\n\n        if (this.config.bundlerOptions.resolve.alias[moduleName]) {\n            const alias = this.config.bundlerOptions.resolve.alias[moduleName];\n            const relativePath = path.relative(this.config.karma.basePath, alias);\n            bundleItem.filename = path.join(this.config.karma.basePath, relativePath);\n            this.log.debug(\"Resolved [%s] to alias: %s\", moduleName, bundleItem.filename);\n            return onFilenameResolved();\n        }\n\n        let bopts: browserResolve.AsyncOpts = {\n            extensions: this.config.bundlerOptions.resolve.extensions,\n            filename: requiringModule,\n            moduleDirectory: this.config.bundlerOptions.resolve.directories,\n            modules: this.shims\n        };\n\n        browserResolve(moduleName, bopts, (error, filename) => {\n            if (!error) {\n                bundleItem.filename = fs.realpathSync(filename);\n                return onFilenameResolved();\n            }\n            bopts = {\n                basedir: bundleItem.filename ? path.dirname(bundleItem.filename) : this.config.karma.basePath,\n                extensions: this.config.bundlerOptions.resolve.extensions,\n                moduleDirectory: this.config.bundlerOptions.resolve.directories,\n                modules: this.shims\n            };\n\n            browserResolve(moduleName, bopts, (error2, filename2) => {\n                if (error2) {\n                    if (bundleItem.filename && !bundleItem.isTypingsFile()) {\n                        // This is probably a compiler path module (.js)\n                        return onFilenameResolved();\n                    }\n                    throw new Error(\"Unable to resolve module [\" +\n                        moduleName + \"] from [\" + requiringModule + \"]\" + os.EOL +\n                        JSON.stringify(bopts, undefined, 2) + os.EOL +\n                        error);\n                }\n                bundleItem.filename = fs.realpathSync(filename2);\n                onFilenameResolved();\n            });\n        });\n    }\n\n    private resolveDependencies(bundleItem: BundleItem,\n                                buffer: BundleItem[],\n                                onDependenciesResolved: () => void) {\n\n        if (bundleItem.isScript() && this.dependencyWalker.hasRequire(bundleItem.source)) {\n            this.dependencyWalker.collectJavascriptDependencies(bundleItem, (moduleNames) => {\n                async.each(moduleNames, (moduleName, onModuleResolved) => {\n                    const dependency = new BundleItem(moduleName);\n                    this.resolveModule(bundleItem.filename, dependency, buffer, (resolved) => {\n                        if (resolved) {\n                            bundleItem.dependencies.push(resolved);\n                        }\n                        onModuleResolved();\n                    });\n                }, onDependenciesResolved);\n            });\n        }\n        else {\n            process.nextTick(() => {\n                onDependenciesResolved();\n            });\n        }\n    }\n}\n"]}