string-alter
Version:
String alter
128 lines (99 loc) • 3.6 kB
Markdown
Alters a string by replacing multiple range fragments in one fast pass.
Works in node and browsers.
```javascript
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`
```javascript
var alter = new StringAlter(source: string, options: Object?);
// options is optional. See 'StringAlter options'
```
```javascript
alter.replace(from: number, to: number, str: string): StringAlter
```
Replace substring from between "from" and "to" positions to given one "str"
```javascript
alter.insert(pos: number, str: string): StringAlter
```
Insert substring to "pos" position
```javascript
alter.wrap(from: number, to: number, begin: string, end: string): StringAlter
```
Insert "begin" string to "from" position and "end" string to "to" position
```javascript
alter.remove(from: number, to: number): StringAlter
```
Remove substring
```javascript
alter.get(from: number, to: number): Object
```
Get substring from original string wrapped in special object with toString function
```javascript
alter.apply(): string
```
Apply changes. Return result string
```javascript
{
policy: {}// see 'Changes policy'
}
```
```javascript
{
"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 position
* `unUniqueRemove` (default: 'error') - second `remove` call for already removed fragment (with the same method parameter values)
* `eraseInErase` (default: 'allow') - `remove` or `replace` inside another `remove` or `replace`
## Installation
### Node
Install using npm
npm install string-alter
```javascript
var StringAlter = require("string-alter");
```
Clone the repo and include it in a script tag
git clone https://github.com/termi/StringAlter.git
```html
<script src="StringAlter/dist/StringAlter.js"></script>
```
MIT