@dudousxd/nestjs-filter-clickhouse
Version:
ClickHouse adapter for @dudousxd/nestjs-filter: compiles structured filter input to parameterized ClickHouse SQL.
57 lines • 2.61 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var ClickHouseFilterModule_1;
import { FILTER_ADAPTER_IMPL } from '@dudousxd/nestjs-filter';
import { Global, Module } from '@nestjs/common';
import { ClickHouseAdapter } from './clickhouse.adapter.js';
/**
* The adapter as a descriptor, for `FilterModule.forRoot({ adapter })`:
*
* ```ts
* FilterModule.forRoot({ adapter: clickHouseAdapter({ connection: CLICKHOUSE }) })
* ```
*
* Next to a database adapter, provide a `ClickHouseAdapter` under a token of its own instead and
* name it per filter: `@Filterable({ entity: events, adapter: CLICKHOUSE_FILTER_ADAPTER })`.
*/
export const clickHouseAdapter = (options) => {
const { connection, client, ...rest } = options;
if (client !== undefined) {
return { useFactory: () => new ClickHouseAdapter(client, rest), inject: [] };
}
return {
useFactory: (instance) => new ClickHouseAdapter(instance, rest),
inject: [connection],
};
};
/** A ready-made token for a {@link ClickHouseAdapter} that is NOT the application-wide adapter. */
export const CLICKHOUSE_FILTER_ADAPTER = Symbol.for('@dudousxd/nestjs-filter-clickhouse:adapter');
let ClickHouseFilterModule = ClickHouseFilterModule_1 = class ClickHouseFilterModule {
/** Registers the ClickHouse adapter as the application-wide filter adapter. */
static forRoot(options) {
const { imports, ...adapterOptions } = options;
const descriptor = clickHouseAdapter(adapterOptions);
return {
module: ClickHouseFilterModule_1,
imports: imports ?? [],
providers: [
{
provide: FILTER_ADAPTER_IMPL,
useFactory: descriptor.useFactory,
inject: [...descriptor.inject],
},
],
exports: [FILTER_ADAPTER_IMPL],
};
}
};
ClickHouseFilterModule = ClickHouseFilterModule_1 = __decorate([
Global(),
Module({})
], ClickHouseFilterModule);
export { ClickHouseFilterModule };
//# sourceMappingURL=module.js.map