@visactor/vquery 0.2.2 → 0.2.5
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/dist/cjs/adapters/index.d.ts +1 -0
- package/dist/cjs/adapters/query-adapter/duckdbNodeAdapter.d.ts +14 -0
- package/dist/cjs/adapters/query-adapter/duckdbWebAdapter.d.ts +14 -0
- package/dist/cjs/adapters/storage-adapter/index.d.ts +2 -0
- package/dist/{db/indexedDb.d.ts → cjs/adapters/storage-adapter/indexeddbAdapter.d.ts} +5 -5
- package/dist/cjs/adapters/storage-adapter/inmemoryAdapter.d.ts +22 -0
- package/dist/cjs/browser.d.ts +5 -0
- package/dist/{dataset → cjs/dataset}/dataset.d.ts +4 -5
- package/dist/{index.cjs → cjs/node.cjs} +134 -181
- package/dist/{index.d.ts → cjs/node.d.ts} +1 -1
- package/dist/{sql-builder → cjs/sql-builder}/utils.d.ts +1 -1
- package/dist/cjs/types/adapters/QueryAdapter.d.ts +11 -0
- package/dist/cjs/types/adapters/StorageAdapter.d.ts +17 -0
- package/dist/cjs/types/adapters/index.d.ts +2 -0
- package/dist/{types/QueryDSL → cjs/types/dsl}/OrderBy.d.ts +1 -1
- package/dist/{types/QueryDSL → cjs/types/dsl}/Select.d.ts +1 -1
- package/dist/{types → cjs/types}/index.d.ts +2 -1
- package/dist/{vquery.d.ts → cjs/vquery-browser.d.ts} +4 -4
- package/dist/cjs/vquery-node.d.ts +21 -0
- package/dist/esm/adapters/index.d.ts +1 -0
- package/dist/esm/adapters/query-adapter/duckdbNodeAdapter.d.ts +14 -0
- package/dist/esm/adapters/query-adapter/duckdbWebAdapter.d.ts +14 -0
- package/dist/esm/adapters/storage-adapter/index.d.ts +2 -0
- package/dist/esm/adapters/storage-adapter/indexeddbAdapter.d.ts +21 -0
- package/dist/esm/adapters/storage-adapter/inmemoryAdapter.d.ts +22 -0
- package/dist/esm/browser.d.ts +5 -0
- package/dist/{index.js → esm/browser.js} +177 -176
- package/dist/esm/data-source-builder/dataSourceBuilder.d.ts +16 -0
- package/dist/esm/data-source-builder/index.d.ts +1 -0
- package/dist/esm/dataset/dataset.d.ts +30 -0
- package/dist/esm/dataset/index.d.ts +2 -0
- package/dist/esm/node.d.ts +5 -0
- package/dist/esm/sql-builder/builders/groupBy.d.ts +2 -0
- package/dist/esm/sql-builder/builders/index.d.ts +3 -0
- package/dist/esm/sql-builder/builders/limit.d.ts +2 -0
- package/dist/esm/sql-builder/builders/where.d.ts +3 -0
- package/dist/esm/sql-builder/compile/index.d.ts +1 -0
- package/dist/esm/sql-builder/compile/inlineParameters.d.ts +1 -0
- package/dist/esm/sql-builder/dialect/index.d.ts +1 -0
- package/dist/esm/sql-builder/dialect/postgresDialect.d.ts +11 -0
- package/dist/esm/sql-builder/dslToSQL.d.ts +2 -0
- package/dist/esm/sql-builder/index.d.ts +1 -0
- package/dist/esm/sql-builder/utils.d.ts +8 -0
- package/dist/esm/types/DataSet.d.ts +11 -0
- package/dist/esm/types/DataSource.d.ts +11 -0
- package/dist/esm/types/QueryResult.d.ts +1 -0
- package/dist/esm/types/adapters/QueryAdapter.d.ts +11 -0
- package/dist/esm/types/adapters/StorageAdapter.d.ts +17 -0
- package/dist/esm/types/adapters/index.d.ts +2 -0
- package/dist/esm/types/dsl/GroupBy.d.ts +1 -0
- package/dist/esm/types/dsl/OrderBy.d.ts +4 -0
- package/dist/esm/types/dsl/QueryDSL.d.ts +12 -0
- package/dist/esm/types/dsl/Select.d.ts +7 -0
- package/dist/esm/types/dsl/Where.d.ts +24 -0
- package/dist/esm/types/dsl/demo.d.ts +1 -0
- package/dist/esm/types/dsl/index.d.ts +5 -0
- package/dist/esm/types/index.d.ts +5 -0
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/url.d.ts +3 -0
- package/dist/esm/vquery-browser.d.ts +21 -0
- package/dist/esm/vquery-node.d.ts +21 -0
- package/package.json +23 -17
- package/dist/db/duckDb.d.ts +0 -35
- /package/dist/{data-source-builder → cjs/data-source-builder}/dataSourceBuilder.d.ts +0 -0
- /package/dist/{data-source-builder → cjs/data-source-builder}/index.d.ts +0 -0
- /package/dist/{dataset → cjs/dataset}/index.d.ts +0 -0
- /package/dist/{sql-builder → cjs/sql-builder}/builders/groupBy.d.ts +0 -0
- /package/dist/{sql-builder → cjs/sql-builder}/builders/index.d.ts +0 -0
- /package/dist/{sql-builder → cjs/sql-builder}/builders/limit.d.ts +0 -0
- /package/dist/{sql-builder → cjs/sql-builder}/builders/where.d.ts +0 -0
- /package/dist/{sql-builder → cjs/sql-builder}/compile/index.d.ts +0 -0
- /package/dist/{sql-builder → cjs/sql-builder}/compile/inlineParameters.d.ts +0 -0
- /package/dist/{sql-builder → cjs/sql-builder}/dialect/index.d.ts +0 -0
- /package/dist/{sql-builder → cjs/sql-builder}/dialect/postgresDialect.d.ts +0 -0
- /package/dist/{sql-builder → cjs/sql-builder}/dslToSQL.d.ts +0 -0
- /package/dist/{sql-builder → cjs/sql-builder}/index.d.ts +0 -0
- /package/dist/{types → cjs/types}/DataSet.d.ts +0 -0
- /package/dist/{types → cjs/types}/DataSource.d.ts +0 -0
- /package/dist/{types → cjs/types}/QueryResult.d.ts +0 -0
- /package/dist/{types/QueryDSL → cjs/types/dsl}/GroupBy.d.ts +0 -0
- /package/dist/{types/QueryDSL → cjs/types/dsl}/QueryDSL.d.ts +0 -0
- /package/dist/{types/QueryDSL → cjs/types/dsl}/Where.d.ts +0 -0
- /package/dist/{types/QueryDSL → cjs/types/dsl}/demo.d.ts +0 -0
- /package/dist/{types/QueryDSL → cjs/types/dsl}/index.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/index.d.ts +0 -0
- /package/dist/{utils → cjs/utils}/url.d.ts +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type TidyDatum = Record<string, number | string | null | boolean | undefined>;
|
|
2
|
+
export type DatasetSourceType = 'csv' | 'json' | 'xlsx' | 'parquet';
|
|
3
|
+
export type DatasetSourceValue = string | ArrayBuffer | Blob | TidyDatum[];
|
|
4
|
+
export interface DatasetSource {
|
|
5
|
+
type: DatasetSourceType;
|
|
6
|
+
blob: Blob;
|
|
7
|
+
}
|
|
8
|
+
export interface RawDatasetSource {
|
|
9
|
+
type: DatasetSourceType;
|
|
10
|
+
rawDataset: DatasetSourceValue;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type QueryResult = any;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { QueryResult } from '../QueryResult';
|
|
2
|
+
export interface QueryAdapter {
|
|
3
|
+
open: () => Promise<void>;
|
|
4
|
+
close: () => Promise<void>;
|
|
5
|
+
writeFile: <T extends Blob>(fileName: string, source: T) => Promise<void>;
|
|
6
|
+
getSchema: (fileName: string) => Promise<QueryResult>;
|
|
7
|
+
query: (sql: string) => Promise<{
|
|
8
|
+
dataset: any[];
|
|
9
|
+
table: any;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DatasetSchema } from '../DataSet';
|
|
2
|
+
import { DatasetSource } from '../DataSource';
|
|
3
|
+
export interface StorageAdapter {
|
|
4
|
+
open: () => Promise<void>;
|
|
5
|
+
close: () => Promise<void>;
|
|
6
|
+
writeDataset: (datasetId: string, datasetSchema: DatasetSchema, datasetSource?: DatasetSource) => Promise<void>;
|
|
7
|
+
readDataset: (datasetId: string) => Promise<{
|
|
8
|
+
datasetSchema: DatasetSchema;
|
|
9
|
+
datasetSource?: DatasetSource;
|
|
10
|
+
} | null>;
|
|
11
|
+
deleteDataset: (datasetId: string) => Promise<void>;
|
|
12
|
+
listDatasets: () => Promise<{
|
|
13
|
+
datasetId: string;
|
|
14
|
+
datasetSchema: DatasetSchema;
|
|
15
|
+
datasetSource?: DatasetSource;
|
|
16
|
+
}[]>;
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type GroupBy<T> = Array<keyof T>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GroupBy } from './GroupBy';
|
|
2
|
+
import { OrderBy } from './OrderBy';
|
|
3
|
+
import { Select } from './Select';
|
|
4
|
+
import { Where } from './Where';
|
|
5
|
+
export interface QueryDSL<Table> {
|
|
6
|
+
select: Select<Table>;
|
|
7
|
+
where?: Where<Table>;
|
|
8
|
+
groupBy?: GroupBy<Table>;
|
|
9
|
+
orderBy?: OrderBy<Table>;
|
|
10
|
+
limit?: number;
|
|
11
|
+
}
|
|
12
|
+
export type VQueryDSL<Table = Record<string, unknown>> = QueryDSL<Table>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type Where<T> = WhereGroup<T>;
|
|
2
|
+
export type WhereGroup<T> = {
|
|
3
|
+
op: 'and' | 'or';
|
|
4
|
+
conditions: Array<WhereClause<T>>;
|
|
5
|
+
};
|
|
6
|
+
export type WhereClause<T> = WhereLeaf<T> | WhereGroup<T>;
|
|
7
|
+
export type WhereLeaf<T> = {
|
|
8
|
+
[K in keyof T]: {
|
|
9
|
+
[O in Operator]: {
|
|
10
|
+
field: K;
|
|
11
|
+
op: O;
|
|
12
|
+
} & (O extends 'is null' | 'is not null' ? {
|
|
13
|
+
value?: never;
|
|
14
|
+
} : O extends 'in' | 'not in' ? {
|
|
15
|
+
value: T[K] | T[K][];
|
|
16
|
+
} : O extends 'between' | 'not between' ? {
|
|
17
|
+
value: [T[K], T[K]];
|
|
18
|
+
} : {
|
|
19
|
+
value: T[K];
|
|
20
|
+
});
|
|
21
|
+
}[Operator];
|
|
22
|
+
}[keyof T];
|
|
23
|
+
type Operator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'like' | 'not like' | 'ilike' | 'not ilike' | 'in' | 'not in' | 'between' | 'not between' | 'is null' | 'is not null';
|
|
24
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { isUrl, isHttpUrl, isBase64Url } from './url';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Dataset } from './dataset/dataset';
|
|
2
|
+
import { RawDatasetSource, DatasetColumn } from './types';
|
|
3
|
+
export declare class VQuery {
|
|
4
|
+
private queryAdapter;
|
|
5
|
+
private storageAdapter;
|
|
6
|
+
private isInitialized;
|
|
7
|
+
constructor();
|
|
8
|
+
private checkInitialized;
|
|
9
|
+
private checkDatasetExists;
|
|
10
|
+
createDataset(datasetId: string, columns?: DatasetColumn[], rawDatasetSource?: RawDatasetSource): Promise<void>;
|
|
11
|
+
updateDatasetSource(datasetId: string, columns?: DatasetColumn[], rawDatasetSource?: RawDatasetSource): Promise<void>;
|
|
12
|
+
dropDataset(datasetId: string): Promise<void>;
|
|
13
|
+
connectDataset(datasetId: string, temporaryColumns?: DatasetColumn[], temporaryRawDatasetSource?: RawDatasetSource): Promise<Dataset>;
|
|
14
|
+
hasDataset(datasetId: string): Promise<boolean>;
|
|
15
|
+
listDatasets(): Promise<{
|
|
16
|
+
datasetId: string;
|
|
17
|
+
datasetSchema: import("./types").DatasetSchema;
|
|
18
|
+
datasetSource?: import("./types").DatasetSource;
|
|
19
|
+
}[]>;
|
|
20
|
+
close(): Promise<void>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Dataset } from './dataset/dataset';
|
|
2
|
+
import { RawDatasetSource, DatasetColumn } from './types';
|
|
3
|
+
export declare class VQuery {
|
|
4
|
+
private queryAdapter;
|
|
5
|
+
private storageAdapter;
|
|
6
|
+
private isInitialized;
|
|
7
|
+
constructor();
|
|
8
|
+
private checkInitialized;
|
|
9
|
+
private checkDatasetExists;
|
|
10
|
+
createDataset(datasetId: string, columns?: DatasetColumn[], rawDatasetSource?: RawDatasetSource): Promise<void>;
|
|
11
|
+
updateDatasetSource(datasetId: string, columns?: DatasetColumn[], rawDatasetSource?: RawDatasetSource): Promise<void>;
|
|
12
|
+
dropDataset(datasetId: string): Promise<void>;
|
|
13
|
+
connectDataset(datasetId: string, temporaryColumns?: DatasetColumn[], temporaryRawDatasetSource?: RawDatasetSource): Promise<Dataset>;
|
|
14
|
+
hasDataset(datasetId: string): Promise<boolean>;
|
|
15
|
+
listDatasets(): Promise<{
|
|
16
|
+
datasetId: string;
|
|
17
|
+
datasetSchema: import("./types").DatasetSchema;
|
|
18
|
+
datasetSource?: import("./types").DatasetSource;
|
|
19
|
+
}[]>;
|
|
20
|
+
close(): Promise<void>;
|
|
21
|
+
}
|
package/package.json
CHANGED
|
@@ -1,33 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vquery",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
"require": {
|
|
8
|
+
"types": "./dist/cjs/node.d.ts",
|
|
9
|
+
"default": "./dist/cjs/node.cjs"
|
|
10
|
+
},
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/esm/browser.d.js",
|
|
13
|
+
"default": "./dist/esm/browser.js"
|
|
14
|
+
}
|
|
10
15
|
}
|
|
11
16
|
},
|
|
12
|
-
"main": "./dist/
|
|
13
|
-
"types": "./dist/
|
|
17
|
+
"main": "./dist/cjs/node.cjs",
|
|
18
|
+
"types": "./dist/cjs/node.d.ts",
|
|
14
19
|
"files": [
|
|
15
20
|
"dist"
|
|
16
21
|
],
|
|
17
22
|
"dependencies": {
|
|
18
23
|
"@duckdb/duckdb-wasm": "1.30.0",
|
|
19
|
-
"kysely": "
|
|
24
|
+
"kysely": "0.27.6",
|
|
25
|
+
"web-worker": "1.5.0"
|
|
20
26
|
},
|
|
21
27
|
"devDependencies": {
|
|
22
|
-
"@eslint/js": "
|
|
23
|
-
"@rslib/core": "0.18.
|
|
24
|
-
"@rstest/core": "0.
|
|
25
|
-
"@types/node": "
|
|
26
|
-
"@rstest/coverage-istanbul": "0.0
|
|
27
|
-
"eslint": "
|
|
28
|
-
"globals": "
|
|
29
|
-
"typescript": "
|
|
30
|
-
"typescript-eslint": "
|
|
28
|
+
"@eslint/js": "9.39.0",
|
|
29
|
+
"@rslib/core": "0.18.3",
|
|
30
|
+
"@rstest/core": "0.7.0",
|
|
31
|
+
"@types/node": "24.10.1",
|
|
32
|
+
"@rstest/coverage-istanbul": "0.1.0",
|
|
33
|
+
"eslint": "9.39.0",
|
|
34
|
+
"globals": "16.4.0",
|
|
35
|
+
"typescript": "5.9.3",
|
|
36
|
+
"typescript-eslint": "8.46.2"
|
|
31
37
|
},
|
|
32
38
|
"scripts": {
|
|
33
39
|
"build": "rslib build",
|
|
@@ -35,7 +41,7 @@
|
|
|
35
41
|
"lint": "eslint .",
|
|
36
42
|
"test": "rstest",
|
|
37
43
|
"test:update": "rstest --update",
|
|
38
|
-
"test:coverage": "rstest --coverage
|
|
44
|
+
"test:coverage": "rstest --coverage; open ./coverage/index.html",
|
|
39
45
|
"type-check": "tsc --noEmit"
|
|
40
46
|
}
|
|
41
47
|
}
|
package/dist/db/duckDb.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { QueryResult } from '../types/DataSet';
|
|
2
|
-
export declare class DuckDB {
|
|
3
|
-
private db;
|
|
4
|
-
private connection;
|
|
5
|
-
constructor();
|
|
6
|
-
/**
|
|
7
|
-
* @description 初始化 DuckDB 实例
|
|
8
|
-
*/
|
|
9
|
-
init: () => Promise<void>;
|
|
10
|
-
/**
|
|
11
|
-
* @description 释放 DuckDB 实例
|
|
12
|
-
*/
|
|
13
|
-
close: () => Promise<void>;
|
|
14
|
-
/**
|
|
15
|
-
* 注册文件到 DuckDB 实例
|
|
16
|
-
* @param fileName 文件名
|
|
17
|
-
* @param source 文件内容
|
|
18
|
-
*/
|
|
19
|
-
writeFile: <T extends Blob>(fileName: string, source: T) => Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* @description 执行 SQL 查询
|
|
22
|
-
* @param sql SQL 语句
|
|
23
|
-
* @returns 查询结果
|
|
24
|
-
*/
|
|
25
|
-
query: (sql: string) => Promise<{
|
|
26
|
-
dataset: any[];
|
|
27
|
-
table: any;
|
|
28
|
-
}>;
|
|
29
|
-
/**
|
|
30
|
-
* @description 获取文件的 Schema
|
|
31
|
-
* @param fileName 文件名
|
|
32
|
-
* @returns 文件的 Schema
|
|
33
|
-
*/
|
|
34
|
-
getSchema: (fileName: string) => Promise<QueryResult>;
|
|
35
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|