Sha256: 5338a0df56d522cde3a230b45b7f6b8e0c4ac3746b8b1e264959f623d6df77f8

Contents?: true

Size: 1.83 KB

Versions: 2

Compression:

Stored size: 1.83 KB

Contents

import MagicString from 'magic-string';
import { createFilter } from 'rollup-pluginutils';

function escape(str) {
	return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
}

function functor(thing) {
	if (typeof thing === 'function') { return thing; }
	return function () { return thing; };
}

function longest(a, b) {
	return b.length - a.length;
}

function replace(options) {
	if ( options === void 0 ) options = {};

	var filter = createFilter(options.include, options.exclude);
	var delimiters = options.delimiters;

	var values;

	if (options.values) {
		values = options.values;
	} else {
		values = Object.assign({}, options);
		delete values.delimiters;
		delete values.include;
		delete values.exclude;
	}

	var keys = Object.keys(values).sort(longest).map(escape);

	var pattern = delimiters ?
		new RegExp(
			((escape(delimiters[0])) + "(" + (keys.join('|')) + ")" + (escape(delimiters[1]))),
			'g'
		) :
		new RegExp(
			("\\b(" + (keys.join('|')) + ")\\b"),
			'g'
		);

	// convert all values to functions
	Object.keys(values).forEach(function (key) {
		values[key] = functor(values[key]);
	});

	return {
		name: 'replace',

		transform: function transform(code, id) {
			if (!filter(id)) { return null; }

			var magicString = new MagicString(code);

			var hasReplacements = false;
			var match;
			var start, end, replacement;

			while ((match = pattern.exec(code))) {
				hasReplacements = true;

				start = match.index;
				end = start + match[0].length;
				replacement = String(values[match[1]](id));

				magicString.overwrite(start, end, replacement);
			}

			if (!hasReplacements) { return null; }

			var result = { code: magicString.toString() };
			if (options.sourceMap !== false && options.sourcemap !== false)
				{ result.map = magicString.generateMap({ hires: true }); }

			return result;
		}
	};
}

export default replace;

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jass-vue-0.4.0 vendor/node_modules/rollup-plugin-replace/dist/rollup-plugin-replace.es.js
jass-vue-0.3.0 vendor/node_modules/rollup-plugin-replace/dist/rollup-plugin-replace.es.js