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
JavaScript
;
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;