UNPKG

@tai-kun/surrealdb

Version:

The SurrealDB SDK for JavaScript

80 lines (78 loc) 8.66 kB
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=