One more try on types

Signed-off-by: Damon Kaswell <damon.kaswell1@hp.com>
This commit is contained in:
Damon Kaswell
2023-01-12 09:54:40 -08:00
parent 66d70c7d3c
commit a319a59774
8 changed files with 26 additions and 25 deletions
@@ -18,23 +18,23 @@ import { Router } from 'express';
import type { UrlReader } from '@backstage/backend-common';
// @public
export type EntityIteratorResult =
export type EntityIteratorResult<T> =
| {
done: false;
entities: DeferredEntity[];
cursor: unknown;
cursor: T;
}
| {
done: true;
entities?: DeferredEntity[];
cursor?: unknown;
cursor?: T;
};
// @public (undocumented)
export class IncrementalCatalogBuilder {
// (undocumented)
addIncrementalEntityProvider(
provider: IncrementalEntityProvider,
addIncrementalEntityProvider<TCursor, TContext>(
provider: IncrementalEntityProvider<TCursor, TContext>,
options: IncrementalEntityProviderOptions,
): void;
// (undocumented)
@@ -48,8 +48,8 @@ export class IncrementalCatalogBuilder {
}
// @public
export interface IncrementalEntityProvider {
around(burst: (context: unknown) => Promise<void>): Promise<void>;
export interface IncrementalEntityProvider<TCursor, TContext> {
around(burst: (context: TContext) => Promise<void>): Promise<void>;
deltaMapper?: (payload: unknown) => {
delta:
| {
@@ -61,7 +61,10 @@ export interface IncrementalEntityProvider {
| undefined;
};
getProviderName(): string;
next(context: unknown, cursor?: unknown): Promise<EntityIteratorResult>;
next(
context: TContext,
cursor?: TCursor,
): Promise<EntityIteratorResult<TCursor>>;
}
// @public (undocumented)
@@ -77,7 +80,7 @@ export interface IncrementalEntityProviderOptions {
// @alpha
export const incrementalIngestionEntityProviderCatalogModule: (options: {
providers: {
provider: IncrementalEntityProvider;
provider: IncrementalEntityProvider<unknown, unknown>;
options: IncrementalEntityProviderOptions;
}[];
}) => BackendFeature;
@@ -23,7 +23,7 @@ import { v4 } from 'uuid';
import { stringifyError } from '@backstage/errors';
import { EventParams, EventSubscriber } from '@backstage/plugin-events-node';
export class IncrementalIngestionEngine<TInput>
export class IncrementalIngestionEngine
implements IterationEngine, EventSubscriber
{
private readonly restLength: Duration;
@@ -32,7 +32,7 @@ export class IncrementalIngestionEngine<TInput>
private manager: IncrementalIngestionDatabaseManager;
constructor(private options: IterationEngineOptions<TInput>) {
constructor(private options: IterationEngineOptions) {
this.manager = options.manager;
this.restLength = Duration.fromObject(options.restLength);
this.backoff = options.backoff ?? [
@@ -347,13 +347,11 @@ export class IncrementalIngestionEngine<TInput>
`incremental-engine: Received ${this.providerEventTopic} event`,
);
const payload = eventPayload as TInput;
if (!provider.deltaMapper) {
return;
}
const update = provider.deltaMapper(payload);
const update = provider.deltaMapper(eventPayload);
if (update.delta) {
if (update.delta.added.length > 0) {
@@ -81,8 +81,8 @@ export class WrapperProviders {
).createRouter();
}
private async startProvider<TCursor, TContext, TInput>(
provider: IncrementalEntityProvider<TCursor, TContext, TInput>,
private async startProvider<TCursor, TContext>(
provider: IncrementalEntityProvider<TCursor, TContext>,
providerOptions: IncrementalEntityProviderOptions,
connection: EntityProviderConnection,
) {
@@ -24,7 +24,7 @@ import { incrementalIngestionEntityProviderCatalogModule } from './incrementalIn
describe('bitbucketServerEntityProviderCatalogModule', () => {
it('should register provider at the catalog extension point', async () => {
const provider1: IncrementalEntityProvider<number, {}, unknown> = {
const provider1: IncrementalEntityProvider<number, {}> = {
getProviderName: () => 'provider1',
around: burst => burst(0),
next: async (cursor, _context) => {
@@ -38,7 +38,7 @@ export const incrementalIngestionEntityProviderCatalogModule =
env,
options: {
providers: Array<{
provider: IncrementalEntityProvider<unknown, unknown, unknown>;
provider: IncrementalEntityProvider<unknown, unknown>;
options: IncrementalEntityProviderOptions;
}>;
},
@@ -36,7 +36,7 @@ import {
incrementalIngestionEntityProviderCatalogModule,
} from '.';
const provider: IncrementalEntityProvider<number, {}, unknown> = {
const provider: IncrementalEntityProvider<number, {}> = {
getProviderName: () => 'test-provider',
around: burst => burst(0),
next: async (_context, cursor) => {
@@ -68,8 +68,8 @@ export class IncrementalCatalogBuilder {
return { incrementalAdminRouter };
}
addIncrementalEntityProvider<TCursor, TContext, TInput>(
provider: IncrementalEntityProvider<TCursor, TContext, TInput>,
addIncrementalEntityProvider<TCursor, TContext>(
provider: IncrementalEntityProvider<TCursor, TContext>,
options: IncrementalEntityProviderOptions,
) {
const { burstInterval, burstLength, restLength } = options;
@@ -46,7 +46,7 @@ import { IncrementalIngestionDatabaseManager } from './database/IncrementalInges
*
* @public
*/
export interface IncrementalEntityProvider<TCursor, TContext, TInput = null> {
export interface IncrementalEntityProvider<TCursor, TContext> {
/**
* This name must be unique between all of the entity providers
* operating in the catalog.
@@ -80,7 +80,7 @@ export interface IncrementalEntityProvider<TCursor, TContext, TInput = null> {
* If present, this method maps incoming payloads to apply updates
* outside of the incremental ingestion schedule.
*/
deltaMapper?: (payload: TInput) => {
deltaMapper?: (payload: unknown) => {
delta:
| {
added: DeferredEntity[];
@@ -167,11 +167,11 @@ export interface IterationEngine {
taskFn: TaskFunction;
}
export interface IterationEngineOptions<TInput> {
export interface IterationEngineOptions {
logger: Logger;
connection: EntityProviderConnection;
manager: IncrementalIngestionDatabaseManager;
provider: IncrementalEntityProvider<unknown, unknown, TInput>;
provider: IncrementalEntityProvider<unknown, unknown>;
restLength: DurationObjectUnits;
ready: Promise<void>;
backoff?: IncrementalEntityProviderOptions['backoff'];