blob: d958352ff282319b0e59ffbffb16b2038f839848 [file] [log] [blame]
{"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"]}