Comparing version 0.1.1 to 0.1.2
{ | ||
"name": "regjsgen", | ||
"description": "Generating JavaScript RegExps in JavaScript", | ||
"version": "0.1.1", | ||
"version": "0.1.2", | ||
"author": "Benjamin Tan <demoneaux@gmail.com> (https://d10.github.io/)", | ||
@@ -18,5 +18,2 @@ "license": "MIT", | ||
}, | ||
"dependencies": { | ||
"jsesc": "~0.4.3" | ||
}, | ||
"scripts": { | ||
@@ -26,4 +23,5 @@ "test": "node test/index.js" | ||
"devDependencies": { | ||
"got": "~0.3.0" | ||
"got": "~1.2.0", | ||
"jsesc": "~0.5.0" | ||
} | ||
} |
# RegJSGen | ||
Generating `RegExp`s from RegJSParser's AST. | ||
Generating `RegExp`s from RegJSParser’s AST. | ||
## Installation | ||
## Install | ||
```bash | ||
npm install regjsgen | ||
npm install --save regjsgen | ||
``` | ||
@@ -14,3 +14,11 @@ | ||
```js | ||
var generate = require('regjsgen').generate; | ||
var regjsgen = require('regjsgen'); | ||
// With `regjsparser` | ||
var regjsparser = require('regjsparser'); | ||
var regex = '^a$'; | ||
var ast = regjsparser.parse(regex); | ||
// Modify AST | ||
// ... | ||
// Regenerate `RegExp` | ||
regex = regjsgen.generate(ast); | ||
``` | ||
@@ -29,5 +37,5 @@ | ||
```bash | ||
node test/create_ref.js | ||
node test/update_fixture.js | ||
``` | ||
from the repo top directory. |
105
regjsgen.js
@@ -79,2 +79,22 @@ /*! | ||
function assertType(type, expected) { | ||
if (expected.indexOf('|') == -1) { | ||
if (type == expected) { | ||
return; | ||
} | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
expected = assertType.hasOwnProperty(expected) | ||
? assertType[expected] | ||
: (assertType[expected] = RegExp('^(?:' + expected + ')$')); | ||
if (expected.test(type)) { | ||
return; | ||
} | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
/*--------------------------------------------------------------------------*/ | ||
@@ -95,8 +115,4 @@ | ||
function generateAlternative(node) { | ||
var type = node.type; | ||
assertType(node.type, 'alternative'); | ||
if (type != 'alternative') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
var terms = node.body, | ||
@@ -120,8 +136,4 @@ length = terms ? terms.length : 0; | ||
function generateAnchor(node) { | ||
var type = node.type; | ||
assertType(node.type, 'anchor'); | ||
if (type != 'anchor') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
switch (node.kind) { | ||
@@ -142,8 +154,4 @@ case 'start': | ||
function generateAtom(node) { | ||
var type = node.type; | ||
assertType(node.type, 'anchor|characterClass|characterClassEscape|dot|group|ref|value'); | ||
if (!/^(?:anchor|characterClass(?:Escape)?|dot|group|ref|value)$/.test(type)) { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
return generate(node); | ||
@@ -153,8 +161,4 @@ } | ||
function generateCharacterClass(node) { | ||
var type = node.type; | ||
assertType(node.type, 'characterClass'); | ||
if (type != 'characterClass') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
var classRanges = node.body, | ||
@@ -180,8 +184,4 @@ length = classRanges ? classRanges.length : 0; | ||
function generateCharacterClassEscape(node) { | ||
var type = node.type; | ||
assertType(node.type, 'characterClassEscape'); | ||
if (type != 'characterClassEscape') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
return '\\' + node.value; | ||
@@ -191,8 +191,4 @@ } | ||
function generateCharacterClassRange(node) { | ||
var type = node.type; | ||
assertType(node.type, 'characterClassRange'); | ||
if (type != 'characterClassRange') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
var min = node.min, | ||
@@ -209,8 +205,4 @@ max = node.max; | ||
function generateClassAtom(node) { | ||
var type = node.type; | ||
assertType(node.type, 'anchor|characterClassEscape|characterClassRange|dot|value'); | ||
if (!/^(?:anchor|characterClassEscape|characterClassRange|dot|value)$/.test(type)) { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
return generate(node); | ||
@@ -220,8 +212,4 @@ } | ||
function generateDisjunction(node) { | ||
var type = node.type; | ||
assertType(node.type, 'disjunction'); | ||
if (type != 'disjunction') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
var body = node.body, | ||
@@ -250,8 +238,4 @@ length = body ? body.length : 0; | ||
function generateDot(node) { | ||
var type = node.type; | ||
assertType(node.type, 'dot'); | ||
if (type != 'dot') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
return '.'; | ||
@@ -261,8 +245,4 @@ } | ||
function generateGroup(node) { | ||
var type = node.type; | ||
assertType(node.type, 'group'); | ||
if (type != 'group') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
var result = '('; | ||
@@ -305,8 +285,4 @@ | ||
function generateQuantifier(node) { | ||
var type = node.type; | ||
assertType(node.type, 'quantifier'); | ||
if (type != 'quantifier') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
var quantifier = '', | ||
@@ -317,2 +293,3 @@ min = node.min, | ||
switch (max) { | ||
case undefined: | ||
case null: | ||
@@ -351,8 +328,4 @@ switch (min) { | ||
function generateRef(node) { | ||
var type = node.type; | ||
assertType(node.type, 'ref'); | ||
if (type != 'ref') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
return '\\' + node.ref; | ||
@@ -362,8 +335,4 @@ } | ||
function generateTerm(node) { | ||
var type = node.type; | ||
assertType(node.type, 'anchor|characterClass|characterClassEscape|empty|group|quantifier|ref|value'); | ||
if (!/^(?:anchor|characterClass(?:Escape)?|empty|group|quantifier|ref|value)$/.test(type)) { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
return generate(node); | ||
@@ -373,8 +342,4 @@ } | ||
function generateValue(node) { | ||
var type = node.type; | ||
assertType(node.type, 'value'); | ||
if (type != 'value') { | ||
throw Error('Invalid node type: ' + type); | ||
} | ||
var kind = node.kind, | ||
@@ -381,0 +346,0 @@ codePoint = node.codePoint; |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
0
40
12644
2
334
- Removedjsesc@~0.4.3
- Removedjsesc@0.4.3(transitive)