AK-21/Graphite-Industrial-Intelligence
0
1import { Column } from "./column.js";2import { is } from "./entity.js";3import { Param, SQL, View } from "./sql/sql.js";4import { Subquery } from "./subquery.js";5import { getTableName, Table } from "./table.js";6import { ViewBaseConfig } from "./view-common.js";7function mapResultRow(columns, row, joinsNotNullableMap) {8 const nullifyMap = {};9 const result = columns.reduce(10 (result2, { path, field }, columnIndex) => {11 let decoder;12 if (is(field, Column)) {13 decoder = field;14 } else if (is(field, SQL)) {15 decoder = field.decoder;16 } else if (is(field, Subquery)) {17 decoder = field._.sql.decoder;18 } else {19 decoder = field.sql.decoder;20 }21 let node = result2;22 for (const [pathChunkIndex, pathChunk] of path.entries()) {23 if (pathChunkIndex < path.length - 1) {24 if (!(pathChunk in node)) {25 node[pathChunk] = {};26 }27 node = node[pathChunk];28 } else {29 const rawValue = row[columnIndex];30 const value = node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue);31 if (joinsNotNullableMap && is(field, Column) && path.length === 2) {32 const objectName = path[0];33 if (!(objectName in nullifyMap)) {34 nullifyMap[objectName] = value === null ? getTableName(field.table) : false;35 } else if (typeof nullifyMap[objectName] === "string" && nullifyMap[objectName] !== getTableName(field.table)) {36 nullifyMap[objectName] = false;37 }38 }39 }40 }41 return result2;42 },43 {}44 );45 if (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {46 for (const [objectName, tableName] of Object.entries(nullifyMap)) {47 if (typeof tableName === "string" && !joinsNotNullableMap[tableName]) {48 result[objectName] = null;49 }50 }51 }52 return result;53}54function orderSelectedFields(fields, pathPrefix) {55 return Object.entries(fields).reduce((result, [name, field]) => {56 if (typeof name !== "string") {57 return result;58 }59 const newPath = pathPrefix ? [...pathPrefix, name] : [name];60 if (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased) || is(field, Subquery)) {61 result.push({ path: newPath, field });62 } else if (is(field, Table)) {63 result.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath));64 } else {65 result.push(...orderSelectedFields(field, newPath));66 }67 return result;68 }, []);69}70function haveSameKeys(left, right) {71 const leftKeys = Object.keys(left);72 const rightKeys = Object.keys(right);73 if (leftKeys.length !== rightKeys.length) {74 return false;75 }76 for (const [index, key] of leftKeys.entries()) {77 if (key !== rightKeys[index]) {78 return false;79 }80 }81 return true;82}83function mapUpdateSet(table, values) {84 const entries = Object.entries(values).filter(([, value]) => value !== void 0).map(([key, value]) => {85 if (is(value, SQL) || is(value, Column)) {86 return [key, value];87 } else {88 return [key, new Param(value, table[Table.Symbol.Columns][key])];89 }90 });91 if (entries.length === 0) {92 throw new Error("No values to set");93 }94 return Object.fromEntries(entries);95}96function applyMixins(baseClass, extendedClasses) {97 for (const extendedClass of extendedClasses) {98 for (const name of Object.getOwnPropertyNames(extendedClass.prototype)) {99 if (name === "constructor") continue;100 Object.defineProperty(101 baseClass.prototype,102 name,103 Object.getOwnPropertyDescriptor(extendedClass.prototype, name) || /* @__PURE__ */ Object.create(null)104 );105 }106 }107}108function getTableColumns(table) {109 return table[Table.Symbol.Columns];110}111function getViewSelectedFields(view) {112 return view[ViewBaseConfig].selectedFields;113}114function getTableLikeName(table) {115 return is(table, Subquery) ? table._.alias : is(table, View) ? table[ViewBaseConfig].name : is(table, SQL) ? void 0 : table[Table.Symbol.IsAlias] ? table[Table.Symbol.Name] : table[Table.Symbol.BaseName];116}117function getColumnNameAndConfig(a, b) {118 return {119 name: typeof a === "string" && a.length > 0 ? a : "",120 config: typeof a === "object" ? a : b121 };122}123const _ = {};124const __ = {};125function isConfig(data) {126 if (typeof data !== "object" || data === null) return false;127 if (data.constructor.name !== "Object") return false;128 if ("logger" in data) {129 const type = typeof data["logger"];130 if (type !== "boolean" && (type !== "object" || typeof data["logger"]["logQuery"] !== "function") && type !== "undefined") return false;131 return true;132 }133 if ("schema" in data) {134 const type = typeof data["schema"];135 if (type !== "object" && type !== "undefined") return false;136 return true;137 }138 if ("casing" in data) {139 const type = typeof data["casing"];140 if (type !== "string" && type !== "undefined") return false;141 return true;142 }143 if ("mode" in data) {144 if (data["mode"] !== "default" || data["mode"] !== "planetscale" || data["mode"] !== void 0) return false;145 return true;146 }147 if ("connection" in data) {148 const type = typeof data["connection"];149 if (type !== "string" && type !== "object" && type !== "undefined") return false;150 return true;151 }152 if ("client" in data) {153 const type = typeof data["client"];154 if (type !== "object" && type !== "function" && type !== "undefined") return false;155 return true;156 }157 if (Object.keys(data).length === 0) return true;158 return false;159}160const textDecoder = typeof TextDecoder === "undefined" ? null : new TextDecoder();161export {162 applyMixins,163 getColumnNameAndConfig,164 getTableColumns,165 getTableLikeName,166 getViewSelectedFields,167 haveSameKeys,168 isConfig,169 mapResultRow,170 mapUpdateSet,171 orderSelectedFields,172 textDecoder173};174//# sourceMappingURL=utils.js.map