@hypequery/clickhouse 0.2.1
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.
- package/README-CLI.md +123 -0
- package/README.md +276 -0
- package/dist/cli/bin.js +151 -0
- package/dist/cli/generate-types.d.ts +5 -0
- package/dist/cli/generate-types.js +91 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +2 -0
- package/dist/core/connection.d.ts.map +1 -0
- package/dist/core/connection.js +34 -0
- package/dist/core/cross-filter.d.ts.map +1 -0
- package/dist/core/cross-filter.js +218 -0
- package/dist/core/features/aggregations.d.ts.map +1 -0
- package/dist/core/features/aggregations.js +35 -0
- package/dist/core/features/analytics.d.ts.map +1 -0
- package/dist/core/features/analytics.js +35 -0
- package/dist/core/features/executor.d.ts.map +1 -0
- package/dist/core/features/executor.js +136 -0
- package/dist/core/features/filtering.d.ts.map +1 -0
- package/dist/core/features/filtering.js +30 -0
- package/dist/core/features/joins.d.ts.map +1 -0
- package/dist/core/features/joins.js +16 -0
- package/dist/core/features/pagination.d.ts.map +1 -0
- package/dist/core/features/pagination.js +190 -0
- package/dist/core/features/query-modifiers.d.ts.map +1 -0
- package/dist/core/features/query-modifiers.js +50 -0
- package/dist/core/formatters/sql-formatter.d.ts.map +1 -0
- package/dist/core/formatters/sql-formatter.js +69 -0
- package/dist/core/join-relationships.d.ts.map +1 -0
- package/dist/core/join-relationships.js +56 -0
- package/dist/core/query-builder.d.ts.map +1 -0
- package/dist/core/query-builder.js +372 -0
- package/dist/core/tests/index.d.ts.map +1 -0
- package/dist/core/tests/index.js +1 -0
- package/dist/core/tests/integration/setup.d.ts.map +1 -0
- package/dist/core/tests/integration/setup.js +274 -0
- package/dist/core/tests/test-utils.d.ts.map +1 -0
- package/dist/core/tests/test-utils.js +32 -0
- package/dist/core/utils/logger.d.ts.map +1 -0
- package/dist/core/utils/logger.js +98 -0
- package/dist/core/utils/sql-expressions.d.ts.map +1 -0
- package/dist/core/utils/sql-expressions.js +73 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +29 -0
- package/dist/core/validators/filter-validator.d.ts.map +1 -0
- package/dist/core/validators/filter-validator.js +19 -0
- package/dist/core/validators/value-validator.d.ts.map +1 -0
- package/dist/core/validators/value-validator.js +47 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/types/base.d.ts.map +1 -0
- package/dist/types/base.js +1 -0
- package/dist/types/clickhouse-types.d.ts.map +1 -0
- package/dist/types/clickhouse-types.js +1 -0
- package/dist/types/filters.d.ts.map +1 -0
- package/dist/types/filters.js +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/core/utils/logger.ts"],"names":[],"mappings":"AAAA,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;CAClB;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;CAmC9B;AAED,eAAO,MAAM,MAAM,QAAuB,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
class Logger {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.level = 'info';
|
|
4
|
+
this.enabled = true;
|
|
5
|
+
this.querySubscribers = new Map();
|
|
6
|
+
}
|
|
7
|
+
static getInstance() {
|
|
8
|
+
if (!Logger.instance) {
|
|
9
|
+
Logger.instance = new Logger();
|
|
10
|
+
}
|
|
11
|
+
return Logger.instance;
|
|
12
|
+
}
|
|
13
|
+
configure(options) {
|
|
14
|
+
if (options.level)
|
|
15
|
+
this.level = options.level;
|
|
16
|
+
if (options.enabled !== undefined)
|
|
17
|
+
this.enabled = options.enabled;
|
|
18
|
+
if (options.onQueryLog)
|
|
19
|
+
this.onQueryLog = options.onQueryLog;
|
|
20
|
+
}
|
|
21
|
+
subscribeToQuery(queryId, callback) {
|
|
22
|
+
if (!this.querySubscribers.has(queryId)) {
|
|
23
|
+
this.querySubscribers.set(queryId, []);
|
|
24
|
+
}
|
|
25
|
+
this.querySubscribers.get(queryId).push(callback);
|
|
26
|
+
return () => {
|
|
27
|
+
const subscribers = this.querySubscribers.get(queryId);
|
|
28
|
+
if (subscribers) {
|
|
29
|
+
const index = subscribers.indexOf(callback);
|
|
30
|
+
if (index > -1) {
|
|
31
|
+
subscribers.splice(index, 1);
|
|
32
|
+
}
|
|
33
|
+
if (subscribers.length === 0) {
|
|
34
|
+
this.querySubscribers.delete(queryId);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
shouldLog(level) {
|
|
40
|
+
if (!this.enabled)
|
|
41
|
+
return false;
|
|
42
|
+
const levels = ['debug', 'info', 'warn', 'error'];
|
|
43
|
+
return levels.indexOf(level) >= levels.indexOf(this.level);
|
|
44
|
+
}
|
|
45
|
+
debug(message, ...args) {
|
|
46
|
+
if (this.shouldLog('debug')) {
|
|
47
|
+
console.debug(`[HypeQuery Debug] ${message}`, ...args);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
info(message, ...args) {
|
|
51
|
+
if (this.shouldLog('info')) {
|
|
52
|
+
console.info(`[HypeQuery Info] ${message}`, ...args);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
warn(message, ...args) {
|
|
56
|
+
if (this.shouldLog('warn')) {
|
|
57
|
+
console.warn(`[HypeQuery Warn] ${message}`, ...args);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
error(message, ...args) {
|
|
61
|
+
if (this.shouldLog('error')) {
|
|
62
|
+
console.error(`[HypeQuery Error] ${message}`, ...args);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
logQuery(log) {
|
|
66
|
+
if (this.onQueryLog) {
|
|
67
|
+
this.onQueryLog(log);
|
|
68
|
+
}
|
|
69
|
+
if (log.queryId) {
|
|
70
|
+
const subscribers = this.querySubscribers.get(log.queryId);
|
|
71
|
+
if (subscribers) {
|
|
72
|
+
subscribers.forEach(callback => callback(log));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!this.enabled)
|
|
76
|
+
return;
|
|
77
|
+
const { query, parameters, duration, status, error, rowCount } = log;
|
|
78
|
+
const message = `Query ${status}: ${query}`;
|
|
79
|
+
const details = {
|
|
80
|
+
parameters,
|
|
81
|
+
duration: duration ? `${duration}ms` : undefined,
|
|
82
|
+
rowCount,
|
|
83
|
+
error: error?.message
|
|
84
|
+
};
|
|
85
|
+
switch (status) {
|
|
86
|
+
case 'started':
|
|
87
|
+
this.debug(message, details);
|
|
88
|
+
break;
|
|
89
|
+
case 'completed':
|
|
90
|
+
this.info(message, details);
|
|
91
|
+
break;
|
|
92
|
+
case 'error':
|
|
93
|
+
this.error(message, details);
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export const logger = Logger.getInstance();
|
|
@@ -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;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,IAAI,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,MAAM,EAAE,oBAAoB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAK9C;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAMnE;AAID;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,iBAAiB,CAI3F;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,iBAAiB,CAI/G;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,iBAAiB,CAIpH;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,iBAAiB,CAK7K"}
|
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates an aliased SQL expression for use in SELECT clauses
|
|
14
|
+
* @param sql The SQL expression string
|
|
15
|
+
* @param alias The alias to use for the expression
|
|
16
|
+
* @returns An AliasedExpression object
|
|
17
|
+
*/
|
|
18
|
+
export function rawAs(sql, alias) {
|
|
19
|
+
return {
|
|
20
|
+
__type: 'aliased_expression',
|
|
21
|
+
alias,
|
|
22
|
+
toSql: () => `${sql} AS ${alias}`
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// Helper for common ClickHouse functions
|
|
26
|
+
/**
|
|
27
|
+
* Converts a value to DateTime format
|
|
28
|
+
* @param field The field or expression to convert
|
|
29
|
+
* @param alias Optional alias for the result
|
|
30
|
+
* @returns SQL expression or aliased expression
|
|
31
|
+
*/
|
|
32
|
+
export function toDateTime(field, alias) {
|
|
33
|
+
return alias
|
|
34
|
+
? rawAs(`toDateTime(${field})`, alias)
|
|
35
|
+
: raw(`toDateTime(${field})`);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Formats a DateTime value using the specified format
|
|
39
|
+
* @param field The field or expression to format
|
|
40
|
+
* @param format The date format string
|
|
41
|
+
* @param alias Optional alias for the result
|
|
42
|
+
* @returns SQL expression or aliased expression
|
|
43
|
+
*/
|
|
44
|
+
export function formatDateTime(field, format, alias) {
|
|
45
|
+
return alias
|
|
46
|
+
? rawAs(`formatDateTime(${field}, '${format}')`, alias)
|
|
47
|
+
: raw(`formatDateTime(${field}, '${format}')`);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Truncates a date/time value to the start of the specified interval
|
|
51
|
+
* @param field The field to truncate
|
|
52
|
+
* @param interval The interval (e.g., '1 day', '15 minute')
|
|
53
|
+
* @param alias Optional alias for the result
|
|
54
|
+
* @returns SQL expression or aliased expression
|
|
55
|
+
*/
|
|
56
|
+
export function toStartOfInterval(field, interval, alias) {
|
|
57
|
+
return alias
|
|
58
|
+
? rawAs(`toStartOfInterval(${field}, INTERVAL ${interval})`, alias)
|
|
59
|
+
: raw(`toStartOfInterval(${field}, INTERVAL ${interval})`);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Extracts the specified part from a date/time value
|
|
63
|
+
* @param part The part to extract (year, month, day, etc.)
|
|
64
|
+
* @param field The field to extract from
|
|
65
|
+
* @param alias Optional alias for the result
|
|
66
|
+
* @returns SQL expression or aliased expression
|
|
67
|
+
*/
|
|
68
|
+
export function datePart(part, field, alias) {
|
|
69
|
+
const functionName = `to${part.charAt(0).toUpperCase() + part.slice(1)}`;
|
|
70
|
+
return alias
|
|
71
|
+
? rawAs(`${functionName}(${field})`, alias)
|
|
72
|
+
: raw(`${functionName}(${field})`);
|
|
73
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAa9C;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAavE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export function escapeValue(value) {
|
|
2
|
+
if (typeof value === 'boolean') {
|
|
3
|
+
return value ? 'true' : 'false';
|
|
4
|
+
}
|
|
5
|
+
else if (typeof value === 'number') {
|
|
6
|
+
return value.toString();
|
|
7
|
+
}
|
|
8
|
+
else if (typeof value === 'string') {
|
|
9
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
10
|
+
}
|
|
11
|
+
else if (value instanceof Date) {
|
|
12
|
+
return `'${value.toISOString()}'`;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return `'${JSON.stringify(value)}'`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function substituteParameters(sql, params) {
|
|
19
|
+
const parts = sql.split('?');
|
|
20
|
+
if (parts.length - 1 !== params.length) {
|
|
21
|
+
throw new Error(`Mismatch between placeholders and parameters. Found ${parts.length - 1} placeholders but ${params.length} parameters.`);
|
|
22
|
+
}
|
|
23
|
+
let substitutedSql = '';
|
|
24
|
+
for (let i = 0; i < params.length; i++) {
|
|
25
|
+
substitutedSql += parts[i] + escapeValue(params[i]);
|
|
26
|
+
}
|
|
27
|
+
substitutedSql += parts[parts.length - 1];
|
|
28
|
+
return substitutedSql;
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-validator.d.ts","sourceRoot":"","sources":["../../../src/core/validators/filter-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG/E,qBAAa,eAAe;IAC1B,MAAM,CAAC,uBAAuB,CAAC,CAAC,GAAG,GAAG,EACpC,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAClC,UAAU,CAAC,EAAE,UAAU,EACvB,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO,GACpC,IAAI;IAgBP,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;CAGrD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ValueValidator } from './value-validator';
|
|
2
|
+
export class FilterValidator {
|
|
3
|
+
static validateFilterCondition(condition, columnType, options = {}) {
|
|
4
|
+
const { column, operator, value } = condition;
|
|
5
|
+
const columnName = String(column);
|
|
6
|
+
// Validate value is not null/undefined unless explicitly allowed
|
|
7
|
+
if (!options.allowNull && (value === null || value === undefined)) {
|
|
8
|
+
throw new Error(`Filter value for column '${columnName}' cannot be null/undefined`);
|
|
9
|
+
}
|
|
10
|
+
// Skip type validation if no columnType provided (e.g., for joined columns)
|
|
11
|
+
if (!columnType)
|
|
12
|
+
return;
|
|
13
|
+
// Delegate to value validator for type checking
|
|
14
|
+
ValueValidator.validateFilterValue(columnType, operator, value, columnName);
|
|
15
|
+
}
|
|
16
|
+
static validateJoinedColumn(column) {
|
|
17
|
+
return column.includes('.');
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-validator.d.ts","sourceRoot":"","sources":["../../../src/core/validators/value-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzD,qBAAa,cAAc;IACzB,MAAM,CAAC,mBAAmB,CACxB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,GAAG,EACV,UAAU,EAAE,MAAM,GACjB,IAAI;IAqBP,OAAO,CAAC,MAAM,CAAC,mBAAmB;CA4BnC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export class ValueValidator {
|
|
2
|
+
static validateFilterValue(columnType, operator, value, columnName) {
|
|
3
|
+
if (operator === 'in' || operator === 'notIn') {
|
|
4
|
+
if (!Array.isArray(value)) {
|
|
5
|
+
throw new Error(`Operator '${operator}' requires an array value`);
|
|
6
|
+
}
|
|
7
|
+
value.forEach((v) => this.validateSingleValue(columnType, v, columnName));
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (operator === 'between') {
|
|
11
|
+
if (!Array.isArray(value) || value.length !== 2) {
|
|
12
|
+
throw new Error(`Operator 'between' requires an array with exactly two values`);
|
|
13
|
+
}
|
|
14
|
+
value.forEach((v) => this.validateSingleValue(columnType, v, columnName));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if ((operator === 'like' || operator === 'notLike') && typeof value !== 'string') {
|
|
18
|
+
throw new Error(`Operator '${operator}' requires a string value`);
|
|
19
|
+
}
|
|
20
|
+
this.validateSingleValue(columnType, value, columnName);
|
|
21
|
+
}
|
|
22
|
+
static validateSingleValue(columnType, value, columnName) {
|
|
23
|
+
if (value === null)
|
|
24
|
+
return;
|
|
25
|
+
switch (columnType) {
|
|
26
|
+
case 'Date':
|
|
27
|
+
if (!(value instanceof Date) && typeof value !== 'string') {
|
|
28
|
+
throw new Error(`Invalid date value for column '${columnName}'`);
|
|
29
|
+
}
|
|
30
|
+
break;
|
|
31
|
+
case 'Int32':
|
|
32
|
+
case 'Int64':
|
|
33
|
+
case 'Float64':
|
|
34
|
+
if (typeof value !== 'number') {
|
|
35
|
+
throw new Error(`Invalid numeric value for column '${columnName}'`);
|
|
36
|
+
}
|
|
37
|
+
break;
|
|
38
|
+
case 'String':
|
|
39
|
+
if (typeof value !== 'string') {
|
|
40
|
+
throw new Error(`Invalid string value for column '${columnName}'`);
|
|
41
|
+
}
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main ClickHouse connection class
|
|
3
|
+
*/
|
|
4
|
+
export declare class ClickHouseConnection {
|
|
5
|
+
static client: any;
|
|
6
|
+
static config: any;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Initialize the connection with configuration
|
|
10
|
+
*/
|
|
11
|
+
static initialize(config: {
|
|
12
|
+
host: string;
|
|
13
|
+
username: string;
|
|
14
|
+
password: string;
|
|
15
|
+
database: string;
|
|
16
|
+
}): typeof ClickHouseConnection;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Get the ClickHouse client instance
|
|
20
|
+
*/
|
|
21
|
+
static getClient(): any;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Get the current configuration
|
|
25
|
+
*/
|
|
26
|
+
static getConfig(): any;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Generates TypeScript type definitions from ClickHouse schema
|
|
31
|
+
* @param outputPath - Path where the type definitions will be written
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateTypes(outputPath: string): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,YAAY,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,eAAe,EACf,QAAQ,EACR,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,GAAG,EACH,KAAK,EACL,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACT,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,aAAa,EACb,iBAAiB,EAClB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/types/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clickhouse-types.d.ts","sourceRoot":"","sources":["../../src/types/clickhouse-types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,iBAAiB,GACzB,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAC1D,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GACzB,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GACvD,WAAW,MAAM,KAAK,MAAM,GAAG,CAAC;AAGpC,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GAAG,QAAQ,GACjB,UAAU,GACV,cAAc,MAAM,GAAG,GACvB,cAAc,MAAM,MAAM,MAAM,IAAI,CAAC;AAGzC,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,eAAe,MAAM,GAAG,GACxB,MAAM,CAAC;AAGX,MAAM,MAAM,eAAe,GAAG,SAAS,kBAAkB,GAAG,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,YAAY,kBAAkB,GAAG,CAAC;AACnE,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,gBAAgB,GAAG,CAAC;AAC7E,MAAM,MAAM,aAAa,GAAG,OAAO,kBAAkB,KAAK,kBAAkB,GAAG,CAAC;AAGhF,MAAM,MAAM,kBAAkB,GAC1B,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,CAAC;AAGrB,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,eAAe,GACf,kBAAkB,GAClB,wBAAwB,GACxB,aAAa,CAAC;AAGlB,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,cAAc,IACtD,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,CAAC,SAAS,eAAe,GAAG,MAAM,GAClC,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,CAAC,SAAS,kBAAkB,GAAG,IAAI,GACnC,CAAC,SAAS,gBAAgB,GAAG,MAAM,GACnC,CAAC,SAAS,SAAS,MAAM,CAAC,SAAS,kBAAkB,GAAG,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GACxF,CAAC,SAAS,YAAY,MAAM,CAAC,SAAS,kBAAkB,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,GAC3F,CAAC,SAAS,kBAAkB,MAAM,CAAC,SAAS,gBAAgB,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,GACxF,CAAC,SAAS,OAAO,MAAM,CAAC,SAAS,kBAAkB,KAAK,MAAM,CAAC,SAAS,kBAAkB,GAAG,GAC7F,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,GACnD,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/types/filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hypequery/clickhouse",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "ClickHouse typescript query builder",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "npm run build:main && npm run build:cli && npm run fix-typedefs && npm run verify-build || npm run diagnose-ci",
|
|
10
|
+
"build:main": "tsc",
|
|
11
|
+
"build:cli": "node scripts/ensure-core-files.js && node scripts/create-bin-file.js && node scripts/handle-cli-files.js",
|
|
12
|
+
"build:ci": "npm run build:main && node scripts/create-bin-file.js && node scripts/ensure-core-files.js && node scripts/handle-cli-files.js && npm run fix-typedefs && npm run verify-build || npm run diagnose-ci",
|
|
13
|
+
"fix-typedefs": "node scripts/fix-typedefs.js",
|
|
14
|
+
"verify-build": "node scripts/verify-build.js",
|
|
15
|
+
"diagnose-ci": "node scripts/diagnose-ci.js",
|
|
16
|
+
"dev": "tsc --watch",
|
|
17
|
+
"test": "npm run test:unit",
|
|
18
|
+
"test:unit": "jest --testPathIgnorePatterns='integration'",
|
|
19
|
+
"test:watch": "jest --testPathIgnorePatterns='integration' --watch",
|
|
20
|
+
"test:coverage": "jest --coverage",
|
|
21
|
+
"test:cli": "node scripts/test-cli-integration.js",
|
|
22
|
+
"lint": "eslint src/**/*.ts",
|
|
23
|
+
"semantic-release": "npx semantic-release",
|
|
24
|
+
"release": "npx semantic-release --extends ./.releaserc.cjs --no-ci"
|
|
25
|
+
},
|
|
26
|
+
"bin": {
|
|
27
|
+
"hypequery-generate-types": "./dist/cli/bin.js"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist",
|
|
31
|
+
"README-CLI.md"
|
|
32
|
+
],
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@clickhouse/client-web": "^0.2.0",
|
|
35
|
+
"dotenv": "^16.0.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
39
|
+
"@semantic-release/commit-analyzer": "^11.1.0",
|
|
40
|
+
"@semantic-release/git": "^10.0.1",
|
|
41
|
+
"@semantic-release/github": "^9.2.6",
|
|
42
|
+
"@semantic-release/npm": "^11.0.2",
|
|
43
|
+
"@semantic-release/release-notes-generator": "^12.1.0",
|
|
44
|
+
"@types/jest": "^29.5.11",
|
|
45
|
+
"@types/node": "^18.19.80",
|
|
46
|
+
"jest": "^29.7.0",
|
|
47
|
+
"semantic-release": "^23.0.2",
|
|
48
|
+
"ts-jest": "^29.1.1",
|
|
49
|
+
"ts-node": "^10.9.0",
|
|
50
|
+
"typescript": "^5.7.3"
|
|
51
|
+
},
|
|
52
|
+
"ts-node": {
|
|
53
|
+
"esm": true,
|
|
54
|
+
"experimentalSpecifiers": true
|
|
55
|
+
},
|
|
56
|
+
"repository": {
|
|
57
|
+
"type": "git",
|
|
58
|
+
"url": "https://github.com/lureilly1/hypequery.git"
|
|
59
|
+
},
|
|
60
|
+
"homepage": "https://hypequery.dev",
|
|
61
|
+
"bugs": {
|
|
62
|
+
"url": "https://github.com/lureilly1/hypequery/issues"
|
|
63
|
+
},
|
|
64
|
+
"publishConfig": {
|
|
65
|
+
"access": "public"
|
|
66
|
+
}
|
|
67
|
+
}
|