mh-two-thousand-and-two
2024-03-25 b8c93990f3fa5e50a8aca16bdc9c2758168aa0fd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// 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();