UNPKG

surrealised

Version:
1 lines 27.4 kB
{"version":3,"sources":["../src/index.ts","../src/SurrealQueryBuilder.ts"],"sourcesContent":["import {Surreal} from \"surrealdb.js\";\nimport {ConnectionOptions, LiveQueryResponse} from \"surrealdb.js/script/types\";\nimport QueryBuilder from \"./SurrealQueryBuilder\";\n\ninterface SurrealClientOptions {\n debug?:boolean;\n connection?: {\n host?:string;\n user?:string;\n password?:string;\n namespace?:string;\n database?:string;\n }\n}\n\nexport default class SurrealClient {\n\n private HOST:string;\n private USER:string;\n private PASSWORD:string;\n private NAMESPACE:string;\n private DATABASE:string;\n\n private isDebug:boolean = false;\n\n private client:Surreal|undefined = undefined;\n\n private isConnected:boolean = false;\n\n constructor(options?:SurrealClientOptions) {\n\n this.HOST = options?.connection?.host || process.env.SURREAL_DB_HOST || process.env.NEXT_PUBLIC_SURREAL_DB_HOST;\n this.USER = options?.connection?.user || process.env.SURREAL_DB_USER || process.env.NEXT_PUBLIC_SURREAL_DB_USER;\n this.PASSWORD = options?.connection?.password || process.env.SURREAL_DB_PASSWORD || process.env.NEXT_PUBLIC_SURREAL_DB_PASSWORD;\n this.NAMESPACE = options?.connection?.namespace || process.env.SURREAL_DB_NAMESPACE || process.env.NEXT_PUBLIC_SURREAL_DB_NAMESPACE;\n this.DATABASE = options?.connection?.database || process.env.SURREAL_DB_DATABASE || process.env.NEXT_PUBLIC_SURREAL_DB_DATABASE;\n\n this.isDebug = options?.debug || process.env.SURREAL_DB_DEBUG == \"true\" || process.env.NEXT_PUBLIC_SURREAL_DB_DEBUG == \"true\";\n\n if(this.isDebug){\n console.debug(\"[SurrealClient] Version: 1.1.5\")\n console.debug(\"[SurrealClient] Debug mode enabled\");\n console.debug(\"[SurrealClient] Connection\", {\n host: this.HOST,\n user: this.USER,\n password: this.PASSWORD,\n namespace: this.NAMESPACE,\n database: this.DATABASE\n })\n }\n\n this.client = new Surreal();\n this.debugMessage(\"[SurrealClient] Client created\")\n }\n\n async init(){\n\n try {\n\n await this.connect()\n\n return this.client;\n } catch (e) {\n console.error(\"[SurrealClient.init()] Error connecting to SurrealDB\", e);\n throw e;\n }\n \n }\n\n private debugMessage(message?:any, ...optionalParams: any[]){\n if(!this.isDebug) return;\n console.debug(message, ...optionalParams);\n }\n\n async connect(){\n let opts: ConnectionOptions = {\n\n auth: {\n username: this.USER,\n password: this.PASSWORD\n },\n namespace: this.NAMESPACE,\n database: this.DATABASE\n }\n\n this.debugMessage(\"[SurrealClient.init()] Connecting to SurrealDB\\n\", {...opts, host: this.HOST})\n\n await this.client.connect(this.HOST, opts);\n this.debugMessage(\"[SurrealClient.init()] Connected to SurrealDB\");\n\n await this.client.use({\n namespace: this.NAMESPACE,\n database: this.DATABASE\n })\n }\n\n /**\n * Execute a query and return the first row.\n * If there are multiple queries, it will return the first row of the last query.\n * @param query\n * @param params\n */\n async queryOne<T = any>(query:string, params?:any){\n this.debugMessage(\"[SurrealClient.queryOne()] Executing query\", query, \"\\n\", params);\n\n let client = await this.init();\n\n const qResult = await client.query<[any, any]>(query, params);\n await client.close();\n this.debugMessage(\"[SurrealClient.queryOne()] QueryOne result\", qResult);\n\n if(!qResult.length){\n return undefined;\n }\n\n const result = qResult[qResult.length - 1]\n\n if(!Array.isArray(result)){\n return result as T\n }\n\n\n if(!result.length){\n return undefined;\n }\n\n return result[0] as T;\n }\n\n /**\n * Execute a query and return many rows.\n * If there are multiple queries, it will return the results of the last query.\n * @param quest\n * @param params\n */\n async queryMany<T = any>(quest:string, params?:any){\n let client = await this.init();\n\n this.debugMessage(\"[SurrealClient.queryMany()] Executing query\", quest, \"\\n\", params);\n\n const qResult = await client.query<[any,any]>(quest, params);\n await client.close();\n this.debugMessage(\"[SurrealClient.queryMany()] QueryMany results\", qResult);\n\n if(!qResult.length){\n return undefined;\n }\n\n return qResult[qResult.length - 1] as T[];\n }\n\n /**\n * Create a key with value\n * @param key\n * @param value\n */\n async create<T = any>(key:string, value:any){\n let client = await this.init();\n this.debugMessage(\"[SurrealClient.create()] Creating key\", key, \"with value\", value);\n let [result] = await client.create<any>(key, value);\n this.debugMessage(\"[SurrealClient.create()] Create result\", result);\n await client.close();\n return result as T;\n }\n\n /**\n * Fetch a key\n * @param key\n */\n async fetch<T = any>(key:string){\n let client = await this.init();\n this.debugMessage(\"[SurrealClient.fetch()] Fetching key\", key);\n let [result] = await client.select<any>(key);\n this.debugMessage(\"[SurrealClient.fetch()] Fetch result\", result);\n await client.close();\n return result as T;\n }\n\n /**\n * Fetch many keys from {table}\n * @param {string} table\n */\n async fetchMany<T = any>(table:string){\n let client = await this.init();\n this.debugMessage(\"[SurrealClient.fetchMany()] Fetching many keys from table\", table);\n var results = await this.queryMany<T>(`SELECT * FROM ${table}`)\n await client.close();\n this.debugMessage(\"[SurrealClient.fetchMany()] FetchMany results\", results);\n return results as T[];\n }\n\n /**\n * Update a key, will merge if it exists, otherwise will create\n * @param key\n * @param value\n */\n async update<T = any>(key:string, value:any){\n this.debugMessage(\"[SurrealClient.update()] Updating key\", key, \"with value\", value);\n let client = await this.init();\n let [result] = await client.merge<any>(key, value);\n this.debugMessage(\"[SurrealClient.update()] Update result\", result);\n await client.close();\n return result as T;\n }\n\n /**\n * Delete a key\n * @param key\n */\n async delete(key:string){\n this.debugMessage(\"[SurrealClient.delete()] Deleting key\", key);\n let client = await this.init();\n let [result] = await client.delete<any>(key);\n this.debugMessage(\"[SurrealClient.delete()] Delete result\", result);\n await client.close();\n return result;\n }\n\n /**\n * Execute a raw query, return the native SurrealDB Library Result\n * @param query\n * @param params\n */\n async execute(query:string, params?:any){\n this.debugMessage(\"[SurrealClient.execute()] Executing query\", query, \"\\n\", params);\n let client = await this.init();\n let result = await client.query(query, params);\n this.debugMessage(\"[SurrealClient.execute()] Query result\", result);\n }\n\n /**\n * Relate two records together using a join table\n * @param table - The join table name (i.e. \"visited\")\n * @param from - The key of the record to relate from (i.e. \"user:1\")\n * @param to - The key of the record to relate to (i.e. \"office:sydney\")\n * @param value - The value to store in the join table (i.e. \"{visitedAt: '2021-01-01', ...}\")\n */\n async relate(table:string, from:string, to:string, value?:Record<string, any>){\n\n this.debugMessage(\"[SurrealClient.relate()] Relating\", from, \"to\", to, \"with value\", value);\n\n let qRelate = `RELATE ${from}->${table}->${to}`;\n if(value){\n qRelate = `RELATE ${from}->${table}->${to} CONTENT $content`;\n }\n\n\n let result = await this.execute(qRelate, {content: value});\n\n this.debugMessage(\"[SurrealClient.relate()] Relate result\", result);\n\n }\n\n async begin(){\n this.debugMessage(\"[SurrealClient.begin()] Beginning transaction\");\n let client = await this.init();\n let result = await client.query(`BEGIN TRANSACTION;`);\n this.debugMessage(\"[SurrealClient.begin()] Begin result\", result);\n }\n\n async commit(){\n this.debugMessage(\"[SurrealClient.commit()] Committing transaction\");\n let client = await this.init();\n let result = await client.query(`COMMIT TRANSACTION;`);\n this.debugMessage(\"[SurrealClient.commit()] Commit result\", result);\n return result;\n }\n\n async close(){\n this.debugMessage(\"[SurrealClient.close()] Closing connection\");\n let client = await this.init();\n await client.close();\n this.debugMessage(\"[SurrealClient.close()] Connection closed\");\n }\n\n async live(table:string, callback: (data:LiveQueryResponse<Record<string, any>>) => any){\n this.debugMessage(\"[SurrealClient.live()] Checking connection\");\n let client = await this.init();\n await client.live(table, (d) => callback(d));\n }\n\n\n}\n\n\nexport const SurrealQueryBuilder = QueryBuilder;\n","import SurrealClient from \"./index\";\n\ntype OrderByField = Record<string, \"ASC\" | \"DESC\">\n\nclass SurrealQueryBuilder {\n private table: string;\n private fields: string[] = [];\n private omitFields: string[] = [];\n private whereClauses: string[] = [];\n private currentClauseGroup: string[] = [];\n private group_all: boolean = false;\n\n private orderByFields: OrderByField[] = [];\n\n private isInWhereClause: boolean = false;\n\n private grouping: boolean = false;\n private fetchItems: string[] = [];\n private splitItems: string[] = [];\n private groupByItems: string[] = [];\n private withIndex: string[] = [];\n private offsetClause?: number = 0;\n private limitClause?: number = undefined;\n\n public variables: Record<string, any> = {};\n\n constructor(table: string) {\n this.table = table;\n }\n\n /**\n * Select fields to return\n * https://docs.surrealdb.com/docs/surrealql/statements/select#basic-usage\n * @param fields\n */\n select(...fields: string[]): this {\n this.fields = fields;\n return this;\n }\n\n /**\n * Start a condition, MUST be present before any AND or OR statements\n * https://docs.surrealdb.com/docs/surrealql/statements/select#filter-queries-using-the-where-clause\n * @param condition\n */\n where(condition: string): this {\n\n if(this.isInWhereClause){\n this.endGroup();\n }\n\n this.currentClauseGroup.push(condition);\n this.isInWhereClause = true;\n\n return this;\n }\n\n /**\n * Add conditions to the query\n * https://docs.surrealdb.com/docs/surrealql/statements/select#connect-targets-using-the-fetch-clause\n * @param condition\n */\n and(condition: string): this {\n return this.where(condition);\n }\n\n /**\n * Or what?\n * https://docs.surrealdb.com/docs/surrealql/statements/select#connect-targets-using-the-fetch-clause\n * @param condition\n */\n or(condition: string): this {\n\n if(!this.isInWhereClause){\n throw new Error(\"You must call where() before calling or()\");\n }\n\n this.currentClauseGroup.push(condition);\n\n return this;\n }\n\n endGroup(): this {\n if (this.currentClauseGroup.length > 0) {\n const groupedConditions = this.currentClauseGroup.join(' OR ');\n this.whereClauses.push(`(${groupedConditions})`);\n this.grouping = false;\n this.currentClauseGroup = [];\n }\n return this;\n }\n\n /**\n * Specify record joins to fetch the details of\n * https://docs.surrealdb.com/docs/surrealql/statements/select#connect-targets-using-the-fetch-clause\n * @param fields\n */\n fetch(...fields: string[]): this {\n this.fetchItems = fields;\n return this;\n }\n\n /**\n * Offset the results by a number\n * https://docs.surrealdb.com/docs/surrealql/statements/select#the-limit-clause\n * @param n\n */\n offset(n: number){\n this.offsetClause = n;\n return this;\n }\n\n /**\n * Limit the number of results\n * https://docs.surrealdb.com/docs/surrealql/statements/select#the-limit-clause\n * @param n - the number to limit it to\n */\n limit(n: number){\n this.limitClause = n;\n return this;\n }\n\n /**\n * Group the results by a field or set of fields\n * https://docs.surrealdb.com/docs/surrealql/statements/select#the-group-by-and-group-all-clause\n * @param fields\n */\n groupBy(...fields: string[]): this {\n this.groupByItems = fields;\n return this;\n }\n\n /**\n * Group all results\n * https://docs.surrealdb.com/docs/surrealql/statements/select#the-group-by-and-group-all-clause\n */\n groupAll(): this {\n this.group_all = true;\n return this;\n }\n\n /**\n * Order the results by a set of fields\n * https://docs.surrealdb.com/docs/surrealql/statements/select#sort-records-using-the-order-by-clause\n * @param fields\n */\n orderBy(...fields: OrderByField[]){\n this.orderByFields = fields;\n return this;\n }\n\n /**\n * Split the query results via a field\n * https://docs.surrealdb.com/docs/surrealql/statements/select#the-split-clause\n * @param fields\n */\n split(...fields: string[]): this {\n this.splitItems = fields;\n return this;\n }\n\n /**\n * Add indexes to the query\n * https://docs.surrealdb.com/docs/surrealql/statements/select#the-with-clause\n * @param indexes\n */\n index(...indexes: string[]): this {\n this.withIndex = indexes;\n return this;\n }\n\n /**\n * Omit fields from the result, these are still used in conditionals (I think?)\n * @param fields\n */\n omit(...fields: string[]): this {\n this.omitFields = fields;\n return this;\n }\n\n private assertClauseGroup(){\n if(this.isInWhereClause){\n this.endGroup();\n }\n }\n\n /**\n * Construct the query string\n */\n build(ignore_pagination?: boolean, ignore_filters?: boolean): string {\n\n this.assertClauseGroup();\n\n let query = `SELECT ${this.fields.length > 0 ? this.fields.join(', ') : '*'}`;\n\n if(this.omitFields.length){\n query += ` OMIT ${this.omitFields.join(', ')}`;\n }\n\n query += ` FROM ${this.table}`\n\n if(this.withIndex.length){\n query += `WITH INDEX ${this.withIndex.join(', ')}`;\n }\n\n if (this.whereClauses.length > 0 && !ignore_filters) {\n\n // if there are no OR clauses, we need to remove all the brackets\n let hasORClauses = this.whereClauses.some((c) => c.includes(' OR '));\n if(!hasORClauses){\n this.whereClauses = this.whereClauses.map((c) => c.replace(/\\(/g, '').replace(/\\)/g, ''));\n }\n\n query += ` WHERE ${this.whereClauses.join(' AND ')}`;\n }\n if(this.splitItems.length > 0){\n query += ` SPLIT ${this.splitItems.join(', ')}`;\n }\n\n if(this.group_all){\n query += ` GROUP ALL`;\n } else if(this.groupByItems.length > 0){\n query += ` GROUP BY ${this.groupByItems.join(', ')}`;\n }\n\n if(this.orderByFields.length > 0){\n query += ` ORDER BY ${this.orderByFields.map((f) => {\n let key = Object.keys(f)[0];\n let value = f[key];\n return `${key} ${value}`;\n }).join(', ')}`;\n }\n\n if(this.limitClause && !ignore_pagination){\n query += ` LIMIT ${this.limitClause}`;\n }\n if(this.offsetClause && !ignore_pagination){\n query += ` START ${this.offsetClause}`;\n }\n if(this.fetchItems.length > 0){\n query += ` FETCH ${this.fetchItems.join(', ')}`;\n }\n\n return query;\n }\n\n /**\n * Execute the query and return a single row (or none)\n * @param params\n */\n async queryOne<T>(params?: Record<string, any>): Promise<T> {\n let q = this.build();\n\n let variables = {\n ...this.variables,\n ...params,\n }\n\n const surreal = new SurrealClient();\n return await surreal.queryOne<T>(q, variables);\n }\n\n /**\n * Execute the query and return many rows\n * @param params\n */\n async queryMany<T>(params?: Record<string, any>): Promise<T[]> {\n let q = this.build();\n const surreal = new SurrealClient();\n\n let variables = {\n ...this.variables,\n ...params,\n }\n\n return await surreal.queryMany<T>(q, variables);\n }\n\n /**\n * Add a variable to the query for execution.\n * @param key\n * @param value\n */\n addVariable(key: string, value: any){\n this.variables[key] = value;\n return this;\n }\n\n /**\n * Remove a variable from the query\n * @param key\n */\n removeVariable(key: string){\n delete this.variables[key];\n return this;\n }\n\n /**\n * Clear all variables from the query\n */\n clearVariables(){\n this.variables = {};\n return this;\n }\n\n /**\n * Get the total number of rows that would be returned by the query, by default this ignore pagination\n * @param ignoreFilter - ignore WHERE clauses\n */\n async total(ignoreFilter: boolean = false){\n\n let query = this.build(true, ignoreFilter);\n const surreal = new SurrealClient();\n\n let result = await surreal.queryMany(query, this.variables);\n return result.length;\n }\n\n}\n\nexport default SurrealQueryBuilder;"],"mappings":"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","names":["SurrealQueryBuilder"]}