@tai-kun/surrealdb
Version:
The SurrealDB SDK for JavaScript
80 lines (78 loc) • 8.66 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// src/surreal/surql/create-surql.ts
import { SurrealValueError } from "../../errors/index.mjs";
import PreparedQuery from "./prepared-query.mjs";
import Raw from "./raw.mjs";
import Slot from "./slot.mjs";
function createSurql(config) {
const {
formatter,
varPrefix = "_jst_"
// JavaScript, Tagged Template Literals
} = config;
function surql(texts, ...values) {
if (texts.length - values.length !== 1) {
throw new SurrealValueError(
"template string",
`texts.length=${texts.length} and values.length=${values.length}`
);
}
let text = "";
const vars = {};
const slots = [];
for (let i = 0, j, v, len = texts.length, named = []; i < len; i++) {
text += texts[i];
if (i + 1 === len) {
break;
}
for (j = 0; j < i; j++) {
if (Object.is(values[j], values[i])) {
break;
}
}
v = values[j];
if (v instanceof Slot) {
text += "$" + v.name;
if (j === i && named.indexOf(v.name) < 0) {
if (v.name.startsWith(varPrefix)) {
throw new SurrealValueError(
`a variable name that do not start with "${varPrefix}"`,
v.name
);
}
slots.push(v);
named.push(v.name);
}
} else if (v instanceof Raw) {
text += v.toString();
} else {
text += "$" + varPrefix + j;
if (!(varPrefix + j in vars)) {
vars[varPrefix + j] = formatter.toEncoded?.(v) || v;
}
}
}
return new PreparedQuery(text, vars, slots, {
encodedText: formatter.toEncoded?.(text)
});
}
__name(surql, "surql");
function raw(value) {
return new Raw(value);
}
__name(raw, "raw");
function slot(...args) {
return args.length === 1 ? new Slot(args[0], true, { formatter }) : new Slot(args[0], false, {
formatter,
defaultValue: formatter.toEncoded?.(args[1]) || args[1]
});
}
__name(slot, "slot");
return Object.assign(surql, { raw, slot });
}
__name(createSurql, "createSurql");
export {
createSurql as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N1cnJlYWwvc3VycWwvY3JlYXRlLXN1cnFsLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBTdXJyZWFsVmFsdWVFcnJvciB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZXJyb3JzXCI7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdHRlciB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZm9ybWF0dGVyXCI7XG5pbXBvcnQgUHJlcGFyZWRRdWVyeSBmcm9tIFwiLi9wcmVwYXJlZC1xdWVyeVwiO1xuaW1wb3J0IFJhdywgeyB0eXBlIFJhd1ZhbHVlIH0gZnJvbSBcIi4vcmF3XCI7XG5pbXBvcnQgU2xvdCBmcm9tIFwiLi9zbG90XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VycWwge1xuICA8VFZhbHVlcyBleHRlbmRzIHVua25vd25bXSA9IHVua25vd25bXT4oXG4gICAgdGV4dHM6IHJlYWRvbmx5IHN0cmluZ1tdIHwgVGVtcGxhdGVTdHJpbmdzQXJyYXksXG4gICAgLi4udmFsdWVzOiBUVmFsdWVzXG4gICk6IFByZXBhcmVkUXVlcnk8RXh0cmFjdDxUVmFsdWVzW251bWJlcl0sIFNsb3Q+PjtcbiAgcmF3OiB7XG4gICAgKHZhbHVlOiBSYXdWYWx1ZSk6IFJhdztcbiAgfTtcbiAgc2xvdDoge1xuICAgIDxjb25zdCBUTmFtZSBleHRlbmRzIHN0cmluZywgVFZhbHVlID0gdW5rbm93bj4oXG4gICAgICBuYW1lOiBUTmFtZSxcbiAgICApOiBTbG90PFROYW1lLCB0cnVlLCBUVmFsdWUgfCB1bmRlZmluZWQ+O1xuICAgIDxjb25zdCBUTmFtZSBleHRlbmRzIHN0cmluZywgVFZhbHVlPihcbiAgICAgIG5hbWU6IFROYW1lLFxuICAgICAgZGVmYXVsdFZhbHVlOiBUVmFsdWUsXG4gICAgKTogU2xvdDxUTmFtZSwgZmFsc2UsIFRWYWx1ZT47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlU3VycWxDb25maWcge1xuICByZWFkb25seSBmb3JtYXR0ZXI6IEZvcm1hdHRlcjtcbiAgcmVhZG9ubHkgdmFyUHJlZml4Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdXJxbChjb25maWc6IENyZWF0ZVN1cnFsQ29uZmlnKTogU3VycWwge1xuICBjb25zdCB7XG4gICAgZm9ybWF0dGVyLFxuICAgIHZhclByZWZpeCA9IFwiX2pzdF9cIiwgLy8gSmF2YVNjcmlwdCwgVGFnZ2VkIFRlbXBsYXRlIExpdGVyYWxzXG4gIH0gPSBjb25maWc7XG5cbiAgZnVuY3Rpb24gc3VycWwodGV4dHM6IHJlYWRvbmx5IHN0cmluZ1tdLCAuLi52YWx1ZXM6IHVua25vd25bXSkge1xuICAgIGlmICh0ZXh0cy5sZW5ndGggLSB2YWx1ZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgU3VycmVhbFZhbHVlRXJyb3IoXG4gICAgICAgIFwidGVtcGxhdGUgc3RyaW5nXCIsXG4gICAgICAgIGB0ZXh0cy5sZW5ndGg9JHt0ZXh0cy5sZW5ndGh9IGFuZCB2YWx1ZXMubGVuZ3RoPSR7dmFsdWVzLmxlbmd0aH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgY29uc3QgdmFyczogeyBbcDogc3RyaW5nXTogdW5rbm93biB9ID0ge307XG4gICAgY29uc3Qgc2xvdHM6IFNsb3RbXSA9IFtdO1xuXG4gICAgZm9yIChcbiAgICAgIGxldCBpID0gMCxcbiAgICAgICAgajogbnVtYmVyLFxuICAgICAgICB2LFxuICAgICAgICBsZW4gPSB0ZXh0cy5sZW5ndGgsXG4gICAgICAgIG5hbWVkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgaSA8IGxlbjtcbiAgICAgIGkrK1xuICAgICkge1xuICAgICAgdGV4dCArPSB0ZXh0c1tpXTtcblxuICAgICAgaWYgKGkgKyAxID09PSBsZW4pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHtcbiAgICAgICAgaWYgKE9iamVjdC5pcyh2YWx1ZXNbal0sIHZhbHVlc1tpXSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2ID0gdmFsdWVzW2pdO1xuXG4gICAgICBpZiAodiBpbnN0YW5jZW9mIFNsb3QpIHtcbiAgICAgICAgdGV4dCArPSBcIiRcIiArIHYubmFtZTtcblxuICAgICAgICBpZiAoaiA9PT0gaSAmJiBuYW1lZC5pbmRleE9mKHYubmFtZSkgPCAwKSB7XG4gICAgICAgICAgaWYgKCh2Lm5hbWUgYXMgc3RyaW5nKS5zdGFydHNXaXRoKHZhclByZWZpeCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTdXJyZWFsVmFsdWVFcnJvcihcbiAgICAgICAgICAgICAgYGEgdmFyaWFibGUgbmFtZSB0aGF0IGRvIG5vdCBzdGFydCB3aXRoIFwiJHt2YXJQcmVmaXh9XCJgLFxuICAgICAgICAgICAgICB2Lm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNsb3RzLnB1c2godik7XG4gICAgICAgICAgbmFtZWQucHVzaCh2Lm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBSYXcpIHtcbiAgICAgICAgdGV4dCArPSB2LnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0ICs9IFwiJFwiICsgdmFyUHJlZml4ICsgajtcblxuICAgICAgICBpZiAoISgodmFyUHJlZml4ICsgaikgaW4gdmFycykpIHtcbiAgICAgICAgICB2YXJzW3ZhclByZWZpeCArIGpdID0gZm9ybWF0dGVyLnRvRW5jb2RlZD8uKHYpIHx8IHY7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByZXBhcmVkUXVlcnkodGV4dCwgdmFycywgc2xvdHMsIHtcbiAgICAgIGVuY29kZWRUZXh0OiBmb3JtYXR0ZXIudG9FbmNvZGVkPy4odGV4dCksXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByYXcodmFsdWU6IFJhd1ZhbHVlKTogUmF3IHtcbiAgICByZXR1cm4gbmV3IFJhdyh2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzbG90KC4uLmFyZ3M6IFtuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHVua25vd25dKTogU2xvdCB7XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSAxXG4gICAgICA/IG5ldyBTbG90KGFyZ3NbMF0sIHRydWUsIHsgZm9ybWF0dGVyIH0pXG4gICAgICA6IG5ldyBTbG90KGFyZ3NbMF0sIGZhbHNlLCB7XG4gICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBmb3JtYXR0ZXIudG9FbmNvZGVkPy4oYXJnc1sxXSkgfHwgYXJnc1sxXSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdXJxbCwgeyByYXcsIHNsb3QgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7O0FBQUEsU0FBUyx5QkFBeUI7QUFFbEMsT0FBTyxtQkFBbUI7QUFDMUIsT0FBTyxTQUE0QjtBQUNuQyxPQUFPLFVBQVU7QUEwQkYsU0FBUixZQUE2QixRQUFrQztBQUNwRSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0EsWUFBWTtBQUFBO0FBQUEsRUFDZCxJQUFJO0FBRUosV0FBUyxNQUFNLFVBQTZCLFFBQW1CO0FBQzdELFFBQUksTUFBTSxTQUFTLE9BQU8sV0FBVyxHQUFHO0FBQ3RDLFlBQU0sSUFBSTtBQUFBLFFBQ1I7QUFBQSxRQUNBLGdCQUFnQixNQUFNLE1BQU0sc0JBQXNCLE9BQU8sTUFBTTtBQUFBLE1BQ2pFO0FBQUEsSUFDRjtBQUVBLFFBQUksT0FBTztBQUNYLFVBQU0sT0FBaUMsQ0FBQztBQUN4QyxVQUFNLFFBQWdCLENBQUM7QUFFdkIsYUFDTSxJQUFJLEdBQ04sR0FDQSxHQUNBLE1BQU0sTUFBTSxRQUNaLFFBQWtCLENBQUMsR0FDckIsSUFBSSxLQUNKLEtBQ0E7QUFDQSxjQUFRLE1BQU0sQ0FBQztBQUVmLFVBQUksSUFBSSxNQUFNLEtBQUs7QUFDakI7QUFBQSxNQUNGO0FBRUEsV0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDdEIsWUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRztBQUNuQztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsVUFBSSxPQUFPLENBQUM7QUFFWixVQUFJLGFBQWEsTUFBTTtBQUNyQixnQkFBUSxNQUFNLEVBQUU7QUFFaEIsWUFBSSxNQUFNLEtBQUssTUFBTSxRQUFRLEVBQUUsSUFBSSxJQUFJLEdBQUc7QUFDeEMsY0FBSyxFQUFFLEtBQWdCLFdBQVcsU0FBUyxHQUFHO0FBQzVDLGtCQUFNLElBQUk7QUFBQSxjQUNSLDJDQUEyQyxTQUFTO0FBQUEsY0FDcEQsRUFBRTtBQUFBLFlBQ0o7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sS0FBSyxDQUFDO0FBQ1osZ0JBQU0sS0FBSyxFQUFFLElBQUk7QUFBQSxRQUNuQjtBQUFBLE1BQ0YsV0FBVyxhQUFhLEtBQUs7QUFDM0IsZ0JBQVEsRUFBRSxTQUFTO0FBQUEsTUFDckIsT0FBTztBQUNMLGdCQUFRLE1BQU0sWUFBWTtBQUUxQixZQUFJLEVBQUcsWUFBWSxLQUFNLE9BQU87QUFDOUIsZUFBSyxZQUFZLENBQUMsSUFBSSxVQUFVLFlBQVksQ0FBQyxLQUFLO0FBQUEsUUFDcEQ7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFdBQU8sSUFBSSxjQUFjLE1BQU0sTUFBTSxPQUFPO0FBQUEsTUFDMUMsYUFBYSxVQUFVLFlBQVksSUFBSTtBQUFBLElBQ3pDLENBQUM7QUFBQSxFQUNIO0FBL0RTO0FBaUVULFdBQVMsSUFBSSxPQUFzQjtBQUNqQyxXQUFPLElBQUksSUFBSSxLQUFLO0FBQUEsRUFDdEI7QUFGUztBQUlULFdBQVMsUUFBUSxNQUFvRDtBQUNuRSxXQUFPLEtBQUssV0FBVyxJQUNuQixJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUNyQyxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsT0FBTztBQUFBLE1BQ3pCO0FBQUEsTUFDQSxjQUFjLFVBQVUsWUFBWSxLQUFLLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLElBQ3hELENBQUM7QUFBQSxFQUNMO0FBUFM7QUFVVCxTQUFPLE9BQU8sT0FBTyxPQUFPLEVBQUUsS0FBSyxLQUFLLENBQUM7QUFDM0M7QUF0RndCOyIsCiAgIm5hbWVzIjogW10KfQo=