@hypequery/clickhouse 0.0.0-canary-20260306132943

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.
Files changed (142) hide show
  1. package/LICENSE +201 -0
  2. package/README-CLI.md +123 -0
  3. package/README.md +316 -0
  4. package/dist/cli/bin.js +285 -0
  5. package/dist/cli/generate-types.d.ts +5 -0
  6. package/dist/cli/generate-types.js +218 -0
  7. package/dist/cli/index.d.ts +2 -0
  8. package/dist/cli/index.js +2 -0
  9. package/dist/core/cache/cache-manager.d.ts +4 -0
  10. package/dist/core/cache/cache-manager.d.ts.map +1 -0
  11. package/dist/core/cache/cache-manager.js +176 -0
  12. package/dist/core/cache/controller.d.ts +15 -0
  13. package/dist/core/cache/controller.d.ts.map +1 -0
  14. package/dist/core/cache/controller.js +58 -0
  15. package/dist/core/cache/key.d.ts +11 -0
  16. package/dist/core/cache/key.d.ts.map +1 -0
  17. package/dist/core/cache/key.js +26 -0
  18. package/dist/core/cache/providers/memory-lru.d.ts +31 -0
  19. package/dist/core/cache/providers/memory-lru.d.ts.map +1 -0
  20. package/dist/core/cache/providers/memory-lru.js +156 -0
  21. package/dist/core/cache/providers/noop.d.ts +7 -0
  22. package/dist/core/cache/providers/noop.d.ts.map +1 -0
  23. package/dist/core/cache/providers/noop.js +11 -0
  24. package/dist/core/cache/runtime-context.d.ts +30 -0
  25. package/dist/core/cache/runtime-context.d.ts.map +1 -0
  26. package/dist/core/cache/runtime-context.js +58 -0
  27. package/dist/core/cache/serialization.d.ts +6 -0
  28. package/dist/core/cache/serialization.d.ts.map +1 -0
  29. package/dist/core/cache/serialization.js +166 -0
  30. package/dist/core/cache/types.d.ts +52 -0
  31. package/dist/core/cache/types.d.ts.map +1 -0
  32. package/dist/core/cache/types.js +1 -0
  33. package/dist/core/cache/utils.d.ts +9 -0
  34. package/dist/core/cache/utils.d.ts.map +1 -0
  35. package/dist/core/cache/utils.js +30 -0
  36. package/dist/core/connection.d.ts +112 -0
  37. package/dist/core/connection.d.ts.map +1 -0
  38. package/dist/core/connection.js +150 -0
  39. package/dist/core/cross-filter.d.ts +73 -0
  40. package/dist/core/cross-filter.d.ts.map +1 -0
  41. package/dist/core/cross-filter.js +142 -0
  42. package/dist/core/env/auto-client.browser.d.ts +3 -0
  43. package/dist/core/env/auto-client.browser.d.ts.map +1 -0
  44. package/dist/core/env/auto-client.browser.js +3 -0
  45. package/dist/core/env/auto-client.d.ts +9 -0
  46. package/dist/core/env/auto-client.d.ts.map +1 -0
  47. package/dist/core/env/auto-client.js +21 -0
  48. package/dist/core/features/aggregations.d.ts +98 -0
  49. package/dist/core/features/aggregations.d.ts.map +1 -0
  50. package/dist/core/features/aggregations.js +36 -0
  51. package/dist/core/features/analytics.d.ts +81 -0
  52. package/dist/core/features/analytics.d.ts.map +1 -0
  53. package/dist/core/features/analytics.js +45 -0
  54. package/dist/core/features/cross-filtering.d.ts +11 -0
  55. package/dist/core/features/cross-filtering.d.ts.map +1 -0
  56. package/dist/core/features/cross-filtering.js +90 -0
  57. package/dist/core/features/executor.d.ts +21 -0
  58. package/dist/core/features/executor.d.ts.map +1 -0
  59. package/dist/core/features/executor.js +146 -0
  60. package/dist/core/features/filtering.d.ts +99 -0
  61. package/dist/core/features/filtering.d.ts.map +1 -0
  62. package/dist/core/features/filtering.js +118 -0
  63. package/dist/core/features/joins.d.ts +26 -0
  64. package/dist/core/features/joins.d.ts.map +1 -0
  65. package/dist/core/features/joins.js +17 -0
  66. package/dist/core/features/query-modifiers.d.ts +116 -0
  67. package/dist/core/features/query-modifiers.d.ts.map +1 -0
  68. package/dist/core/features/query-modifiers.js +51 -0
  69. package/dist/core/formatters/sql-formatter.d.ts +9 -0
  70. package/dist/core/formatters/sql-formatter.d.ts.map +1 -0
  71. package/dist/core/formatters/sql-formatter.js +131 -0
  72. package/dist/core/join-relationships.d.ts +51 -0
  73. package/dist/core/join-relationships.d.ts.map +1 -0
  74. package/dist/core/join-relationships.js +54 -0
  75. package/dist/core/query-builder.d.ts +236 -0
  76. package/dist/core/query-builder.d.ts.map +1 -0
  77. package/dist/core/query-builder.js +495 -0
  78. package/dist/core/tests/index.d.ts +2 -0
  79. package/dist/core/tests/index.d.ts.map +1 -0
  80. package/dist/core/tests/index.js +1 -0
  81. package/dist/core/tests/integration/setup.d.ts +48 -0
  82. package/dist/core/tests/integration/setup.d.ts.map +1 -0
  83. package/dist/core/tests/integration/setup.js +349 -0
  84. package/dist/core/tests/integration/test-config.d.ts +15 -0
  85. package/dist/core/tests/integration/test-config.d.ts.map +1 -0
  86. package/dist/core/tests/integration/test-config.js +14 -0
  87. package/dist/core/tests/integration/test-data.json +190 -0
  88. package/dist/core/tests/test-utils.d.ts +44 -0
  89. package/dist/core/tests/test-utils.d.ts.map +1 -0
  90. package/dist/core/tests/test-utils.js +65 -0
  91. package/dist/core/types/builder-state.d.ts +27 -0
  92. package/dist/core/types/builder-state.d.ts.map +1 -0
  93. package/dist/core/types/builder-state.js +1 -0
  94. package/dist/core/types/select-types.d.ts +33 -0
  95. package/dist/core/types/select-types.d.ts.map +1 -0
  96. package/dist/core/types/select-types.js +1 -0
  97. package/dist/core/types/type-helpers.d.ts +5 -0
  98. package/dist/core/types/type-helpers.d.ts.map +1 -0
  99. package/dist/core/types/type-helpers.js +1 -0
  100. package/dist/core/utils/logger.d.ts +43 -0
  101. package/dist/core/utils/logger.d.ts.map +1 -0
  102. package/dist/core/utils/logger.js +104 -0
  103. package/dist/core/utils/predicate-builder.d.ts +33 -0
  104. package/dist/core/utils/predicate-builder.d.ts.map +1 -0
  105. package/dist/core/utils/predicate-builder.js +95 -0
  106. package/dist/core/utils/sql-expressions.d.ts +77 -0
  107. package/dist/core/utils/sql-expressions.d.ts.map +1 -0
  108. package/dist/core/utils/sql-expressions.js +54 -0
  109. package/dist/core/utils/streaming-helpers.d.ts +2 -0
  110. package/dist/core/utils/streaming-helpers.d.ts.map +1 -0
  111. package/dist/core/utils/streaming-helpers.js +137 -0
  112. package/dist/core/utils.d.ts +3 -0
  113. package/dist/core/utils.d.ts.map +1 -0
  114. package/dist/core/utils.js +29 -0
  115. package/dist/core/validators/filter-validator.d.ts +9 -0
  116. package/dist/core/validators/filter-validator.d.ts.map +1 -0
  117. package/dist/core/validators/filter-validator.js +19 -0
  118. package/dist/core/validators/value-validator.d.ts +7 -0
  119. package/dist/core/validators/value-validator.d.ts.map +1 -0
  120. package/dist/core/validators/value-validator.js +47 -0
  121. package/dist/formatters/index.d.ts +2 -0
  122. package/dist/formatters/index.d.ts.map +1 -0
  123. package/dist/formatters/index.js +1 -0
  124. package/dist/index.d.ts +20 -0
  125. package/dist/index.d.ts.map +1 -0
  126. package/dist/index.js +21 -0
  127. package/dist/types/base.d.ts +50 -0
  128. package/dist/types/base.d.ts.map +1 -0
  129. package/dist/types/base.js +1 -0
  130. package/dist/types/clickhouse-types.d.ts +17 -0
  131. package/dist/types/clickhouse-types.d.ts.map +1 -0
  132. package/dist/types/clickhouse-types.js +1 -0
  133. package/dist/types/filters.d.ts +53 -0
  134. package/dist/types/filters.d.ts.map +1 -0
  135. package/dist/types/filters.js +1 -0
  136. package/dist/types/index.d.ts +5 -0
  137. package/dist/types/index.d.ts.map +1 -0
  138. package/dist/types/index.js +4 -0
  139. package/dist/types/schema.d.ts +19 -0
  140. package/dist/types/schema.d.ts.map +1 -0
  141. package/dist/types/schema.js +1 -0
  142. package/package.json +90 -0
@@ -0,0 +1,27 @@
1
+ import type { ColumnType, InferColumnType, TableRecord } from '../../types/schema.js';
2
+ import type { Simplify } from './type-helpers.js';
3
+ export type SchemaDefinition<Schema extends Record<string, any> = Record<string, any>> = {
4
+ [K in keyof Schema]: Record<string, ColumnType>;
5
+ };
6
+ export type BuilderState<Schema extends SchemaDefinition<Schema>, VisibleTables extends string, OutputRow, BaseTable extends keyof Schema, Aliases extends Partial<Record<string, keyof Schema>> = {}, Scalars extends Record<string, unknown> = {}> = {
7
+ schema: Schema;
8
+ tables: VisibleTables;
9
+ output: OutputRow;
10
+ baseTable: BaseTable;
11
+ base: Schema[BaseTable];
12
+ aliases: Aliases;
13
+ scalars: Scalars;
14
+ };
15
+ export type AnyBuilderState = BuilderState<any, any, any, any, any>;
16
+ export type BaseRow<State extends AnyBuilderState> = Simplify<{
17
+ [K in keyof State['base']]: State['base'][K] extends ColumnType ? InferColumnType<State['base'][K]> : never;
18
+ }>;
19
+ export type WidenTables<State extends AnyBuilderState, Table extends keyof State['schema']> = BuilderState<State['schema'], State['tables'] | (Table & string), State['output'], State['baseTable'], State['aliases'], State['scalars']>;
20
+ export type UpdateOutput<State extends AnyBuilderState, Output> = BuilderState<State['schema'], State['tables'], Output, State['baseTable'], State['aliases'], State['scalars']>;
21
+ export type InitialState<Schema extends SchemaDefinition<Schema>, Table extends keyof Schema> = BuilderState<Schema, Table & string, TableRecord<Schema[Table]>, Table, {}, {}>;
22
+ export type ExplicitSelectionState<State extends AnyBuilderState> = BaseRow<State> extends State['output'] ? State['output'] extends BaseRow<State> ? false : true : true;
23
+ export type AppendToOutput<State extends AnyBuilderState, Added> = UpdateOutput<State, ExplicitSelectionState<State> extends true ? Simplify<State['output'] & Added> : Simplify<Added>>;
24
+ export type AddAlias<State extends AnyBuilderState, Alias extends string, Table extends keyof State['schema']> = BuilderState<State['schema'], State['tables'] | Alias, State['output'], State['baseTable'], State['aliases'] & Record<Alias, Table>, State['scalars']>;
25
+ export type AddScalar<State extends AnyBuilderState, Alias extends string, Value> = BuilderState<State['schema'], State['tables'], State['output'], State['baseTable'], State['aliases'], State['scalars'] & Record<Alias, Value>>;
26
+ export type ResolveTableSchema<State extends AnyBuilderState, Table extends string> = Table extends keyof State['schema'] ? State['schema'][Table] : Table extends keyof State['aliases'] ? State['schema'][State['aliases'][Table]] : never;
27
+ //# sourceMappingURL=builder-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder-state.d.ts","sourceRoot":"","sources":["../../../src/core/types/builder-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import type { SqlExpression, AliasedExpression } from '../utils/sql-expressions.js';
2
+ import type { ColumnType, InferColumnType } from '../../types/schema.js';
3
+ import type { AnyBuilderState, BaseRow, ResolveTableSchema } from './builder-state.js';
4
+ import { Simplify, UnionToIntersection } from './type-helpers.js';
5
+ type TableIdentifiers<State extends AnyBuilderState> = State['tables'] & string;
6
+ type QualifiedColumnsFor<State extends AnyBuilderState, Table extends string> = ResolveTableSchema<State, Table> extends Record<string, ColumnType> ? `${Table}.${Extract<keyof ResolveTableSchema<State, Table>, string>}` : never;
7
+ export type QualifiedColumnKeys<State extends AnyBuilderState> = {
8
+ [Table in TableIdentifiers<State>]: QualifiedColumnsFor<State, Table>;
9
+ }[TableIdentifiers<State>];
10
+ export type BaseColumnKeys<State extends AnyBuilderState> = keyof BaseRow<State>;
11
+ export type OutputColumnKeys<State extends AnyBuilderState> = keyof State['output'];
12
+ export type ScalarColumnKeys<State extends AnyBuilderState> = keyof State['scalars'];
13
+ export type SelectableColumn<State extends AnyBuilderState> = OutputColumnKeys<State> | ScalarColumnKeys<State> | BaseColumnKeys<State> | QualifiedColumnKeys<State>;
14
+ type StringSelectableColumn<State extends AnyBuilderState> = Extract<SelectableColumn<State>, string>;
15
+ type AsKeyword = 'as' | 'AS' | 'As' | 'aS';
16
+ type AliasedColumnString<State extends AnyBuilderState> = `${StringSelectableColumn<State>} ${AsKeyword} ${string}`;
17
+ export type SelectableItem<State extends AnyBuilderState> = SelectableColumn<State> | AliasedColumnString<State> | SqlExpression;
18
+ export type ColumnSelectionKey<P> = P extends `${string}.${infer C}` ? C : P;
19
+ type QualifiedColumnValue<State extends AnyBuilderState, P> = P extends `${infer Table}.${infer Column}` ? ResolveTableSchema<State, Table> extends Record<string, ColumnType> ? Column extends keyof ResolveTableSchema<State, Table> ? ResolveTableSchema<State, Table>[Column] extends ColumnType ? InferColumnType<ResolveTableSchema<State, Table>[Column]> : never : never : never : never;
20
+ export type ColumnSelectionValue<State extends AnyBuilderState, P> = P extends OutputColumnKeys<State> ? State['output'][P] : P extends ScalarColumnKeys<State> ? State['scalars'][P] : P extends BaseColumnKeys<State> ? BaseRow<State>[P] : QualifiedColumnValue<State, P>;
21
+ export type ColumnSelectionRecord<State extends AnyBuilderState, K> = {
22
+ [P in Extract<K, SelectableColumn<State>> as ColumnSelectionKey<P>]: ColumnSelectionValue<State, P>;
23
+ };
24
+ type ParsedAliasedColumn<State extends AnyBuilderState, Entry extends string> = Entry extends `${infer Column} ${infer Keyword} ${infer Alias}` ? Lowercase<Keyword> extends 'as' ? Column extends StringSelectableColumn<State> ? {
25
+ [P in Alias]: ColumnSelectionValue<State, Column>;
26
+ } : {} : {} : {};
27
+ type AliasedColumnSelectionRecord<State extends AnyBuilderState, K> = [Extract<K, string>] extends [never] ? {} : UnionToIntersection<ParsedAliasedColumn<State, Extract<K, string>>>;
28
+ export type ExpressionSelectionRecord<K> = UnionToIntersection<K extends AliasedExpression<infer R, infer A> ? {
29
+ [P in A]: R;
30
+ } : {}>;
31
+ export type SelectionResult<State extends AnyBuilderState, K> = Simplify<ColumnSelectionRecord<State, K> & ExpressionSelectionRecord<K> & AliasedColumnSelectionRecord<State, K>>;
32
+ export {};
33
+ //# sourceMappingURL=select-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-types.d.ts","sourceRoot":"","sources":["../../../src/core/types/select-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
2
+ export type Simplify<T> = {
3
+ [K in keyof T]: T[K];
4
+ } & {};
5
+ //# sourceMappingURL=type-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-helpers.d.ts","sourceRoot":"","sources":["../../../src/core/types/type-helpers.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAC/B,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;AAEpF,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ import type { CacheStatus } from '../cache/types.js';
2
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
3
+ export interface QueryLog {
4
+ query: string;
5
+ parameters?: any[];
6
+ startTime: number;
7
+ endTime?: number;
8
+ duration?: number;
9
+ status: 'started' | 'completed' | 'error';
10
+ error?: Error;
11
+ rowCount?: number;
12
+ queryId?: string;
13
+ cacheStatus?: CacheStatus;
14
+ cacheKey?: string;
15
+ cacheMode?: string;
16
+ cacheAgeMs?: number;
17
+ cacheRowCount?: number;
18
+ }
19
+ export interface LoggerOptions {
20
+ level?: LogLevel;
21
+ enabled?: boolean;
22
+ onQueryLog?: (log: QueryLog) => void;
23
+ }
24
+ declare class Logger {
25
+ private static instance;
26
+ private level;
27
+ private enabled;
28
+ private onQueryLog?;
29
+ private querySubscribers;
30
+ private constructor();
31
+ static getInstance(): Logger;
32
+ configure(options: LoggerOptions): void;
33
+ subscribeToQuery(queryId: string, callback: (log: QueryLog) => void): () => void;
34
+ private shouldLog;
35
+ debug(message: string, ...args: any[]): void;
36
+ info(message: string, ...args: any[]): void;
37
+ warn(message: string, ...args: any[]): void;
38
+ error(message: string, ...args: any[]): void;
39
+ logQuery(log: QueryLog): void;
40
+ }
41
+ export declare const logger: Logger;
42
+ export {};
43
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/core/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;CACtC;AAED,cAAM,MAAM;IACV,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,UAAU,CAAC,CAA0B;IAC7C,OAAO,CAAC,gBAAgB,CAAuD;IAE/E,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,MAAM;IAO5B,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAMvC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI;IAoBhF,OAAO,CAAC,SAAS;IAMjB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM5C,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;CAwC9B;AAED,eAAO,MAAM,MAAM,QAAuB,CAAC"}
@@ -0,0 +1,104 @@
1
+ class Logger {
2
+ static instance;
3
+ level = 'info';
4
+ enabled = true;
5
+ onQueryLog;
6
+ querySubscribers = new Map();
7
+ constructor() { }
8
+ static getInstance() {
9
+ if (!Logger.instance) {
10
+ Logger.instance = new Logger();
11
+ }
12
+ return Logger.instance;
13
+ }
14
+ configure(options) {
15
+ if (options.level)
16
+ this.level = options.level;
17
+ if (options.enabled !== undefined)
18
+ this.enabled = options.enabled;
19
+ if (options.onQueryLog)
20
+ this.onQueryLog = options.onQueryLog;
21
+ }
22
+ subscribeToQuery(queryId, callback) {
23
+ if (!this.querySubscribers.has(queryId)) {
24
+ this.querySubscribers.set(queryId, []);
25
+ }
26
+ this.querySubscribers.get(queryId).push(callback);
27
+ return () => {
28
+ const subscribers = this.querySubscribers.get(queryId);
29
+ if (subscribers) {
30
+ const index = subscribers.indexOf(callback);
31
+ if (index > -1) {
32
+ subscribers.splice(index, 1);
33
+ }
34
+ if (subscribers.length === 0) {
35
+ this.querySubscribers.delete(queryId);
36
+ }
37
+ }
38
+ };
39
+ }
40
+ shouldLog(level) {
41
+ if (!this.enabled)
42
+ return false;
43
+ const levels = ['debug', 'info', 'warn', 'error'];
44
+ return levels.indexOf(level) >= levels.indexOf(this.level);
45
+ }
46
+ debug(message, ...args) {
47
+ if (this.shouldLog('debug')) {
48
+ console.debug(`[hypequery Debug] ${message}`, ...args);
49
+ }
50
+ }
51
+ info(message, ...args) {
52
+ if (this.shouldLog('info')) {
53
+ console.info(`[hypequery Info] ${message}`, ...args);
54
+ }
55
+ }
56
+ warn(message, ...args) {
57
+ if (this.shouldLog('warn')) {
58
+ console.warn(`[hypequery Warn] ${message}`, ...args);
59
+ }
60
+ }
61
+ error(message, ...args) {
62
+ if (this.shouldLog('error')) {
63
+ console.error(`[hypequery Error] ${message}`, ...args);
64
+ }
65
+ }
66
+ logQuery(log) {
67
+ if (!this.enabled)
68
+ return;
69
+ if (this.onQueryLog) {
70
+ this.onQueryLog(log);
71
+ }
72
+ if (log.queryId) {
73
+ const subscribers = this.querySubscribers.get(log.queryId);
74
+ if (subscribers) {
75
+ subscribers.forEach(callback => callback(log));
76
+ }
77
+ }
78
+ const { query, parameters, duration, status, error, rowCount, cacheStatus, cacheKey, cacheMode, cacheAgeMs, cacheRowCount } = log;
79
+ const message = `Query ${status}: ${query}`;
80
+ const details = {
81
+ parameters,
82
+ duration: duration ? `${duration}ms` : undefined,
83
+ rowCount,
84
+ error: error?.message,
85
+ cacheStatus,
86
+ cacheKey,
87
+ cacheMode,
88
+ cacheAgeMs,
89
+ cacheRowCount
90
+ };
91
+ switch (status) {
92
+ case 'started':
93
+ this.debug(message, details);
94
+ break;
95
+ case 'completed':
96
+ this.info(message, details);
97
+ break;
98
+ case 'error':
99
+ this.error(message, details);
100
+ break;
101
+ }
102
+ }
103
+ }
104
+ export const logger = Logger.getInstance();
@@ -0,0 +1,33 @@
1
+ import type { AnyBuilderState, BaseRow } from '../types/builder-state.js';
2
+ import type { SelectableColumn } from '../types/select-types.js';
3
+ export type PredicatePrimitive = string | number | boolean | Date | null;
4
+ type PredicateValue = Exclude<PredicatePrimitive, string>;
5
+ export interface PredicateExpression<T = unknown> {
6
+ __type: 'predicate_expression';
7
+ sql: string;
8
+ parameters: any[];
9
+ readonly expressionType?: T | undefined;
10
+ }
11
+ export interface PredicateLiteral<T = PredicatePrimitive> {
12
+ __type: 'predicate_literal';
13
+ value: T;
14
+ }
15
+ export type ColumnReference<State extends AnyBuilderState> = keyof BaseRow<State> | keyof State['output'] | Extract<SelectableColumn<State>, string>;
16
+ export type PredicateArg<State extends AnyBuilderState> = ColumnReference<State> | PredicateExpression | PredicateLiteral | PredicateValue | PredicatePrimitive[];
17
+ export interface ClickHousePredicateBuilder<State extends AnyBuilderState> {
18
+ dictGet<T = unknown>(dictionary: string, attribute: string, key: PredicateArg<State>): PredicateExpression<T>;
19
+ }
20
+ export interface PredicateBuilder<State extends AnyBuilderState> {
21
+ fn<T = unknown>(name: string, ...args: Array<PredicateArg<State>>): PredicateExpression<T>;
22
+ col(column: ColumnReference<State>): PredicateExpression;
23
+ value<T extends PredicatePrimitive>(value: T): PredicateLiteral<T>;
24
+ literal<T extends PredicatePrimitive>(value: T): PredicateLiteral<T>;
25
+ array(values: Array<PredicatePrimitive | PredicateLiteral>): PredicateExpression;
26
+ raw(sql: string): PredicateExpression;
27
+ and(expressions: PredicateExpression[]): PredicateExpression<boolean>;
28
+ or(expressions: PredicateExpression[]): PredicateExpression<boolean>;
29
+ ch: ClickHousePredicateBuilder<State>;
30
+ }
31
+ export declare function createPredicateBuilder<State extends AnyBuilderState>(): PredicateBuilder<State>;
32
+ export {};
33
+ //# sourceMappingURL=predicate-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicate-builder.d.ts","sourceRoot":"","sources":["../../../src/core/utils/predicate-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AACzE,KAAK,cAAc,GAAG,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAC9C,MAAM,EAAE,sBAAsB,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,kBAAkB;IACtD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC;CACV;AAED,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,eAAe,IACrD,MAAM,OAAO,CAAC,KAAK,CAAC,GACpB,MAAM,KAAK,CAAC,QAAQ,CAAC,GACrB,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAE7C,MAAM,MAAM,YAAY,CAAC,KAAK,SAAS,eAAe,IAClD,eAAe,CAAC,KAAK,CAAC,GACtB,mBAAmB,GACnB,gBAAgB,GAChB,cAAc,GACd,kBAAkB,EAAE,CAAC;AAEzB,MAAM,WAAW,0BAA0B,CAAC,KAAK,SAAS,eAAe;IACvE,OAAO,CAAC,CAAC,GAAG,OAAO,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,GACvB,mBAAmB,CAAC,CAAC,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB,CAAC,KAAK,SAAS,eAAe;IAC7D,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC3F,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC;IACzD,KAAK,CAAC,CAAC,SAAS,kBAAkB,EAAE,KAAK,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC,SAAS,kBAAkB,EAAE,KAAK,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,mBAAmB,CAAC;IACjF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACtC,GAAG,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtE,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACrE,EAAE,EAAE,0BAA0B,CAAC,KAAK,CAAC,CAAC;CACvC;AA4GD,wBAAgB,sBAAsB,CAAC,KAAK,SAAS,eAAe,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAgB/F"}
@@ -0,0 +1,95 @@
1
+ function createExpression(sql, parameters = []) {
2
+ return {
3
+ __type: 'predicate_expression',
4
+ sql,
5
+ parameters,
6
+ expressionType: undefined
7
+ };
8
+ }
9
+ function literal(value) {
10
+ return {
11
+ __type: 'predicate_literal',
12
+ value
13
+ };
14
+ }
15
+ function isPredicateExpression(value) {
16
+ return value?.__type === 'predicate_expression';
17
+ }
18
+ function isPredicateLiteral(value) {
19
+ return value?.__type === 'predicate_literal';
20
+ }
21
+ function buildArrayLiteral(values) {
22
+ const parts = [];
23
+ const parameters = [];
24
+ values.forEach(value => {
25
+ const normalized = normalizeLiteralValue(value);
26
+ parts.push(normalized.sql);
27
+ parameters.push(...normalized.parameters);
28
+ });
29
+ return createExpression(`[${parts.join(', ')}]`, parameters);
30
+ }
31
+ function normalizeLiteralValue(value) {
32
+ if (isPredicateLiteral(value)) {
33
+ return createExpression('?', [value.value]);
34
+ }
35
+ if (value === null) {
36
+ return createExpression('NULL');
37
+ }
38
+ if (value instanceof Date || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'string') {
39
+ return createExpression('?', [value]);
40
+ }
41
+ throw new Error('Unsupported literal value in predicate array');
42
+ }
43
+ function normalizeArgument(arg) {
44
+ if (isPredicateExpression(arg)) {
45
+ return arg;
46
+ }
47
+ if (isPredicateLiteral(arg)) {
48
+ return createExpression('?', [arg.value]);
49
+ }
50
+ if (Array.isArray(arg)) {
51
+ return buildArrayLiteral(arg);
52
+ }
53
+ if (arg === null) {
54
+ return createExpression('NULL');
55
+ }
56
+ if (arg instanceof Date || typeof arg === 'number' || typeof arg === 'boolean') {
57
+ return createExpression('?', [arg]);
58
+ }
59
+ if (typeof arg === 'string') {
60
+ return createExpression(arg);
61
+ }
62
+ throw new Error('Unsupported predicate argument type');
63
+ }
64
+ function buildFunctionExpression(name, args) {
65
+ const builtArgs = args.map(arg => normalizeArgument(arg));
66
+ const sql = `${name}(${builtArgs.map(arg => arg.sql).join(', ')})`;
67
+ const parameters = builtArgs.flatMap(arg => arg.parameters);
68
+ return createExpression(sql, parameters);
69
+ }
70
+ function buildLogical(operator, expressions) {
71
+ if (!expressions.length) {
72
+ throw new Error(`${operator} requires at least one expression`);
73
+ }
74
+ if (expressions.length === 1) {
75
+ return expressions[0];
76
+ }
77
+ const sql = expressions.map(expr => `(${expr.sql})`).join(` ${operator} `);
78
+ const parameters = expressions.flatMap(expr => expr.parameters);
79
+ return createExpression(sql, parameters);
80
+ }
81
+ export function createPredicateBuilder() {
82
+ return {
83
+ fn: (name, ...args) => buildFunctionExpression(name, args),
84
+ col: column => createExpression(String(column)),
85
+ value: value => literal(value),
86
+ literal: value => literal(value),
87
+ array: values => buildArrayLiteral(values),
88
+ raw: sql => createExpression(sql),
89
+ and: expressions => buildLogical('AND', expressions),
90
+ or: expressions => buildLogical('OR', expressions),
91
+ ch: {
92
+ dictGet: (dictionary, attribute, key) => buildFunctionExpression('dictGet', [literal(dictionary), literal(attribute), key])
93
+ }
94
+ };
95
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Represents a raw SQL expression that can be used in queries
3
+ */
4
+ export interface SqlExpression<T = unknown> {
5
+ __type: 'expression' | 'aliased_expression';
6
+ toSql(): string;
7
+ readonly expressionType?: T | undefined;
8
+ }
9
+ /**
10
+ * Represents an aliased SQL expression that can be used in select clauses
11
+ */
12
+ export interface AliasedExpression<T = unknown, Alias extends string = string> extends SqlExpression<T> {
13
+ __type: 'aliased_expression';
14
+ alias: Alias;
15
+ }
16
+ /**
17
+ * Creates a raw SQL expression
18
+ * @param sql The SQL expression string
19
+ * @returns A SqlExpression object
20
+ */
21
+ export declare function raw<T = unknown>(sql: string): SqlExpression<T>;
22
+ export declare function selectExpr<T = unknown>(sql: string): SqlExpression<T>;
23
+ export declare function selectExpr<T = unknown, Alias extends string = string>(sql: string, alias: Alias): AliasedExpression<T, Alias>;
24
+ /**
25
+ * Creates an aliased SQL expression for use in SELECT clauses
26
+ * @param sql The SQL expression string
27
+ * @param alias The alias to use for the expression
28
+ * @returns An AliasedExpression object
29
+ */
30
+ export declare function rawAs<T = unknown, Alias extends string = string>(sql: string, alias: Alias): AliasedExpression<T, Alias>;
31
+ /**
32
+ * Converts a value to DateTime format
33
+ * @param field The field or expression to convert
34
+ * @param alias Optional alias for the result
35
+ * @returns SQL expression or aliased expression
36
+ */
37
+ export declare function toDateTime(field: string): SqlExpression<Date>;
38
+ export declare function toDateTime<T extends string>(field: string, alias: T): AliasedExpression<Date, T>;
39
+ export interface FormatDateTimeOptions {
40
+ timezone?: string;
41
+ alias?: string;
42
+ }
43
+ type FormatDateTimeAliasOptions<Alias extends string> = FormatDateTimeOptions & {
44
+ alias: Alias;
45
+ };
46
+ type FormatDateTimeNoAliasOptions = Omit<FormatDateTimeOptions, 'alias'> & {
47
+ alias?: undefined;
48
+ };
49
+ /**
50
+ * Formats a DateTime value using the specified format
51
+ * @param field The field or expression to format
52
+ * @param format The date format string
53
+ * @param options Optional configuration including timezone and alias
54
+ * @returns SQL expression or aliased expression
55
+ */
56
+ export declare function formatDateTime(field: string, format: string, options?: FormatDateTimeNoAliasOptions): SqlExpression<string>;
57
+ export declare function formatDateTime<T extends string>(field: string, format: string, options: FormatDateTimeAliasOptions<T>): AliasedExpression<string, T>;
58
+ /**
59
+ * Truncates a date/time value to the start of the specified interval
60
+ * @param field The field to truncate
61
+ * @param interval The interval (e.g., '1 day', '15 minute')
62
+ * @param alias Optional alias for the result
63
+ * @returns SQL expression or aliased expression
64
+ */
65
+ export declare function toStartOfInterval(field: string, interval: string): SqlExpression<Date>;
66
+ export declare function toStartOfInterval<T extends string>(field: string, interval: string, alias: T): AliasedExpression<Date, T>;
67
+ /**
68
+ * Extracts the specified part from a date/time value
69
+ * @param part The part to extract (year, month, day, etc.)
70
+ * @param field The field to extract from
71
+ * @param alias Optional alias for the result
72
+ * @returns SQL expression or aliased expression
73
+ */
74
+ export declare function datePart(part: 'year' | 'quarter' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second', field: string): SqlExpression<number>;
75
+ export declare function datePart<T extends string>(part: 'year' | 'quarter' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second', field: string, alias: T): AliasedExpression<number, T>;
76
+ export {};
77
+ //# sourceMappingURL=sql-expressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-expressions.d.ts","sourceRoot":"","sources":["../../../src/core/utils/sql-expressions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,MAAM,EAAE,YAAY,GAAG,oBAAoB,CAAC;IAC5C,KAAK,IAAI,MAAM,CAAC;IAChB,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACrG,MAAM,EAAE,oBAAoB,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAM9D;AAED,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AACvE,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM,EACnE,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,KAAK,GACX,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAQ/B;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAOxH;AAID;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAC/D,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAOlG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,0BAA0B,CAAC,KAAK,SAAS,MAAM,IAAI,qBAAqB,GAAG;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AACjG,KAAK,4BAA4B,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAEjG;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,4BAA4B,GACrC,aAAa,CAAC,MAAM,CAAC,CAAC;AACzB,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,0BAA0B,CAAC,CAAC,CAAC,GACrC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAmBhC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AACxF,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAO3H;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAClF,KAAK,EAAE,MAAM,GACZ,aAAa,CAAC,MAAM,CAAC,CAAC;AACzB,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EACvC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAClF,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,GACP,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Creates a raw SQL expression
3
+ * @param sql The SQL expression string
4
+ * @returns A SqlExpression object
5
+ */
6
+ export function raw(sql) {
7
+ return {
8
+ __type: 'expression',
9
+ toSql: () => sql,
10
+ expressionType: undefined
11
+ };
12
+ }
13
+ export function selectExpr(sql, alias) {
14
+ return alias ? rawAs(sql, alias) : raw(sql);
15
+ }
16
+ /**
17
+ * Creates an aliased SQL expression for use in SELECT clauses
18
+ * @param sql The SQL expression string
19
+ * @param alias The alias to use for the expression
20
+ * @returns An AliasedExpression object
21
+ */
22
+ export function rawAs(sql, alias) {
23
+ return {
24
+ __type: 'aliased_expression',
25
+ alias,
26
+ toSql: () => `${sql} AS ${alias}`,
27
+ expressionType: undefined
28
+ };
29
+ }
30
+ export function toDateTime(field, alias) {
31
+ return alias
32
+ ? rawAs(`toDateTime(${field})`, alias)
33
+ : raw(`toDateTime(${field})`);
34
+ }
35
+ export function formatDateTime(field, format, options = {}) {
36
+ const { timezone, alias } = options;
37
+ let sql = `formatDateTime(${field}, '${format}'`;
38
+ if (timezone) {
39
+ sql += `, '${timezone}'`;
40
+ }
41
+ sql += ')';
42
+ return alias ? rawAs(sql, alias) : raw(sql);
43
+ }
44
+ export function toStartOfInterval(field, interval, alias) {
45
+ return alias
46
+ ? rawAs(`toStartOfInterval(${field}, INTERVAL ${interval})`, alias)
47
+ : raw(`toStartOfInterval(${field}, INTERVAL ${interval})`);
48
+ }
49
+ export function datePart(part, field, alias) {
50
+ const functionName = `to${part.charAt(0).toUpperCase() + part.slice(1)}`;
51
+ return alias
52
+ ? rawAs(`${functionName}(${field})`, alias)
53
+ : raw(`${functionName}(${field})`);
54
+ }
@@ -0,0 +1,2 @@
1
+ export declare function createJsonEachRowStream<T>(stream: NodeJS.ReadableStream | ReadableStream<T[]>): ReadableStream<T[]>;
2
+ //# sourceMappingURL=streaming-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-helpers.d.ts","sourceRoot":"","sources":["../../../src/core/utils/streaming-helpers.ts"],"names":[],"mappings":"AAoIA,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAwCnH"}