@neo4j/cypher-builder
Version:
A programmatic API for building Cypher queries for Neo4j
63 lines (62 loc) • 1.97 kB
JavaScript
;
/*
* Copyright (c) "Neo4j"
* Neo4j Sweden AB [http://neo4j.com]
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.escapeLabel = escapeLabel;
exports.escapeType = escapeType;
exports.escapeProperty = escapeProperty;
exports.escapeVariable = escapeVariable;
exports.escapeLiteral = escapeLiteral;
/** These names must be escaped for variables */
const RESERVED_VAR_NAMES = new Set(["contains", "in", "where", "is"]);
/** Escapes a Node label string */
function escapeLabel(label) {
return escapeIfNeeded(label);
}
/** Escapes a Relationship type string */
function escapeType(type) {
// Use same logic as escape label
return escapeLabel(type);
}
/** Escapes a property name string */
function escapeProperty(propName) {
return escapeIfNeeded(propName);
}
/** Escapes a variable name if needed */
function escapeVariable(varName) {
if (RESERVED_VAR_NAMES.has(varName.toLowerCase())) {
return escapeString(varName);
}
return escapeIfNeeded(varName);
}
/** Escapes a literal string
* Given a string, it adds the single quotes (') and escapes ('), (\) and the unicode versions
*/
function escapeLiteral(str) {
const normalizedStr = str.replaceAll("\\u0027", "'").replaceAll("\\u005C", "\\");
const escapedStr = normalizedStr.replaceAll("\\", "\\\\").replaceAll(`'`, `\\'`);
return `'${escapedStr}'`;
}
function escapeIfNeeded(str) {
const normalizedStr = normalizeString(str);
if (needsEscape(normalizedStr)) {
return escapeString(normalizedStr);
}
return normalizedStr;
}
function escapeString(str) {
const normalizedStr = normalizeString(str);
const escapedStr = normalizedStr.replaceAll("`", "``");
return `\`${escapedStr}\``;
}
function normalizeString(str) {
return str.replaceAll("\\u0060", "`");
}
function needsEscape(str) {
if (!str)
return false;
const validStr = /^[a-z_][0-9a-z_]*$/i;
return !validStr.test(str);
}