"use strict"; const unreachable = require("@joepie91/unreachable")("zapdb"); const matchValue = require("match-value"); // const createLMDBBackend = require("./backend/lmdb"); const queryBuilder = require("./query-builder"); // TODO: Type decoding hook for eg. turning decimal strings into bigints or numbers Object.assign(module.exports, queryBuilder); function findNodeType(nodes, type) { let nodeIndex = nodes.findIndex((node) => node.type === type); if (nodeIndex != null) { return nodes[nodeIndex]; } else { throw new Error(`Failed to locate expected '${type}' node`); } } let temporaryHardcodedSchema = [ { name: "_id", type: "bytes", required: true }, { name: "username", type: "string", required: true }, { name: "email", type: "string", required: true }, { name: "activated", type: "boolean", required: true }, { name: "notes", type: "string", required: false } ]; module.exports.createClient = function(options) { let { schema, backend } = options; function insertQuery(query, parameters) { let items = findNodeType(query.clauses, "items").items; console.log(items); } function selectQuery(query, parameters) {} function updateQuery(query, parameters) {} function deleteQuery(query, parameters) {} return { query: function (query, parameters) { matchValue(query.type, { insert: () => insertQuery(query, parameters), update: () => updateQuery(query, parameters), delete: () => deleteQuery(query, parameters), select: () => selectQuery(query, parameters), }); }, transaction: function (callback) { } }; };