Blame view

node_modules/zrender/build/transformImport.js 2.67 KB
bd028579   易尊强   2/28
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();