@trafficbyintent/kysely-bigquery 2.0.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,77 @@
1
+ "use strict";
2
+ var _BigQueryDialect_instances, _BigQueryDialect_config, _BigQueryDialect_validateConfig;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BigQueryDialect = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const BigQueryAdapter_1 = require("./BigQueryAdapter");
7
+ const BigQueryCompiler_1 = require("./BigQueryCompiler");
8
+ const BigQueryDriver_1 = require("./BigQueryDriver");
9
+ const BigQueryIntrospector_1 = require("./BigQueryIntrospector");
10
+ /**
11
+ * BigQuery dialect for Kysely.
12
+ *
13
+ * This dialect allows you to use Kysely with Google BigQuery.
14
+ */
15
+ class BigQueryDialect {
16
+ constructor(config) {
17
+ _BigQueryDialect_instances.add(this);
18
+ _BigQueryDialect_config.set(this, void 0);
19
+ tslib_1.__classPrivateFieldSet(this, _BigQueryDialect_config, tslib_1.__classPrivateFieldGet(this, _BigQueryDialect_instances, "m", _BigQueryDialect_validateConfig).call(this, config !== null && config !== void 0 ? config : {}), "f");
20
+ }
21
+ /**
22
+ * Creates a BigQuery adapter for Kysely.
23
+ * @returns A new BigQueryAdapter instance
24
+ */
25
+ createAdapter() {
26
+ return new BigQueryAdapter_1.BigQueryAdapter();
27
+ }
28
+ /**
29
+ * Creates a BigQuery driver for database connections.
30
+ * @returns A new BigQueryDriver instance configured with the dialect settings
31
+ */
32
+ createDriver() {
33
+ return new BigQueryDriver_1.BigQueryDriver(tslib_1.__classPrivateFieldGet(this, _BigQueryDialect_config, "f"));
34
+ }
35
+ /**
36
+ * Creates a BigQuery query compiler for SQL generation.
37
+ * @returns A new BigQueryCompiler instance that translates Kysely queries to BigQuery SQL
38
+ */
39
+ createQueryCompiler() {
40
+ return new BigQueryCompiler_1.BigQueryCompiler(tslib_1.__classPrivateFieldGet(this, _BigQueryDialect_config, "f").defaultProject);
41
+ }
42
+ /**
43
+ * Creates a BigQuery database introspector for schema discovery.
44
+ * @param db - The Kysely database instance
45
+ * @returns A new BigQueryIntrospector instance for examining database schema
46
+ */
47
+ createIntrospector(db) {
48
+ return new BigQueryIntrospector_1.BigQueryIntrospector(db, tslib_1.__classPrivateFieldGet(this, _BigQueryDialect_config, "f"));
49
+ }
50
+ }
51
+ exports.BigQueryDialect = BigQueryDialect;
52
+ _BigQueryDialect_config = new WeakMap(), _BigQueryDialect_instances = new WeakSet(), _BigQueryDialect_validateConfig = function _BigQueryDialect_validateConfig(config) {
53
+ /* Validate mutually exclusive options */
54
+ if (config.options && config.bigquery) {
55
+ throw new Error('Cannot provide both "options" and "bigquery" in BigQueryDialectConfig. ' +
56
+ 'Use either "options" to create a new client or "bigquery" to use an existing instance.');
57
+ }
58
+ /* Validate BigQuery options if provided */
59
+ if (config.options) {
60
+ /* Ensure projectId is provided when using options */
61
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
62
+ if (!config.options.projectId && !process.env['GOOGLE_CLOUD_PROJECT']) {
63
+ throw new Error('BigQuery projectId is required. Provide it in options.projectId or set GOOGLE_CLOUD_PROJECT environment variable.');
64
+ }
65
+ }
66
+ /* Validate bigquery instance if provided */
67
+ if (config.bigquery) {
68
+ const instance = config.bigquery;
69
+ const hasQueryMethod = 'query' in instance && typeof instance.query === 'function';
70
+ const hasCreateQueryStreamMethod = 'createQueryStream' in instance && typeof instance.createQueryStream === 'function';
71
+ if (!hasQueryMethod || !hasCreateQueryStreamMethod) {
72
+ throw new Error('Invalid bigquery instance provided. It must have query() and createQueryStream() methods.');
73
+ }
74
+ }
75
+ return config;
76
+ };
77
+ //# sourceMappingURL=BigQueryDialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigQueryDialect.js","sourceRoot":"","sources":["../src/BigQueryDialect.ts"],"names":[],"mappings":";;;;;AAcA,uDAAoD;AACpD,yDAAsD;AACtD,qDAAkD;AAClD,iEAA8D;AAoD9D;;;;GAIG;AACH,MAAa,eAAe;IAG1B,YAAY,MAA8B;;QAFjC,0CAA+B;QAGtC,+BAAA,IAAI,2BAAW,+BAAA,IAAI,mEAAgB,MAApB,IAAI,EAAiB,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,MAAA,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,OAAO,IAAI,iCAAe,EAAE,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,OAAO,IAAI,+BAAc,CAAC,+BAAA,IAAI,+BAAQ,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,mBAAmB;QACjB,OAAO,IAAI,mCAAgB,CAAC,+BAAA,IAAI,+BAAQ,CAAC,cAAc,CAAC,CAAC;IAC3D,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,EAAmB;QACpC,OAAO,IAAI,2CAAoB,CAAC,EAAE,EAAE,+BAAA,IAAI,+BAAQ,CAAC,CAAC;IACpD,CAAC;CAsCF;AA5ED,0CA4EC;gKApCiB,MAA6B;IAC3C,yCAAyC;IACzC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,yEAAyE;YACvE,wFAAwF,CAC3F,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,qDAAqD;QACrD,0GAA0G;QAC1G,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,CAAE,OAAe,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,cAAc,GAAG,OAAO,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,UAAU,CAAC;QACnF,MAAM,0BAA0B,GAC9B,mBAAmB,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,iBAAiB,KAAK,UAAU,CAAC;QAEtF,IAAI,CAAC,cAAc,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type DatabaseConnection, type Driver } from 'kysely';
2
+ import { BigQueryConnection } from './BigQueryConnection';
3
+ import { type BigQueryDialectConfig } from './BigQueryDialect';
4
+ /**
5
+ * BigQuery driver implementation for Kysely.
6
+ *
7
+ * Manages connections to BigQuery.
8
+ */
9
+ export declare class BigQueryDriver implements Driver {
10
+ #private;
11
+ constructor(config: BigQueryDialectConfig);
12
+ init(): Promise<void>;
13
+ acquireConnection(): Promise<DatabaseConnection>;
14
+ beginTransaction(conn: BigQueryConnection): Promise<void>;
15
+ commitTransaction(conn: BigQueryConnection): Promise<void>;
16
+ rollbackTransaction(conn: BigQueryConnection): Promise<void>;
17
+ releaseConnection(_conn: BigQueryConnection): Promise<void>;
18
+ destroy(): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=BigQueryDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigQueryDriver.d.ts","sourceRoot":"","sources":["../src/BigQueryDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D;;;;GAIG;AACH,qBAAa,cAAe,YAAW,MAAM;;gBAG/B,MAAM,EAAE,qBAAqB;IAIzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAI1C,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGzB"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var _BigQueryDriver_config;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BigQueryDriver = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const BigQueryConnection_1 = require("./BigQueryConnection");
7
+ /**
8
+ * BigQuery driver implementation for Kysely.
9
+ *
10
+ * Manages connections to BigQuery.
11
+ */
12
+ class BigQueryDriver {
13
+ constructor(config) {
14
+ _BigQueryDriver_config.set(this, void 0);
15
+ tslib_1.__classPrivateFieldSet(this, _BigQueryDriver_config, config, "f");
16
+ }
17
+ init() {
18
+ return Promise.resolve();
19
+ }
20
+ acquireConnection() {
21
+ return Promise.resolve(new BigQueryConnection_1.BigQueryConnection(tslib_1.__classPrivateFieldGet(this, _BigQueryDriver_config, "f")));
22
+ }
23
+ beginTransaction(conn) {
24
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
25
+ return conn.beginTransaction();
26
+ });
27
+ }
28
+ commitTransaction(conn) {
29
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
30
+ return conn.commitTransaction();
31
+ });
32
+ }
33
+ rollbackTransaction(conn) {
34
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
35
+ return conn.rollbackTransaction();
36
+ });
37
+ }
38
+ releaseConnection(_conn) {
39
+ return Promise.resolve();
40
+ }
41
+ destroy() {
42
+ return Promise.resolve();
43
+ }
44
+ }
45
+ exports.BigQueryDriver = BigQueryDriver;
46
+ _BigQueryDriver_config = new WeakMap();
47
+ //# sourceMappingURL=BigQueryDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigQueryDriver.js","sourceRoot":"","sources":["../src/BigQueryDriver.ts"],"names":[],"mappings":";;;;;AAEA,6DAA0D;AAI1D;;;;GAIG;AACH,MAAa,cAAc;IAGzB,YAAY,MAA6B;QAFhC,yCAA+B;QAGtC,+BAAA,IAAI,0BAAW,MAAM,MAAA,CAAC;IACxB,CAAC;IAED,IAAI;QACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,iBAAiB;QACf,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,uCAAkB,CAAC,+BAAA,IAAI,8BAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEK,gBAAgB,CAAC,IAAwB;;YAC7C,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACjC,CAAC;KAAA;IAEK,iBAAiB,CAAC,IAAwB;;YAC9C,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClC,CAAC;KAAA;IAEK,mBAAmB,CAAC,IAAwB;;YAChD,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACpC,CAAC;KAAA;IAED,iBAAiB,CAAC,KAAyB;QACzC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAlCD,wCAkCC"}
@@ -0,0 +1,15 @@
1
+ import { type Kysely, type DatabaseIntrospector, type DatabaseMetadata, type DatabaseMetadataOptions, type SchemaMetadata, type TableMetadata } from 'kysely';
2
+ import { type BigQueryDialectConfig } from './BigQueryDialect';
3
+ /**
4
+ * Database introspector for BigQuery.
5
+ *
6
+ * Provides schema metadata by querying BigQuery's INFORMATION_SCHEMA.
7
+ */
8
+ export declare class BigQueryIntrospector implements DatabaseIntrospector {
9
+ #private;
10
+ constructor(db: Kysely<unknown>, config: BigQueryDialectConfig);
11
+ getSchemas(): Promise<SchemaMetadata[]>;
12
+ getTables(_options?: DatabaseMetadataOptions): Promise<TableMetadata[]>;
13
+ getMetadata(options?: DatabaseMetadataOptions): Promise<DatabaseMetadata>;
14
+ }
15
+ //# sourceMappingURL=BigQueryIntrospector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigQueryIntrospector.d.ts","sourceRoot":"","sources":["../src/BigQueryIntrospector.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM/D;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,oBAAoB;;gBAKnD,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,qBAAqB;IAuBxD,UAAU,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAUvC,SAAS,CACb,QAAQ,GAAE,uBAA6D,GACtE,OAAO,CAAC,aAAa,EAAE,CAAC;IA+CrB,WAAW,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAKhF"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var _BigQueryIntrospector_instances, _BigQueryIntrospector_db, _BigQueryIntrospector_config, _BigQueryIntrospector_client, _BigQueryIntrospector_resolveBigQueryClient;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BigQueryIntrospector = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const bigquery_1 = require("@google-cloud/bigquery");
7
+ const kysely_1 = require("kysely");
8
+ function freeze(obj) {
9
+ return Object.freeze(obj);
10
+ }
11
+ /**
12
+ * Database introspector for BigQuery.
13
+ *
14
+ * Provides schema metadata by querying BigQuery's INFORMATION_SCHEMA.
15
+ */
16
+ class BigQueryIntrospector {
17
+ constructor(db, config) {
18
+ _BigQueryIntrospector_instances.add(this);
19
+ _BigQueryIntrospector_db.set(this, void 0);
20
+ _BigQueryIntrospector_config.set(this, void 0);
21
+ _BigQueryIntrospector_client.set(this, void 0);
22
+ tslib_1.__classPrivateFieldSet(this, _BigQueryIntrospector_db, db, "f");
23
+ tslib_1.__classPrivateFieldSet(this, _BigQueryIntrospector_config, config, "f");
24
+ tslib_1.__classPrivateFieldSet(this, _BigQueryIntrospector_client, tslib_1.__classPrivateFieldGet(this, _BigQueryIntrospector_instances, "m", _BigQueryIntrospector_resolveBigQueryClient).call(this), "f");
25
+ }
26
+ getSchemas() {
27
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
28
+ const [datasets] = yield tslib_1.__classPrivateFieldGet(this, _BigQueryIntrospector_client, "f").getDatasets();
29
+ return datasets.map((dataset) => {
30
+ var _a;
31
+ return freeze({
32
+ name: (_a = dataset.id) !== null && _a !== void 0 ? _a : '',
33
+ });
34
+ });
35
+ });
36
+ }
37
+ getTables() {
38
+ return tslib_1.__awaiter(this, arguments, void 0, function* (_options = { withInternalKyselyTables: false }) {
39
+ const [datasets] = yield tslib_1.__classPrivateFieldGet(this, _BigQueryIntrospector_client, "f").getDatasets();
40
+ const map = {};
41
+ yield Promise.all(datasets.map((_a) => tslib_1.__awaiter(this, [_a], void 0, function* ({ id }) {
42
+ const from = kysely_1.sql.id(id !== null && id !== void 0 ? id : '', 'INFORMATION_SCHEMA', 'COLUMNS');
43
+ /* Using dynamic schema name which TypeScript cannot validate at compile time */
44
+ /* The schema is constructed from dataset IDs retrieved from BigQuery */
45
+ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
46
+ const query = tslib_1.__classPrivateFieldGet(this, _BigQueryIntrospector_db, "f").selectFrom(from);
47
+ const rows = (yield query.selectAll().execute());
48
+ /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
49
+ for (const row of rows) {
50
+ const { table_schema, table_name, column_name, is_nullable, data_type, column_default } = row;
51
+ const index = `${table_schema}.${table_name}`;
52
+ if (!map[index]) {
53
+ map[index] = {
54
+ isView: false,
55
+ name: table_name,
56
+ schema: table_schema,
57
+ columns: [],
58
+ };
59
+ }
60
+ const col = freeze({
61
+ name: column_name,
62
+ dataType: data_type,
63
+ hasDefaultValue: column_default !== null && column_default !== 'NULL',
64
+ isAutoIncrementing: false,
65
+ isNullable: is_nullable === 'YES',
66
+ });
67
+ map[index].columns.push(col);
68
+ }
69
+ }))); /* Limit concurrent requests to avoid overwhelming BigQuery */
70
+ return Object.values(map);
71
+ });
72
+ }
73
+ getMetadata(options) {
74
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
75
+ return {
76
+ tables: yield this.getTables(options),
77
+ };
78
+ });
79
+ }
80
+ }
81
+ exports.BigQueryIntrospector = BigQueryIntrospector;
82
+ _BigQueryIntrospector_db = new WeakMap(), _BigQueryIntrospector_config = new WeakMap(), _BigQueryIntrospector_client = new WeakMap(), _BigQueryIntrospector_instances = new WeakSet(), _BigQueryIntrospector_resolveBigQueryClient = function _BigQueryIntrospector_resolveBigQueryClient() {
83
+ if (tslib_1.__classPrivateFieldGet(this, _BigQueryIntrospector_config, "f").bigquery &&
84
+ 'getDatasets' in tslib_1.__classPrivateFieldGet(this, _BigQueryIntrospector_config, "f").bigquery &&
85
+ typeof tslib_1.__classPrivateFieldGet(this, _BigQueryIntrospector_config, "f").bigquery.getDatasets === 'function') {
86
+ return tslib_1.__classPrivateFieldGet(this, _BigQueryIntrospector_config, "f").bigquery;
87
+ }
88
+ return new bigquery_1.BigQuery(tslib_1.__classPrivateFieldGet(this, _BigQueryIntrospector_config, "f").options);
89
+ };
90
+ //# sourceMappingURL=BigQueryIntrospector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BigQueryIntrospector.js","sourceRoot":"","sources":["../src/BigQueryIntrospector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from './BigQueryAdapter';
2
+ export * from './BigQueryConnection';
3
+ export * from './BigQueryDialect';
4
+ export * from './BigQueryDriver';
5
+ export * from './BigQueryIntrospector';
6
+ export * from './BigQueryCompiler';
7
+ export * from './jsonColumnDetector';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./BigQueryAdapter"), exports);
5
+ tslib_1.__exportStar(require("./BigQueryConnection"), exports);
6
+ tslib_1.__exportStar(require("./BigQueryDialect"), exports);
7
+ tslib_1.__exportStar(require("./BigQueryDriver"), exports);
8
+ tslib_1.__exportStar(require("./BigQueryIntrospector"), exports);
9
+ tslib_1.__exportStar(require("./BigQueryCompiler"), exports);
10
+ tslib_1.__exportStar(require("./jsonColumnDetector"), exports);
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4DAAkC;AAClC,+DAAqC;AACrC,4DAAkC;AAClC,2DAAiC;AACjC,iEAAuC;AACvC,6DAAmC;AACnC,+DAAqC"}
@@ -0,0 +1,53 @@
1
+ import { type CompiledQuery } from 'kysely';
2
+ /**
3
+ * Helper class to detect JSON columns in BigQuery tables
4
+ * This is used to automatically serialize JSON data when inserting/updating
5
+ */
6
+ export declare class JsonColumnDetector {
7
+ #private;
8
+ /**
9
+ * Register JSON columns for a table
10
+ * @param tableName Full table name (e.g., 'dataset.table')
11
+ * @param columns Array of column names that are JSON type
12
+ */
13
+ registerJsonColumns(tableName: string, columns: string[]): void;
14
+ /**
15
+ * Check if a column is a JSON column
16
+ */
17
+ isJsonColumn(tableName: string, columnName: string): boolean;
18
+ /**
19
+ * Returns a flat set of all registered JSON column names across all tables.
20
+ * Used by the connection to determine which result columns to JSON-parse.
21
+ *
22
+ * Note: Because BigQuery results don't include table context, column names
23
+ * are matched without table qualification. If two tables share a column name
24
+ * and only one is registered as JSON, results from both tables will have
25
+ * that column parsed. Avoid registering common column names (e.g., "data")
26
+ * unless all tables with that column store JSON in it.
27
+ */
28
+ getRegisteredJsonColumnNames(): Set<string>;
29
+ /**
30
+ * Extract table and column information from a compiled query
31
+ */
32
+ extractTableAndColumns(compiledQuery: CompiledQuery): {
33
+ tableName?: string;
34
+ columns?: string[];
35
+ updateColumns?: string[];
36
+ };
37
+ /**
38
+ * Extract table name from table node
39
+ */
40
+ private extractTableName;
41
+ /**
42
+ * Process parameters for JSON serialization based on the query.
43
+ * @param compiledQuery - The compiled query containing column information
44
+ * @param params - The query parameters to process
45
+ * @returns Processed parameters with JSON objects stringified as needed
46
+ */
47
+ processParameters<T = unknown>(compiledQuery: CompiledQuery, params: readonly T[]): T[];
48
+ /**
49
+ * Determine if a value should be serialized as JSON
50
+ */
51
+ private shouldSerializeJson;
52
+ }
53
+ //# sourceMappingURL=jsonColumnDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonColumnDetector.d.ts","sourceRoot":"","sources":["../src/jsonColumnDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AA8B5C;;;GAGG;AACH,qBAAa,kBAAkB;;IAG7B;;;;OAIG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAI/D;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAK5D;;;;;;;;;OASG;IACH,4BAA4B,IAAI,GAAG,CAAC,MAAM,CAAC;IAU3C;;OAEG;IACH,sBAAsB,CAAC,aAAa,EAAE,aAAa,GAAG;QACpD,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B;IAiDD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;;;;OAKG;IACH,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE;IAgDvF;;OAEG;IACH,OAAO,CAAC,mBAAmB;CA6B5B"}
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var _JsonColumnDetector_jsonColumnCache;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.JsonColumnDetector = void 0;
5
+ const tslib_1 = require("tslib");
6
+ /**
7
+ * Helper class to detect JSON columns in BigQuery tables
8
+ * This is used to automatically serialize JSON data when inserting/updating
9
+ */
10
+ class JsonColumnDetector {
11
+ constructor() {
12
+ _JsonColumnDetector_jsonColumnCache.set(this, new Map());
13
+ }
14
+ /**
15
+ * Register JSON columns for a table
16
+ * @param tableName Full table name (e.g., 'dataset.table')
17
+ * @param columns Array of column names that are JSON type
18
+ */
19
+ registerJsonColumns(tableName, columns) {
20
+ tslib_1.__classPrivateFieldGet(this, _JsonColumnDetector_jsonColumnCache, "f").set(tableName, new Set(columns));
21
+ }
22
+ /**
23
+ * Check if a column is a JSON column
24
+ */
25
+ isJsonColumn(tableName, columnName) {
26
+ const columns = tslib_1.__classPrivateFieldGet(this, _JsonColumnDetector_jsonColumnCache, "f").get(tableName);
27
+ return columns ? columns.has(columnName) : false;
28
+ }
29
+ /**
30
+ * Returns a flat set of all registered JSON column names across all tables.
31
+ * Used by the connection to determine which result columns to JSON-parse.
32
+ *
33
+ * Note: Because BigQuery results don't include table context, column names
34
+ * are matched without table qualification. If two tables share a column name
35
+ * and only one is registered as JSON, results from both tables will have
36
+ * that column parsed. Avoid registering common column names (e.g., "data")
37
+ * unless all tables with that column store JSON in it.
38
+ */
39
+ getRegisteredJsonColumnNames() {
40
+ const allNames = new Set();
41
+ for (const columns of tslib_1.__classPrivateFieldGet(this, _JsonColumnDetector_jsonColumnCache, "f").values()) {
42
+ for (const col of columns) {
43
+ allNames.add(col);
44
+ }
45
+ }
46
+ return allNames;
47
+ }
48
+ /**
49
+ * Extract table and column information from a compiled query
50
+ */
51
+ extractTableAndColumns(compiledQuery) {
52
+ var _a, _b;
53
+ const query = compiledQuery.query;
54
+ if (!query) {
55
+ return {};
56
+ }
57
+ let tableName;
58
+ let columns;
59
+ let updateColumns;
60
+ /* Handle INSERT queries */
61
+ if (query.kind === 'InsertQueryNode' && ((_a = query.into) === null || _a === void 0 ? void 0 : _a.table)) {
62
+ tableName = this.extractTableName(query.into.table);
63
+ if (query.columns) {
64
+ columns = query.columns
65
+ .map((col) => { var _a; return ((_a = col.column) === null || _a === void 0 ? void 0 : _a.name) || col.name; })
66
+ .filter((name) => Boolean(name));
67
+ }
68
+ }
69
+ /* Handle UPDATE queries */
70
+ if (query.kind === 'UpdateQueryNode' && ((_b = query.table) === null || _b === void 0 ? void 0 : _b.table)) {
71
+ tableName = this.extractTableName(query.table.table);
72
+ if (query.updates) {
73
+ updateColumns = query.updates
74
+ .map((update) => { var _a, _b, _c; return ((_b = (_a = update.column) === null || _a === void 0 ? void 0 : _a.column) === null || _b === void 0 ? void 0 : _b.name) || ((_c = update.column) === null || _c === void 0 ? void 0 : _c.name); })
75
+ .filter((name) => Boolean(name));
76
+ }
77
+ }
78
+ const result = {};
79
+ if (tableName !== undefined) {
80
+ result.tableName = tableName;
81
+ }
82
+ if (columns !== undefined) {
83
+ result.columns = columns;
84
+ }
85
+ if (updateColumns !== undefined) {
86
+ result.updateColumns = updateColumns;
87
+ }
88
+ return result;
89
+ }
90
+ /**
91
+ * Extract table name from table node
92
+ */
93
+ extractTableName(tableNode) {
94
+ var _a, _b;
95
+ /* c8 ignore start */
96
+ if (!tableNode) {
97
+ return undefined;
98
+ }
99
+ /* c8 ignore stop */
100
+ /* Handle SchemableIdentifierNode */
101
+ if (tableNode.kind === 'SchemableIdentifierNode') {
102
+ const schema = (_a = tableNode.schema) === null || _a === void 0 ? void 0 : _a.name;
103
+ const table = (_b = tableNode.identifier) === null || _b === void 0 ? void 0 : _b.name;
104
+ return schema && table ? `${schema}.${table}` : table;
105
+ }
106
+ /* Handle simple IdentifierNode */
107
+ if (tableNode.kind === 'IdentifierNode') {
108
+ return tableNode.name;
109
+ }
110
+ /* c8 ignore start - defensive fallback for unrecognized node types */
111
+ return undefined;
112
+ /* c8 ignore stop */
113
+ }
114
+ /**
115
+ * Process parameters for JSON serialization based on the query.
116
+ * @param compiledQuery - The compiled query containing column information
117
+ * @param params - The query parameters to process
118
+ * @returns Processed parameters with JSON objects stringified as needed
119
+ */
120
+ processParameters(compiledQuery, params) {
121
+ const { tableName, columns, updateColumns } = this.extractTableAndColumns(compiledQuery);
122
+ if (!tableName) {
123
+ return [...params];
124
+ }
125
+ const processedParams = [...params];
126
+ /* For INSERT queries — handle single-row and multi-row inserts */
127
+ if (columns &&
128
+ columns.length > 0 &&
129
+ params.length >= columns.length &&
130
+ params.length % columns.length === 0) {
131
+ for (let i = 0; i < params.length; i++) {
132
+ const colIndex = i % columns.length;
133
+ const colName = columns[colIndex];
134
+ if (colName && this.shouldSerializeJson(tableName, colName, params[i])) {
135
+ processedParams[i] = JSON.stringify(params[i]);
136
+ }
137
+ }
138
+ }
139
+ /* For UPDATE queries */
140
+ if (updateColumns && compiledQuery.sql.toUpperCase().includes('UPDATE')) {
141
+ /* Find parameter positions for update columns */
142
+ let paramIndex = 0;
143
+ const updatePattern = /SET\s+(.+?)\s+WHERE/i;
144
+ const match = compiledQuery.sql.match(updatePattern);
145
+ if (match) {
146
+ updateColumns.forEach((col) => {
147
+ if (paramIndex < params.length &&
148
+ this.shouldSerializeJson(tableName, col, params[paramIndex])) {
149
+ processedParams[paramIndex] = JSON.stringify(params[paramIndex]);
150
+ }
151
+ paramIndex++;
152
+ });
153
+ }
154
+ }
155
+ return processedParams;
156
+ }
157
+ /**
158
+ * Determine if a value should be serialized as JSON
159
+ */
160
+ shouldSerializeJson(tableName, columnName, value) {
161
+ /* Don't serialize null values */
162
+ if (value === null || value === undefined) {
163
+ return false;
164
+ }
165
+ /* Don't serialize non-objects */
166
+ if (typeof value !== 'object') {
167
+ return false;
168
+ }
169
+ /* Don't serialize Date or Buffer objects */
170
+ if (value instanceof Date || value instanceof Buffer) {
171
+ return false;
172
+ }
173
+ /* Check if column is registered as JSON */
174
+ if (this.isJsonColumn(tableName, columnName)) {
175
+ return true;
176
+ }
177
+ /*
178
+ * Don't use naming convention for automatic serialization
179
+ * Only serialize if explicitly registered to avoid breaking STRUCT columns
180
+ * Users can register columns if they want automatic serialization
181
+ */
182
+ return false;
183
+ }
184
+ }
185
+ exports.JsonColumnDetector = JsonColumnDetector;
186
+ _JsonColumnDetector_jsonColumnCache = new WeakMap();
187
+ //# sourceMappingURL=jsonColumnDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonColumnDetector.js","sourceRoot":"","sources":["../src/jsonColumnDetector.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@trafficbyintent/kysely-bigquery",
3
+ "version": "2.0.0",
4
+ "description": "BigQuery Dialect for Kysely",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/trafficbyintent/kysely-bigquery"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "test": "vitest run --exclude=\"**/*.integration.test.ts\"",
14
+ "test:all": "vitest run",
15
+ "test:integration": "vitest run **/*.integration.test.ts",
16
+ "test:watch": "vitest --exclude='**/*.integration.test.ts'",
17
+ "test:github-actions": "./.github/test-actions.sh all",
18
+ "lint": "eslint . --ext .ts,.tsx",
19
+ "lint:fix": "eslint . --ext .ts,.tsx --fix",
20
+ "format": "prettier --write \"src/**/*.{ts,tsx,js,jsx,json,md}\"",
21
+ "format:check": "prettier --check \"src/**/*.{ts,tsx,js,jsx,json,md}\"",
22
+ "typecheck": "tsc --noEmit",
23
+ "test:coverage": "vitest run --coverage --exclude=\"**/*.integration.test.ts\"",
24
+ "test:coverage:all": "vitest run --coverage"
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "keywords": [
30
+ "kysely",
31
+ "bigquery",
32
+ "bq"
33
+ ],
34
+ "author": "Traffic by Intent",
35
+ "contributors": [
36
+ "Makara Sok",
37
+ "Bradford Melluish"
38
+ ],
39
+ "license": "MIT",
40
+ "publishConfig": {
41
+ "access": "public",
42
+ "registry": "https://registry.npmjs.org/"
43
+ },
44
+ "devDependencies": {
45
+ "@google-cloud/bigquery": "^8.1.1",
46
+ "@trafficbyintent/linters": "^1.2.0",
47
+ "@types/node": "^20.19.10",
48
+ "@vitest/coverage-istanbul": "^3.2.4",
49
+ "@vitest/coverage-v8": "^3.2.4",
50
+ "dotenv": "^17.2.0",
51
+ "eslint-import-resolver-typescript": "^4.4.4",
52
+ "kysely": "^0.28.4",
53
+ "typescript": "^5.3.3",
54
+ "vitest": "^3.2.4"
55
+ },
56
+ "peerDependencies": {
57
+ "@google-cloud/bigquery": "*",
58
+ "kysely": "*"
59
+ }
60
+ }