expre-parser
Advanced tools
Comparing version
@@ -1,2 +0,1 @@ | ||
/// <reference types="sqlite-parser" /> | ||
import * as sqliteParser from "sqlite-parser"; | ||
@@ -3,0 +2,0 @@ import { Compiler } from "./compiler"; |
@@ -1,2 +0,2 @@ | ||
/// <reference types="sqlite-parser" /> | ||
import * as sqliteParser from "sqlite-parser"; | ||
import { BaseNode as SPBaseNode } from "sqlite-parser"; | ||
@@ -6,3 +6,4 @@ import { BaseNode } from "./ast-model"; | ||
export * from './compiler'; | ||
export declare function parse(expression: string): BaseNode; | ||
export declare function sqlite_parse(expression: string | number): sqliteParser.BaseNode; | ||
export declare function parse(expression: string | number): BaseNode; | ||
export declare function convertNode(ast: SPBaseNode): BaseNode; |
@@ -11,9 +11,17 @@ "use strict"; | ||
__export(require("./compiler")); | ||
function parse(expression) { | ||
function sqlite_parse(expression) { | ||
// sqliteParser works in expressions with "select" string at begining | ||
let ast = sqliteParser('select ' + expression); | ||
var astStatement = ast.statement[0].result[0]; | ||
let node = convertNode(astStatement); | ||
return node; | ||
try { | ||
return sqliteParser('select ' + expression).statement[0].result[0]; | ||
; | ||
} | ||
catch (err) { | ||
throw new Error('La expresion ' + expression + ' no es válida'); // sintaxis inválida para sqlite-parser | ||
} | ||
} | ||
exports.sqlite_parse = sqlite_parse; | ||
function parse(expression) { | ||
let ast = sqlite_parse(expression); | ||
return convertNode(ast); | ||
} | ||
exports.parse = parse; | ||
@@ -20,0 +28,0 @@ function convertNode(ast) { |
@@ -23,3 +23,3 @@ "use strict"; | ||
it("parse one number", async function () { | ||
let obtained = ExpresionParser.parse("43"); | ||
let obtained = ExpresionParser.parse(43); | ||
let expectedParsed = new EPModel.LiteralNode({ type: 'literal', value: "43", variant: 'decimal' }); | ||
@@ -101,2 +101,30 @@ // es llamado `jsonObj` en lugar de `LiteralObj` u `objLiteral` para no confundir el `literal` de objetos JS con nuestro LiteralNode de AST | ||
}); | ||
describe("protesta la librería sqlite_parse con SQL inválidos, por ej: delete, drop, etc", function () { | ||
it("cualquier cosa", async function () { | ||
['&', 'pe#p', 'delete', '@', 'FROM', '!', '==', '%', 'drop', 'if ('].forEach(invalExp => { | ||
try { | ||
ExpresionParser.sqlite_parse(invalExp); | ||
throw new Error('Tenía que dar error, porque la expresion "' + invalExp + '" es sintaxis inválida'); | ||
} | ||
catch (err) { | ||
discrepances.showAndThrow(err.message, 'La expresion ' + invalExp + ' no es válida'); | ||
} | ||
}); | ||
}); | ||
}); | ||
describe("protesta convertNode() porque el usario escribio SQL válido para sqlite-parser que no consideramos válido, por ej: ?, etc ", function () { | ||
it("cualquier cosa", async function () { | ||
['?'].forEach(invalExp => { | ||
let ast; | ||
try { | ||
ast = ExpresionParser.sqlite_parse(invalExp); | ||
ExpresionParser.convertNode(ast); | ||
throw new Error('Tenía que dar error porque la expresion "' + invalExp + '" es no la queremos'); | ||
} | ||
catch (err) { | ||
discrepances.showAndThrow(err.message, 'ast.type not consider: ' + ast.type); | ||
} | ||
}); | ||
}); | ||
}); | ||
describe("wrapped", function () { | ||
@@ -103,0 +131,0 @@ var compilerOptions = { |
{ | ||
"name": "expre-parser", | ||
"description": "expression parser", | ||
"version": "0.1.9", | ||
"version": "0.1.10", | ||
"author": "Codenautas <codenautas@googlegroups.com>", | ||
@@ -6,0 +6,0 @@ "license": "MIT", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
50624
5.96%652
5.84%