Initial commit - Event Planner application

This commit is contained in:
mberlin
2026-03-18 14:55:56 -03:00
commit 86d779eb4d
7548 changed files with 1006324 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
import { BinaryOperationNode } from '../operation-node/binary-operation-node.js';
import { type OperationNodeSource } from '../operation-node/operation-node-source.js';
import { type ComparisonOperator, type BinaryOperator, type Operator } from '../operation-node/operator-node.js';
import { type ExtractTypeFromReferenceExpression, type ExtractTypeFromStringReference, type ReferenceExpression, type StringReference } from './reference-parser.js';
import { type ValueExpression, type ValueExpressionOrList } from './value-parser.js';
import type { OperationNode } from '../operation-node/operation-node.js';
import type { Expression } from '../expression/expression.js';
import type { SelectType } from '../util/column-type.js';
export type OperandValueExpression<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
export type OperandValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpressionOrList<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE> | null>;
export type OperatorExpression = Operator | Expression<unknown>;
export type BinaryOperatorExpression = BinaryOperator | Expression<unknown>;
export type ComparisonOperatorExpression = ComparisonOperator | Expression<unknown>;
export type FilterObject<DB, TB extends keyof DB> = {
[R in StringReference<DB, TB>]?: ValueExpressionOrList<DB, TB, SelectType<ExtractTypeFromStringReference<DB, TB, R>>>;
};
export declare function parseValueBinaryOperationOrExpression(args: any[]): OperationNode;
export declare function parseValueBinaryOperation(left: ReferenceExpression<any, any>, operator: BinaryOperatorExpression, right: OperandValueExpressionOrList<any, any, any>): BinaryOperationNode;
export declare function parseReferentialBinaryOperation(left: ReferenceExpression<any, any>, operator: BinaryOperatorExpression, right: OperandValueExpressionOrList<any, any, any>): BinaryOperationNode;
export declare function parseFilterObject(obj: Readonly<FilterObject<any, any>>, combinator: 'and' | 'or'): OperationNode;
export declare function parseFilterList(list: ReadonlyArray<OperationNodeSource | OperationNode>, combinator: 'and' | 'or', withParens?: boolean): OperationNode;

View File

@@ -0,0 +1,68 @@
/// <reference types="./binary-operation-parser.d.ts" />
import { BinaryOperationNode } from '../operation-node/binary-operation-node.js';
import { isBoolean, isNull, isString, isUndefined, } from '../util/object-utils.js';
import { isOperationNodeSource, } from '../operation-node/operation-node-source.js';
import { OperatorNode, OPERATORS, } from '../operation-node/operator-node.js';
import { parseReferenceExpression, } from './reference-parser.js';
import { parseValueExpression, parseValueExpressionOrList, } from './value-parser.js';
import { ValueNode } from '../operation-node/value-node.js';
import { AndNode } from '../operation-node/and-node.js';
import { ParensNode } from '../operation-node/parens-node.js';
import { OrNode } from '../operation-node/or-node.js';
export function parseValueBinaryOperationOrExpression(args) {
if (args.length === 3) {
return parseValueBinaryOperation(args[0], args[1], args[2]);
}
else if (args.length === 1) {
return parseValueExpression(args[0]);
}
throw new Error(`invalid arguments: ${JSON.stringify(args)}`);
}
export function parseValueBinaryOperation(left, operator, right) {
if (isIsOperator(operator) && needsIsOperator(right)) {
return BinaryOperationNode.create(parseReferenceExpression(left), parseOperator(operator), ValueNode.createImmediate(right));
}
return BinaryOperationNode.create(parseReferenceExpression(left), parseOperator(operator), parseValueExpressionOrList(right));
}
export function parseReferentialBinaryOperation(left, operator, right) {
return BinaryOperationNode.create(parseReferenceExpression(left), parseOperator(operator), parseReferenceExpression(right));
}
export function parseFilterObject(obj, combinator) {
return parseFilterList(Object.entries(obj)
.filter(([, v]) => !isUndefined(v))
.map(([k, v]) => parseValueBinaryOperation(k, needsIsOperator(v) ? 'is' : '=', v)), combinator);
}
export function parseFilterList(list, combinator, withParens = true) {
const combine = combinator === 'and' ? AndNode.create : OrNode.create;
if (list.length === 0) {
return BinaryOperationNode.create(ValueNode.createImmediate(1), OperatorNode.create('='), ValueNode.createImmediate(combinator === 'and' ? 1 : 0));
}
let node = toOperationNode(list[0]);
for (let i = 1; i < list.length; ++i) {
node = combine(node, toOperationNode(list[i]));
}
if (list.length > 1 && withParens) {
return ParensNode.create(node);
}
return node;
}
function isIsOperator(operator) {
return operator === 'is' || operator === 'is not';
}
function needsIsOperator(value) {
return isNull(value) || isBoolean(value);
}
function parseOperator(operator) {
if (isString(operator) && OPERATORS.includes(operator)) {
return OperatorNode.create(operator);
}
if (isOperationNodeSource(operator)) {
return operator.toOperationNode();
}
throw new Error(`invalid operator ${JSON.stringify(operator)}`);
}
function toOperationNode(nodeOrSource) {
return isOperationNodeSource(nodeOrSource)
? nodeOrSource.toOperationNode()
: nodeOrSource;
}

View File

@@ -0,0 +1,12 @@
import type { ExtractTypeFromReferenceExpression } from './reference-parser.js';
export type ExtractTypeFromCoalesce1<DB, TB extends keyof DB, R1> = ExtractTypeFromReferenceExpression<DB, TB, R1>;
export type ExtractTypeFromCoalesce2<DB, TB extends keyof DB, R1, R2> = ExtractTypeFromCoalesceValues2<ExtractTypeFromReferenceExpression<DB, TB, R1>, ExtractTypeFromReferenceExpression<DB, TB, R2>>;
type ExtractTypeFromCoalesceValues2<V1, V2> = null extends V1 ? null extends V2 ? V1 | V2 : NotNull<V1 | V2> : NotNull<V1>;
export type ExtractTypeFromCoalesce3<DB, TB extends keyof DB, R1, R2, R3> = ExtractTypeFromCoalesceValues3<ExtractTypeFromReferenceExpression<DB, TB, R1>, ExtractTypeFromReferenceExpression<DB, TB, R2>, ExtractTypeFromReferenceExpression<DB, TB, R3>>;
type ExtractTypeFromCoalesceValues3<V1, V2, V3> = null extends V1 ? null extends V2 ? null extends V3 ? V1 | V2 | V3 : NotNull<V1 | V2 | V3> : NotNull<V1 | V2> : NotNull<V1>;
export type ExtractTypeFromCoalesce4<DB, TB extends keyof DB, R1, R2, R3, R4> = ExtractTypeFromCoalesceValues4<ExtractTypeFromReferenceExpression<DB, TB, R1>, ExtractTypeFromReferenceExpression<DB, TB, R2>, ExtractTypeFromReferenceExpression<DB, TB, R3>, ExtractTypeFromReferenceExpression<DB, TB, R4>>;
type ExtractTypeFromCoalesceValues4<V1, V2, V3, V4> = null extends V1 ? null extends V2 ? null extends V3 ? null extends V4 ? V1 | V2 | V3 | V4 : NotNull<V1 | V2 | V3 | V4> : NotNull<V1 | V2 | V3> : NotNull<V1 | V2> : NotNull<V1>;
export type ExtractTypeFromCoalesce5<DB, TB extends keyof DB, R1, R2, R3, R4, R5> = ExtractTypeFromCoalesceValues5<ExtractTypeFromReferenceExpression<DB, TB, R1>, ExtractTypeFromReferenceExpression<DB, TB, R2>, ExtractTypeFromReferenceExpression<DB, TB, R3>, ExtractTypeFromReferenceExpression<DB, TB, R4>, ExtractTypeFromReferenceExpression<DB, TB, R5>>;
type ExtractTypeFromCoalesceValues5<V1, V2, V3, V4, V5> = null extends V1 ? null extends V2 ? null extends V3 ? null extends V4 ? null extends V5 ? V1 | V2 | V3 | V4 | V5 : NotNull<V1 | V2 | V3 | V4 | V5> : NotNull<V1 | V2 | V3 | V4> : NotNull<V1 | V2 | V3> : NotNull<V1 | V2> : NotNull<V1>;
type NotNull<T> = Exclude<T, null>;
export {};

View File

@@ -0,0 +1,2 @@
/// <reference types="./coalesce-parser.d.ts" />
export {};

View File

@@ -0,0 +1 @@
export type Collation = 'nocase' | 'binary' | 'rtrim' | (string & {});

View File

@@ -0,0 +1,2 @@
/// <reference types="./collate-parser.d.ts" />
export {};

View File

@@ -0,0 +1,5 @@
import type { Expression } from '../expression/expression.js';
import { type ColumnDataType } from '../operation-node/data-type-node.js';
import type { OperationNode } from '../operation-node/operation-node.js';
export type DataTypeExpression = ColumnDataType | Expression<any>;
export declare function parseDataTypeExpression(dataType: DataTypeExpression): OperationNode;

View File

@@ -0,0 +1,12 @@
/// <reference types="./data-type-parser.d.ts" />
import { DataTypeNode, isColumnDataType, } from '../operation-node/data-type-node.js';
import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
export function parseDataTypeExpression(dataType) {
if (isOperationNodeSource(dataType)) {
return dataType.toOperationNode();
}
if (isColumnDataType(dataType)) {
return DataTypeNode.create(dataType);
}
throw new Error(`invalid column data type ${JSON.stringify(dataType)}`);
}

View File

@@ -0,0 +1,4 @@
import type { Expression } from '../expression/expression.js';
import type { OperationNode } from '../operation-node/operation-node.js';
export type DefaultValueExpression = unknown | Expression<unknown>;
export declare function parseDefaultValueExpression(value: DefaultValueExpression): OperationNode;

View File

@@ -0,0 +1,8 @@
/// <reference types="./default-value-parser.d.ts" />
import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
import { ValueNode } from '../operation-node/value-node.js';
export function parseDefaultValueExpression(value) {
return isOperationNodeSource(value)
? value.toOperationNode()
: ValueNode.createImmediate(value);
}

View File

@@ -0,0 +1,9 @@
import type { DeleteQueryBuilder } from '../query-builder/delete-query-builder.js';
import type { DeleteResult } from '../query-builder/delete-result.js';
import type { ShallowRecord } from '../util/type-utils.js';
import type { ExtractTableAlias, From, FromTables, TableExpressionOrList } from './table-parser.js';
export type DeleteFrom<DB, TE extends TableExpressionOrList<DB, never>> = [
TE
] extends [keyof DB] ? DeleteQueryBuilder<DB, ExtractTableAlias<DB, TE>, DeleteResult> : [
TE
] extends [`${infer T} as ${infer A}`] ? T extends keyof DB ? DeleteQueryBuilder<DB & ShallowRecord<A, DB[T]>, A, DeleteResult> : never : TE extends ReadonlyArray<infer T> ? DeleteQueryBuilder<From<DB, T>, FromTables<DB, never, T>, DeleteResult> : DeleteQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, DeleteResult>;

View File

@@ -0,0 +1,2 @@
/// <reference types="./delete-from-parser.d.ts" />
export {};

View File

@@ -0,0 +1,20 @@
import { type AliasedExpression, type Expression } from '../expression/expression.js';
import type { AliasNode } from '../operation-node/alias-node.js';
import type { OperationNode } from '../operation-node/operation-node.js';
import { type ExpressionBuilder } from '../expression/expression-builder.js';
import type { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
/**
* Like `Expression<V>` but also accepts a select query with an output
* type extending `Record<string, V>`. This type is useful because SQL
* treats records with a single column as single values.
*/
export type OperandExpression<V> = Expression<V> | SelectQueryBuilderExpression<Record<string, V>>;
export type ExpressionOrFactory<DB, TB extends keyof DB, V> = OperandExpression<V> | OperandExpressionFactory<DB, TB, V>;
export type AliasedExpressionOrFactory<DB, TB extends keyof DB> = AliasedExpression<any, any> | AliasedExpressionFactory<DB, TB>;
export type ExpressionFactory<DB, TB extends keyof DB, V> = (eb: ExpressionBuilder<DB, TB>) => Expression<V>;
type OperandExpressionFactory<DB, TB extends keyof DB, V> = (eb: ExpressionBuilder<DB, TB>) => OperandExpression<V>;
type AliasedExpressionFactory<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => AliasedExpression<any, any>;
export declare function parseExpression(exp: ExpressionOrFactory<any, any, any>): OperationNode;
export declare function parseAliasedExpression(exp: AliasedExpressionOrFactory<any, any>): AliasNode;
export declare function isExpressionOrFactory(obj: unknown): obj is ExpressionOrFactory<any, any, any>;
export {};

View File

@@ -0,0 +1,26 @@
/// <reference types="./expression-parser.d.ts" />
import { isAliasedExpression, isExpression, } from '../expression/expression.js';
import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
import { expressionBuilder, } from '../expression/expression-builder.js';
import { isFunction } from '../util/object-utils.js';
export function parseExpression(exp) {
if (isOperationNodeSource(exp)) {
return exp.toOperationNode();
}
else if (isFunction(exp)) {
return exp(expressionBuilder()).toOperationNode();
}
throw new Error(`invalid expression: ${JSON.stringify(exp)}`);
}
export function parseAliasedExpression(exp) {
if (isOperationNodeSource(exp)) {
return exp.toOperationNode();
}
else if (isFunction(exp)) {
return exp(expressionBuilder()).toOperationNode();
}
throw new Error(`invalid aliased expression: ${JSON.stringify(exp)}`);
}
export function isExpressionOrFactory(obj) {
return isExpression(obj) || isAliasedExpression(obj) || isFunction(obj);
}

View File

@@ -0,0 +1,2 @@
import { type FetchModifier, FetchNode } from '../operation-node/fetch-node.js';
export declare function parseFetch(rowCount: number | bigint, modifier: FetchModifier): FetchNode;

15
node_modules/kysely/dist/esm/parser/fetch-parser.js generated vendored Normal file
View File

@@ -0,0 +1,15 @@
/// <reference types="./fetch-parser.d.ts" />
import { FetchNode } from '../operation-node/fetch-node.js';
import { isBigInt, isNumber } from '../util/object-utils.js';
export function parseFetch(rowCount, modifier) {
if (!isNumber(rowCount) && !isBigInt(rowCount)) {
throw new Error(`Invalid fetch row count: ${rowCount}`);
}
if (!isFetchModifier(modifier)) {
throw new Error(`Invalid fetch modifier: ${modifier}`);
}
return FetchNode.create(rowCount, modifier);
}
function isFetchModifier(value) {
return value === 'only' || value === 'with ties';
}

View File

@@ -0,0 +1,6 @@
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
import { type ExpressionBuilder } from '../expression/expression-builder.js';
import { type ReferenceExpression } from './reference-parser.js';
export type GroupByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | (keyof O & string);
export type GroupByArg<DB, TB extends keyof DB, O> = GroupByExpression<DB, TB, O> | ReadonlyArray<GroupByExpression<DB, TB, O>> | ((eb: ExpressionBuilder<DB, TB>) => ReadonlyArray<GroupByExpression<DB, TB, O>>);
export declare function parseGroupBy(groupBy: GroupByArg<any, any, any>): GroupByItemNode[];

View File

@@ -0,0 +1,9 @@
/// <reference types="./group-by-parser.d.ts" />
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
import { expressionBuilder, } from '../expression/expression-builder.js';
import { isFunction } from '../util/object-utils.js';
import { parseReferenceExpressionOrList, } from './reference-parser.js';
export function parseGroupBy(groupBy) {
groupBy = isFunction(groupBy) ? groupBy(expressionBuilder()) : groupBy;
return parseReferenceExpressionOrList(groupBy).map(GroupByItemNode.create);
}

View File

@@ -0,0 +1,2 @@
import { SchemableIdentifierNode } from '../operation-node/schemable-identifier-node.js';
export declare function parseSchemableIdentifier(id: string): SchemableIdentifierNode;

View File

@@ -0,0 +1,20 @@
/// <reference types="./identifier-parser.d.ts" />
import { SchemableIdentifierNode } from '../operation-node/schemable-identifier-node.js';
export function parseSchemableIdentifier(id) {
const SCHEMA_SEPARATOR = '.';
if (id.includes(SCHEMA_SEPARATOR)) {
const parts = id.split(SCHEMA_SEPARATOR).map(trim);
if (parts.length === 2) {
return SchemableIdentifierNode.createWithSchema(parts[0], parts[1]);
}
else {
throw new Error(`invalid schemable identifier ${id}`);
}
}
else {
return SchemableIdentifierNode.create(id);
}
}
function trim(str) {
return str.trim();
}

View File

@@ -0,0 +1,14 @@
import { ColumnNode } from '../operation-node/column-node.js';
import { type ValueExpression } from './value-parser.js';
import { ValuesNode } from '../operation-node/values-node.js';
import type { NonNullableInsertKeys, NullableInsertKeys, InsertType } from '../util/column-type.js';
import { type ExpressionBuilder } from '../expression/expression-builder.js';
export type InsertObject<DB, TB extends keyof DB> = {
[C in NonNullableInsertKeys<DB[TB]>]: ValueExpression<DB, TB, InsertType<DB[TB][C]>>;
} & {
[C in NullableInsertKeys<DB[TB]>]?: ValueExpression<DB, TB, InsertType<DB[TB][C]>> | undefined;
};
export type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | ReadonlyArray<InsertObject<DB, TB>>;
export type InsertObjectOrListFactory<DB, TB extends keyof DB, UT extends keyof DB = never> = (eb: ExpressionBuilder<DB, TB | UT>) => InsertObjectOrList<DB, TB>;
export type InsertExpression<DB, TB extends keyof DB, UT extends keyof DB = never> = InsertObjectOrList<DB, TB> | InsertObjectOrListFactory<DB, TB, UT>;
export declare function parseInsertExpression(arg: InsertExpression<any, any, any>): [ReadonlyArray<ColumnNode>, ValuesNode];

View File

@@ -0,0 +1,62 @@
/// <reference types="./insert-values-parser.d.ts" />
import { ColumnNode } from '../operation-node/column-node.js';
import { PrimitiveValueListNode } from '../operation-node/primitive-value-list-node.js';
import { ValueListNode } from '../operation-node/value-list-node.js';
import { freeze, isFunction, isReadonlyArray, isUndefined, } from '../util/object-utils.js';
import { parseValueExpression } from './value-parser.js';
import { ValuesNode } from '../operation-node/values-node.js';
import { isExpressionOrFactory } from './expression-parser.js';
import { DefaultInsertValueNode } from '../operation-node/default-insert-value-node.js';
import { expressionBuilder, } from '../expression/expression-builder.js';
export function parseInsertExpression(arg) {
const objectOrList = isFunction(arg) ? arg(expressionBuilder()) : arg;
const list = isReadonlyArray(objectOrList)
? objectOrList
: freeze([objectOrList]);
return parseInsertColumnsAndValues(list);
}
function parseInsertColumnsAndValues(rows) {
const columns = parseColumnNamesAndIndexes(rows);
return [
freeze([...columns.keys()].map(ColumnNode.create)),
ValuesNode.create(rows.map((row) => parseRowValues(row, columns))),
];
}
function parseColumnNamesAndIndexes(rows) {
const columns = new Map();
for (const row of rows) {
const cols = Object.keys(row);
for (const col of cols) {
if (!columns.has(col) && row[col] !== undefined) {
columns.set(col, columns.size);
}
}
}
return columns;
}
function parseRowValues(row, columns) {
const rowColumns = Object.keys(row);
const rowValues = Array.from({
length: columns.size,
});
let hasUndefinedOrComplexColumns = false;
let indexedRowColumns = rowColumns.length;
for (const col of rowColumns) {
const columnIdx = columns.get(col);
if (isUndefined(columnIdx)) {
indexedRowColumns--;
continue;
}
const value = row[col];
if (isUndefined(value) || isExpressionOrFactory(value)) {
hasUndefinedOrComplexColumns = true;
}
rowValues[columnIdx] = value;
}
const hasMissingColumns = indexedRowColumns < columns.size;
if (hasMissingColumns || hasUndefinedOrComplexColumns) {
const defaultValue = DefaultInsertValueNode.create();
return ValueListNode.create(rowValues.map((it) => isUndefined(it) ? defaultValue : parseValueExpression(it)));
}
return PrimitiveValueListNode.create(rowValues);
}

10
node_modules/kysely/dist/esm/parser/join-parser.d.ts generated vendored Normal file
View File

@@ -0,0 +1,10 @@
import { JoinNode, type JoinType } from '../operation-node/join-node.js';
import type { JoinBuilder } from '../query-builder/join-builder.js';
import type { AnyColumn, AnyColumnWithTable, DrainOuterGeneric } from '../util/type-utils.js';
import { type From, type FromTables } from './table-parser.js';
export type JoinReferenceExpression<DB, TB extends keyof DB, TE> = DrainOuterGeneric<AnyJoinColumn<DB, TB, TE> | AnyJoinColumnWithTable<DB, TB, TE>>;
export type JoinCallbackExpression<DB, TB extends keyof DB, TE> = (join: JoinBuilder<From<DB, TE>, FromTables<DB, TB, TE>>) => JoinBuilder<any, any>;
type AnyJoinColumn<DB, TB extends keyof DB, TE> = AnyColumn<From<DB, TE>, FromTables<DB, TB, TE>>;
type AnyJoinColumnWithTable<DB, TB extends keyof DB, TE> = AnyColumnWithTable<From<DB, TE>, FromTables<DB, TB, TE>>;
export declare function parseJoin(joinType: JoinType, args: any[]): JoinNode;
export {};

28
node_modules/kysely/dist/esm/parser/join-parser.js generated vendored Normal file
View File

@@ -0,0 +1,28 @@
/// <reference types="./join-parser.d.ts" />
import { JoinNode } from '../operation-node/join-node.js';
import { parseReferentialBinaryOperation } from './binary-operation-parser.js';
import { createJoinBuilder } from './parse-utils.js';
import { parseTableExpression, } from './table-parser.js';
export function parseJoin(joinType, args) {
if (args.length === 3) {
return parseSingleOnJoin(joinType, args[0], args[1], args[2]);
}
else if (args.length === 2) {
return parseCallbackJoin(joinType, args[0], args[1]);
}
else if (args.length === 1) {
return parseOnlessJoin(joinType, args[0]);
}
else {
throw new Error('not implemented');
}
}
function parseCallbackJoin(joinType, from, callback) {
return callback(createJoinBuilder(joinType, from)).toOperationNode();
}
function parseSingleOnJoin(joinType, from, lhsColumn, rhsColumn) {
return JoinNode.createWithOn(joinType, parseTableExpression(from), parseReferentialBinaryOperation(lhsColumn, '=', rhsColumn));
}
function parseOnlessJoin(joinType, from) {
return JoinNode.create(joinType, parseTableExpression(from));
}

View File

@@ -0,0 +1,7 @@
import type { MergeQueryBuilder } from '../query-builder/merge-query-builder.js';
import type { MergeResult } from '../query-builder/merge-result.js';
import type { ShallowRecord } from '../util/type-utils.js';
import type { ExtractTableAlias, SimpleTableReference } from './table-parser.js';
export type MergeInto<DB, TE extends SimpleTableReference<DB>> = [TE] extends [
keyof DB
] ? MergeQueryBuilder<DB, ExtractTableAlias<DB, TE>, MergeResult> : [TE] extends [`${infer T} as ${infer A}`] ? T extends keyof DB ? MergeQueryBuilder<DB & ShallowRecord<A, DB[T]>, A, MergeResult> : never : never;

View File

@@ -0,0 +1,2 @@
/// <reference types="./merge-into-parser.d.ts" />
export {};

View File

@@ -0,0 +1,9 @@
import type { InsertQueryNode } from '../operation-node/insert-query-node.js';
import { type OperationNodeSource } from '../operation-node/operation-node-source.js';
import type { OperationNode } from '../operation-node/operation-node.js';
import { WhenNode } from '../operation-node/when-node.js';
export declare function parseMergeWhen(type: {
isMatched: boolean;
bySource?: boolean;
}, args?: any[], refRight?: boolean): WhenNode;
export declare function parseMergeThen(result: 'delete' | 'do nothing' | OperationNodeSource | InsertQueryNode): OperationNode;

28
node_modules/kysely/dist/esm/parser/merge-parser.js generated vendored Normal file
View File

@@ -0,0 +1,28 @@
/// <reference types="./merge-parser.d.ts" />
import { MatchedNode } from '../operation-node/matched-node.js';
import { isOperationNodeSource, } from '../operation-node/operation-node-source.js';
import { RawNode } from '../operation-node/raw-node.js';
import { WhenNode } from '../operation-node/when-node.js';
import { isString } from '../util/object-utils.js';
import { parseFilterList, parseReferentialBinaryOperation, parseValueBinaryOperationOrExpression, } from './binary-operation-parser.js';
export function parseMergeWhen(type, args, refRight) {
return WhenNode.create(parseFilterList([
MatchedNode.create(!type.isMatched, type.bySource),
...(args && args.length > 0
? [
args.length === 3 && refRight
? parseReferentialBinaryOperation(args[0], args[1], args[2])
: parseValueBinaryOperationOrExpression(args),
]
: []),
], 'and', false));
}
export function parseMergeThen(result) {
if (isString(result)) {
return RawNode.create([result], []);
}
if (isOperationNodeSource(result)) {
return result.toOperationNode();
}
return result;
}

View File

@@ -0,0 +1,2 @@
import { type OnCommitAction } from '../operation-node/create-table-node.js';
export declare function parseOnCommitAction(action: OnCommitAction): OnCommitAction;

View File

@@ -0,0 +1,8 @@
/// <reference types="./on-commit-action-parse.d.ts" />
import { ON_COMMIT_ACTIONS, } from '../operation-node/create-table-node.js';
export function parseOnCommitAction(action) {
if (ON_COMMIT_ACTIONS.includes(action)) {
return action;
}
throw new Error(`invalid OnCommitAction ${action}`);
}

View File

@@ -0,0 +1,2 @@
import { type OnModifyForeignAction } from '../operation-node/references-node.js';
export declare function parseOnModifyForeignAction(action: OnModifyForeignAction): OnModifyForeignAction;

View File

@@ -0,0 +1,8 @@
/// <reference types="./on-modify-action-parser.d.ts" />
import { ON_MODIFY_FOREIGN_ACTIONS, } from '../operation-node/references-node.js';
export function parseOnModifyForeignAction(action) {
if (ON_MODIFY_FOREIGN_ACTIONS.includes(action)) {
return action;
}
throw new Error(`invalid OnModifyForeignAction ${action}`);
}

View File

@@ -0,0 +1,25 @@
import { type DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
import { type Expression } from '../expression/expression.js';
import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
import { OrderByItemBuilder } from '../query-builder/order-by-item-builder.js';
import { type ExpressionOrFactory } from './expression-parser.js';
import { type ReferenceExpression, type StringReference } from './reference-parser.js';
export type OrderByExpression<DB, TB extends keyof DB, O> = StringReference<DB, TB> | (keyof O & string) | ExpressionOrFactory<DB, TB, any> | DynamicReferenceBuilder<any>;
export type OrderByModifiers = OrderByDirection | OrderByModifiersCallbackExpression;
export type OrderByDirection = 'asc' | 'desc';
export declare function isOrderByDirection(thing: unknown): thing is OrderByDirection;
export type OrderByModifiersCallbackExpression = (builder: OrderByItemBuilder) => OrderByItemBuilder;
/**
* @deprecated performance reasons, use {@link OrderByExpression} instead.
*/
export type DirectedOrderByStringReference<DB, TB extends keyof DB, O> = `${StringReference<DB, TB> | (keyof O & string)} ${OrderByDirection}`;
/**
* @deprecated replaced with {@link OrderByModifiers}
*/
export type OrderByDirectionExpression = OrderByDirection | Expression<any>;
/**
* @deprecated use {@link OrderByExpression} instead.
*/
export type UndirectedOrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | (keyof O & string);
export declare function parseOrderBy(args: any[]): OrderByItemNode[];
export declare function parseOrderByItem(expr: OrderByExpression<any, any, any>, modifiers?: OrderByModifiers): OrderByItemNode;

67
node_modules/kysely/dist/esm/parser/order-by-parser.js generated vendored Normal file
View File

@@ -0,0 +1,67 @@
/// <reference types="./order-by-parser.d.ts" />
import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
import { isExpression } from '../expression/expression.js';
import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
import { RawNode } from '../operation-node/raw-node.js';
import { OrderByItemBuilder } from '../query-builder/order-by-item-builder.js';
import { logOnce } from '../util/log-once.js';
import { isExpressionOrFactory, parseExpression, } from './expression-parser.js';
import { parseStringReference, } from './reference-parser.js';
export function isOrderByDirection(thing) {
return thing === 'asc' || thing === 'desc';
}
export function parseOrderBy(args) {
if (args.length === 2) {
return [parseOrderByItem(args[0], args[1])];
}
if (args.length === 1) {
const [orderBy] = args;
if (Array.isArray(orderBy)) {
logOnce('orderBy(array) is deprecated, use multiple orderBy calls instead.');
return orderBy.map((item) => parseOrderByItem(item));
}
return [parseOrderByItem(orderBy)];
}
throw new Error(`Invalid number of arguments at order by! expected 1-2, received ${args.length}`);
}
export function parseOrderByItem(expr, modifiers) {
const parsedRef = parseOrderByExpression(expr);
if (OrderByItemNode.is(parsedRef)) {
if (modifiers) {
throw new Error('Cannot specify direction twice!');
}
return parsedRef;
}
return parseOrderByWithModifiers(parsedRef, modifiers);
}
function parseOrderByExpression(expr) {
if (isExpressionOrFactory(expr)) {
return parseExpression(expr);
}
if (isDynamicReferenceBuilder(expr)) {
return expr.toOperationNode();
}
const [ref, direction] = expr.split(' ');
if (direction) {
logOnce("`orderBy('column asc')` is deprecated. Use `orderBy('column', 'asc')` instead.");
return parseOrderByWithModifiers(parseStringReference(ref), direction);
}
return parseStringReference(expr);
}
function parseOrderByWithModifiers(expr, modifiers) {
if (typeof modifiers === 'string') {
if (!isOrderByDirection(modifiers)) {
throw new Error(`Invalid order by direction: ${modifiers}`);
}
return OrderByItemNode.create(expr, RawNode.createWithSql(modifiers));
}
if (isExpression(modifiers)) {
logOnce("`orderBy(..., expr)` is deprecated. Use `orderBy(..., 'asc')` or `orderBy(..., (ob) => ...)` instead.");
return OrderByItemNode.create(expr, modifiers.toOperationNode());
}
const node = OrderByItemNode.create(expr);
if (!modifiers) {
return node;
}
return modifiers(new OrderByItemBuilder({ node })).toOperationNode();
}

10
node_modules/kysely/dist/esm/parser/parse-utils.d.ts generated vendored Normal file
View File

@@ -0,0 +1,10 @@
import { type JoinType } from '../operation-node/join-node.js';
import { JoinBuilder } from '../query-builder/join-builder.js';
import { OverBuilder } from '../query-builder/over-builder.js';
import { type SelectQueryBuilder } from '../query-builder/select-query-builder.js';
import { QueryCreator } from '../query-creator.js';
import { type TableExpression } from './table-parser.js';
export declare function createSelectQueryBuilder(): SelectQueryBuilder<any, any, any>;
export declare function createQueryCreator(): QueryCreator<any>;
export declare function createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
export declare function createOverBuilder(): OverBuilder<any, any>;

33
node_modules/kysely/dist/esm/parser/parse-utils.js generated vendored Normal file
View File

@@ -0,0 +1,33 @@
/// <reference types="./parse-utils.d.ts" />
import { JoinNode } from '../operation-node/join-node.js';
import { OverNode } from '../operation-node/over-node.js';
import { SelectQueryNode } from '../operation-node/select-query-node.js';
import { JoinBuilder } from '../query-builder/join-builder.js';
import { OverBuilder } from '../query-builder/over-builder.js';
import { createSelectQueryBuilder as newSelectQueryBuilder, } from '../query-builder/select-query-builder.js';
import { QueryCreator } from '../query-creator.js';
import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
import { createQueryId } from '../util/query-id.js';
import { parseTableExpression, parseTableExpressionOrList, } from './table-parser.js';
export function createSelectQueryBuilder() {
return newSelectQueryBuilder({
queryId: createQueryId(),
executor: NOOP_QUERY_EXECUTOR,
queryNode: SelectQueryNode.createFrom(parseTableExpressionOrList([])),
});
}
export function createQueryCreator() {
return new QueryCreator({
executor: NOOP_QUERY_EXECUTOR,
});
}
export function createJoinBuilder(joinType, table) {
return new JoinBuilder({
joinNode: JoinNode.create(joinType, parseTableExpression(table)),
});
}
export function createOverBuilder() {
return new OverBuilder({
overNode: OverNode.create(),
});
}

View File

@@ -0,0 +1,6 @@
import type { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
import { PartitionByItemNode } from '../operation-node/partition-by-item-node.js';
import { type StringReference } from './reference-parser.js';
export type PartitionByExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any>;
export type PartitionByExpressionOrList<DB, TB extends keyof DB> = ReadonlyArray<PartitionByExpression<DB, TB>> | PartitionByExpression<DB, TB>;
export declare function parsePartitionBy(partitionBy: PartitionByExpressionOrList<any, any>): PartitionByItemNode[];

View File

@@ -0,0 +1,6 @@
/// <reference types="./partition-by-parser.d.ts" />
import { PartitionByItemNode } from '../operation-node/partition-by-item-node.js';
import { parseReferenceExpressionOrList, } from './reference-parser.js';
export function parsePartitionBy(partitionBy) {
return parseReferenceExpressionOrList(partitionBy).map(PartitionByItemNode.create);
}

View File

@@ -0,0 +1,31 @@
import { AliasNode } from '../operation-node/alias-node.js';
import { ColumnNode } from '../operation-node/column-node.js';
import { ReferenceNode } from '../operation-node/reference-node.js';
import type { AnyColumn, AnyColumnWithTable, ExtractColumnType } from '../util/type-utils.js';
import type { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
import { type ExpressionOrFactory } from './expression-parser.js';
import type { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
import type { SelectType } from '../util/column-type.js';
import type { OperationNode } from '../operation-node/operation-node.js';
import type { Expression } from '../expression/expression.js';
import type { SimpleReferenceExpressionNode } from '../operation-node/simple-reference-expression-node.js';
import { type OrderByDirection } from './order-by-parser.js';
import { type JSONOperatorWith$ } from '../operation-node/operator-node.js';
import { JSONReferenceNode } from '../operation-node/json-reference-node.js';
export type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
export type SimpleReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any>;
export type ReferenceExpression<DB, TB extends keyof DB> = SimpleReferenceExpression<DB, TB> | ExpressionOrFactory<DB, TB, any>;
export type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
export type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE, DV = unknown> = SelectType<ExtractRawTypeFromReferenceExpression<DB, TB, RE, DV>>;
export type ExtractRawTypeFromReferenceExpression<DB, TB extends keyof DB, RE, DV = unknown> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends SelectQueryBuilderExpression<infer O> ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression<infer O> ? O[keyof O] | null : RE extends Expression<infer O> ? O : RE extends (qb: any) => Expression<infer O> ? O : DV;
export type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string, DV = unknown> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : DV;
export type OrderedColumnName<C extends string> = C extends `${string} ${infer O}` ? O extends OrderByDirection ? C : never : C;
export type ExtractColumnNameFromOrderedColumnName<C extends string> = C extends `${infer CL} ${infer O}` ? O extends OrderByDirection ? CL : never : C;
export declare function parseSimpleReferenceExpression(exp: SimpleReferenceExpression<any, any>): SimpleReferenceExpressionNode;
export declare function parseReferenceExpressionOrList(arg: ReferenceExpressionOrList<any, any>): OperationNode[];
export declare function parseReferenceExpression(exp: ReferenceExpression<any, any>): OperationNode;
export declare function parseJSONReference(ref: string, op: JSONOperatorWith$): JSONReferenceNode;
export declare function parseStringReference(ref: string): ReferenceNode;
export declare function parseAliasedStringReference(ref: string): SimpleReferenceExpressionNode | AliasNode;
export declare function parseColumnName(column: AnyColumn<any, any>): ColumnNode;
export declare function parseOrderedColumnName(column: string): OperationNode;

View File

@@ -0,0 +1,95 @@
/// <reference types="./reference-parser.d.ts" />
import { AliasNode } from '../operation-node/alias-node.js';
import { ColumnNode } from '../operation-node/column-node.js';
import { ReferenceNode } from '../operation-node/reference-node.js';
import { TableNode } from '../operation-node/table-node.js';
import { isReadonlyArray, isString } from '../util/object-utils.js';
import { parseExpression, isExpressionOrFactory, } from './expression-parser.js';
import { IdentifierNode } from '../operation-node/identifier-node.js';
import { isOrderByDirection, parseOrderBy, } from './order-by-parser.js';
import { OperatorNode, isJSONOperator, } from '../operation-node/operator-node.js';
import { JSONReferenceNode } from '../operation-node/json-reference-node.js';
import { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js';
import { JSONPathNode } from '../operation-node/json-path-node.js';
export function parseSimpleReferenceExpression(exp) {
if (isString(exp)) {
return parseStringReference(exp);
}
return exp.toOperationNode();
}
export function parseReferenceExpressionOrList(arg) {
if (isReadonlyArray(arg)) {
return arg.map((it) => parseReferenceExpression(it));
}
else {
return [parseReferenceExpression(arg)];
}
}
export function parseReferenceExpression(exp) {
if (isExpressionOrFactory(exp)) {
return parseExpression(exp);
}
return parseSimpleReferenceExpression(exp);
}
export function parseJSONReference(ref, op) {
const referenceNode = parseStringReference(ref);
if (isJSONOperator(op)) {
return JSONReferenceNode.create(referenceNode, JSONOperatorChainNode.create(OperatorNode.create(op)));
}
const opWithoutLastChar = op.slice(0, -1);
if (isJSONOperator(opWithoutLastChar)) {
return JSONReferenceNode.create(referenceNode, JSONPathNode.create(OperatorNode.create(opWithoutLastChar)));
}
throw new Error(`Invalid JSON operator: ${op}`);
}
export function parseStringReference(ref) {
const COLUMN_SEPARATOR = '.';
if (!ref.includes(COLUMN_SEPARATOR)) {
return ReferenceNode.create(ColumnNode.create(ref));
}
const parts = ref.split(COLUMN_SEPARATOR).map(trim);
if (parts.length === 3) {
return parseStringReferenceWithTableAndSchema(parts);
}
if (parts.length === 2) {
return parseStringReferenceWithTable(parts);
}
throw new Error(`invalid column reference ${ref}`);
}
export function parseAliasedStringReference(ref) {
const ALIAS_SEPARATOR = ' as ';
if (ref.includes(ALIAS_SEPARATOR)) {
const [columnRef, alias] = ref.split(ALIAS_SEPARATOR).map(trim);
return AliasNode.create(parseStringReference(columnRef), IdentifierNode.create(alias));
}
else {
return parseStringReference(ref);
}
}
export function parseColumnName(column) {
return ColumnNode.create(column);
}
export function parseOrderedColumnName(column) {
const ORDER_SEPARATOR = ' ';
if (column.includes(ORDER_SEPARATOR)) {
const [columnName, order] = column.split(ORDER_SEPARATOR).map(trim);
if (!isOrderByDirection(order)) {
throw new Error(`invalid order direction "${order}" next to "${columnName}"`);
}
return parseOrderBy([columnName, order])[0];
}
else {
return parseColumnName(column);
}
}
function parseStringReferenceWithTableAndSchema(parts) {
const [schema, table, column] = parts;
return ReferenceNode.create(ColumnNode.create(column), TableNode.createWithSchema(schema, table));
}
function parseStringReferenceWithTable(parts) {
const [table, column] = parts;
return ReferenceNode.create(ColumnNode.create(column), TableNode.create(table));
}
function trim(str) {
return str.trim();
}

View File

@@ -0,0 +1,8 @@
import type { DeleteResult } from '../query-builder/delete-result.js';
import type { InsertResult } from '../query-builder/insert-result.js';
import type { MergeResult } from '../query-builder/merge-result.js';
import type { UpdateResult } from '../query-builder/update-result.js';
import type { Selection, AllSelection, CallbackSelection } from './select-parser.js';
export type ReturningRow<DB, TB extends keyof DB, O, SE> = O extends InsertResult | DeleteResult | UpdateResult | MergeResult ? Selection<DB, TB, SE> : O & Selection<DB, TB, SE>;
export type ReturningCallbackRow<DB, TB extends keyof DB, O, CB> = O extends InsertResult | DeleteResult | UpdateResult | MergeResult ? CallbackSelection<DB, TB, CB> : O & CallbackSelection<DB, TB, CB>;
export type ReturningAllRow<DB, TB extends keyof DB, O> = O extends InsertResult | DeleteResult | UpdateResult | MergeResult ? AllSelection<DB, TB> : O & AllSelection<DB, TB>;

View File

@@ -0,0 +1,2 @@
/// <reference types="./returning-parser.d.ts" />
export {};

View File

@@ -0,0 +1,4 @@
import { RawNode } from '../operation-node/raw-node.js';
export type RollbackToSavepoint<S extends string[], SN extends S[number]> = S extends [...infer L, infer R] ? R extends SN ? S : RollbackToSavepoint<L extends string[] ? L : never, SN> : never;
export type ReleaseSavepoint<S extends string[], SN extends S[number]> = S extends [...infer L, infer R] ? R extends SN ? L : ReleaseSavepoint<L extends string[] ? L : never, SN> : never;
export declare function parseSavepointCommand(command: string, savepointName: string): RawNode;

View File

@@ -0,0 +1,9 @@
/// <reference types="./savepoint-parser.d.ts" />
import { IdentifierNode } from '../operation-node/identifier-node.js';
import { RawNode } from '../operation-node/raw-node.js';
export function parseSavepointCommand(command, savepointName) {
return RawNode.createWithChildren([
RawNode.createWithSql(`${command} `),
IdentifierNode.create(savepointName), // ensures savepointName gets sanitized
]);
}

View File

@@ -0,0 +1,6 @@
import type { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
import type { ShallowRecord } from '../util/type-utils.js';
import type { ExtractTableAlias, From, FromTables, TableExpressionOrList } from './table-parser.js';
export type SelectFrom<DB, TB extends keyof DB, TE extends TableExpressionOrList<DB, TB>> = [TE] extends [keyof DB] ? SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}> : [
TE
] extends [`${infer T} as ${infer A}`] ? T extends keyof DB ? SelectQueryBuilder<DB & ShallowRecord<A, DB[T]>, TB | A, {}> : never : TE extends ReadonlyArray<infer T> ? SelectQueryBuilder<From<DB, T>, FromTables<DB, TB, T>, {}> : SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;

View File

@@ -0,0 +1,2 @@
/// <reference types="./select-from-parser.d.ts" />
export {};

36
node_modules/kysely/dist/esm/parser/select-parser.d.ts generated vendored Normal file
View File

@@ -0,0 +1,36 @@
import type { AliasedSelectQueryBuilder } from '../query-builder/select-query-builder.js';
import { SelectionNode } from '../operation-node/selection-node.js';
import type { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, DrainOuterGeneric, ExtractColumnType } from '../util/type-utils.js';
import { type DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
import { type AliasedExpressionOrFactory } from './expression-parser.js';
import type { SelectType } from '../util/column-type.js';
import type { AliasedExpression } from '../expression/expression.js';
import { type ExpressionBuilder } from '../expression/expression-builder.js';
export type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | DynamicReferenceBuilder<any> | AliasedExpressionOrFactory<DB, TB>;
export type SelectCallback<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => ReadonlyArray<SelectExpression<DB, TB>>;
/**
* Turns a SelectExpression or a union of them into a selection object.
*/
export type Selection<DB, TB extends keyof DB, SE> = [DB] extends [unknown] ? {
[E in FlattenSelectExpression<SE> as ExtractAliasFromSelectExpression<E>]: SelectType<ExtractTypeFromSelectExpression<DB, TB, E>>;
} : {};
/**
* Turns a SelectCallback into a selection object.
*/
export type CallbackSelection<DB, TB extends keyof DB, CB> = CB extends (eb: any) => ReadonlyArray<infer SE> ? Selection<DB, TB, SE> : never;
export type SelectArg<DB, TB extends keyof DB, SE extends SelectExpression<DB, TB>> = SE | ReadonlyArray<SE> | ((eb: ExpressionBuilder<DB, TB>) => ReadonlyArray<SE>);
type FlattenSelectExpression<SE> = SE extends DynamicReferenceBuilder<infer RA> ? {
[R in RA]: DynamicReferenceBuilder<R>;
}[RA] : SE;
type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends AliasedExpression<any, infer EA> ? EA : SE extends (qb: any) => AliasedExpression<any, infer EA> ? EA : SE extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
type ExtractAliasFromStringSelectExpression<SE extends string> = SE extends `${string}.${string}.${string} as ${infer A}` ? A : SE extends `${string}.${string} as ${infer A}` ? A : SE extends `${string} as ${infer A}` ? A : SE extends `${string}.${string}.${infer C}` ? C : SE extends `${string}.${infer C}` ? C : SE;
type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE> : SE extends AliasedSelectQueryBuilder<infer O, any> ? O[keyof O] | null : SE extends (eb: any) => AliasedSelectQueryBuilder<infer O, any> ? O[keyof O] | null : SE extends AliasedExpression<infer O, any> ? O : SE extends (eb: any) => AliasedExpression<infer O, any> ? O : SE extends DynamicReferenceBuilder<infer RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA> | undefined : never;
type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string> = SE extends `${infer SC}.${infer T}.${infer C} as ${string}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : SE extends `${infer T}.${infer C} as ${string}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : SE extends `${infer C} as ${string}` ? C extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, C> : never : SE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : SE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : SE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, SE> : never;
export type AllSelection<DB, TB extends keyof DB> = DrainOuterGeneric<{
[C in AnyColumn<DB, TB>]: {
[T in TB]: SelectType<C extends keyof DB[T] ? DB[T][C] : never>;
}[TB];
}>;
export declare function parseSelectArg(selection: SelectArg<any, any, SelectExpression<any, any>>): SelectionNode[];
export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
export {};

47
node_modules/kysely/dist/esm/parser/select-parser.js generated vendored Normal file
View File

@@ -0,0 +1,47 @@
/// <reference types="./select-parser.d.ts" />
import { isFunction, isReadonlyArray, isString } from '../util/object-utils.js';
import { SelectionNode } from '../operation-node/selection-node.js';
import { parseAliasedStringReference } from './reference-parser.js';
import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
import { parseAliasedExpression, } from './expression-parser.js';
import { parseTable } from './table-parser.js';
import { expressionBuilder, } from '../expression/expression-builder.js';
export function parseSelectArg(selection) {
if (isFunction(selection)) {
return parseSelectArg(selection(expressionBuilder()));
}
else if (isReadonlyArray(selection)) {
return selection.map((it) => parseSelectExpression(it));
}
else {
return [parseSelectExpression(selection)];
}
}
function parseSelectExpression(selection) {
if (isString(selection)) {
return SelectionNode.create(parseAliasedStringReference(selection));
}
else if (isDynamicReferenceBuilder(selection)) {
return SelectionNode.create(selection.toOperationNode());
}
else {
return SelectionNode.create(parseAliasedExpression(selection));
}
}
export function parseSelectAll(table) {
if (!table) {
return [SelectionNode.createSelectAll()];
}
else if (Array.isArray(table)) {
return table.map(parseSelectAllArg);
}
else {
return [parseSelectAllArg(table)];
}
}
function parseSelectAllArg(table) {
if (isString(table)) {
return SelectionNode.createSelectAllFromTable(parseTable(table));
}
throw new Error(`invalid value selectAll expression: ${JSON.stringify(table)}`);
}

View File

@@ -0,0 +1,5 @@
import { type ExpressionBuilder } from '../expression/expression-builder.js';
import type { Expression } from '../expression/expression.js';
import { type SetOperator, SetOperationNode } from '../operation-node/set-operation-node.js';
export type SetOperandExpression<DB, O> = Expression<O> | ReadonlyArray<Expression<O>> | ((eb: ExpressionBuilder<DB, never>) => Expression<O> | ReadonlyArray<Expression<O>>);
export declare function parseSetOperations(operator: SetOperator, expression: SetOperandExpression<any, any>, all: boolean): Readonly<SetOperationNode>[];

View File

@@ -0,0 +1,14 @@
/// <reference types="./set-operation-parser.d.ts" />
import { createExpressionBuilder, } from '../expression/expression-builder.js';
import { SetOperationNode, } from '../operation-node/set-operation-node.js';
import { isFunction, isReadonlyArray } from '../util/object-utils.js';
import { parseExpression } from './expression-parser.js';
export function parseSetOperations(operator, expression, all) {
if (isFunction(expression)) {
expression = expression(createExpressionBuilder());
}
if (!isReadonlyArray(expression)) {
expression = [expression];
}
return expression.map((expr) => SetOperationNode.create(operator, parseExpression(expr), all));
}

24
node_modules/kysely/dist/esm/parser/table-parser.d.ts generated vendored Normal file
View File

@@ -0,0 +1,24 @@
import { AliasNode } from '../operation-node/alias-node.js';
import { TableNode } from '../operation-node/table-node.js';
import { type AliasedExpressionOrFactory } from './expression-parser.js';
import type { OperationNode } from '../operation-node/operation-node.js';
import type { AliasedExpression } from '../expression/expression.js';
import type { DrainOuterGeneric } from '../util/type-utils.js';
import { type AliasedDynamicTableBuilder } from '../dynamic/dynamic-table-builder.js';
export type TableExpression<DB, TB extends keyof DB> = AnyAliasedTable<DB> | AnyTable<DB> | AliasedExpressionOrFactory<DB, TB> | AliasedDynamicTableBuilder<any, any>;
export type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
export type SimpleTableReference<DB> = AnyAliasedTable<DB> | AnyTable<DB>;
export type AnyAliasedTable<DB> = `${AnyTable<DB>} as ${string}`;
export type AnyTable<DB> = keyof DB & string;
export type From<DB, TE> = DrainOuterGeneric<{
[C in keyof DB | ExtractAliasFromTableExpression<DB, TE>]: C extends ExtractAliasFromTableExpression<DB, TE> ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
}>;
export type FromTables<DB, TB extends keyof DB, TE> = DrainOuterGeneric<TB | ExtractAliasFromTableExpression<DB, TE>>;
export type ExtractTableAlias<DB, TE> = TE extends `${string} as ${infer TA}` ? TA extends keyof DB ? TA : never : TE extends keyof DB ? TE : never;
type ExtractAliasFromTableExpression<DB, TE> = TE extends string ? TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : never : TE extends AliasedExpression<any, infer QA> ? QA : TE extends (qb: any) => AliasedExpression<any, infer QA> ? QA : TE extends AliasedDynamicTableBuilder<any, infer DA> ? DA : never;
type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : TE extends AliasedDynamicTableBuilder<infer T, infer DA> ? DA extends A ? T extends keyof DB ? DB[T] : never : never : never;
export declare function parseTableExpressionOrList(table: TableExpressionOrList<any, any>): OperationNode[];
export declare function parseTableExpression(table: TableExpression<any, any>): OperationNode;
export declare function parseAliasedTable(from: string): TableNode | AliasNode;
export declare function parseTable(from: string): TableNode;
export {};

49
node_modules/kysely/dist/esm/parser/table-parser.js generated vendored Normal file
View File

@@ -0,0 +1,49 @@
/// <reference types="./table-parser.d.ts" />
import { isReadonlyArray, isString } from '../util/object-utils.js';
import { AliasNode } from '../operation-node/alias-node.js';
import { TableNode } from '../operation-node/table-node.js';
import { parseAliasedExpression, } from './expression-parser.js';
import { IdentifierNode } from '../operation-node/identifier-node.js';
import { isAliasedDynamicTableBuilder, } from '../dynamic/dynamic-table-builder.js';
export function parseTableExpressionOrList(table) {
if (isReadonlyArray(table)) {
return table.map((it) => parseTableExpression(it));
}
else {
return [parseTableExpression(table)];
}
}
export function parseTableExpression(table) {
if (isString(table)) {
return parseAliasedTable(table);
}
else if (isAliasedDynamicTableBuilder(table)) {
return table.toOperationNode();
}
else {
return parseAliasedExpression(table);
}
}
export function parseAliasedTable(from) {
const ALIAS_SEPARATOR = ' as ';
if (from.includes(ALIAS_SEPARATOR)) {
const [table, alias] = from.split(ALIAS_SEPARATOR).map(trim);
return AliasNode.create(parseTable(table), IdentifierNode.create(alias));
}
else {
return parseTable(from);
}
}
export function parseTable(from) {
const SCHEMA_SEPARATOR = '.';
if (from.includes(SCHEMA_SEPARATOR)) {
const [schema, table] = from.split(SCHEMA_SEPARATOR).map(trim);
return TableNode.createWithSchema(schema, table);
}
else {
return TableNode.create(from);
}
}
function trim(str) {
return str.trim();
}

2
node_modules/kysely/dist/esm/parser/top-parser.d.ts generated vendored Normal file
View File

@@ -0,0 +1,2 @@
import { type TopModifier, TopNode } from '../operation-node/top-node.js';
export declare function parseTop(expression: number | bigint, modifiers?: TopModifier): TopNode;

17
node_modules/kysely/dist/esm/parser/top-parser.js generated vendored Normal file
View File

@@ -0,0 +1,17 @@
/// <reference types="./top-parser.d.ts" />
import { TopNode } from '../operation-node/top-node.js';
import { isBigInt, isNumber, isUndefined } from '../util/object-utils.js';
export function parseTop(expression, modifiers) {
if (!isNumber(expression) && !isBigInt(expression)) {
throw new Error(`Invalid top expression: ${expression}`);
}
if (!isUndefined(modifiers) && !isTopModifiers(modifiers)) {
throw new Error(`Invalid top modifiers: ${modifiers}`);
}
return TopNode.create(expression, modifiers);
}
function isTopModifiers(modifiers) {
return (modifiers === 'percent' ||
modifiers === 'with ties' ||
modifiers === 'percent with ties');
}

47
node_modules/kysely/dist/esm/parser/tuple-parser.d.ts generated vendored Normal file
View File

@@ -0,0 +1,47 @@
import type { DrainOuterGeneric } from '../util/type-utils.js';
import type { ExtractTypeFromReferenceExpression } from './reference-parser.js';
import type { ExtractTypeFromValueExpression } from './value-parser.js';
export type RefTuple2<DB, TB extends keyof DB, R1, R2> = DrainOuterGeneric<[
ExtractTypeFromReferenceExpression<DB, TB, R1>,
ExtractTypeFromReferenceExpression<DB, TB, R2>
]>;
export type RefTuple3<DB, TB extends keyof DB, R1, R2, R3> = DrainOuterGeneric<[
ExtractTypeFromReferenceExpression<DB, TB, R1>,
ExtractTypeFromReferenceExpression<DB, TB, R2>,
ExtractTypeFromReferenceExpression<DB, TB, R3>
]>;
export type RefTuple4<DB, TB extends keyof DB, R1, R2, R3, R4> = DrainOuterGeneric<[
ExtractTypeFromReferenceExpression<DB, TB, R1>,
ExtractTypeFromReferenceExpression<DB, TB, R2>,
ExtractTypeFromReferenceExpression<DB, TB, R3>,
ExtractTypeFromReferenceExpression<DB, TB, R4>
]>;
export type RefTuple5<DB, TB extends keyof DB, R1, R2, R3, R4, R5> = DrainOuterGeneric<[
ExtractTypeFromReferenceExpression<DB, TB, R1>,
ExtractTypeFromReferenceExpression<DB, TB, R2>,
ExtractTypeFromReferenceExpression<DB, TB, R3>,
ExtractTypeFromReferenceExpression<DB, TB, R4>,
ExtractTypeFromReferenceExpression<DB, TB, R5>
]>;
export type ValTuple2<V1, V2> = DrainOuterGeneric<[
ExtractTypeFromValueExpression<V1>,
ExtractTypeFromValueExpression<V2>
]>;
export type ValTuple3<V1, V2, V3> = DrainOuterGeneric<[
ExtractTypeFromValueExpression<V1>,
ExtractTypeFromValueExpression<V2>,
ExtractTypeFromValueExpression<V3>
]>;
export type ValTuple4<V1, V2, V3, V4> = DrainOuterGeneric<[
ExtractTypeFromValueExpression<V1>,
ExtractTypeFromValueExpression<V2>,
ExtractTypeFromValueExpression<V3>,
ExtractTypeFromValueExpression<V4>
]>;
export type ValTuple5<V1, V2, V3, V4, V5> = DrainOuterGeneric<[
ExtractTypeFromValueExpression<V1>,
ExtractTypeFromValueExpression<V2>,
ExtractTypeFromValueExpression<V3>,
ExtractTypeFromValueExpression<V4>,
ExtractTypeFromValueExpression<V5>
]>;

2
node_modules/kysely/dist/esm/parser/tuple-parser.js generated vendored Normal file
View File

@@ -0,0 +1,2 @@
/// <reference types="./tuple-parser.d.ts" />
export {};

View File

@@ -0,0 +1,8 @@
import { type UnaryOperator } from '../operation-node/operator-node.js';
import { UnaryOperationNode } from '../operation-node/unary-operation-node.js';
import type { ExpressionOrFactory } from './expression-parser.js';
import { type ReferenceExpression } from './reference-parser.js';
export type ExistsExpression<DB, TB extends keyof DB> = ExpressionOrFactory<DB, TB, any>;
export declare function parseExists(operand: ExistsExpression<any, any>): UnaryOperationNode;
export declare function parseNotExists(operand: ExistsExpression<any, any>): UnaryOperationNode;
export declare function parseUnaryOperation(operator: UnaryOperator, operand: ReferenceExpression<any, any>): UnaryOperationNode;

View File

@@ -0,0 +1,13 @@
/// <reference types="./unary-operation-parser.d.ts" />
import { OperatorNode, } from '../operation-node/operator-node.js';
import { UnaryOperationNode } from '../operation-node/unary-operation-node.js';
import { parseReferenceExpression, } from './reference-parser.js';
export function parseExists(operand) {
return parseUnaryOperation('exists', operand);
}
export function parseNotExists(operand) {
return parseUnaryOperation('not exists', operand);
}
export function parseUnaryOperation(operator, operand) {
return UnaryOperationNode.create(OperatorNode.create(operator), parseReferenceExpression(operand));
}

View File

@@ -0,0 +1,9 @@
import type { UpdateQueryBuilder } from '../query-builder/update-query-builder.js';
import type { UpdateResult } from '../query-builder/update-result.js';
import type { ShallowRecord } from '../util/type-utils.js';
import type { ExtractTableAlias, From, FromTables, TableExpressionOrList } from './table-parser.js';
export type UpdateTable<DB, TE extends TableExpressionOrList<DB, never>> = [
TE
] extends [keyof DB] ? UpdateQueryBuilder<DB, ExtractTableAlias<DB, TE>, ExtractTableAlias<DB, TE>, UpdateResult> : [
TE
] extends [`${infer T} as ${infer A}`] ? T extends keyof DB ? UpdateQueryBuilder<DB & ShallowRecord<A, DB[T]>, A, A, UpdateResult> : never : TE extends ReadonlyArray<infer T> ? UpdateQueryBuilder<From<DB, T>, FromTables<DB, never, T>, FromTables<DB, never, T>, UpdateResult> : UpdateQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, FromTables<DB, never, TE>, UpdateResult>;

2
node_modules/kysely/dist/esm/parser/update-parser.js generated vendored Normal file
View File

@@ -0,0 +1,2 @@
/// <reference types="./update-parser.d.ts" />
export {};

View File

@@ -0,0 +1,16 @@
import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
import { type ExpressionBuilder } from '../expression/expression-builder.js';
import type { UpdateType } from '../util/column-type.js';
import { type ValueExpression } from './value-parser.js';
import { type ExtractRawTypeFromReferenceExpression, type ReferenceExpression } from './reference-parser.js';
import type { AnyColumn, DrainOuterGeneric } from '../util/type-utils.js';
export type UpdateObject<DB, TB extends keyof DB, UT extends keyof DB = TB> = DrainOuterGeneric<{
[C in AnyColumn<DB, UT>]?: {
[T in UT]: C extends keyof DB[T] ? ValueExpression<DB, TB, UpdateType<DB[T][C]>> | undefined : never;
}[UT];
}>;
export type UpdateObjectFactory<DB, TB extends keyof DB, UT extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => UpdateObject<DB, TB, UT>;
export type UpdateObjectExpression<DB, TB extends keyof DB, UT extends keyof DB = TB> = UpdateObject<DB, TB, UT> | UpdateObjectFactory<DB, TB, UT>;
export type ExtractUpdateTypeFromReferenceExpression<DB, TB extends keyof DB, RE, DV = unknown> = UpdateType<ExtractRawTypeFromReferenceExpression<DB, TB, RE, DV>>;
export declare function parseUpdate(...args: [UpdateObjectExpression<any, any, any>] | [ReferenceExpression<any, any>, ValueExpression<any, any, any>]): ReadonlyArray<ColumnUpdateNode>;
export declare function parseUpdateObjectExpression(update: UpdateObjectExpression<any, any, any>): ReadonlyArray<ColumnUpdateNode>;

View File

@@ -0,0 +1,23 @@
/// <reference types="./update-set-parser.d.ts" />
import { ColumnNode } from '../operation-node/column-node.js';
import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
import { expressionBuilder, } from '../expression/expression-builder.js';
import { isFunction } from '../util/object-utils.js';
import { parseValueExpression } from './value-parser.js';
import { parseReferenceExpression, } from './reference-parser.js';
export function parseUpdate(...args) {
if (args.length === 2) {
return [
ColumnUpdateNode.create(parseReferenceExpression(args[0]), parseValueExpression(args[1])),
];
}
return parseUpdateObjectExpression(args[0]);
}
export function parseUpdateObjectExpression(update) {
const updateObj = isFunction(update) ? update(expressionBuilder()) : update;
return Object.entries(updateObj)
.filter(([_, value]) => value !== undefined)
.map(([key, value]) => {
return ColumnUpdateNode.create(ColumnNode.create(key), parseValueExpression(value));
});
}

13
node_modules/kysely/dist/esm/parser/value-parser.d.ts generated vendored Normal file
View File

@@ -0,0 +1,13 @@
import { ValueNode } from '../operation-node/value-node.js';
import { type ExpressionOrFactory } from './expression-parser.js';
import type { OperationNode } from '../operation-node/operation-node.js';
import type { Expression } from '../expression/expression.js';
import type { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
export type ValueExpression<DB, TB extends keyof DB, V> = V | ExpressionOrFactory<DB, TB, V>;
export type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
export type ExtractTypeFromValueExpressionOrList<VE> = VE extends ReadonlyArray<infer AV> ? ExtractTypeFromValueExpression<AV> : ExtractTypeFromValueExpression<VE>;
export type ExtractTypeFromValueExpression<VE> = VE extends SelectQueryBuilderExpression<Record<string, infer SV>> ? SV : VE extends Expression<infer V> ? V : VE;
export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any, unknown>): OperationNode;
export declare function parseValueExpression(exp: ValueExpression<any, any, unknown>): OperationNode;
export declare function isSafeImmediateValue(value: unknown): value is number | boolean | null;
export declare function parseSafeImmediateValue(value: number | boolean | null): ValueNode;

33
node_modules/kysely/dist/esm/parser/value-parser.js generated vendored Normal file
View File

@@ -0,0 +1,33 @@
/// <reference types="./value-parser.d.ts" />
import { PrimitiveValueListNode } from '../operation-node/primitive-value-list-node.js';
import { ValueListNode } from '../operation-node/value-list-node.js';
import { ValueNode } from '../operation-node/value-node.js';
import { isBoolean, isNull, isNumber, isReadonlyArray, } from '../util/object-utils.js';
import { parseExpression, isExpressionOrFactory, } from './expression-parser.js';
export function parseValueExpressionOrList(arg) {
if (isReadonlyArray(arg)) {
return parseValueExpressionList(arg);
}
return parseValueExpression(arg);
}
export function parseValueExpression(exp) {
if (isExpressionOrFactory(exp)) {
return parseExpression(exp);
}
return ValueNode.create(exp);
}
export function isSafeImmediateValue(value) {
return isNumber(value) || isBoolean(value) || isNull(value);
}
export function parseSafeImmediateValue(value) {
if (!isSafeImmediateValue(value)) {
throw new Error(`unsafe immediate value ${JSON.stringify(value)}`);
}
return ValueNode.createImmediate(value);
}
function parseValueExpressionList(arg) {
if (arg.some(isExpressionOrFactory)) {
return ValueListNode.create(arg.map((it) => parseValueExpression(it)));
}
return PrimitiveValueListNode.create(arg);
}

45
node_modules/kysely/dist/esm/parser/with-parser.d.ts generated vendored Normal file
View File

@@ -0,0 +1,45 @@
import type { UpdateQueryBuilder } from '../query-builder/update-query-builder.js';
import type { DeleteQueryBuilder } from '../query-builder/delete-query-builder.js';
import type { InsertQueryBuilder } from '../query-builder/insert-query-builder.js';
import type { QueryCreator } from '../query-creator.js';
import type { Expression } from '../expression/expression.js';
import type { ShallowRecord } from '../util/type-utils.js';
import { type CTEBuilderCallback } from '../query-builder/cte-builder.js';
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
export type CommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB>) => CommonTableExpressionOutput<DB, CN>;
export type RecursiveCommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB & {
[K in ExtractTableFromCommonTableExpressionName<CN>]: ExtractRowFromCommonTableExpressionName<CN>;
}>) => CommonTableExpressionOutput<DB, CN>;
export type QueryCreatorWithCommonTableExpression<DB, CN extends string, CTE> = QueryCreator<DB & {
[K in ExtractTableFromCommonTableExpressionName<CN>]: ExtractRowFromCommonTableExpression<CTE>;
}>;
type CommonTableExpressionOutput<DB, CN extends string> = Expression<ExtractRowFromCommonTableExpressionName<CN>> | InsertQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | UpdateQueryBuilder<DB, any, any, ExtractRowFromCommonTableExpressionName<CN>> | DeleteQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>>;
/**
* Given a common CommonTableExpression CTE extracts the row type from it.
*
* For example a CTE `(db) => db.selectFrom('person').select(['id', 'first_name'])`
* would result in `Pick<Person, 'id' | 'first_name'>`.
*/
type ExtractRowFromCommonTableExpression<CTE> = CTE extends (creator: QueryCreator<any>) => infer Q ? Q extends Expression<infer QO> ? QO : Q extends InsertQueryBuilder<any, any, infer QO> ? QO : Q extends UpdateQueryBuilder<any, any, any, infer QO> ? QO : Q extends DeleteQueryBuilder<any, any, infer QO> ? QO : never : never;
/**
* Extracts 'person' from a string like 'person(id, first_name)'.
*/
type ExtractTableFromCommonTableExpressionName<CN extends string> = CN extends `${infer TB}(${string})` ? TB : CN;
/**
* Parses a string like 'person(id, first_name)' into a type:
*
* {
* id: any,
* first_name: any
* }
*
*/
type ExtractRowFromCommonTableExpressionName<CN extends string> = CN extends `${string}(${infer CL})` ? {
[C in ExtractColumnNamesFromColumnList<CL>]: any;
} : ShallowRecord<string, any>;
/**
* Parses a string like 'id, first_name' into a type 'id' | 'first_name'
*/
type ExtractColumnNamesFromColumnList<R extends string> = R extends `${infer C}, ${infer RS}` ? C | ExtractColumnNamesFromColumnList<RS> : R;
export declare function parseCommonTableExpression(nameOrBuilderCallback: string | CTEBuilderCallback<string>, expression: CommonTableExpression<any, string>): CommonTableExpressionNode;
export {};

31
node_modules/kysely/dist/esm/parser/with-parser.js generated vendored Normal file
View File

@@ -0,0 +1,31 @@
/// <reference types="./with-parser.d.ts" />
import { CommonTableExpressionNameNode } from '../operation-node/common-table-expression-name-node.js';
import { createQueryCreator } from './parse-utils.js';
import { isFunction } from '../util/object-utils.js';
import { CTEBuilder, } from '../query-builder/cte-builder.js';
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
export function parseCommonTableExpression(nameOrBuilderCallback, expression) {
const expressionNode = expression(createQueryCreator()).toOperationNode();
if (isFunction(nameOrBuilderCallback)) {
return nameOrBuilderCallback(cteBuilderFactory(expressionNode)).toOperationNode();
}
return CommonTableExpressionNode.create(parseCommonTableExpressionName(nameOrBuilderCallback), expressionNode);
}
function cteBuilderFactory(expressionNode) {
return (name) => {
return new CTEBuilder({
node: CommonTableExpressionNode.create(parseCommonTableExpressionName(name), expressionNode),
});
};
}
function parseCommonTableExpressionName(name) {
if (name.includes('(')) {
const parts = name.split(/[\(\)]/);
const table = parts[0];
const columns = parts[1].split(',').map((it) => it.trim());
return CommonTableExpressionNameNode.create(table, columns);
}
else {
return CommonTableExpressionNameNode.create(name);
}
}