Home Reference Source Repository

src/Plugin.js

let option;

/**
 * take option
 * @param {Object} ev - handle event.
 */
export function onStart(ev) {
  option = ev.data.option;
  for (let item of option.replaces) {
    item.from = new RegExp(item.from);
  }
}

/**
 * replace source.value in AST node with ImportDeclaration type using option.replaces.
 * @param {Object} ev - handle event.
 */
export function onHandleAST(ev) {
  let ast = ev.data.ast;
  for (let node of ast.body) {
    if (node.type !== 'ImportDeclaration') continue;

    if (node.source && node.source.value) {
      const tmp = node.source.value
      for (let item of option.replaces) {
        node.source.value = node.source.value.replace(item.from, item.to)
      }
      if (tmp !== node.source.value) {
        node.source.value = node.source.value + ".js"
      }
    }
  }
}