ts-sql-query
Advanced tools
Comparing version 1.44.0 to 1.45.0
import { AnyValueSource } from './expressions/values'; | ||
import { MandatoryPropertiesOf } from './utils/resultUtils'; | ||
export type { DynamicCondition, TypeSafeDynamicCondition } from './expressions/dynamicConditionUsingFilters'; | ||
export declare type Pickable = { | ||
[key: string]: AnyValueSource | Pickable; | ||
[key in string]?: AnyValueSource | Pickable; | ||
}; | ||
export declare type DynamicPick<Type extends Pickable, Mandatory extends keyof Type = never> = Omit<{ | ||
[P in keyof Type]?: Type[P] extends AnyValueSource ? boolean : Type[P] extends Pickable ? boolean | DynamicPick<Type[P]> : never; | ||
}, Mandatory>; | ||
declare type PickWithMandatories<Type extends Pickable, Mandatory extends keyof Type = never> = { | ||
[P in Exclude<keyof Type, Mandatory>]?: Type[P] extends AnyValueSource ? Type[P] : Type[P] extends Pickable ? PickWithMandatories<Type[P]> : never; | ||
export declare type DynamicPick<TYPE extends Pickable, MANDATORY extends MandatoryPaths<TYPE, ''> = never> = InternalDynamicPick<TYPE, MANDATORY, ''>; | ||
declare type InternalDynamicPick<TYPE, MANDATORY extends string, PREFIX extends string> = Omit<{ | ||
[P in (keyof TYPE) & string]?: TYPE[P] extends AnyValueSource | undefined ? boolean : InternalDynamicPick<TYPE[P], MANDATORY, `${PREFIX}.${P}`> | boolean; | ||
}, MadatoriesInType<TYPE, MANDATORY, PREFIX>>; | ||
declare type PickWithMandatories<TYPE, MANDATORY extends string, PREFIX extends string> = Expand<{ | ||
[P in OptionalValueSourcesInType<TYPE, MANDATORY, PREFIX>]?: TYPE[P]; | ||
} & { | ||
[Q in Mandatory]: Type[Q]; | ||
}; | ||
export declare function dynamicPick<Type extends Pickable, Mandatory extends keyof Type = never>(obj: Type, pick: DynamicPick<Type>, mandatory?: Mandatory[]): { | ||
[P in keyof PickWithMandatories<Type, Mandatory>]: PickWithMandatories<Type, Mandatory>[P]; | ||
}; | ||
[P in NonValueSourcesInType<TYPE, MANDATORY, PREFIX>]: PREFIX extends '' ? PickWithMandatories<TYPE[P], MANDATORY, `${P}`> : PickWithMandatories<TYPE[P], MANDATORY, `${PREFIX}.${P}`>; | ||
} & { | ||
[Q in MANDATORY & keyof TYPE]: TYPE[Q]; | ||
}>; | ||
declare type MadatoriesInType<TYPE, MANDATORY extends string, PREFIX extends string> = { | ||
[P in (keyof TYPE) & string]-?: `${PREFIX}${P}` extends MANDATORY ? P : never; | ||
}[(keyof TYPE) & string]; | ||
declare type OptionalValueSourcesInType<TYPE, MANDATORY extends string, PREFIX extends string> = { | ||
[P in (keyof TYPE) & string]-?: TYPE[P] extends AnyValueSource | undefined ? (`${PREFIX}${P}` extends MANDATORY ? never : P) : never; | ||
}[(keyof TYPE) & string]; | ||
declare type NonValueSourcesInType<TYPE, MANDATORY extends string, PREFIX extends string> = { | ||
[P in (keyof TYPE) & string]-?: TYPE[P] extends AnyValueSource | undefined ? never : `${PREFIX}${P}` extends MANDATORY ? never : P; | ||
}[(keyof TYPE) & string]; | ||
declare type MandatoryPaths<TYPE, PREFIX extends string> = undefined extends TYPE ? never : TYPE extends AnyValueSource ? `${PREFIX}` : PREFIX extends '' ? { | ||
[KEY in MandatoryPropertiesOf<TYPE> & string]: MandatoryPaths<TYPE[KEY], `${KEY}`>; | ||
}[MandatoryPropertiesOf<TYPE> & string] : { | ||
[KEY in MandatoryPropertiesOf<TYPE> & string]: MandatoryPaths<TYPE[KEY], `${PREFIX}.${KEY}`>; | ||
}[MandatoryPropertiesOf<TYPE> & string] | `${PREFIX}`; | ||
declare type Expand<T> = T extends infer O ? { | ||
[K in keyof O]: O[K]; | ||
} : never; | ||
export declare function dynamicPick<TYPE extends Pickable, MANDATORY extends MandatoryPaths<TYPE, ''> = never>(obj: TYPE, pick: DynamicPick<TYPE>, mandatory?: MANDATORY[]): PickWithMandatories<TYPE, MANDATORY, ''>; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.dynamicPick = void 0; | ||
// 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 o = obj; | ||
const p = pick; | ||
const required = {}; | ||
if (mandatory) { | ||
for (let i = 0, length = mandatory.length; i < length; i++) { | ||
const p = mandatory[i]; | ||
result[p] = o[p]; | ||
required[mandatory[i]] = true; | ||
} | ||
} | ||
for (let prop in p) { | ||
if (p[prop] && prop in o) { | ||
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') { | ||
result[prop] = internalDynamicPick(o[prop], isRequired, required, prop); | ||
} | ||
} | ||
} | ||
@@ -22,1 +38,25 @@ return result; | ||
exports.dynamicPick = dynamicPick; | ||
function internalDynamicPick(o, p, required, prefix) { | ||
const result = {}; | ||
for (let prop in o) { | ||
if (!o[prop]) { | ||
// Do nothing | ||
} | ||
else if ((prefix + '.' + 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') { | ||
result[prop] = internalDynamicPick(o[prop], isRequired, required, prefix + '.' + prop); | ||
} | ||
} | ||
} | ||
return result; | ||
} |
@@ -23,6 +23,6 @@ import type { MandatoryInsertSets, MandatoryInsertValues } from "../expressions/insert"; | ||
export declare type ColumnKeys<O> = { | ||
[K in keyof O]-?: O[K] extends AnyValueSource ? K : never; | ||
[K in keyof O]-?: K extends string ? (O[K] extends AnyValueSource ? K : never) : never; | ||
}[keyof O]; | ||
export declare type WritableColumnKeys<O> = { | ||
[K in keyof O]-?: O[K] extends Column ? (O[K] extends ComputedColumn ? never : K) : never; | ||
[K in keyof O]-?: K extends string ? (O[K] extends Column ? (O[K] extends ComputedColumn ? never : K) : never) : never; | ||
}[keyof O]; | ||
@@ -29,0 +29,0 @@ export declare type TableOrViewOf<TABLE_OR_VIEW extends ITableOrView<any>, ALIAS extends string = ''> = ALIAS extends false ? ITableOrView<TABLE_OR_VIEW[typeof tableOrViewRef] | TABLE_OR_VIEW_ALIAS<TABLE_OR_VIEW[typeof tableOrViewRef], ALIAS>> : ALIAS extends '' ? ITableOrView<TABLE_OR_VIEW[typeof tableOrViewRef]> : ITableOrView<TABLE_OR_VIEW_ALIAS<TABLE_OR_VIEW[typeof tableOrViewRef], ALIAS>>; |
@@ -36,8 +36,10 @@ import type { ITableOrView } from "../utils/ITableOrView"; | ||
}; | ||
export declare function extractColumnsFrom<O extends object>(obj: O): { | ||
[K in ColumnKeys<O>]: O[K]; | ||
export declare function extractColumnsFrom<O extends object, EXCLUDE extends ColumnKeys<O> = never>(obj: O, exclude?: EXCLUDE[]): { | ||
[K in Exclude<ColumnKeys<O>, EXCLUDE>]: O[K]; | ||
}; | ||
export declare function extractWritableColumnsFrom<O extends object>(obj: O): { | ||
[K in WritableColumnKeys<O>]: O[K]; | ||
export declare function extractWritableColumnsFrom<O extends object, EXCLUDE extends ColumnKeys<O> = never>(obj: O, exclude?: EXCLUDE[]): { | ||
[K in Exclude<WritableColumnKeys<O>, EXCLUDE>]: O[K]; | ||
}; | ||
export declare function extractColumnNamesFrom<O extends object, EXCLUDE extends ColumnKeys<O> = never>(obj: O, exclude?: EXCLUDE[]): Exclude<ColumnKeys<O>, EXCLUDE>[]; | ||
export declare function extractWritableColumnNamesFrom<O extends object, EXCLUDE extends ColumnKeys<O> = never>(obj: O, exclude?: EXCLUDE[]): Exclude<WritableColumnKeys<O>, EXCLUDE>[]; | ||
declare type HasIfValueSource<VALUE> = VALUE extends { | ||
@@ -44,0 +46,0 @@ [ifValueSourceType]: 'IfValueSource'; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.mergeType = exports.extractWritableColumnsFrom = exports.extractColumnsFrom = exports.prefixMapForGuidedSplitDotted = exports.prefixMapForSplitDotted = exports.prefixDotted = exports.mapForGuidedSplit = exports.prefixMapForGuidedSplitCapitalized = exports.prefixMapForSplitCapitalized = exports.prefixCapitalized = void 0; | ||
exports.mergeType = exports.extractWritableColumnNamesFrom = exports.extractColumnNamesFrom = exports.extractWritableColumnsFrom = exports.extractColumnsFrom = exports.prefixMapForGuidedSplitDotted = exports.prefixMapForSplitDotted = exports.prefixDotted = exports.mapForGuidedSplit = exports.prefixMapForGuidedSplitCapitalized = exports.prefixMapForSplitCapitalized = exports.prefixCapitalized = void 0; | ||
const values_1 = require("../expressions/values"); | ||
@@ -101,8 +101,17 @@ const Column_1 = require("../utils/Column"); | ||
exports.prefixMapForGuidedSplitDotted = prefixMapForGuidedSplitDotted; | ||
function extractColumnsFrom(obj) { | ||
function extractColumnsFrom(obj, exclude) { | ||
if (!obj) { | ||
return obj; | ||
} | ||
const ignore = {}; | ||
if (exclude) { | ||
for (let i = 0, length = exclude.length; i < length; i++) { | ||
ignore[exclude[i]] = true; | ||
} | ||
} | ||
const result = {}; | ||
for (let key in obj) { | ||
if (key in ignore) { | ||
continue; | ||
} | ||
const value = obj[key]; | ||
@@ -116,8 +125,17 @@ if ((0, values_1.isValueSource)(value)) { | ||
exports.extractColumnsFrom = extractColumnsFrom; | ||
function extractWritableColumnsFrom(obj) { | ||
function extractWritableColumnsFrom(obj, exclude) { | ||
if (!obj) { | ||
return obj; | ||
} | ||
const ignore = {}; | ||
if (exclude) { | ||
for (let i = 0, length = exclude.length; i < length; i++) { | ||
ignore[exclude[i]] = true; | ||
} | ||
} | ||
const result = {}; | ||
for (let key in obj) { | ||
if (key in ignore) { | ||
continue; | ||
} | ||
const value = obj[key]; | ||
@@ -133,2 +151,50 @@ if ((0, Column_1.isColumn)(value)) { | ||
exports.extractWritableColumnsFrom = extractWritableColumnsFrom; | ||
function extractColumnNamesFrom(obj, exclude) { | ||
if (!obj) { | ||
return []; | ||
} | ||
const ignore = {}; | ||
if (exclude) { | ||
for (let i = 0, length = exclude.length; i < length; i++) { | ||
ignore[exclude[i]] = true; | ||
} | ||
} | ||
const result = []; | ||
for (let key in obj) { | ||
if (key in ignore) { | ||
continue; | ||
} | ||
const value = obj[key]; | ||
if ((0, values_1.isValueSource)(value)) { | ||
result.push(key); | ||
} | ||
} | ||
return result; | ||
} | ||
exports.extractColumnNamesFrom = extractColumnNamesFrom; | ||
function extractWritableColumnNamesFrom(obj, exclude) { | ||
if (!obj) { | ||
return []; | ||
} | ||
const ignore = {}; | ||
if (exclude) { | ||
for (let i = 0, length = exclude.length; i < length; i++) { | ||
ignore[exclude[i]] = true; | ||
} | ||
} | ||
const result = []; | ||
for (let key in obj) { | ||
if (key in ignore) { | ||
continue; | ||
} | ||
const value = obj[key]; | ||
if ((0, Column_1.isColumn)(value)) { | ||
if (!(0, Column_1.__getColumnPrivate)(value).__isComputed) { | ||
result.push(key); | ||
} | ||
} | ||
} | ||
return result; | ||
} | ||
exports.extractWritableColumnNamesFrom = extractWritableColumnNamesFrom; | ||
function mergeType(value) { | ||
@@ -135,0 +201,0 @@ return value; |
{ | ||
"name": "ts-sql-query", | ||
"version": "1.44.0", | ||
"version": "1.45.0", | ||
"description": "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.", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
@@ -31,6 +31,6 @@ import { AnyDB } from "../databases"; | ||
}; | ||
declare type MandatoryPropertiesOf<TYPE> = ({ | ||
export declare type MandatoryPropertiesOf<TYPE> = ({ | ||
[K in keyof TYPE]-?: null | undefined extends TYPE[K] ? never : (null extends TYPE[K] ? never : (undefined extends TYPE[K] ? never : K)); | ||
})[keyof TYPE]; | ||
declare type OptionalPropertiesOf<TYPE> = ({ | ||
export declare type OptionalPropertiesOf<TYPE> = ({ | ||
[K in keyof TYPE]-?: null | undefined extends TYPE[K] ? K : (null extends TYPE[K] ? K : (undefined extends TYPE[K] ? K : never)); | ||
@@ -37,0 +37,0 @@ })[keyof TYPE]; |
2031794
34232