0.7.3 • Published 10 years ago
string-alter v0.7.3
StringAlter.js
Alters a string by replacing multiple range fragments in one fast pass. Works in node and browsers.
Usage
var StringAlter = require("string-alter");
var string =
'let x = (a, b, c = 998) =>'
+ 'a + b + c;console.log(x(1, 1) === 1000)'
+ '\n'
+ 'console.log(((function(){return (a)=>a*22.032})())("321") === "321"*22.032)'
;
var alter = new StringAlter(string);
alter
.replace(0, 3, "var")//'let'
.insert(8, "function")//'function ' + "(a, b"
.remove(13, 22)//', c = 998'
.remove(23, 26)//' =>'
.wrap(26, 35, "{", "}", {extend: true})
.insert(26,
"var " + alter.get(15, 16) + " = arguments[2];" //var c = arguments[2];
+ "if(" + alter.get(15, 16) + " === void 0)" //if(c === void 0)
+ alter.get(15, 16) + " = " + alter.get(19, 22) + ";"//c = 998;
)
.insert(26, "return ")//'return ' + "a + b + c;"
.insert(98, "function")//'function ' + "(a)"
.remove(101, 103)//'=>'
.wrap(103, 111, "{", "}", {extend: true})
.insert(103, "return ")//'return ' + "a*22.032"
;
var result = alter.apply();
result ===
'var x = function(a, b)'
+ '{var c = arguments[2];if(c === void 0)c = 998;return a + b + c};console.log(x(1, 1) === 1000)'
+ '\n'
+ 'console.log(((function(){return function(a){return a*22.032}})())("321") === "321"*22.032)'
;
The fragments does not need to be sorted but must not overlap. More examples in test
API
var alter = new StringAlter(source: string, options: Object?);
// options is optional. See 'StringAlter options'
alter.replace(from: number, to: number, str: string): StringAlter
Replace substring from between "from" and "to" positions to given one "str"
alter.insert(pos: number, str: string): StringAlter
Insert substring to "pos" position
alter.wrap(from: number, to: number, begin: string, end: string): StringAlter
Insert "begin" string to "from" position and "end" string to "to" position
alter.remove(from: number, to: number): StringAlter
Remove substring
alter.get(from: number, to: number): Object
Get substring from original string wrapped in special object with toString function
alter.apply(): string
Apply changes. Return result string
StringAlter options
{
policy: {}// see 'Changes policy'
}
Changes policy
{
"ruleName": resolve//resolve should be "allow" or "exclude", or any other value which will be interpreted as "error"
}
This is a set of rules that can allow
or exclude
some unobvious changes
fromMoreThanTo
(default: 'error') - when changes start position is is larger than end positionunUniqueRemove
(default: 'error') - secondremove
call for already removed fragment (with the same method parameter values)eraseInErase
(default: 'allow') -remove
orreplace
inside anotherremove
orreplace
Installation
Node
Install using npm
npm install string-alter
var StringAlter = require("string-alter");
Browser
Clone the repo and include it in a script tag
git clone https://github.com/termi/StringAlter.git
<script src="StringAlter/dist/StringAlter.js"></script>
LICENSE
MIT