You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							121 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
	
	
							121 lines
						
					
					
						
							3.4 KiB
						
					
					
				'use strict';
 | 
						|
 | 
						|
var MagicString = require('magic-string');
 | 
						|
var pluginutils = require('@rollup/pluginutils');
 | 
						|
 | 
						|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
 | 
						|
 | 
						|
var MagicString__default = /*#__PURE__*/_interopDefaultLegacy(MagicString);
 | 
						|
 | 
						|
function escape(str) {
 | 
						|
  return str.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&');
 | 
						|
}
 | 
						|
 | 
						|
function ensureFunction(functionOrValue) {
 | 
						|
  if (typeof functionOrValue === 'function') { return functionOrValue; }
 | 
						|
  return function () { return functionOrValue; };
 | 
						|
}
 | 
						|
 | 
						|
function longest(a, b) {
 | 
						|
  return b.length - a.length;
 | 
						|
}
 | 
						|
 | 
						|
function getReplacements(options) {
 | 
						|
  if (options.values) {
 | 
						|
    return Object.assign({}, options.values);
 | 
						|
  }
 | 
						|
  var values = Object.assign({}, options);
 | 
						|
  delete values.delimiters;
 | 
						|
  delete values.include;
 | 
						|
  delete values.exclude;
 | 
						|
  delete values.sourcemap;
 | 
						|
  delete values.sourceMap;
 | 
						|
  return values;
 | 
						|
}
 | 
						|
 | 
						|
function mapToFunctions(object) {
 | 
						|
  return Object.keys(object).reduce(function (fns, key) {
 | 
						|
    var functions = Object.assign({}, fns);
 | 
						|
    functions[key] = ensureFunction(object[key]);
 | 
						|
    return functions;
 | 
						|
  }, {});
 | 
						|
}
 | 
						|
 | 
						|
function replace(options) {
 | 
						|
  if ( options === void 0 ) options = {};
 | 
						|
 | 
						|
  var filter = pluginutils.createFilter(options.include, options.exclude);
 | 
						|
  var delimiters = options.delimiters;
 | 
						|
  var preventAssignment = options.preventAssignment;
 | 
						|
  var functionValues = mapToFunctions(getReplacements(options));
 | 
						|
  var keys = Object.keys(functionValues).sort(longest).map(escape);
 | 
						|
  var lookahead = preventAssignment ? '(?!\\s*=[^=])' : '';
 | 
						|
  var pattern = delimiters
 | 
						|
    ? new RegExp(
 | 
						|
        ((escape(delimiters[0])) + "(" + (keys.join('|')) + ")" + (escape(delimiters[1])) + lookahead),
 | 
						|
        'g'
 | 
						|
      )
 | 
						|
    : new RegExp(("\\b(" + (keys.join('|')) + ")\\b" + lookahead), 'g');
 | 
						|
 | 
						|
  return {
 | 
						|
    name: 'replace',
 | 
						|
 | 
						|
    buildStart: function buildStart() {
 | 
						|
      if (![true, false].includes(preventAssignment)) {
 | 
						|
        this.warn({
 | 
						|
          message:
 | 
						|
            "@rollup/plugin-replace: 'preventAssignment' currently defaults to false. It is recommended to set this option to `true`, as the next major version will default this option to `true`."
 | 
						|
        });
 | 
						|
      }
 | 
						|
    },
 | 
						|
 | 
						|
    renderChunk: function renderChunk(code, chunk) {
 | 
						|
      var id = chunk.fileName;
 | 
						|
      if (!keys.length) { return null; }
 | 
						|
      if (!filter(id)) { return null; }
 | 
						|
      return executeReplacement(code, id);
 | 
						|
    },
 | 
						|
 | 
						|
    transform: function transform(code, id) {
 | 
						|
      if (!keys.length) { return null; }
 | 
						|
      if (!filter(id)) { return null; }
 | 
						|
      return executeReplacement(code, id);
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  function executeReplacement(code, id) {
 | 
						|
    var magicString = new MagicString__default['default'](code);
 | 
						|
    if (!codeHasReplacements(code, id, magicString)) {
 | 
						|
      return null;
 | 
						|
    }
 | 
						|
 | 
						|
    var result = { code: magicString.toString() };
 | 
						|
    if (isSourceMapEnabled()) {
 | 
						|
      result.map = magicString.generateMap({ hires: true });
 | 
						|
    }
 | 
						|
    return result;
 | 
						|
  }
 | 
						|
 | 
						|
  function codeHasReplacements(code, id, magicString) {
 | 
						|
    var result = false;
 | 
						|
    var match;
 | 
						|
 | 
						|
    // eslint-disable-next-line no-cond-assign
 | 
						|
    while ((match = pattern.exec(code))) {
 | 
						|
      result = true;
 | 
						|
 | 
						|
      var start = match.index;
 | 
						|
      var end = start + match[0].length;
 | 
						|
      var replacement = String(functionValues[match[1]](id));
 | 
						|
      magicString.overwrite(start, end, replacement);
 | 
						|
    }
 | 
						|
    return result;
 | 
						|
  }
 | 
						|
 | 
						|
  function isSourceMapEnabled() {
 | 
						|
    return options.sourceMap !== false && options.sourcemap !== false;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
module.exports = replace;
 |