sqlite-tag-spawned
Advanced tools
Comparing version 0.5.4 to 0.5.5
@@ -17,2 +17,22 @@ 'use strict'; | ||
const quote = /'/g; | ||
const asValue = value => { | ||
switch (typeof value) { | ||
case 'string': | ||
return "'" + value.replace(quote, "''") + "'"; | ||
case 'number': | ||
if (!isFinite(value)) | ||
return; | ||
case 'boolean': | ||
return +value; | ||
case 'object': | ||
case 'undefined': | ||
if (!value) | ||
return 'NULL'; | ||
else if (value instanceof Date) | ||
return "'" + value.toISOString() + "'"; | ||
} | ||
}; | ||
exports.asValue = asValue; | ||
const sql = (rej, _) => { | ||
@@ -22,27 +42,6 @@ const [template, ...values] = asParams(..._); | ||
for (let i = 0; i < values.length; i++) { | ||
const value = values[i]; | ||
switch (typeof value) { | ||
case 'string': | ||
sql.push("'" + value.replace(/'/g, "''") + "'"); | ||
break; | ||
case 'number': | ||
if (!isFinite(value)) | ||
return error(rej, 'invalid number ' + value); | ||
case 'boolean': | ||
sql.push(+value); | ||
break; | ||
case 'undefined': | ||
case 'object': | ||
if (!value) { | ||
sql.push('NULL'); | ||
break; | ||
} | ||
else if (value instanceof Date) { | ||
sql.push("'" + value.toISOString() + "'"); | ||
break; | ||
} | ||
default: | ||
return error(rej, 'incompatible value'); | ||
} | ||
sql.push(template[i + 1]); | ||
const value = asValue(values[i]); | ||
if (value === void 0) | ||
return error(rej, 'incompatible ' + (typeof value) + 'value'); | ||
sql.push(value, template[i + 1]); | ||
} | ||
@@ -53,1 +52,30 @@ const query = sql.join('').trim(); | ||
exports.sql = sql; | ||
const sql2array = sql => { | ||
const re = /(([:$@](\w+))|(\$\{\s*(\w+)\s*\}))/g; | ||
const out = []; | ||
let i = 0; | ||
let match; | ||
while (match = re.exec(sql)) { | ||
out.push(sql.slice(i, match.index), match[3] || match[5]); | ||
i = match.index + match[0].length; | ||
} | ||
out.push(sql.slice(i)); | ||
return out; | ||
}; | ||
exports.sql2array = sql2array; | ||
// WARNING: this changes the incoming array value @ holes | ||
// useful only when sql2array results are stored, | ||
// and revived, as JSON ... watch out side effects | ||
// if used with same array more than once! | ||
const array2sql = (chunks, data = null) => { | ||
for (let i = 1; i < chunks.length; i += 2) { | ||
const value = asValue(data[chunks[i]]); | ||
if (value === void 0) | ||
return ''; | ||
chunks[i] = value; | ||
} | ||
return chunks.join(''); | ||
}; | ||
exports.array2sql = array2sql; |
@@ -14,2 +14,21 @@ import plain from 'plain-tag'; | ||
const quote = /'/g; | ||
export const asValue = value => { | ||
switch (typeof value) { | ||
case 'string': | ||
return "'" + value.replace(quote, "''") + "'"; | ||
case 'number': | ||
if (!isFinite(value)) | ||
return; | ||
case 'boolean': | ||
return +value; | ||
case 'object': | ||
case 'undefined': | ||
if (!value) | ||
return 'NULL'; | ||
else if (value instanceof Date) | ||
return "'" + value.toISOString() + "'"; | ||
} | ||
}; | ||
export const sql = (rej, _) => { | ||
@@ -19,27 +38,6 @@ const [template, ...values] = asParams(..._); | ||
for (let i = 0; i < values.length; i++) { | ||
const value = values[i]; | ||
switch (typeof value) { | ||
case 'string': | ||
sql.push("'" + value.replace(/'/g, "''") + "'"); | ||
break; | ||
case 'number': | ||
if (!isFinite(value)) | ||
return error(rej, 'invalid number ' + value); | ||
case 'boolean': | ||
sql.push(+value); | ||
break; | ||
case 'undefined': | ||
case 'object': | ||
if (!value) { | ||
sql.push('NULL'); | ||
break; | ||
} | ||
else if (value instanceof Date) { | ||
sql.push("'" + value.toISOString() + "'"); | ||
break; | ||
} | ||
default: | ||
return error(rej, 'incompatible value'); | ||
} | ||
sql.push(template[i + 1]); | ||
const value = asValue(values[i]); | ||
if (value === void 0) | ||
return error(rej, 'incompatible ' + (typeof value) + 'value'); | ||
sql.push(value, template[i + 1]); | ||
} | ||
@@ -49,1 +47,28 @@ const query = sql.join('').trim(); | ||
}; | ||
export const sql2array = sql => { | ||
const re = /(([:$@](\w+))|(\$\{\s*(\w+)\s*\}))/g; | ||
const out = []; | ||
let i = 0; | ||
let match; | ||
while (match = re.exec(sql)) { | ||
out.push(sql.slice(i, match.index), match[3] || match[5]); | ||
i = match.index + match[0].length; | ||
} | ||
out.push(sql.slice(i)); | ||
return out; | ||
}; | ||
// WARNING: this changes the incoming array value @ holes | ||
// useful only when sql2array results are stored, | ||
// and revived, as JSON ... watch out side effects | ||
// if used with same array more than once! | ||
export const array2sql = (chunks, data = null) => { | ||
for (let i = 1; i < chunks.length; i += 2) { | ||
const value = asValue(data[chunks[i]]); | ||
if (value === void 0) | ||
return ''; | ||
chunks[i] = value; | ||
} | ||
return chunks.join(''); | ||
}; |
{ | ||
"name": "sqlite-tag-spawned", | ||
"version": "0.5.4", | ||
"version": "0.5.5", | ||
"description": "Same as sqlite-tag but without the native sqlite3 module dependency", | ||
@@ -5,0 +5,0 @@ "main": "./cjs/index.js", |
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
21990
509