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