// 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(); 
 |