| // adding js extension in the import statement. | 
|   | 
| // Reference: | 
| // https://regexr.com/47jlq | 
| // https://gist.github.com/manekinekko/7e58a17bc62a9be47172 | 
| const regexp = /((?:(?:import)|(?:export))\s+?(?:(?:(?:[\w*\s{},\/]*)\s+from\s+?)|))(?:(?:"(.*?)")|(?:'(.*?)'))([\s]*?(?:;|$|))/g; | 
|   | 
| module.exports.transformImport = function (code, processModuleName) { | 
|     return code.replace(regexp, (str, prefix, moduleNameA, moduleNameB, postfix) => { | 
|         let moduleName = (moduleNameA === undefined ? moduleNameB : moduleNameA).trim(); | 
|         const quote = moduleNameA === undefined ? "'" : '"'; | 
|         return prefix + quote + processModuleName(moduleName) + quote + postfix; | 
|         // Not support other extensions. | 
|     }); | 
| } | 
|   | 
|   | 
| const testCases = `import videos from './videos/index.js' | 
|   | 
| export default (socket, context) => { | 
|     // dynamically importing all the socket.io handler (it's dynamic import that happen at run time) | 
|   import { | 
|     something | 
| } from "./test/okbb" | 
|   | 
| const f = 2; | 
|   | 
| import test from 'obb' | 
|   | 
|   | 
| import { | 
|   Component | 
| } from '@angular2/core'; | 
|   | 
| import defaultMember from "module-0"; | 
|   | 
| import   *    as name from "module-1  "; | 
|   | 
| import   {  member }   from "  module-2"; | 
|   | 
| import { member as alias } from "module-3"; | 
|   | 
| import { member1 , member2 } from "module-4"; | 
|   | 
| import { member1 , member2 as alias2 , member3 as alias3 } from "module-5"; | 
|   | 
| import defaultMember, { member, member } from "module-6"; | 
|   | 
| import defaultMember, * as name from "module-7"; | 
|   | 
| import "module-8"; | 
|   | 
| import "module-9"    // comment no problem | 
|   | 
| import { | 
|     AAAA, | 
|     // BBB | 
| } from 'module-10'; | 
|   | 
| import "module-b' // doesn't match -> the opening and closing quation mark are different | 
|   | 
| importing hya from 'ttt' | 
|   | 
| import fbsfrom '' | 
|   | 
|   | 
| // Export expressions. | 
| export { aaa }; | 
|   | 
| export * from "module-11"; | 
|   | 
| export { aaa } from "module-12"; | 
|   | 
| // Should not be parsed | 
| export default aaa; | 
|   | 
| export function bbb () { | 
| }; | 
| ` | 
|   | 
| module.exports.runTest = function () { | 
|     const expected = [ | 
|         './videos/index.js', | 
|         './test/okbb', | 
|         'obb', | 
|         '@angular2/core', | 
|         'module-0', | 
|         'module-1', | 
|         'module-2', | 
|         'module-3', | 
|         'module-4', | 
|         'module-5', | 
|         'module-6', | 
|         'module-7', | 
|         'module-8', | 
|         'module-9', | 
|         'module-10', | 
|         'module-11', | 
|         'module-12' | 
|     ] | 
|     let cursor = 0; | 
|     module.exports.transformImport(testCases, (moduleName) => { | 
|         if (expected[cursor] !== moduleName) { | 
|             throw new Error(`Expected ${expected[cursor]}. Actual ${moduleName}`); | 
|         } | 
|         cursor++; | 
|         return moduleName; | 
|     }) | 
|     if (cursor !== expected.length) { | 
|         throw new Error('Test failed'); | 
|     } | 
|     console.log('All test passed!') | 
| } | 
|   | 
| // module.exports.runTest(); |