@milaboratories/ptabler-expression-js 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expressions.js","sources":["../src/expressions.ts"],"sourcesContent":["/**\n * Base expressionImpl classes and interfaces for PTabler JavaScript implementation\n */\n\nimport type {\n AggregationType,\n BinaryArithmeticExpression,\n BinaryArithmeticOperator,\n BooleanLogicExpression,\n ColumnReferenceExpression,\n ComparisonExpression,\n ComparisonOperator,\n ConstantValueExpression,\n CumsumExpression,\n Expression,\n ExtendedUnaryStringExpression,\n FillNaNExpression,\n FillNullExpression,\n FuzzyFilterDistanceMetric,\n FuzzyStringFilterExpression,\n MinMaxExpression,\n MinMaxOperator,\n NotExpression,\n RankExpression,\n StringContainsExpression,\n StringDistanceExpression,\n StringDistanceMetric,\n StringJoinExpression,\n StringReplaceExpression,\n SubstringExpression,\n UnaryArithmeticExpression,\n UnaryArithmeticOperator,\n WhenThenOtherwiseExpression,\n WindowExpression,\n} from './types';\n\n/**\n * Base abstract class for all expressions\n */\nexport abstract class ExpressionImpl {\n protected _alias?: string;\n\n /**\n * Convert the expressionImpl to JSON format compatible with PTabler schema\n */\n abstract toJSON(): Expression;\n\n /**\n * Get the alias for this expressionImpl (defaults to a generated name)\n */\n abstract getAlias(): string;\n\n /**\n * Set an alias for this expression\n */\n alias(name: string): ExpressionImpl {\n const cloned = this.clone();\n cloned._alias = name;\n return cloned;\n }\n\n /**\n * Clone this expression\n */\n protected abstract clone(): ExpressionImpl;\n\n // Arithmetic operations\n plus(other: ExpressionImpl | number | string): ArithmeticExpressionImpl {\n return new ArithmeticExpressionImpl('plus', this, coerceToExpression(other));\n }\n\n minus(other: ExpressionImpl | number | string): ArithmeticExpressionImpl {\n return new ArithmeticExpressionImpl('minus', this, coerceToExpression(other));\n }\n\n multiply(other: ExpressionImpl | number | string): ArithmeticExpressionImpl {\n return new ArithmeticExpressionImpl('multiply', this, coerceToExpression(other));\n }\n\n truediv(other: ExpressionImpl | number | string): ArithmeticExpressionImpl {\n return new ArithmeticExpressionImpl('truediv', this, coerceToExpression(other));\n }\n\n floordiv(other: ExpressionImpl | number | string): ArithmeticExpressionImpl {\n return new ArithmeticExpressionImpl('floordiv', this, coerceToExpression(other));\n }\n\n // Comparison operations\n gt(other: ExpressionImpl | number | string): ComparisonExpressionImpl {\n return new ComparisonExpressionImpl('gt', this, coerceToExpression(other));\n }\n\n ge(other: ExpressionImpl | number | string): ComparisonExpressionImpl {\n return new ComparisonExpressionImpl('ge', this, coerceToExpression(other));\n }\n\n eq(other: ExpressionImpl | number | string): ComparisonExpressionImpl {\n return new ComparisonExpressionImpl('eq', this, coerceToExpression(other));\n }\n\n lt(other: ExpressionImpl | number | string): ComparisonExpressionImpl {\n return new ComparisonExpressionImpl('lt', this, coerceToExpression(other));\n }\n\n le(other: ExpressionImpl | number | string): ComparisonExpressionImpl {\n return new ComparisonExpressionImpl('le', this, coerceToExpression(other));\n }\n\n neq(other: ExpressionImpl | number | string): ComparisonExpressionImpl {\n return new ComparisonExpressionImpl('neq', this, coerceToExpression(other));\n }\n\n // Logical operations\n and(...others: ExpressionImpl[]): LogicalExpressionImpl {\n return new LogicalExpressionImpl('and', [this, ...others]);\n }\n\n or(...others: ExpressionImpl[]): LogicalExpressionImpl {\n return new LogicalExpressionImpl('or', [this, ...others]);\n }\n\n not(): LogicalExpressionImpl {\n return new LogicalExpressionImpl('not', [this]);\n }\n\n // Unary arithmetic operations\n abs(): UnaryArithmeticExpressionImpl {\n return new UnaryArithmeticExpressionImpl('abs', this);\n }\n\n sqrt(): UnaryArithmeticExpressionImpl {\n return new UnaryArithmeticExpressionImpl('sqrt', this);\n }\n\n log(): UnaryArithmeticExpressionImpl {\n return new UnaryArithmeticExpressionImpl('log', this);\n }\n\n log10(): UnaryArithmeticExpressionImpl {\n return new UnaryArithmeticExpressionImpl('log10', this);\n }\n\n log2(): UnaryArithmeticExpressionImpl {\n return new UnaryArithmeticExpressionImpl('log2', this);\n }\n\n floor(): UnaryArithmeticExpressionImpl {\n return new UnaryArithmeticExpressionImpl('floor', this);\n }\n\n ceil(): UnaryArithmeticExpressionImpl {\n return new UnaryArithmeticExpressionImpl('ceil', this);\n }\n\n round(): UnaryArithmeticExpressionImpl {\n return new UnaryArithmeticExpressionImpl('round', this);\n }\n\n negate(): UnaryArithmeticExpressionImpl {\n return new UnaryArithmeticExpressionImpl('negate', this);\n }\n\n // Null checks\n isNull(): NullCheckExpressionImpl {\n return new NullCheckExpressionImpl('is_na', this);\n }\n\n isNotNull(): NullCheckExpressionImpl {\n return new NullCheckExpressionImpl('is_not_na', this);\n }\n\n // Fill null/NaN\n fillNull(value: ExpressionImpl): FillNullExpressionImpl {\n return new FillNullExpressionImpl(this, coerceToExpression(value));\n }\n\n fillNaN(value: ExpressionImpl): FillNaNExpressionImpl {\n return new FillNaNExpressionImpl(this, coerceToExpression(value));\n }\n\n // String operations\n strConcat(...others: (ExpressionImpl | string)[]): StringConcatExpressionImpl {\n return new StringConcatExpressionImpl([this, ...others.map(coerceToExpression)]);\n }\n\n substring(start: number, length?: number): SubstringExpressionImpl {\n return new SubstringExpressionImpl(this, start, length);\n }\n\n strReplace(pattern: string, value: string, options?: Pick<StringReplaceExpression, 'replaceAll' | 'literal'>): StringReplaceExpressionImpl {\n return new StringReplaceExpressionImpl(this, pattern, value, options);\n }\n\n strContains(pattern: ExpressionImpl | string, literal?: boolean, strict?: boolean): StringContainsExpressionImpl {\n return new StringContainsExpressionImpl(this, coerceToExpression(pattern), literal, strict);\n }\n\n strToUpper(): StringCaseExpressionImpl {\n return new StringCaseExpressionImpl('to_upper', this);\n }\n\n strToLower(): StringCaseExpressionImpl {\n return new StringCaseExpressionImpl('to_lower', this);\n }\n\n strStartsWith(pattern: ExpressionImpl | string): StringStartsWithExpressionImpl {\n return new StringStartsWithExpressionImpl(this, coerceToExpression(pattern));\n }\n\n strEndsWith(pattern: ExpressionImpl | string): StringEndsWithExpressionImpl {\n return new StringEndsWithExpressionImpl(this, coerceToExpression(pattern));\n }\n\n // Aggregation operations\n sum(): AggregationExpressionImpl {\n return new AggregationExpressionImpl('sum', this);\n }\n\n mean(): AggregationExpressionImpl {\n return new AggregationExpressionImpl('mean', this);\n }\n\n count(): AggregationExpressionImpl {\n return new AggregationExpressionImpl('count', this);\n }\n\n min(): AggregationExpressionImpl {\n return new AggregationExpressionImpl('min', this);\n }\n\n max(): AggregationExpressionImpl {\n return new AggregationExpressionImpl('max', this);\n }\n\n first(): AggregationExpressionImpl {\n return new AggregationExpressionImpl('first', this);\n }\n\n last(): AggregationExpressionImpl {\n return new AggregationExpressionImpl('last', this);\n }\n\n cumsum(): CumsumExpressionImpl {\n return new CumsumExpressionImpl(this);\n }\n\n // Fuzzy operations\n stringDistance(other: ExpressionImpl | string, metric: StringDistanceMetric, returnSimilarity?: boolean): StringDistanceExpressionImpl {\n return new StringDistanceExpressionImpl(\n this,\n coerceToExpression(other),\n metric,\n returnSimilarity,\n );\n }\n\n fuzzyStringFilter(pattern: ExpressionImpl | string, metric: FuzzyFilterDistanceMetric, bound: number): FuzzyStringFilterExpressionImpl {\n return new FuzzyStringFilterExpressionImpl(\n this,\n coerceToExpression(pattern),\n metric,\n bound,\n );\n }\n}\n\nexport class ColumnExpressionImpl extends ExpressionImpl {\n constructor(private readonly columnName: string) {\n super();\n }\n\n toJSON(): ColumnReferenceExpression {\n return {\n type: 'col',\n name: this.columnName,\n };\n }\n\n getAlias(): string {\n return this._alias || this.columnName;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new ColumnExpressionImpl(this.columnName);\n cloned._alias = this._alias;\n return cloned;\n }\n\n /**\n * Get the column name\n */\n getColumnName(): string {\n return this.columnName;\n }\n}\n\n/**\n * Helper function to coerce values to expressions\n */\nexport function coerceToExpression(value: ExpressionImpl | LiteralValue): ExpressionImpl {\n if (value instanceof ExpressionImpl) {\n return value;\n }\n return new LiteralExpressionImpl(value);\n}\n\nexport class MinMaxExpressionImpl extends ExpressionImpl {\n constructor(private readonly op: MinMaxOperator, private readonly ops: ExpressionImpl[]) {\n super();\n }\n\n toJSON(): MinMaxExpression {\n return {\n type: this.op,\n operands: this.ops.map((o) => o.toJSON()),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.op}_${this.ops.map((o) => o.getAlias()).join('_')}`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new MinMaxExpressionImpl(this.op, this.ops);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\n// Forward declarations for concrete expressionImpl classes\n// These will be imported from their respective modules\nexport class ArithmeticExpressionImpl extends ExpressionImpl {\n constructor(\n private readonly operator: BinaryArithmeticOperator,\n private readonly lhs: ExpressionImpl,\n private readonly rhs: ExpressionImpl,\n ) {\n super();\n }\n\n toJSON(): BinaryArithmeticExpression {\n return {\n type: this.operator,\n lhs: this.lhs.toJSON(),\n rhs: this.rhs.toJSON(),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.lhs.getAlias()}_${this.operator}_${this.rhs.getAlias()}`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new ArithmeticExpressionImpl(this.operator, this.lhs, this.rhs);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class ComparisonExpressionImpl extends ExpressionImpl {\n constructor(\n private readonly operator: ComparisonOperator,\n private readonly lhs: ExpressionImpl,\n private readonly rhs: ExpressionImpl,\n ) {\n super();\n }\n\n toJSON(): ComparisonExpression {\n return {\n type: this.operator,\n lhs: this.lhs.toJSON(),\n rhs: this.rhs.toJSON(),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.lhs.getAlias()}_${this.operator}_${this.rhs.getAlias()}`;\n }\n\n protected clone(): ComparisonExpressionImpl {\n const cloned = new ComparisonExpressionImpl(this.operator, this.lhs, this.rhs);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class LogicalExpressionImpl extends ExpressionImpl {\n constructor(\n private readonly operator: 'and' | 'or' | 'not',\n private readonly operands: ExpressionImpl[],\n ) {\n super();\n }\n\n toJSON(): NotExpression | BooleanLogicExpression {\n if (this.operator === 'not') {\n return {\n type: 'not',\n value: this.operands[0].toJSON(),\n };\n }\n return {\n type: this.operator,\n operands: this.operands.map((op) => op.toJSON()),\n };\n }\n\n getAlias(): string {\n if (this._alias) return this._alias;\n if (this.operator === 'not') {\n return `not_${this.operands[0].getAlias()}`;\n }\n return this.operands.map((op) => op.getAlias()).join(`_${this.operator}_`);\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new LogicalExpressionImpl(this.operator, this.operands);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class UnaryArithmeticExpressionImpl extends ExpressionImpl {\n constructor(\n private readonly operator: UnaryArithmeticOperator,\n private readonly value: ExpressionImpl,\n ) {\n super();\n }\n\n toJSON(): UnaryArithmeticExpression {\n return {\n type: this.operator,\n value: this.value.toJSON(),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.operator}_${this.value.getAlias()}`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new UnaryArithmeticExpressionImpl(this.operator, this.value);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class NullCheckExpressionImpl extends ExpressionImpl {\n constructor(\n private readonly operator: 'is_na' | 'is_not_na',\n private readonly value: ExpressionImpl,\n ) {\n super();\n }\n\n toJSON(): Expression {\n return {\n type: this.operator,\n value: this.value.toJSON(),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.value.getAlias()}_${this.operator}`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new NullCheckExpressionImpl(this.operator, this.value);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport type LiteralValue = string | number | boolean | null;\n\nexport class LiteralExpressionImpl extends ExpressionImpl {\n constructor(private readonly value: LiteralValue) {\n super();\n }\n\n toJSON(): ConstantValueExpression {\n return {\n type: 'const',\n value: this.value,\n };\n }\n\n getAlias(): string {\n return this._alias || this.generateDefaultAlias();\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new LiteralExpressionImpl(this.value);\n cloned._alias = this._alias;\n return cloned;\n }\n\n /**\n * Get the literal value\n */\n getValue(): string | number | boolean | null {\n return this.value;\n }\n\n /**\n * Generate a default alias based on the value\n */\n private generateDefaultAlias(): string {\n if (this.value === null || this.value === undefined) {\n return 'null';\n }\n if (typeof this.value === 'string') {\n // For string values, truncate if too long and make safe for column names\n const safe = this.value.replace(/[^a-zA-Z0-9_]/g, '_');\n return safe.length > 20 ? safe.substring(0, 17) + '...' : safe;\n }\n if (typeof this.value === 'boolean') {\n return this.value ? 'true' : 'false';\n }\n if (typeof this.value === 'number') {\n return String(this.value);\n }\n if (Array.isArray(this.value)) {\n return 'array';\n }\n if (typeof this.value === 'object') {\n return 'object';\n }\n return 'literal';\n }\n}\n\nexport class FillNullExpressionImpl extends ExpressionImpl {\n constructor(private readonly expr: ExpressionImpl, private readonly fillValue: ExpressionImpl) {\n super();\n }\n\n toJSON(): FillNullExpression {\n return {\n type: 'fill_null',\n input: this.expr.toJSON(),\n fillValue: this.fillValue.toJSON(),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.expr.getAlias()}_fill_null`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new FillNullExpressionImpl(this.expr, this.fillValue);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class FillNaNExpressionImpl extends ExpressionImpl {\n constructor(private readonly expr: ExpressionImpl, private readonly fillValue: ExpressionImpl) {\n super();\n }\n\n toJSON(): FillNaNExpression {\n return {\n type: 'fill_nan',\n input: this.expr.toJSON(),\n fillValue: this.fillValue.toJSON(),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.expr.getAlias()}_fill_nan`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new FillNaNExpressionImpl(this.expr, this.fillValue);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class StringConcatExpressionImpl extends ExpressionImpl {\n constructor(private readonly operands: ExpressionImpl[], private readonly delimiter: string = '') {\n super();\n }\n\n toJSON(): StringJoinExpression {\n return {\n type: 'str_join',\n operands: this.operands.map((o) => o.toJSON()),\n delimiter: this.delimiter,\n };\n }\n\n getAlias(): string {\n return this._alias || this.operands.map((o) => o.getAlias()).join('_');\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new StringConcatExpressionImpl(this.operands);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class SubstringExpressionImpl extends ExpressionImpl {\n constructor(private readonly expr: ExpressionImpl, private readonly start: number, private readonly length?: number) {\n super();\n }\n\n toJSON(): SubstringExpression {\n return {\n type: 'substring',\n value: this.expr.toJSON(),\n start: { type: 'const', value: this.start },\n length: this.length !== undefined ? { type: 'const', value: this.length } : undefined,\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.expr.getAlias()}_substring`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new SubstringExpressionImpl(this.expr, this.start, this.length);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class StringReplaceExpressionImpl extends ExpressionImpl {\n constructor(private readonly expr: ExpressionImpl, private readonly pattern: string, private readonly value: string, private readonly options?: Pick<StringReplaceExpression, 'replaceAll' | 'literal'>) {\n super();\n }\n\n toJSON(): StringReplaceExpression {\n return {\n type: 'str_replace',\n value: this.expr.toJSON(),\n pattern: this.pattern,\n replacement: this.value,\n replaceAll: this.options?.replaceAll || false,\n literal: this.options?.literal || false,\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.expr.getAlias()}_replace`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new StringReplaceExpressionImpl(this.expr, this.pattern, this.value, this.options);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class StringContainsExpressionImpl extends ExpressionImpl {\n constructor(private readonly expr: ExpressionImpl, private readonly pattern: ExpressionImpl, private readonly literal?: boolean, private readonly strict?: boolean) {\n super();\n }\n\n toJSON(): StringContainsExpression {\n return {\n type: 'str_contains',\n value: this.expr.toJSON(),\n pattern: this.pattern.toJSON(),\n literal: this.literal || false,\n strict: this.strict !== undefined ? this.strict : true,\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.expr.getAlias()}_contains`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new StringContainsExpressionImpl(this.expr, this.pattern, this.literal, this.strict);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class StringCaseExpressionImpl extends ExpressionImpl {\n constructor(private readonly operation: 'to_upper' | 'to_lower', private readonly expr: ExpressionImpl) {\n super();\n }\n\n toJSON(): ExtendedUnaryStringExpression {\n return {\n type: this.operation,\n value: this.expr.toJSON(),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.expr.getAlias()}_${this.operation}`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new StringCaseExpressionImpl(this.operation, this.expr);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class StringStartsWithExpressionImpl extends ExpressionImpl {\n constructor(private readonly expr: ExpressionImpl, private readonly pattern: ExpressionImpl) {\n super();\n }\n\n toJSON(): Expression {\n return {\n type: 'str_starts_with',\n value: this.expr.toJSON(),\n prefix: this.pattern.toJSON(),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.expr.getAlias()}_starts_with`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new StringStartsWithExpressionImpl(this.expr, this.pattern);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class StringEndsWithExpressionImpl extends ExpressionImpl {\n constructor(private readonly expr: ExpressionImpl, private readonly pattern: ExpressionImpl) {\n super();\n }\n\n toJSON(): Expression {\n return {\n type: 'str_ends_with',\n value: this.expr.toJSON(),\n suffix: this.pattern.toJSON(),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.expr.getAlias()}_ends_with`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new StringEndsWithExpressionImpl(this.expr, this.pattern);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class CumsumExpressionImpl extends ExpressionImpl {\n constructor(private readonly value: ExpressionImpl, private readonly additionalOrderBy: ExpressionImpl[] = [], private readonly partitionBy: ExpressionImpl[] = [], private readonly descending?: boolean) {\n super();\n }\n\n toJSON(): CumsumExpression {\n return {\n type: 'cumsum',\n value: this.value.toJSON(),\n additionalOrderBy: this.additionalOrderBy.map((expr) => expr.toJSON()),\n partitionBy: this.partitionBy.map((expr) => expr.toJSON()),\n descending: this.descending,\n };\n }\n\n getAlias(): string {\n return this._alias || `cumsum_${this.value.getAlias()}`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new CumsumExpressionImpl(this.value, this.additionalOrderBy, this.partitionBy, this.descending);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class AggregationExpressionImpl extends ExpressionImpl {\n constructor(public operation: AggregationType, public expr?: ExpressionImpl) {\n super();\n }\n\n toJSON(): WindowExpression {\n return {\n type: 'aggregate',\n aggregation: this.operation,\n value: this.expr?.toJSON() || { type: 'const', value: 1 },\n partitionBy: [],\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.operation}${this.expr ? '_' + this.expr.getAlias() : ''}`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new AggregationExpressionImpl(this.operation, this.expr);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class WindowExpressionImpl extends ExpressionImpl {\n constructor(private readonly expr: ExpressionImpl, private readonly aggregation: AggregationType, private readonly partitionBy: ExpressionImpl[]) {\n super();\n }\n\n toJSON(): WindowExpression {\n return {\n type: 'aggregate',\n aggregation: this.aggregation,\n value: this.expr.toJSON(),\n partitionBy: this.partitionBy.map((expr) => expr.toJSON()),\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.expr.getAlias()}_window`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new WindowExpressionImpl(this.expr, this.aggregation, this.partitionBy);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class StringDistanceExpressionImpl extends ExpressionImpl {\n constructor(private readonly string1: ExpressionImpl, private readonly string2: ExpressionImpl, private readonly metric: StringDistanceMetric, private readonly returnSimilarity?: boolean) {\n super();\n }\n\n toJSON(): StringDistanceExpression {\n return {\n type: 'string_distance',\n metric: this.metric,\n string1: this.string1.toJSON(),\n string2: this.string2.toJSON(),\n returnSimilarity: this.returnSimilarity || false,\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.string1.getAlias()}_distance_${this.string2.getAlias()}`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new StringDistanceExpressionImpl(this.string1, this.string2, this.metric, this.returnSimilarity);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class FuzzyStringFilterExpressionImpl extends ExpressionImpl {\n constructor(private readonly expr: ExpressionImpl, private readonly pattern: ExpressionImpl, private readonly metric: FuzzyFilterDistanceMetric, private readonly bound: number) {\n super();\n }\n\n toJSON(): FuzzyStringFilterExpression {\n return {\n type: 'fuzzy_string_filter',\n metric: this.metric,\n value: this.expr.toJSON(),\n pattern: this.pattern.toJSON(),\n bound: this.bound,\n };\n }\n\n getAlias(): string {\n return this._alias || `${this.expr.getAlias()}_fuzzy_filter`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new FuzzyStringFilterExpressionImpl(this.expr, this.pattern, this.metric, this.bound);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class RankExpressionImpl extends ExpressionImpl {\n constructor(\n private readonly orderBy: ExpressionImpl[],\n private readonly partitionBy: ExpressionImpl[],\n private readonly descending: boolean,\n ) {\n super();\n }\n\n toJSON(): RankExpression {\n return {\n type: 'rank',\n orderBy: this.orderBy.map((e) => e.toJSON()),\n partitionBy: this.partitionBy.map((e) => e.toJSON()),\n descending: this.descending || undefined,\n };\n }\n\n getAlias(): string {\n const order = this.orderBy.map((e) => e.getAlias()).join('_');\n const part = this.partitionBy.map((e) => e.getAlias()).join('_');\n const dir = this.descending ? 'desc' : 'asc';\n return this._alias || `rank_${order}${part ? `_over_${part}` : ''}_${dir}`;\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new RankExpressionImpl(this.orderBy, this.partitionBy, this.descending);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n\nexport class WhenThenOtherwiseExpressionImpl extends ExpressionImpl {\n constructor(\n private readonly conditions: Array<{ when: ExpressionImpl; then: ExpressionImpl }>,\n private readonly otherwiseValue: ExpressionImpl,\n ) {\n super();\n }\n\n toJSON(): WhenThenOtherwiseExpression {\n return {\n type: 'when_then_otherwise',\n conditions: this.conditions.map((clause) => ({\n when: clause.when.toJSON(),\n then: clause.then.toJSON(),\n })),\n otherwise: this.otherwiseValue.toJSON(),\n };\n }\n\n getAlias(): string {\n return this._alias || 'conditional';\n }\n\n protected clone(): ExpressionImpl {\n const cloned = new WhenThenOtherwiseExpressionImpl(this.conditions, this.otherwiseValue);\n cloned._alias = this._alias;\n return cloned;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ 'use strict';
2
+
3
+ var expressions = require('./expressions.cjs');
4
+
5
+ /**
6
+ * Factory functions for creating expressions - mirrors Tengo pt library API
7
+ */
8
+ // Internal helpers mirroring Tengo behavior
9
+ function isExpression(v) {
10
+ return v instanceof expressions.ExpressionImpl;
11
+ }
12
+ function asExprFromString(value, interpretation) {
13
+ return interpretation === 'col' ? col(value) : lit(value);
14
+ }
15
+ function coerceToExpressionList(items, interpretationForString) {
16
+ const arr = Array.isArray(items) ? items : [items];
17
+ return arr.map((it) => (typeof it === 'string' ? asExprFromString(it, interpretationForString) : it));
18
+ }
19
+ /**
20
+ * Create a column reference expression
21
+ * @param name Column name
22
+ */
23
+ function col(name) {
24
+ return new expressions.ColumnExpressionImpl(name);
25
+ }
26
+ /**
27
+ * Create a literal value expression
28
+ * @param value Literal value (number, string, boolean, null, etc.)
29
+ */
30
+ function lit(value) {
31
+ return new expressions.LiteralExpressionImpl(value);
32
+ }
33
+ /**
34
+ * Create an AND expression with multiple operands (horizontal AND)
35
+ * @param expressions Array of expressions to AND together
36
+ */
37
+ function allHorizontal(...expressions$1) {
38
+ // Interpret string args as column names. We don't flatten nested ANDs to keep implementation simple.
39
+ const processed = expressions$1.map((e) => (typeof e === 'string' ? col(e) : e));
40
+ return new expressions.LogicalExpressionImpl('and', processed);
41
+ }
42
+ /**
43
+ * Create an OR expression with multiple operands (horizontal OR)
44
+ * @param expressions Array of expressions to OR together
45
+ */
46
+ function anyHorizontal(...expressions$1) {
47
+ // Interpret string args as column names. We don't flatten nested ORs to keep implementation simple.
48
+ const processed = expressions$1.map((e) => (typeof e === 'string' ? col(e) : e));
49
+ return new expressions.LogicalExpressionImpl('or', processed);
50
+ }
51
+ /**
52
+ * Create an AND expression with multiple operands
53
+ * @param expressions Array of expressions to AND together
54
+ */
55
+ function and(...expressions) {
56
+ return allHorizontal(...expressions);
57
+ }
58
+ /**
59
+ * Create an OR expression with multiple operands
60
+ * @param expressions Array of expressions to OR together
61
+ */
62
+ function or(...expressions) {
63
+ return anyHorizontal(...expressions);
64
+ }
65
+ /**
66
+ * Concatenate string representations with optional delimiter (Tengo: concatStr)
67
+ * String inputs are treated as literals.
68
+ */
69
+ function concatStr(expressions$1, options) {
70
+ if (!Array.isArray(expressions$1) || expressions$1.length === 0) {
71
+ throw new Error('concatStr requires a non-empty array of expressions');
72
+ }
73
+ const ops = coerceToExpressionList(expressions$1, 'lit');
74
+ const delimiter = options?.delimiter ?? '';
75
+ return new expressions.StringConcatExpressionImpl(ops, delimiter);
76
+ }
77
+ /**
78
+ * Element-wise min across expressions (Tengo: minHorizontal). Strings -> columns.
79
+ */
80
+ function minHorizontal(expressions$1) {
81
+ if (!Array.isArray(expressions$1) || expressions$1.length === 0) {
82
+ throw new Error('minHorizontal requires a non-empty array of expressions');
83
+ }
84
+ const ops = coerceToExpressionList(expressions$1, 'col');
85
+ return new expressions.MinMaxExpressionImpl('min', ops);
86
+ }
87
+ /**
88
+ * Element-wise max across expressions (Tengo: maxHorizontal). Strings -> columns.
89
+ */
90
+ function maxHorizontal(expressions$1) {
91
+ if (!Array.isArray(expressions$1) || expressions$1.length === 0) {
92
+ throw new Error('maxHorizontal requires a non-empty array of expressions');
93
+ }
94
+ const ops = coerceToExpressionList(expressions$1, 'col');
95
+ return new expressions.MinMaxExpressionImpl('max', ops);
96
+ }
97
+ /**
98
+ * Create a conditional when-then expression builder
99
+ * @param condition Boolean expression condition
100
+ */
101
+ function when(condition) {
102
+ return WhenThenBuilder.start(condition);
103
+ }
104
+ /**
105
+ * Create a rank expression
106
+ * @param expression Expression to rank
107
+ * @param options Ranking options
108
+ */
109
+ function rank(orderBy, descending = false) {
110
+ const orderByList = coerceToExpressionList(orderBy, 'col');
111
+ return new RankBuilder(orderByList, descending);
112
+ }
113
+ /**
114
+ * Builder class for when-then-otherwise conditional expressions
115
+ */
116
+ class WhenThenBuilder {
117
+ clauses;
118
+ currentWhen;
119
+ constructor(clauses, currentWhen) {
120
+ this.clauses = clauses;
121
+ this.currentWhen = currentWhen;
122
+ }
123
+ static start(condition) {
124
+ if (!isExpression(condition))
125
+ throw new Error('when() expects an Expression');
126
+ return new WhenThenBuilder([], condition);
127
+ }
128
+ when(condition) {
129
+ if (this.currentWhen)
130
+ throw new Error('.when() must follow a .then()');
131
+ if (!isExpression(condition))
132
+ throw new Error('.when() expects an Expression');
133
+ return new WhenThenBuilder(this.clauses, condition);
134
+ }
135
+ then(value) {
136
+ if (!this.currentWhen)
137
+ throw new Error('.then() must follow a .when()');
138
+ const expr = isExpression(value) ? value : lit(value);
139
+ const nextClauses = this.clauses.slice();
140
+ nextClauses.push({ when: this.currentWhen, then: expr });
141
+ return new WhenThenBuilder(nextClauses, undefined);
142
+ }
143
+ otherwise(value) {
144
+ if (this.currentWhen)
145
+ throw new Error('.otherwise() must follow a .then()');
146
+ if (this.clauses.length === 0) {
147
+ throw new Error('At least one .when().then() clause is required before .otherwise()');
148
+ }
149
+ const expr = isExpression(value) ? value : lit(value);
150
+ return new expressions.WhenThenOtherwiseExpressionImpl(this.clauses, expr);
151
+ }
152
+ }
153
+ // Rank builder and expression
154
+ class RankBuilder {
155
+ orderBy;
156
+ descending;
157
+ constructor(orderBy, descending) {
158
+ this.orderBy = orderBy;
159
+ this.descending = descending;
160
+ }
161
+ over(partitionBy) {
162
+ const partitionByList = coerceToExpressionList(partitionBy, 'col');
163
+ return new expressions.RankExpressionImpl(this.orderBy, partitionByList, this.descending);
164
+ }
165
+ }
166
+
167
+ exports.RankBuilder = RankBuilder;
168
+ exports.WhenThenBuilder = WhenThenBuilder;
169
+ exports.allHorizontal = allHorizontal;
170
+ exports.and = and;
171
+ exports.anyHorizontal = anyHorizontal;
172
+ exports.col = col;
173
+ exports.concatStr = concatStr;
174
+ exports.lit = lit;
175
+ exports.maxHorizontal = maxHorizontal;
176
+ exports.minHorizontal = minHorizontal;
177
+ exports.or = or;
178
+ exports.rank = rank;
179
+ exports.when = when;
180
+ //# sourceMappingURL=functions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.cjs","sources":["../src/functions.ts"],"sourcesContent":["/**\n * Factory functions for creating expressions - mirrors Tengo pt library API\n */\n\nimport type { LiteralValue } from './expressions';\nimport { ColumnExpressionImpl, ExpressionImpl, LiteralExpressionImpl, LogicalExpressionImpl, MinMaxExpressionImpl, RankExpressionImpl, StringConcatExpressionImpl, WhenThenOtherwiseExpressionImpl } from './expressions';\n\n// Internal helpers mirroring Tengo behavior\nfunction isExpression(v: unknown): v is ExpressionImpl {\n return v instanceof ExpressionImpl;\n}\n\nfunction asExprFromString(value: string, interpretation: 'col' | 'lit'): ExpressionImpl {\n return interpretation === 'col' ? col(value) : lit(value);\n}\n\nfunction coerceToExpressionList(\n items: Array<ExpressionImpl | string> | ExpressionImpl | string,\n interpretationForString: 'col' | 'lit',\n): ExpressionImpl[] {\n const arr = Array.isArray(items) ? items : [items];\n return arr.map((it) => (typeof it === 'string' ? asExprFromString(it, interpretationForString) : it));\n}\n\n/**\n * Create a column reference expression\n * @param name Column name\n */\nexport function col(name: string): ColumnExpressionImpl {\n return new ColumnExpressionImpl(name);\n}\n\n/**\n * Create a literal value expression\n * @param value Literal value (number, string, boolean, null, etc.)\n */\nexport function lit(value: LiteralValue): LiteralExpressionImpl {\n return new LiteralExpressionImpl(value);\n}\n\n/**\n * Create an AND expression with multiple operands (horizontal AND)\n * @param expressions Array of expressions to AND together\n */\nexport function allHorizontal(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl {\n // Interpret string args as column names. We don't flatten nested ANDs to keep implementation simple.\n const processed: ExpressionImpl[] = expressions.map((e) => (typeof e === 'string' ? col(e) : e));\n return new LogicalExpressionImpl('and', processed);\n}\n\n/**\n * Create an OR expression with multiple operands (horizontal OR)\n * @param expressions Array of expressions to OR together\n */\nexport function anyHorizontal(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl {\n // Interpret string args as column names. We don't flatten nested ORs to keep implementation simple.\n const processed: ExpressionImpl[] = expressions.map((e) => (typeof e === 'string' ? col(e) : e));\n return new LogicalExpressionImpl('or', processed);\n}\n\n/**\n * Create an AND expression with multiple operands\n * @param expressions Array of expressions to AND together\n */\nexport function and(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl {\n return allHorizontal(...expressions);\n}\n\n/**\n * Create an OR expression with multiple operands\n * @param expressions Array of expressions to OR together\n */\nexport function or(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl {\n return anyHorizontal(...expressions);\n}\n\n/**\n * Concatenate string representations with optional delimiter (Tengo: concatStr)\n * String inputs are treated as literals.\n */\nexport function concatStr(\n expressions: Array<ExpressionImpl | string>,\n options?: { delimiter?: string },\n): ExpressionImpl {\n if (!Array.isArray(expressions) || expressions.length === 0) {\n throw new Error('concatStr requires a non-empty array of expressions');\n }\n const ops = coerceToExpressionList(expressions, 'lit');\n const delimiter = options?.delimiter ?? '';\n return new StringConcatExpressionImpl(ops, delimiter);\n}\n\n/**\n * Element-wise min across expressions (Tengo: minHorizontal). Strings -> columns.\n */\nexport function minHorizontal(expressions: Array<ExpressionImpl | string>): ExpressionImpl {\n if (!Array.isArray(expressions) || expressions.length === 0) {\n throw new Error('minHorizontal requires a non-empty array of expressions');\n }\n\n const ops = coerceToExpressionList(expressions, 'col');\n return new MinMaxExpressionImpl('min', ops);\n}\n\n/**\n * Element-wise max across expressions (Tengo: maxHorizontal). Strings -> columns.\n */\nexport function maxHorizontal(expressions: Array<ExpressionImpl | string>): ExpressionImpl {\n if (!Array.isArray(expressions) || expressions.length === 0) {\n throw new Error('maxHorizontal requires a non-empty array of expressions');\n }\n const ops = coerceToExpressionList(expressions, 'col');\n return new MinMaxExpressionImpl('max', ops);\n}\n\n/**\n * Create a conditional when-then expression builder\n * @param condition Boolean expression condition\n */\nexport function when(condition: ExpressionImpl): WhenThenBuilder {\n return WhenThenBuilder.start(condition);\n}\n\n/**\n * Create a rank expression\n * @param expression Expression to rank\n * @param options Ranking options\n */\nexport function rank(orderBy: ExpressionImpl | string | Array<ExpressionImpl | string>, descending = false): RankBuilder {\n const orderByList = coerceToExpressionList(orderBy, 'col');\n return new RankBuilder(orderByList, descending);\n}\n\n/**\n * Builder class for when-then-otherwise conditional expressions\n */\nexport class WhenThenBuilder {\n private constructor(\n private readonly clauses: Array<{ when: ExpressionImpl; then: ExpressionImpl }>,\n private readonly currentWhen?: ExpressionImpl,\n ) {}\n\n static start(condition: ExpressionImpl): WhenThenBuilder {\n if (!isExpression(condition)) throw new Error('when() expects an Expression');\n return new WhenThenBuilder([], condition);\n }\n\n when(condition: ExpressionImpl): WhenThenBuilder {\n if (this.currentWhen) throw new Error('.when() must follow a .then()');\n if (!isExpression(condition)) throw new Error('.when() expects an Expression');\n return new WhenThenBuilder(this.clauses, condition);\n }\n\n then(value: ExpressionImpl | LiteralValue): WhenThenBuilder {\n if (!this.currentWhen) throw new Error('.then() must follow a .when()');\n const expr = isExpression(value) ? value : lit(value);\n const nextClauses = this.clauses.slice();\n nextClauses.push({ when: this.currentWhen, then: expr });\n return new WhenThenBuilder(nextClauses, undefined);\n }\n\n otherwise(value: ExpressionImpl | LiteralValue): WhenThenOtherwiseExpressionImpl {\n if (this.currentWhen) throw new Error('.otherwise() must follow a .then()');\n if (this.clauses.length === 0) {\n throw new Error('At least one .when().then() clause is required before .otherwise()');\n }\n const expr = isExpression(value) ? value : lit(value);\n return new WhenThenOtherwiseExpressionImpl(this.clauses, expr);\n }\n}\n\n// Rank builder and expression\nexport class RankBuilder {\n constructor(\n private readonly orderBy: ExpressionImpl[],\n private readonly descending: boolean,\n ) {}\n\n over(partitionBy: ExpressionImpl | string | Array<ExpressionImpl | string>): RankExpressionImpl {\n const partitionByList = coerceToExpressionList(partitionBy, 'col');\n return new RankExpressionImpl(this.orderBy, partitionByList, this.descending);\n }\n}\n"],"names":["ExpressionImpl","ColumnExpressionImpl","LiteralExpressionImpl","expressions","LogicalExpressionImpl","StringConcatExpressionImpl","MinMaxExpressionImpl","WhenThenOtherwiseExpressionImpl","RankExpressionImpl"],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Factory functions for creating expressions - mirrors Tengo pt library API
3
+ */
4
+ import type { LiteralValue } from './expressions';
5
+ import { ColumnExpressionImpl, ExpressionImpl, LiteralExpressionImpl, LogicalExpressionImpl, RankExpressionImpl, WhenThenOtherwiseExpressionImpl } from './expressions';
6
+ /**
7
+ * Create a column reference expression
8
+ * @param name Column name
9
+ */
10
+ export declare function col(name: string): ColumnExpressionImpl;
11
+ /**
12
+ * Create a literal value expression
13
+ * @param value Literal value (number, string, boolean, null, etc.)
14
+ */
15
+ export declare function lit(value: LiteralValue): LiteralExpressionImpl;
16
+ /**
17
+ * Create an AND expression with multiple operands (horizontal AND)
18
+ * @param expressions Array of expressions to AND together
19
+ */
20
+ export declare function allHorizontal(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl;
21
+ /**
22
+ * Create an OR expression with multiple operands (horizontal OR)
23
+ * @param expressions Array of expressions to OR together
24
+ */
25
+ export declare function anyHorizontal(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl;
26
+ /**
27
+ * Create an AND expression with multiple operands
28
+ * @param expressions Array of expressions to AND together
29
+ */
30
+ export declare function and(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl;
31
+ /**
32
+ * Create an OR expression with multiple operands
33
+ * @param expressions Array of expressions to OR together
34
+ */
35
+ export declare function or(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl;
36
+ /**
37
+ * Concatenate string representations with optional delimiter (Tengo: concatStr)
38
+ * String inputs are treated as literals.
39
+ */
40
+ export declare function concatStr(expressions: Array<ExpressionImpl | string>, options?: {
41
+ delimiter?: string;
42
+ }): ExpressionImpl;
43
+ /**
44
+ * Element-wise min across expressions (Tengo: minHorizontal). Strings -> columns.
45
+ */
46
+ export declare function minHorizontal(expressions: Array<ExpressionImpl | string>): ExpressionImpl;
47
+ /**
48
+ * Element-wise max across expressions (Tengo: maxHorizontal). Strings -> columns.
49
+ */
50
+ export declare function maxHorizontal(expressions: Array<ExpressionImpl | string>): ExpressionImpl;
51
+ /**
52
+ * Create a conditional when-then expression builder
53
+ * @param condition Boolean expression condition
54
+ */
55
+ export declare function when(condition: ExpressionImpl): WhenThenBuilder;
56
+ /**
57
+ * Create a rank expression
58
+ * @param expression Expression to rank
59
+ * @param options Ranking options
60
+ */
61
+ export declare function rank(orderBy: ExpressionImpl | string | Array<ExpressionImpl | string>, descending?: boolean): RankBuilder;
62
+ /**
63
+ * Builder class for when-then-otherwise conditional expressions
64
+ */
65
+ export declare class WhenThenBuilder {
66
+ private readonly clauses;
67
+ private readonly currentWhen?;
68
+ private constructor();
69
+ static start(condition: ExpressionImpl): WhenThenBuilder;
70
+ when(condition: ExpressionImpl): WhenThenBuilder;
71
+ then(value: ExpressionImpl | LiteralValue): WhenThenBuilder;
72
+ otherwise(value: ExpressionImpl | LiteralValue): WhenThenOtherwiseExpressionImpl;
73
+ }
74
+ export declare class RankBuilder {
75
+ private readonly orderBy;
76
+ private readonly descending;
77
+ constructor(orderBy: ExpressionImpl[], descending: boolean);
78
+ over(partitionBy: ExpressionImpl | string | Array<ExpressionImpl | string>): RankExpressionImpl;
79
+ }
80
+ //# sourceMappingURL=functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../src/functions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,EAAwB,kBAAkB,EAA8B,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAmB1N;;;GAGG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAEtD;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,qBAAqB,CAE9D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,qBAAqB,CAInG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,qBAAqB,CAInG;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,qBAAqB,CAEzF;AAED;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,qBAAqB,CAExF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,EAC3C,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,cAAc,CAOhB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,cAAc,CAOzF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,cAAc,CAMzF;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,eAAe,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,EAAE,UAAU,UAAQ,GAAG,WAAW,CAGvH;AAED;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAF/B,OAAO;IAKP,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,GAAG,eAAe;IAKxD,IAAI,CAAC,SAAS,EAAE,cAAc,GAAG,eAAe;IAMhD,IAAI,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,GAAG,eAAe;IAQ3D,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,GAAG,+BAA+B;CAQjF;AAGD,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,EAAE,OAAO;IAGtC,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,kBAAkB;CAIhG"}
@@ -0,0 +1,166 @@
1
+ import { ColumnExpressionImpl, LiteralExpressionImpl, LogicalExpressionImpl, StringConcatExpressionImpl, MinMaxExpressionImpl, WhenThenOtherwiseExpressionImpl, RankExpressionImpl, ExpressionImpl } from './expressions.js';
2
+
3
+ /**
4
+ * Factory functions for creating expressions - mirrors Tengo pt library API
5
+ */
6
+ // Internal helpers mirroring Tengo behavior
7
+ function isExpression(v) {
8
+ return v instanceof ExpressionImpl;
9
+ }
10
+ function asExprFromString(value, interpretation) {
11
+ return interpretation === 'col' ? col(value) : lit(value);
12
+ }
13
+ function coerceToExpressionList(items, interpretationForString) {
14
+ const arr = Array.isArray(items) ? items : [items];
15
+ return arr.map((it) => (typeof it === 'string' ? asExprFromString(it, interpretationForString) : it));
16
+ }
17
+ /**
18
+ * Create a column reference expression
19
+ * @param name Column name
20
+ */
21
+ function col(name) {
22
+ return new ColumnExpressionImpl(name);
23
+ }
24
+ /**
25
+ * Create a literal value expression
26
+ * @param value Literal value (number, string, boolean, null, etc.)
27
+ */
28
+ function lit(value) {
29
+ return new LiteralExpressionImpl(value);
30
+ }
31
+ /**
32
+ * Create an AND expression with multiple operands (horizontal AND)
33
+ * @param expressions Array of expressions to AND together
34
+ */
35
+ function allHorizontal(...expressions) {
36
+ // Interpret string args as column names. We don't flatten nested ANDs to keep implementation simple.
37
+ const processed = expressions.map((e) => (typeof e === 'string' ? col(e) : e));
38
+ return new LogicalExpressionImpl('and', processed);
39
+ }
40
+ /**
41
+ * Create an OR expression with multiple operands (horizontal OR)
42
+ * @param expressions Array of expressions to OR together
43
+ */
44
+ function anyHorizontal(...expressions) {
45
+ // Interpret string args as column names. We don't flatten nested ORs to keep implementation simple.
46
+ const processed = expressions.map((e) => (typeof e === 'string' ? col(e) : e));
47
+ return new LogicalExpressionImpl('or', processed);
48
+ }
49
+ /**
50
+ * Create an AND expression with multiple operands
51
+ * @param expressions Array of expressions to AND together
52
+ */
53
+ function and(...expressions) {
54
+ return allHorizontal(...expressions);
55
+ }
56
+ /**
57
+ * Create an OR expression with multiple operands
58
+ * @param expressions Array of expressions to OR together
59
+ */
60
+ function or(...expressions) {
61
+ return anyHorizontal(...expressions);
62
+ }
63
+ /**
64
+ * Concatenate string representations with optional delimiter (Tengo: concatStr)
65
+ * String inputs are treated as literals.
66
+ */
67
+ function concatStr(expressions, options) {
68
+ if (!Array.isArray(expressions) || expressions.length === 0) {
69
+ throw new Error('concatStr requires a non-empty array of expressions');
70
+ }
71
+ const ops = coerceToExpressionList(expressions, 'lit');
72
+ const delimiter = options?.delimiter ?? '';
73
+ return new StringConcatExpressionImpl(ops, delimiter);
74
+ }
75
+ /**
76
+ * Element-wise min across expressions (Tengo: minHorizontal). Strings -> columns.
77
+ */
78
+ function minHorizontal(expressions) {
79
+ if (!Array.isArray(expressions) || expressions.length === 0) {
80
+ throw new Error('minHorizontal requires a non-empty array of expressions');
81
+ }
82
+ const ops = coerceToExpressionList(expressions, 'col');
83
+ return new MinMaxExpressionImpl('min', ops);
84
+ }
85
+ /**
86
+ * Element-wise max across expressions (Tengo: maxHorizontal). Strings -> columns.
87
+ */
88
+ function maxHorizontal(expressions) {
89
+ if (!Array.isArray(expressions) || expressions.length === 0) {
90
+ throw new Error('maxHorizontal requires a non-empty array of expressions');
91
+ }
92
+ const ops = coerceToExpressionList(expressions, 'col');
93
+ return new MinMaxExpressionImpl('max', ops);
94
+ }
95
+ /**
96
+ * Create a conditional when-then expression builder
97
+ * @param condition Boolean expression condition
98
+ */
99
+ function when(condition) {
100
+ return WhenThenBuilder.start(condition);
101
+ }
102
+ /**
103
+ * Create a rank expression
104
+ * @param expression Expression to rank
105
+ * @param options Ranking options
106
+ */
107
+ function rank(orderBy, descending = false) {
108
+ const orderByList = coerceToExpressionList(orderBy, 'col');
109
+ return new RankBuilder(orderByList, descending);
110
+ }
111
+ /**
112
+ * Builder class for when-then-otherwise conditional expressions
113
+ */
114
+ class WhenThenBuilder {
115
+ clauses;
116
+ currentWhen;
117
+ constructor(clauses, currentWhen) {
118
+ this.clauses = clauses;
119
+ this.currentWhen = currentWhen;
120
+ }
121
+ static start(condition) {
122
+ if (!isExpression(condition))
123
+ throw new Error('when() expects an Expression');
124
+ return new WhenThenBuilder([], condition);
125
+ }
126
+ when(condition) {
127
+ if (this.currentWhen)
128
+ throw new Error('.when() must follow a .then()');
129
+ if (!isExpression(condition))
130
+ throw new Error('.when() expects an Expression');
131
+ return new WhenThenBuilder(this.clauses, condition);
132
+ }
133
+ then(value) {
134
+ if (!this.currentWhen)
135
+ throw new Error('.then() must follow a .when()');
136
+ const expr = isExpression(value) ? value : lit(value);
137
+ const nextClauses = this.clauses.slice();
138
+ nextClauses.push({ when: this.currentWhen, then: expr });
139
+ return new WhenThenBuilder(nextClauses, undefined);
140
+ }
141
+ otherwise(value) {
142
+ if (this.currentWhen)
143
+ throw new Error('.otherwise() must follow a .then()');
144
+ if (this.clauses.length === 0) {
145
+ throw new Error('At least one .when().then() clause is required before .otherwise()');
146
+ }
147
+ const expr = isExpression(value) ? value : lit(value);
148
+ return new WhenThenOtherwiseExpressionImpl(this.clauses, expr);
149
+ }
150
+ }
151
+ // Rank builder and expression
152
+ class RankBuilder {
153
+ orderBy;
154
+ descending;
155
+ constructor(orderBy, descending) {
156
+ this.orderBy = orderBy;
157
+ this.descending = descending;
158
+ }
159
+ over(partitionBy) {
160
+ const partitionByList = coerceToExpressionList(partitionBy, 'col');
161
+ return new RankExpressionImpl(this.orderBy, partitionByList, this.descending);
162
+ }
163
+ }
164
+
165
+ export { RankBuilder, WhenThenBuilder, allHorizontal, and, anyHorizontal, col, concatStr, lit, maxHorizontal, minHorizontal, or, rank, when };
166
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sources":["../src/functions.ts"],"sourcesContent":["/**\n * Factory functions for creating expressions - mirrors Tengo pt library API\n */\n\nimport type { LiteralValue } from './expressions';\nimport { ColumnExpressionImpl, ExpressionImpl, LiteralExpressionImpl, LogicalExpressionImpl, MinMaxExpressionImpl, RankExpressionImpl, StringConcatExpressionImpl, WhenThenOtherwiseExpressionImpl } from './expressions';\n\n// Internal helpers mirroring Tengo behavior\nfunction isExpression(v: unknown): v is ExpressionImpl {\n return v instanceof ExpressionImpl;\n}\n\nfunction asExprFromString(value: string, interpretation: 'col' | 'lit'): ExpressionImpl {\n return interpretation === 'col' ? col(value) : lit(value);\n}\n\nfunction coerceToExpressionList(\n items: Array<ExpressionImpl | string> | ExpressionImpl | string,\n interpretationForString: 'col' | 'lit',\n): ExpressionImpl[] {\n const arr = Array.isArray(items) ? items : [items];\n return arr.map((it) => (typeof it === 'string' ? asExprFromString(it, interpretationForString) : it));\n}\n\n/**\n * Create a column reference expression\n * @param name Column name\n */\nexport function col(name: string): ColumnExpressionImpl {\n return new ColumnExpressionImpl(name);\n}\n\n/**\n * Create a literal value expression\n * @param value Literal value (number, string, boolean, null, etc.)\n */\nexport function lit(value: LiteralValue): LiteralExpressionImpl {\n return new LiteralExpressionImpl(value);\n}\n\n/**\n * Create an AND expression with multiple operands (horizontal AND)\n * @param expressions Array of expressions to AND together\n */\nexport function allHorizontal(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl {\n // Interpret string args as column names. We don't flatten nested ANDs to keep implementation simple.\n const processed: ExpressionImpl[] = expressions.map((e) => (typeof e === 'string' ? col(e) : e));\n return new LogicalExpressionImpl('and', processed);\n}\n\n/**\n * Create an OR expression with multiple operands (horizontal OR)\n * @param expressions Array of expressions to OR together\n */\nexport function anyHorizontal(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl {\n // Interpret string args as column names. We don't flatten nested ORs to keep implementation simple.\n const processed: ExpressionImpl[] = expressions.map((e) => (typeof e === 'string' ? col(e) : e));\n return new LogicalExpressionImpl('or', processed);\n}\n\n/**\n * Create an AND expression with multiple operands\n * @param expressions Array of expressions to AND together\n */\nexport function and(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl {\n return allHorizontal(...expressions);\n}\n\n/**\n * Create an OR expression with multiple operands\n * @param expressions Array of expressions to OR together\n */\nexport function or(...expressions: Array<ExpressionImpl | string>): LogicalExpressionImpl {\n return anyHorizontal(...expressions);\n}\n\n/**\n * Concatenate string representations with optional delimiter (Tengo: concatStr)\n * String inputs are treated as literals.\n */\nexport function concatStr(\n expressions: Array<ExpressionImpl | string>,\n options?: { delimiter?: string },\n): ExpressionImpl {\n if (!Array.isArray(expressions) || expressions.length === 0) {\n throw new Error('concatStr requires a non-empty array of expressions');\n }\n const ops = coerceToExpressionList(expressions, 'lit');\n const delimiter = options?.delimiter ?? '';\n return new StringConcatExpressionImpl(ops, delimiter);\n}\n\n/**\n * Element-wise min across expressions (Tengo: minHorizontal). Strings -> columns.\n */\nexport function minHorizontal(expressions: Array<ExpressionImpl | string>): ExpressionImpl {\n if (!Array.isArray(expressions) || expressions.length === 0) {\n throw new Error('minHorizontal requires a non-empty array of expressions');\n }\n\n const ops = coerceToExpressionList(expressions, 'col');\n return new MinMaxExpressionImpl('min', ops);\n}\n\n/**\n * Element-wise max across expressions (Tengo: maxHorizontal). Strings -> columns.\n */\nexport function maxHorizontal(expressions: Array<ExpressionImpl | string>): ExpressionImpl {\n if (!Array.isArray(expressions) || expressions.length === 0) {\n throw new Error('maxHorizontal requires a non-empty array of expressions');\n }\n const ops = coerceToExpressionList(expressions, 'col');\n return new MinMaxExpressionImpl('max', ops);\n}\n\n/**\n * Create a conditional when-then expression builder\n * @param condition Boolean expression condition\n */\nexport function when(condition: ExpressionImpl): WhenThenBuilder {\n return WhenThenBuilder.start(condition);\n}\n\n/**\n * Create a rank expression\n * @param expression Expression to rank\n * @param options Ranking options\n */\nexport function rank(orderBy: ExpressionImpl | string | Array<ExpressionImpl | string>, descending = false): RankBuilder {\n const orderByList = coerceToExpressionList(orderBy, 'col');\n return new RankBuilder(orderByList, descending);\n}\n\n/**\n * Builder class for when-then-otherwise conditional expressions\n */\nexport class WhenThenBuilder {\n private constructor(\n private readonly clauses: Array<{ when: ExpressionImpl; then: ExpressionImpl }>,\n private readonly currentWhen?: ExpressionImpl,\n ) {}\n\n static start(condition: ExpressionImpl): WhenThenBuilder {\n if (!isExpression(condition)) throw new Error('when() expects an Expression');\n return new WhenThenBuilder([], condition);\n }\n\n when(condition: ExpressionImpl): WhenThenBuilder {\n if (this.currentWhen) throw new Error('.when() must follow a .then()');\n if (!isExpression(condition)) throw new Error('.when() expects an Expression');\n return new WhenThenBuilder(this.clauses, condition);\n }\n\n then(value: ExpressionImpl | LiteralValue): WhenThenBuilder {\n if (!this.currentWhen) throw new Error('.then() must follow a .when()');\n const expr = isExpression(value) ? value : lit(value);\n const nextClauses = this.clauses.slice();\n nextClauses.push({ when: this.currentWhen, then: expr });\n return new WhenThenBuilder(nextClauses, undefined);\n }\n\n otherwise(value: ExpressionImpl | LiteralValue): WhenThenOtherwiseExpressionImpl {\n if (this.currentWhen) throw new Error('.otherwise() must follow a .then()');\n if (this.clauses.length === 0) {\n throw new Error('At least one .when().then() clause is required before .otherwise()');\n }\n const expr = isExpression(value) ? value : lit(value);\n return new WhenThenOtherwiseExpressionImpl(this.clauses, expr);\n }\n}\n\n// Rank builder and expression\nexport class RankBuilder {\n constructor(\n private readonly orderBy: ExpressionImpl[],\n private readonly descending: boolean,\n ) {}\n\n over(partitionBy: ExpressionImpl | string | Array<ExpressionImpl | string>): RankExpressionImpl {\n const partitionByList = coerceToExpressionList(partitionBy, 'col');\n return new RankExpressionImpl(this.orderBy, partitionByList, this.descending);\n }\n}\n"],"names":[],"mappings":"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"}