UNPKG

ts-sql-query

Version:

Type-safe SQL query builder like QueryDSL or JOOQ in Java or Linq in .Net for TypeScript with MariaDB, MySql, Oracle, PostgreSql, Sqlite and SqlServer support.

139 lines (138 loc) 4.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.expandTypeProjectedAsNullableFromDynamicPickPaths = exports.expandTypeFromDynamicPickPaths = exports.dynamicPickPaths = exports.dynamicPick = void 0; const values_1 = require("./expressions/values"); // type ExpandRecursively<T> = T extends object ? T extends infer O ? { [K in keyof O]: ExpandRecursively<O[K]> } : never : T; function dynamicPick(obj, pick, mandatory) { const result = {}; const required = {}; if (mandatory) { for (let i = 0, length = mandatory.length; i < length; i++) { required[mandatory[i]] = true; } } const o = obj; const p = pick; for (let prop in o) { if (!o[prop]) { // Do nothing } else if (prop in required) { result[prop] = o[prop]; } else { const isRequired = p[prop]; if (isRequired === true) { result[prop] = o[prop]; } else if (!isRequired) { // Do nothing } else if (typeof isRequired === 'object') { const content = internalDynamicPick(o[prop], isRequired, required, prop); if (content !== undefined) { result[prop] = internalDynamicPick(o[prop], isRequired, required, prop); } } } } return result; } exports.dynamicPick = dynamicPick; function internalDynamicPick(o, p, required, prefix) { const result = {}; let hasContent = false; for (let prop in o) { if (!o[prop]) { // Do nothing } else if ((prefix + '.' + prop) in required) { hasContent = true; result[prop] = o[prop]; } else { const isRequired = p[prop]; if (isRequired === true) { hasContent = true; result[prop] = o[prop]; } else if (!isRequired) { // Do nothing } else if (typeof isRequired === 'object') { const content = internalDynamicPick(o[prop], isRequired, required, prefix + '.' + prop); if (content !== undefined) { hasContent = true; result[prop] = content; } } } } if (!hasContent) { return undefined; } return result; } function dynamicPickPaths(obj, pick, mandatory) { const result = {}; const required = {}; if (mandatory) { for (let i = 0, length = mandatory.length; i < length; i++) { required[mandatory[i]] = true; } } if (pick) { for (let i = 0, length = pick.length; i < length; i++) { required[pick[i]] = true; } } const o = obj; for (let prop in o) { if (!o[prop]) { // Do nothing } else if (prop in required) { result[prop] = o[prop]; } else if (!(0, values_1.isValueSource)(o[prop])) { const content = internalDynamicPickPaths(o[prop], required, prop); if (content !== undefined) { result[prop] = content; } } } return result; } exports.dynamicPickPaths = dynamicPickPaths; function internalDynamicPickPaths(o, required, prefix) { const result = {}; let hasContent = false; for (let prop in o) { if (!o[prop]) { // Do nothing } else if ((prefix + '.' + prop) in required) { hasContent = true; result[prop] = o[prop]; } else if (!(0, values_1.isValueSource)(o[prop])) { const content = internalDynamicPickPaths(o[prop], required, prefix + '.' + prop); if (content !== undefined) { hasContent; result[prop] = content; } } } if (!hasContent) { return undefined; } return result; } function expandTypeFromDynamicPickPaths(_obj, _pick, result, _mandatory) { return result; } exports.expandTypeFromDynamicPickPaths = expandTypeFromDynamicPickPaths; function expandTypeProjectedAsNullableFromDynamicPickPaths(_obj, _pick, result, _mandatory) { return result; } exports.expandTypeProjectedAsNullableFromDynamicPickPaths = expandTypeProjectedAsNullableFromDynamicPickPaths;