From 9a6aba1d8579083212fd7be33647242e78ca6f08 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 8 Jul 2022 11:47:30 +0200 Subject: [PATCH] add new catalog-node package Co-authored-by: Johan Haals Signed-off-by: Patrik Oldsberg --- .changeset/loud-lemons-listen.md | 5 + .changeset/twelve-peaches-tickle.md | 5 + plugins/catalog-backend/api-report.md | 165 ++++-------------- plugins/catalog-backend/package.json | 1 + .../src/database/DefaultProcessingDatabase.ts | 2 +- plugins/catalog-backend/src/database/types.ts | 7 +- plugins/catalog-backend/src/index.ts | 21 ++- .../src/ingestion/CatalogRules.test.ts | 2 +- .../src/ingestion/CatalogRules.ts | 2 +- .../catalog-backend/src/ingestion/types.ts | 2 +- .../codeowners/CodeOwnersProcessor.test.ts | 2 +- .../modules/codeowners/CodeOwnersProcessor.ts | 2 +- .../AnnotateLocationEntityProcessor.test.ts | 2 +- .../core/AnnotateLocationEntityProcessor.ts | 2 +- .../AnnotateScmSlugEntityProcessor.test.ts | 2 +- .../core/AnnotateScmSlugEntityProcessor.ts | 2 +- .../core/BuiltinKindsEntityProcessor.ts | 2 +- .../core/ConfigLocationEntityProvider.test.ts | 2 +- .../core/ConfigLocationEntityProvider.ts | 5 +- .../src/modules/core/DefaultLocationStore.ts | 5 +- .../modules/core/FileReaderProcessor.test.ts | 2 +- .../src/modules/core/FileReaderProcessor.ts | 2 +- .../core/LocationEntityProcessor.test.ts | 2 +- .../modules/core/LocationEntityProcessor.ts | 2 +- .../modules/core/PlaceholderProcessor.test.ts | 2 +- .../src/modules/core/PlaceholderProcessor.ts | 2 +- .../modules/core/UrlReaderProcessor.test.ts | 2 +- .../src/modules/core/UrlReaderProcessor.ts | 2 +- .../src/modules/util/parse.test.ts | 2 +- .../catalog-backend/src/modules/util/parse.ts | 2 +- ...faultCatalogProcessingOrchestrator.test.ts | 2 +- .../DefaultCatalogProcessingOrchestrator.ts | 2 +- .../processing/ProcessorCacheManager.test.ts | 2 +- .../src/processing/ProcessorCacheManager.ts | 5 +- .../processing/ProcessorOutputCollector.ts | 8 +- .../src/processing/connectEntityProviders.ts | 2 +- .../catalog-backend/src/processing/index.ts | 2 +- .../catalog-backend/src/processing/types.ts | 15 +- .../catalog-backend/src/processing/util.ts | 2 +- .../src/service/CatalogBuilder.ts | 2 +- .../src/service/DefaultLocationService.ts | 6 +- .../catalog-backend/src/util/conversion.ts | 2 +- plugins/catalog-node/.eslintrc.js | 1 + plugins/catalog-node/README.md | 3 + plugins/catalog-node/api-report.md | 158 +++++++++++++++++ plugins/catalog-node/package.json | 40 +++++ .../src/api/common.ts | 0 .../src/api/index.ts | 0 .../src/api/processingResult.ts | 0 .../src/api/processor.ts | 0 .../src/api/provider.ts | 0 plugins/catalog-node/src/index.ts | 24 +++ plugins/catalog-node/src/processing/index.ts | 17 ++ plugins/catalog-node/src/processing/types.ts | 26 +++ 54 files changed, 393 insertions(+), 184 deletions(-) create mode 100644 .changeset/loud-lemons-listen.md create mode 100644 .changeset/twelve-peaches-tickle.md create mode 100644 plugins/catalog-node/.eslintrc.js create mode 100644 plugins/catalog-node/README.md create mode 100644 plugins/catalog-node/api-report.md create mode 100644 plugins/catalog-node/package.json rename plugins/{catalog-backend => catalog-node}/src/api/common.ts (100%) rename plugins/{catalog-backend => catalog-node}/src/api/index.ts (100%) rename plugins/{catalog-backend => catalog-node}/src/api/processingResult.ts (100%) rename plugins/{catalog-backend => catalog-node}/src/api/processor.ts (100%) rename plugins/{catalog-backend => catalog-node}/src/api/provider.ts (100%) create mode 100644 plugins/catalog-node/src/index.ts create mode 100644 plugins/catalog-node/src/processing/index.ts create mode 100644 plugins/catalog-node/src/processing/types.ts diff --git a/.changeset/loud-lemons-listen.md b/.changeset/loud-lemons-listen.md new file mode 100644 index 0000000000..f232c1491e --- /dev/null +++ b/.changeset/loud-lemons-listen.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-node': major +--- + +This package houses stable types from the `@backstage/plugin-catalog-backend` package and is intended for creation of catalog modules. Prefer importing from this package over the `@backstage/plugin-catalog-backend` package. diff --git a/.changeset/twelve-peaches-tickle.md b/.changeset/twelve-peaches-tickle.md new file mode 100644 index 0000000000..2a7814ea06 --- /dev/null +++ b/.changeset/twelve-peaches-tickle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Many symbol declarations have been moved to `@backstage/plugin-catalog-node`. This has no affect on users of this package as they are all re-exported. Modules that build on top of the catalog backend plugin should switch all of their imports to the `@backstage/plugin-catalog-node` package and remove the dependency on `@backstage/plugin-catalog-backend`. diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 09ca4d8dfe..3bd9504bea 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -7,16 +7,31 @@ import { CatalogApi } from '@backstage/catalog-client'; import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; -import { CompoundEntityRef } from '@backstage/catalog-model'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorCache } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEntityResult } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorErrorResult } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorLocationResult } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorParser } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorRefreshKeysResult } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorRelationResult } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorResult } from '@backstage/plugin-catalog-node'; import { ConditionalPolicyDecision } from '@backstage/plugin-permission-common'; import { Conditions } from '@backstage/plugin-permission-node'; import { Config } from '@backstage/config'; +import { DeferredEntity } from '@backstage/plugin-catalog-node'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { Entity } from '@backstage/catalog-model'; import { EntityPolicy } from '@backstage/catalog-model'; +import { EntityProvider } from '@backstage/plugin-catalog-node'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; +import { EntityProviderMutation } from '@backstage/plugin-catalog-node'; +import { EntityRelationSpec } from '@backstage/plugin-catalog-node'; import { GetEntitiesRequest } from '@backstage/catalog-client'; import { JsonValue } from '@backstage/types'; import { LocationEntityV1alpha1 } from '@backstage/catalog-model'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { Logger } from 'winston'; import { Permission } from '@backstage/plugin-permission-common'; import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; @@ -26,6 +41,7 @@ import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { PermissionRule } from '@backstage/plugin-permission-node'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { processingResult } from '@backstage/plugin-catalog-node'; import { Readable } from 'stream'; import { ResourcePermission } from '@backstage/plugin-permission-common'; import { Router } from 'express'; @@ -207,86 +223,25 @@ export interface CatalogProcessingEngine { stop(): Promise; } -// @public (undocumented) -export type CatalogProcessor = { - getProcessorName(): string; - readLocation?( - location: LocationSpec, - optional: boolean, - emit: CatalogProcessorEmit, - parser: CatalogProcessorParser, - cache: CatalogProcessorCache, - ): Promise; - preProcessEntity?( - entity: Entity, - location: LocationSpec, - emit: CatalogProcessorEmit, - originLocation: LocationSpec, - cache: CatalogProcessorCache, - ): Promise; - validateEntityKind?(entity: Entity): Promise; - postProcessEntity?( - entity: Entity, - location: LocationSpec, - emit: CatalogProcessorEmit, - cache: CatalogProcessorCache, - ): Promise; -}; +export { CatalogProcessor }; -// @public -export interface CatalogProcessorCache { - get(key: string): Promise; - set(key: string, value: ItemType): Promise; -} +export { CatalogProcessorCache }; -// @public (undocumented) -export type CatalogProcessorEmit = (generated: CatalogProcessorResult) => void; +export { CatalogProcessorEmit }; -// @public (undocumented) -export type CatalogProcessorEntityResult = { - type: 'entity'; - entity: Entity; - location: LocationSpec; -}; +export { CatalogProcessorEntityResult }; -// @public (undocumented) -export type CatalogProcessorErrorResult = { - type: 'error'; - error: Error; - location: LocationSpec; -}; +export { CatalogProcessorErrorResult }; -// @public (undocumented) -export type CatalogProcessorLocationResult = { - type: 'location'; - location: LocationSpec; -}; +export { CatalogProcessorLocationResult }; -// @public -export type CatalogProcessorParser = (options: { - data: Buffer; - location: LocationSpec; -}) => AsyncIterable; +export { CatalogProcessorParser }; -// @public (undocumented) -export type CatalogProcessorRefreshKeysResult = { - type: 'refresh'; - key: string; -}; +export { CatalogProcessorRefreshKeysResult }; -// @public (undocumented) -export type CatalogProcessorRelationResult = { - type: 'relation'; - relation: EntityRelationSpec; -}; +export { CatalogProcessorRelationResult }; -// @public (undocumented) -export type CatalogProcessorResult = - | CatalogProcessorLocationResult - | CatalogProcessorEntityResult - | CatalogProcessorRelationResult - | CatalogProcessorErrorResult - | CatalogProcessorRefreshKeysResult; +export { CatalogProcessorResult }; // @public (undocumented) export class CodeOwnersProcessor implements CatalogProcessor { @@ -394,11 +349,7 @@ export type DefaultCatalogCollatorFactoryOptions = { catalogClient?: CatalogApi; }; -// @public -export type DeferredEntity = { - entity: Entity; - locationKey?: string; -}; +export { DeferredEntity }; // @public export type EntitiesSearchFilter = { @@ -419,35 +370,13 @@ export type EntityFilter = } | EntitiesSearchFilter; -// @public -export interface EntityProvider { - connect(connection: EntityProviderConnection): Promise; - getProviderName(): string; -} +export { EntityProvider }; -// @public -export interface EntityProviderConnection { - applyMutation(mutation: EntityProviderMutation): Promise; -} +export { EntityProviderConnection }; -// @public -export type EntityProviderMutation = - | { - type: 'full'; - entities: DeferredEntity[]; - } - | { - type: 'delta'; - added: DeferredEntity[]; - removed: DeferredEntity[]; - }; +export { EntityProviderMutation }; -// @public -export type EntityRelationSpec = { - source: CompoundEntityRef; - type: string; - target: CompoundEntityRef; -}; +export { EntityRelationSpec }; // @public (undocumented) export class FileReaderProcessor implements CatalogProcessor { @@ -487,12 +416,7 @@ export type LocationEntityProcessorOptions = { integrations: ScmIntegrationRegistry; }; -// @public -export type LocationSpec = { - type: string; - target: string; - presence?: 'optional' | 'required'; -}; +export { LocationSpec }; // @public (undocumented) export function locationSpecToLocationEntity(opts: { @@ -593,28 +517,7 @@ export type PlaceholderResolverResolveUrl = ( // @public export type ProcessingIntervalFunction = () => number; -// @public -export const processingResult: Readonly<{ - readonly notFoundError: ( - atLocation: LocationSpec, - message: string, - ) => CatalogProcessorResult; - readonly inputError: ( - atLocation: LocationSpec, - message: string, - ) => CatalogProcessorResult; - readonly generalError: ( - atLocation: LocationSpec, - message: string, - ) => CatalogProcessorResult; - readonly location: (newLocation: LocationSpec) => CatalogProcessorResult; - readonly entity: ( - atLocation: LocationSpec, - newEntity: Entity, - ) => CatalogProcessorResult; - readonly relation: (spec: EntityRelationSpec) => CatalogProcessorResult; - readonly refresh: (key: string) => CatalogProcessorResult; -}>; +export { processingResult }; // @public (undocumented) export class UrlReaderProcessor implements CatalogProcessor { diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index ebed76ca90..3177782289 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -34,6 +34,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { + "@backstage/plugin-catalog-node": "^0.0.0", "@backstage/backend-common": "^0.14.1-next.2", "@backstage/catalog-client": "^1.0.4-next.1", "@backstage/catalog-model": "^1.1.0-next.2", diff --git a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts index 903dd59e9e..c9b71d096d 100644 --- a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts +++ b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts @@ -35,7 +35,6 @@ import { ListParentsResult, RefreshByKeyOptions, } from './types'; -import { DeferredEntity } from '../processing/types'; import { ProcessingIntervalFunction } from '../processing/refresh'; import { rethrowError, timestampToDateTime } from './conversion'; import { initDatabaseMetrics } from './metrics'; @@ -48,6 +47,7 @@ import { import { generateStableHash } from './util'; import { isDatabaseConflictError } from '@backstage/backend-common'; +import { DeferredEntity } from '@backstage/plugin-catalog-node'; // The number of items that are sent per batch to the database layer, when // doing .batchInsert calls to knex. This needs to be low enough to not cause diff --git a/plugins/catalog-backend/src/database/types.ts b/plugins/catalog-backend/src/database/types.ts index 8a839c0650..07241f0682 100644 --- a/plugins/catalog-backend/src/database/types.ts +++ b/plugins/catalog-backend/src/database/types.ts @@ -17,9 +17,12 @@ import { Entity } from '@backstage/catalog-model'; import { JsonObject } from '@backstage/types'; import { DateTime } from 'luxon'; -import { EntityRelationSpec } from '../api'; -import { DeferredEntity, RefreshKeyData } from '../processing/types'; +import { + EntityRelationSpec, + DeferredEntity, +} from '@backstage/plugin-catalog-node'; import { DbRelationsRow } from './tables'; +import { RefreshKeyData } from '../processing/types'; /** * An abstraction for transactions of the underlying database technology. diff --git a/plugins/catalog-backend/src/index.ts b/plugins/catalog-backend/src/index.ts index c5c653f0dd..88696498d0 100644 --- a/plugins/catalog-backend/src/index.ts +++ b/plugins/catalog-backend/src/index.ts @@ -20,7 +20,26 @@ * @packageDocumentation */ -export * from './api'; +export type { + DeferredEntity, + LocationSpec, + EntityRelationSpec, + CatalogProcessor, + CatalogProcessorParser, + CatalogProcessorCache, + CatalogProcessorEmit, + CatalogProcessorLocationResult, + CatalogProcessorEntityResult, + CatalogProcessorRelationResult, + CatalogProcessorErrorResult, + CatalogProcessorRefreshKeysResult, + CatalogProcessorResult, + EntityProvider, + EntityProviderConnection, + EntityProviderMutation, +} from '@backstage/plugin-catalog-node'; +export { processingResult } from '@backstage/plugin-catalog-node'; + export * from './catalog'; export * from './ingestion'; export * from './modules'; diff --git a/plugins/catalog-backend/src/ingestion/CatalogRules.test.ts b/plugins/catalog-backend/src/ingestion/CatalogRules.test.ts index 13430f51dd..2592b8b94b 100644 --- a/plugins/catalog-backend/src/ingestion/CatalogRules.test.ts +++ b/plugins/catalog-backend/src/ingestion/CatalogRules.test.ts @@ -17,7 +17,7 @@ import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { DefaultCatalogRulesEnforcer } from './CatalogRules'; -import { LocationSpec } from '../api'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; const entity = { user: { diff --git a/plugins/catalog-backend/src/ingestion/CatalogRules.ts b/plugins/catalog-backend/src/ingestion/CatalogRules.ts index 587a0bd7d5..ce226bd09d 100644 --- a/plugins/catalog-backend/src/ingestion/CatalogRules.ts +++ b/plugins/catalog-backend/src/ingestion/CatalogRules.ts @@ -17,7 +17,7 @@ import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; import path from 'path'; -import { LocationSpec } from '../api'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; /** * Rules to apply to catalog entities. diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index 6d1e9a3927..2602bd080f 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -16,7 +16,7 @@ import { Entity } from '@backstage/catalog-model'; import { RecursivePartial } from '../util/RecursivePartial'; -import { LocationSpec } from '../api'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; /** @public */ export type LocationAnalyzer = { diff --git a/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.test.ts b/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.test.ts index ac4415549e..71154c5473 100644 --- a/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.test.ts @@ -17,7 +17,7 @@ import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { CodeOwnersProcessor } from './CodeOwnersProcessor'; -import { LocationSpec } from '../../api'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; const mockCodeOwnersText = () => ` * @acme/team-foo @acme/team-bar diff --git a/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.ts b/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.ts index 6f6aee7161..63f3d406f5 100644 --- a/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.ts +++ b/plugins/catalog-backend/src/modules/codeowners/CodeOwnersProcessor.ts @@ -22,7 +22,7 @@ import { ScmIntegrations, } from '@backstage/integration'; import { Logger } from 'winston'; -import { CatalogProcessor, LocationSpec } from '../../api'; +import { CatalogProcessor, LocationSpec } from '@backstage/plugin-catalog-node'; import { findCodeOwnerByTarget } from './lib'; const ALLOWED_KINDS = ['API', 'Component', 'Domain', 'Resource', 'System']; diff --git a/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.test.ts b/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.test.ts index 3911f7f743..228429c647 100644 --- a/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.test.ts @@ -17,7 +17,7 @@ import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; -import { LocationSpec } from '../../api'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { AnnotateLocationEntityProcessor } from './AnnotateLocationEntityProcessor'; describe('AnnotateLocationEntityProcessor', () => { diff --git a/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.ts b/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.ts index 4af0b8cf61..a86525429e 100644 --- a/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/AnnotateLocationEntityProcessor.ts @@ -29,7 +29,7 @@ import { CatalogProcessor, CatalogProcessorEmit, LocationSpec, -} from '../../api'; +} from '@backstage/plugin-catalog-node'; /** @public */ export class AnnotateLocationEntityProcessor implements CatalogProcessor { diff --git a/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.test.ts b/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.test.ts index 7fd6514bb8..6154d82330 100644 --- a/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.test.ts @@ -16,7 +16,7 @@ import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { AnnotateScmSlugEntityProcessor } from './AnnotateScmSlugEntityProcessor'; -import { LocationSpec } from '../../api'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; describe('AnnotateScmSlugEntityProcessor', () => { describe('github', () => { diff --git a/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.ts b/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.ts index c4f7218896..41e75e5e8e 100644 --- a/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/AnnotateScmSlugEntityProcessor.ts @@ -21,7 +21,7 @@ import { } from '@backstage/integration'; import parseGitUrl from 'git-url-parse'; import { identity, merge, pickBy } from 'lodash'; -import { CatalogProcessor, LocationSpec } from '../../api'; +import { CatalogProcessor, LocationSpec } from '@backstage/plugin-catalog-node'; const GITHUB_ACTIONS_ANNOTATION = 'github.com/project-slug'; const GITLAB_ACTIONS_ANNOTATION = 'gitlab.com/project-slug'; diff --git a/plugins/catalog-backend/src/modules/core/BuiltinKindsEntityProcessor.ts b/plugins/catalog-backend/src/modules/core/BuiltinKindsEntityProcessor.ts index 4e8cf3fef7..6e05daf591 100644 --- a/plugins/catalog-backend/src/modules/core/BuiltinKindsEntityProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/BuiltinKindsEntityProcessor.ts @@ -53,7 +53,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '../../api'; +} from '@backstage/plugin-catalog-node'; /** @public */ export class BuiltinKindsEntityProcessor implements CatalogProcessor { diff --git a/plugins/catalog-backend/src/modules/core/ConfigLocationEntityProvider.test.ts b/plugins/catalog-backend/src/modules/core/ConfigLocationEntityProvider.test.ts index d61342e3d0..d40c32dfc9 100644 --- a/plugins/catalog-backend/src/modules/core/ConfigLocationEntityProvider.test.ts +++ b/plugins/catalog-backend/src/modules/core/ConfigLocationEntityProvider.test.ts @@ -17,7 +17,7 @@ import { ConfigReader } from '@backstage/config'; import path from 'path'; import { ConfigLocationEntityProvider } from './ConfigLocationEntityProvider'; -import { EntityProviderConnection } from '../../api'; +import { EntityProviderConnection } from '@backstage/plugin-catalog-node'; describe('ConfigLocationEntityProvider', () => { it('should apply mutation with the correct paths in the config', async () => { diff --git a/plugins/catalog-backend/src/modules/core/ConfigLocationEntityProvider.ts b/plugins/catalog-backend/src/modules/core/ConfigLocationEntityProvider.ts index 69827b1380..38f02195f3 100644 --- a/plugins/catalog-backend/src/modules/core/ConfigLocationEntityProvider.ts +++ b/plugins/catalog-backend/src/modules/core/ConfigLocationEntityProvider.ts @@ -17,7 +17,10 @@ import { Config } from '@backstage/config'; import path from 'path'; import { getEntityLocationRef } from '../../processing/util'; -import { EntityProvider, EntityProviderConnection } from '../../api'; +import { + EntityProvider, + EntityProviderConnection, +} from '@backstage/plugin-catalog-node'; import { locationSpecToLocationEntity } from '../../util/conversion'; export class ConfigLocationEntityProvider implements EntityProvider { diff --git a/plugins/catalog-backend/src/modules/core/DefaultLocationStore.ts b/plugins/catalog-backend/src/modules/core/DefaultLocationStore.ts index 33ab046104..cf5db78203 100644 --- a/plugins/catalog-backend/src/modules/core/DefaultLocationStore.ts +++ b/plugins/catalog-backend/src/modules/core/DefaultLocationStore.ts @@ -20,7 +20,10 @@ import { Knex } from 'knex'; import { v4 as uuid } from 'uuid'; import { DbLocationsRow } from '../../database/tables'; import { getEntityLocationRef } from '../../processing/util'; -import { EntityProvider, EntityProviderConnection } from '../../api'; +import { + EntityProvider, + EntityProviderConnection, +} from '@backstage/plugin-catalog-node'; import { locationSpecToLocationEntity } from '../../util/conversion'; import { LocationInput, LocationStore } from '../../service/types'; diff --git a/plugins/catalog-backend/src/modules/core/FileReaderProcessor.test.ts b/plugins/catalog-backend/src/modules/core/FileReaderProcessor.test.ts index 0c114f49a1..3e92bf2b35 100644 --- a/plugins/catalog-backend/src/modules/core/FileReaderProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/FileReaderProcessor.test.ts @@ -19,7 +19,7 @@ import { CatalogProcessorEntityResult, CatalogProcessorErrorResult, CatalogProcessorResult, -} from '../../api'; +} from '@backstage/plugin-catalog-node'; import path from 'path'; import { defaultEntityDataParser } from '../util/parse'; diff --git a/plugins/catalog-backend/src/modules/core/FileReaderProcessor.ts b/plugins/catalog-backend/src/modules/core/FileReaderProcessor.ts index 8ececed59f..af6fba52c0 100644 --- a/plugins/catalog-backend/src/modules/core/FileReaderProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/FileReaderProcessor.ts @@ -24,7 +24,7 @@ import { CatalogProcessorParser, LocationSpec, processingResult, -} from '../../api'; +} from '@backstage/plugin-catalog-node'; const glob = promisify(g); diff --git a/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.test.ts b/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.test.ts index 92ba1fcebf..8f3de7e29b 100644 --- a/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.test.ts @@ -21,7 +21,7 @@ import { } from '@backstage/integration'; import path from 'path'; import { toAbsoluteUrl } from './LocationEntityProcessor'; -import { LocationSpec } from '../../api'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; describe('LocationEntityProcessor', () => { describe('toAbsoluteUrl', () => { diff --git a/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.ts b/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.ts index c168f54bf1..3676b4f727 100644 --- a/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/LocationEntityProcessor.ts @@ -22,7 +22,7 @@ import { CatalogProcessor, CatalogProcessorEmit, LocationSpec, -} from '../../api'; +} from '@backstage/plugin-catalog-node'; export function toAbsoluteUrl( integrations: ScmIntegrationRegistry, diff --git a/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.test.ts b/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.test.ts index 9bfa9027d9..c4d71c87f5 100644 --- a/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.test.ts @@ -17,7 +17,7 @@ import { UrlReader } from '@backstage/backend-common'; import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; -import { CatalogProcessorResult } from '../../api'; +import { CatalogProcessorResult } from '@backstage/plugin-catalog-node'; import { jsonPlaceholderResolver, PlaceholderProcessor, diff --git a/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.ts b/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.ts index be2e9f9f5b..39c9dc59ec 100644 --- a/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.ts @@ -24,7 +24,7 @@ import { CatalogProcessorEmit, LocationSpec, processingResult, -} from '../../api'; +} from '@backstage/plugin-catalog-node'; /** @public */ export type PlaceholderResolverRead = (url: string) => Promise; diff --git a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.test.ts b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.test.ts index fb3f48c939..ee68b2aa39 100644 --- a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.test.ts +++ b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.test.ts @@ -28,7 +28,7 @@ import { CatalogProcessorEntityResult, CatalogProcessorErrorResult, CatalogProcessorResult, -} from '../../api'; +} from '@backstage/plugin-catalog-node'; import { defaultEntityDataParser } from '../util/parse'; import { UrlReaderProcessor } from './UrlReaderProcessor'; diff --git a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts index 7b62690341..0ecd6d5a42 100644 --- a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts @@ -29,7 +29,7 @@ import { CatalogProcessorResult, LocationSpec, processingResult, -} from '../../api'; +} from '@backstage/plugin-catalog-node'; const CACHE_KEY = 'v1'; diff --git a/plugins/catalog-backend/src/modules/util/parse.test.ts b/plugins/catalog-backend/src/modules/util/parse.test.ts index e87de1c9a3..e9a2a4e464 100644 --- a/plugins/catalog-backend/src/modules/util/parse.test.ts +++ b/plugins/catalog-backend/src/modules/util/parse.test.ts @@ -15,7 +15,7 @@ */ import { parseEntityYaml } from './parse'; -import { processingResult } from '../../api'; +import { processingResult } from '@backstage/plugin-catalog-node'; const testLoc = { target: 'my-loc-target', diff --git a/plugins/catalog-backend/src/modules/util/parse.ts b/plugins/catalog-backend/src/modules/util/parse.ts index 65fad5986f..d3aa915e49 100644 --- a/plugins/catalog-backend/src/modules/util/parse.ts +++ b/plugins/catalog-backend/src/modules/util/parse.ts @@ -22,7 +22,7 @@ import { CatalogProcessorResult, LocationSpec, processingResult, -} from '../../api'; +} from '@backstage/plugin-catalog-node'; /** @public */ export function* parseEntityYaml( diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.test.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.test.ts index b2d9846391..30c668bb38 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.test.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.test.ts @@ -30,7 +30,7 @@ import { CatalogProcessorParser, LocationSpec, processingResult, -} from '../api'; +} from '@backstage/plugin-catalog-node'; import { CatalogRulesEnforcer } from '../ingestion/CatalogRules'; import { DefaultCatalogProcessingOrchestrator } from './DefaultCatalogProcessingOrchestrator'; import { defaultEntityDataParser } from '../modules/util/parse'; diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts index 156503da8e..9effaeb3d9 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts @@ -37,7 +37,7 @@ import { CatalogProcessorParser, LocationSpec, processingResult, -} from '../api'; +} from '@backstage/plugin-catalog-node'; import { CatalogProcessingOrchestrator, EntityProcessingRequest, diff --git a/plugins/catalog-backend/src/processing/ProcessorCacheManager.test.ts b/plugins/catalog-backend/src/processing/ProcessorCacheManager.test.ts index 602557a224..a15ca3c364 100644 --- a/plugins/catalog-backend/src/processing/ProcessorCacheManager.test.ts +++ b/plugins/catalog-backend/src/processing/ProcessorCacheManager.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CatalogProcessor } from '../api'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; import { ProcessorCacheManager } from './ProcessorCacheManager'; class MyProcessor implements CatalogProcessor { diff --git a/plugins/catalog-backend/src/processing/ProcessorCacheManager.ts b/plugins/catalog-backend/src/processing/ProcessorCacheManager.ts index e54641f572..8e0e382910 100644 --- a/plugins/catalog-backend/src/processing/ProcessorCacheManager.ts +++ b/plugins/catalog-backend/src/processing/ProcessorCacheManager.ts @@ -15,7 +15,10 @@ */ import { JsonObject, JsonValue } from '@backstage/types'; -import { CatalogProcessor, CatalogProcessorCache } from '../api'; +import { + CatalogProcessor, + CatalogProcessorCache, +} from '@backstage/plugin-catalog-node'; import { isObject } from './util'; class SingleProcessorSubCache implements CatalogProcessorCache { diff --git a/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts b/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts index 033dfd4ae3..19f3b33df4 100644 --- a/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts +++ b/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts @@ -22,14 +22,18 @@ import { } from '@backstage/catalog-model'; import { assertError } from '@backstage/errors'; import { Logger } from 'winston'; -import { CatalogProcessorResult, EntityRelationSpec } from '../api'; +import { + CatalogProcessorResult, + DeferredEntity, + EntityRelationSpec, +} from '@backstage/plugin-catalog-node'; import { locationSpecToLocationEntity } from '../util/conversion'; -import { DeferredEntity, RefreshKeyData } from './types'; import { getEntityLocationRef, getEntityOriginLocationRef, validateEntityEnvelope, } from './util'; +import { RefreshKeyData } from './types'; /** * Helper class for aggregating all of the emitted data from processors. diff --git a/plugins/catalog-backend/src/processing/connectEntityProviders.ts b/plugins/catalog-backend/src/processing/connectEntityProviders.ts index d7015ea52e..70a43de589 100644 --- a/plugins/catalog-backend/src/processing/connectEntityProviders.ts +++ b/plugins/catalog-backend/src/processing/connectEntityProviders.ts @@ -23,7 +23,7 @@ import { EntityProvider, EntityProviderConnection, EntityProviderMutation, -} from '../api'; +} from '@backstage/plugin-catalog-node'; class Connection implements EntityProviderConnection { readonly validateEntityEnvelope = entityEnvelopeSchemaValidator(); diff --git a/plugins/catalog-backend/src/processing/index.ts b/plugins/catalog-backend/src/processing/index.ts index b392c3aa76..5ed8831779 100644 --- a/plugins/catalog-backend/src/processing/index.ts +++ b/plugins/catalog-backend/src/processing/index.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -export type { CatalogProcessingEngine, DeferredEntity } from './types'; +export type { CatalogProcessingEngine } from './types'; export { createRandomProcessingInterval } from './refresh'; export type { ProcessingIntervalFunction } from './refresh'; diff --git a/plugins/catalog-backend/src/processing/types.ts b/plugins/catalog-backend/src/processing/types.ts index e94125b6f5..20dfc48bae 100644 --- a/plugins/catalog-backend/src/processing/types.ts +++ b/plugins/catalog-backend/src/processing/types.ts @@ -16,7 +16,10 @@ import { Entity } from '@backstage/catalog-model'; import { JsonObject } from '@backstage/types'; -import { EntityRelationSpec } from '../api'; +import { + DeferredEntity, + EntityRelationSpec, +} from '@backstage/plugin-catalog-node'; /** * The request to process an entity. @@ -47,7 +50,6 @@ export type EntityProcessingResult = /** * A string to associate to the entity itself. - * @public */ export type RefreshKeyData = { key: string; @@ -61,15 +63,6 @@ export interface CatalogProcessingOrchestrator { process(request: EntityProcessingRequest): Promise; } -/** - * Entities that are not yet processed. - * @public - */ -export type DeferredEntity = { - entity: Entity; - locationKey?: string; -}; - /** @public */ export interface CatalogProcessingEngine { start(): Promise; diff --git a/plugins/catalog-backend/src/processing/util.ts b/plugins/catalog-backend/src/processing/util.ts index b1948cf559..bd96763a54 100644 --- a/plugins/catalog-backend/src/processing/util.ts +++ b/plugins/catalog-backend/src/processing/util.ts @@ -27,7 +27,7 @@ import { JsonObject, JsonValue } from '@backstage/types'; import { InputError } from '@backstage/errors'; import { ScmIntegrationRegistry } from '@backstage/integration'; import path from 'path'; -import { LocationSpec } from '../api'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; export function isLocationEntity(entity: Entity): entity is LocationEntity { return entity.kind === 'Location'; diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 0d4ddc8e71..0e8f859a10 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -36,7 +36,7 @@ import { CatalogProcessor, CatalogProcessorParser, EntityProvider, -} from '../api'; +} from '@backstage/plugin-catalog-node'; import { AnnotateLocationEntityProcessor, BuiltinKindsEntityProcessor, diff --git a/plugins/catalog-backend/src/service/DefaultLocationService.ts b/plugins/catalog-backend/src/service/DefaultLocationService.ts index fc6ffb0825..2c051a6e66 100644 --- a/plugins/catalog-backend/src/service/DefaultLocationService.ts +++ b/plugins/catalog-backend/src/service/DefaultLocationService.ts @@ -21,13 +21,11 @@ import { stringifyEntityRef, } from '@backstage/catalog-model'; import { Location } from '@backstage/catalog-client'; -import { - CatalogProcessingOrchestrator, - DeferredEntity, -} from '../processing/types'; +import { CatalogProcessingOrchestrator } from '../processing/types'; import { LocationInput, LocationService, LocationStore } from './types'; import { locationSpecToMetadataName } from '../util/conversion'; import { InputError } from '@backstage/errors'; +import { DeferredEntity } from '@backstage/plugin-catalog-node'; export class DefaultLocationService implements LocationService { constructor( diff --git a/plugins/catalog-backend/src/util/conversion.ts b/plugins/catalog-backend/src/util/conversion.ts index d61304a419..83302722d2 100644 --- a/plugins/catalog-backend/src/util/conversion.ts +++ b/plugins/catalog-backend/src/util/conversion.ts @@ -23,7 +23,7 @@ import { stringifyLocationRef, } from '@backstage/catalog-model'; import { createHash } from 'crypto'; -import { LocationSpec } from '../api'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; export function locationSpecToMetadataName(location: LocationSpec) { const hash = createHash('sha1') diff --git a/plugins/catalog-node/.eslintrc.js b/plugins/catalog-node/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/catalog-node/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-node/README.md b/plugins/catalog-node/README.md new file mode 100644 index 0000000000..37106bef06 --- /dev/null +++ b/plugins/catalog-node/README.md @@ -0,0 +1,3 @@ +# plugin-catalog-node + +Houses types and utilities for building catalog modules. diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md new file mode 100644 index 0000000000..d3460e4e27 --- /dev/null +++ b/plugins/catalog-node/api-report.md @@ -0,0 +1,158 @@ +## API Report File for "@backstage/plugin-catalog-node" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { CompoundEntityRef } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; +import { JsonValue } from '@backstage/types'; + +// @public (undocumented) +export type CatalogProcessor = { + getProcessorName(): string; + readLocation?( + location: LocationSpec, + optional: boolean, + emit: CatalogProcessorEmit, + parser: CatalogProcessorParser, + cache: CatalogProcessorCache, + ): Promise; + preProcessEntity?( + entity: Entity, + location: LocationSpec, + emit: CatalogProcessorEmit, + originLocation: LocationSpec, + cache: CatalogProcessorCache, + ): Promise; + validateEntityKind?(entity: Entity): Promise; + postProcessEntity?( + entity: Entity, + location: LocationSpec, + emit: CatalogProcessorEmit, + cache: CatalogProcessorCache, + ): Promise; +}; + +// @public +export interface CatalogProcessorCache { + get(key: string): Promise; + set(key: string, value: ItemType): Promise; +} + +// @public (undocumented) +export type CatalogProcessorEmit = (generated: CatalogProcessorResult) => void; + +// @public (undocumented) +export type CatalogProcessorEntityResult = { + type: 'entity'; + entity: Entity; + location: LocationSpec; +}; + +// @public (undocumented) +export type CatalogProcessorErrorResult = { + type: 'error'; + error: Error; + location: LocationSpec; +}; + +// @public (undocumented) +export type CatalogProcessorLocationResult = { + type: 'location'; + location: LocationSpec; +}; + +// @public +export type CatalogProcessorParser = (options: { + data: Buffer; + location: LocationSpec; +}) => AsyncIterable; + +// @public (undocumented) +export type CatalogProcessorRefreshKeysResult = { + type: 'refresh'; + key: string; +}; + +// @public (undocumented) +export type CatalogProcessorRelationResult = { + type: 'relation'; + relation: EntityRelationSpec; +}; + +// @public (undocumented) +export type CatalogProcessorResult = + | CatalogProcessorLocationResult + | CatalogProcessorEntityResult + | CatalogProcessorRelationResult + | CatalogProcessorErrorResult + | CatalogProcessorRefreshKeysResult; + +// @public +export type DeferredEntity = { + entity: Entity; + locationKey?: string; +}; + +// @public +export interface EntityProvider { + connect(connection: EntityProviderConnection): Promise; + getProviderName(): string; +} + +// @public +export interface EntityProviderConnection { + applyMutation(mutation: EntityProviderMutation): Promise; +} + +// @public +export type EntityProviderMutation = + | { + type: 'full'; + entities: DeferredEntity[]; + } + | { + type: 'delta'; + added: DeferredEntity[]; + removed: DeferredEntity[]; + }; + +// @public +export type EntityRelationSpec = { + source: CompoundEntityRef; + type: string; + target: CompoundEntityRef; +}; + +// @public +export type LocationSpec = { + type: string; + target: string; + presence?: 'optional' | 'required'; +}; + +// @public +export const processingResult: Readonly<{ + readonly notFoundError: ( + atLocation: LocationSpec, + message: string, + ) => CatalogProcessorResult; + readonly inputError: ( + atLocation: LocationSpec, + message: string, + ) => CatalogProcessorResult; + readonly generalError: ( + atLocation: LocationSpec, + message: string, + ) => CatalogProcessorResult; + readonly location: (newLocation: LocationSpec) => CatalogProcessorResult; + readonly entity: ( + atLocation: LocationSpec, + newEntity: Entity, + ) => CatalogProcessorResult; + readonly relation: (spec: EntityRelationSpec) => CatalogProcessorResult; + readonly refresh: (key: string) => CatalogProcessorResult; +}>; +``` diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json new file mode 100644 index 0000000000..a1c96990a0 --- /dev/null +++ b/plugins/catalog-node/package.json @@ -0,0 +1,40 @@ +{ + "name": "@backstage/plugin-catalog-node", + "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", + "version": "0.0.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": false, + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts", + "alphaTypes": "dist/index.alpha.d.ts" + }, + "backstage": { + "role": "node-library" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build --experimental-type-build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/catalog-model": "^1.1.0-next.2", + "@backstage/errors": "1.1.0-next.0", + "@backstage/types": "^1.0.0" + }, + "devDependencies": { + "@backstage/backend-common": "^0.14.1-next.2", + "@backstage/cli": "^0.18.0-next.2" + }, + "files": [ + "dist", + "alpha" + ] +} diff --git a/plugins/catalog-backend/src/api/common.ts b/plugins/catalog-node/src/api/common.ts similarity index 100% rename from plugins/catalog-backend/src/api/common.ts rename to plugins/catalog-node/src/api/common.ts diff --git a/plugins/catalog-backend/src/api/index.ts b/plugins/catalog-node/src/api/index.ts similarity index 100% rename from plugins/catalog-backend/src/api/index.ts rename to plugins/catalog-node/src/api/index.ts diff --git a/plugins/catalog-backend/src/api/processingResult.ts b/plugins/catalog-node/src/api/processingResult.ts similarity index 100% rename from plugins/catalog-backend/src/api/processingResult.ts rename to plugins/catalog-node/src/api/processingResult.ts diff --git a/plugins/catalog-backend/src/api/processor.ts b/plugins/catalog-node/src/api/processor.ts similarity index 100% rename from plugins/catalog-backend/src/api/processor.ts rename to plugins/catalog-node/src/api/processor.ts diff --git a/plugins/catalog-backend/src/api/provider.ts b/plugins/catalog-node/src/api/provider.ts similarity index 100% rename from plugins/catalog-backend/src/api/provider.ts rename to plugins/catalog-node/src/api/provider.ts diff --git a/plugins/catalog-node/src/index.ts b/plugins/catalog-node/src/index.ts new file mode 100644 index 0000000000..6a1accfcbd --- /dev/null +++ b/plugins/catalog-node/src/index.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * The catalog-backend-node module for `@backstage/plugin-catalog-backend`. + * + * @packageDocumentation + */ + +export * from './api'; +export * from './processing'; diff --git a/plugins/catalog-node/src/processing/index.ts b/plugins/catalog-node/src/processing/index.ts new file mode 100644 index 0000000000..90b87aa850 --- /dev/null +++ b/plugins/catalog-node/src/processing/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export type { DeferredEntity } from './types'; diff --git a/plugins/catalog-node/src/processing/types.ts b/plugins/catalog-node/src/processing/types.ts new file mode 100644 index 0000000000..25e76faea3 --- /dev/null +++ b/plugins/catalog-node/src/processing/types.ts @@ -0,0 +1,26 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Entity } from '@backstage/catalog-model'; + +/** + * Entities that are not yet processed. + * @public + */ +export type DeferredEntity = { + entity: Entity; + locationKey?: string; +};