UNPKG

@dudousxd/nestjs-filter-clickhouse

Version:

ClickHouse adapter for @dudousxd/nestjs-filter: compiles structured filter input to parameterized ClickHouse SQL.

57 lines • 2.61 kB
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