From b2ee7f3a658d4f8e0f79b780ad1d13060b44a427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Thu, 23 May 2024 16:40:18 +0200 Subject: [PATCH] moved over the urlreader to backend-defaults MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/nervous-kings-change.md | 15 + .changeset/shaggy-zebras-mate.md | 6 + docs/plugins/url-reader.md | 7 +- package.json | 2 +- packages/backend-app-api/api-report.md | 7 +- packages/backend-common/api-report.md | 441 +++++------------- packages/backend-common/src/reading/index.ts | 236 ++++++++-- .../backend-defaults/api-report-urlReader.md | 434 ++++++++++++++++- packages/backend-defaults/package.json | 22 + .../src/entrypoints/urlReader/index.ts | 1 + .../lib}/AwsCodeCommitUrlReader.test.ts | 0 .../urlReader/lib}/AwsCodeCommitUrlReader.ts | 29 +- .../urlReader/lib}/AwsS3UrlReader.test.ts | 0 .../urlReader/lib}/AwsS3UrlReader.ts | 29 +- .../urlReader/lib}/AzureUrlReader.test.ts | 0 .../urlReader/lib}/AzureUrlReader.ts | 36 +- .../lib}/BitbucketCloudUrlReader.test.ts | 0 .../urlReader/lib}/BitbucketCloudUrlReader.ts | 36 +- .../lib}/BitbucketServerUrlReader.test.ts | 0 .../lib}/BitbucketServerUrlReader.ts | 36 +- .../urlReader/lib}/BitbucketUrlReader.test.ts | 0 .../urlReader/lib}/BitbucketUrlReader.ts | 36 +- .../urlReader/lib}/FetchUrlReader.test.ts | 0 .../urlReader/lib}/FetchUrlReader.ts | 26 +- .../urlReader/lib}/GerritUrlReader.test.ts | 0 .../urlReader/lib}/GerritUrlReader.ts | 35 +- .../urlReader/lib}/GiteaUrlReader.test.ts | 0 .../urlReader/lib}/GiteaUrlReader.ts | 32 +- .../urlReader/lib}/GithubUrlReader.test.ts | 0 .../urlReader/lib}/GithubUrlReader.ts | 44 +- .../urlReader/lib}/GitlabUrlReader.test.ts | 0 .../urlReader/lib}/GitlabUrlReader.ts | 36 +- .../urlReader/lib}/GoogleGcsUrlReader.test.ts | 6 +- .../urlReader/lib}/GoogleGcsUrlReader.ts | 32 +- .../urlReader/lib}/HarnessUrlReader.test.ts | 0 .../urlReader/lib}/HarnessUrlReader.ts | 33 +- .../lib}/ReadUrlResponseFactory.test.ts | 0 .../urlReader/lib}/ReadUrlResponseFactory.ts | 10 +- .../lib}/UrlReaderPredicateMux.test.ts | 0 .../urlReader/lib}/UrlReaderPredicateMux.ts | 37 +- .../entrypoints/urlReader/lib}/UrlReaders.ts | 6 +- .../awsCodeCommit-mock-object.yaml | 0 .../subFolder/awsCodeCommit-mock-object2.yaml | 0 .../__fixtures__/awsS3/awsS3-mock-object.yaml | 0 .../awsS3/awsS3-mock-object2.yaml | 0 .../awsS3/awsS3-mock-object3.yaml | 0 .../backstage-mock-etag123.tar.gz | Bin .../bitbucket-repo-with-commit-hash.tar.gz | Bin .../__fixtures__/bitbucket-server-repo.tar.gz | Bin .../gerrit/branch-info-response.txt | 0 .../gerrit/gerrit-master-docs.tar.gz | Bin .../__fixtures__/gerrit/gerrit-master.tar.gz | Bin .../lib}/__fixtures__/gitlab-archive.tar.gz | Bin .../lib}/__fixtures__/gitlab-archive.zip | Bin .../gitlab-subpath-archive.tar.gz | Bin .../urlReader/lib}/__fixtures__/mallory.zip | Bin .../lib}/__fixtures__/mock-corrupted.zip | Bin .../lib}/__fixtures__/mock-main.tar.gz | Bin .../urlReader/lib}/__fixtures__/mock-main.zip | Bin .../__fixtures__/mock-with-extra-root-dir.zip | Bin .../src/entrypoints/urlReader/lib}/git.ts | 0 .../src/entrypoints/urlReader/lib/index.ts | 38 ++ .../lib}/tree/ReadTreeResponseFactory.ts | 8 +- .../lib}/tree/ReadableArrayResponse.test.ts | 0 .../lib}/tree/ReadableArrayResponse.ts | 21 +- .../lib}/tree/TarArchiveResponse.test.ts | 0 .../urlReader/lib}/tree/TarArchiveResponse.ts | 18 +- .../lib}/tree/ZipArchiveResponse.test.ts | 0 .../urlReader/lib}/tree/ZipArchiveResponse.ts | 18 +- .../entrypoints/urlReader/lib}/tree/index.ts | 0 .../entrypoints/urlReader/lib}/tree/util.ts | 0 .../src/entrypoints/urlReader/lib}/types.ts | 21 +- .../src/entrypoints/urlReader/lib}/util.ts | 0 .../urlReader/urlReaderServiceFactory.ts | 2 +- packages/backend-plugin-api/api-report.md | 162 ++++--- .../services/definitions/UrlReaderService.ts | 87 +++- .../src/services/definitions/index.ts | 9 + yarn.lock | 22 + 78 files changed, 1338 insertions(+), 738 deletions(-) create mode 100644 .changeset/nervous-kings-change.md create mode 100644 .changeset/shaggy-zebras-mate.md rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/AwsCodeCommitUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/AwsCodeCommitUrlReader.ts (95%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/AwsS3UrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/AwsS3UrlReader.ts (95%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/AzureUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/AzureUrlReader.ts (91%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/BitbucketCloudUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/BitbucketCloudUrlReader.ts (92%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/BitbucketServerUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/BitbucketServerUrlReader.ts (92%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/BitbucketUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/BitbucketUrlReader.ts (93%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/FetchUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/FetchUrlReader.ts (92%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/GerritUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/GerritUrlReader.ts (93%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/GiteaUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/GiteaUrlReader.ts (90%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/GithubUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/GithubUrlReader.ts (93%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/GitlabUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/GitlabUrlReader.ts (95%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/GoogleGcsUrlReader.test.ts (95%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/GoogleGcsUrlReader.ts (84%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/HarnessUrlReader.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/HarnessUrlReader.ts (90%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/ReadUrlResponseFactory.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/ReadUrlResponseFactory.ts (91%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/UrlReaderPredicateMux.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/UrlReaderPredicateMux.ts (74%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/UrlReaders.ts (94%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/awsCodeCommit/awsCodeCommit-mock-object.yaml (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/awsCodeCommit/subFolder/awsCodeCommit-mock-object2.yaml (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/awsS3/awsS3-mock-object.yaml (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/awsS3/awsS3-mock-object2.yaml (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/awsS3/awsS3-mock-object3.yaml (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/backstage-mock-etag123.tar.gz (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/bitbucket-repo-with-commit-hash.tar.gz (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/bitbucket-server-repo.tar.gz (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/gerrit/branch-info-response.txt (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/gerrit/gerrit-master-docs.tar.gz (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/gerrit/gerrit-master.tar.gz (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/gitlab-archive.tar.gz (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/gitlab-archive.zip (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/gitlab-subpath-archive.tar.gz (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/mallory.zip (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/mock-corrupted.zip (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/mock-main.tar.gz (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/mock-main.zip (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/__fixtures__/mock-with-extra-root-dir.zip (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/git.ts (100%) create mode 100644 packages/backend-defaults/src/entrypoints/urlReader/lib/index.ts rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/tree/ReadTreeResponseFactory.ts (90%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/tree/ReadableArrayResponse.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/tree/ReadableArrayResponse.ts (84%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/tree/TarArchiveResponse.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/tree/TarArchiveResponse.ts (93%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/tree/ZipArchiveResponse.test.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/tree/ZipArchiveResponse.ts (93%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/tree/index.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/tree/util.ts (100%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/types.ts (88%) rename packages/{backend-common/src/reading => backend-defaults/src/entrypoints/urlReader/lib}/util.ts (100%) diff --git a/.changeset/nervous-kings-change.md b/.changeset/nervous-kings-change.md new file mode 100644 index 0000000000..99a3547574 --- /dev/null +++ b/.changeset/nervous-kings-change.md @@ -0,0 +1,15 @@ +--- +'@backstage/backend-plugin-api': patch +--- + +Deprecated all of the `UrlReader` related type names and replaced them with prefixed versions. Please update your imports. + +- `ReadTreeOptions` was renamed to `UrlReaderReadTreeOptions` +- `ReadTreeResponse` was renamed to `UrlReaderReadTreeResponse` +- `ReadTreeResponseDirOptions` was renamed to `UrlReaderReadTreeResponseDirOptions` +- `ReadTreeResponseFile` was renamed to `UrlReaderReadTreeResponseFile` +- `ReadUrlResponse` was renamed to `UrlReaderReadUrlResponse` +- `ReadUrlOptions` was renamed to `UrlReaderReadUrlOptions` +- `SearchOptions` was renamed to `UrlReaderSearchOptions` +- `SearchResponse` was renamed to `UrlReaderSearchResponse` +- `SearchResponseFile` was renamed to `UrlReaderSearchResponseFile` diff --git a/.changeset/shaggy-zebras-mate.md b/.changeset/shaggy-zebras-mate.md new file mode 100644 index 0000000000..c66a92d1e9 --- /dev/null +++ b/.changeset/shaggy-zebras-mate.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-defaults': patch +'@backstage/backend-common': patch +--- + +Moved over all URL reader functionality from `@backstage/backend-common` to `@backstage/backend-defaults/urlReader`. Please update your imports. diff --git a/docs/plugins/url-reader.md b/docs/plugins/url-reader.md index c8ff18952c..c551cdc086 100644 --- a/docs/plugins/url-reader.md +++ b/docs/plugins/url-reader.md @@ -19,7 +19,7 @@ files before generating a documentation site. Since, the requirement for reading files is so essential for Backstage plugins, the -[`@backstage/backend-common`](https://github.com/backstage/backstage/tree/master/packages/backend-common) +[`coreServices.urlReader`](../reference/backend-plugin-api.coreservices.urlreader/) package provides a dedicated API for reading from such URL based remote locations like GitHub, GitLab, Bitbucket, Google Cloud Storage, etc. This is commonly referred to as "URL Reader". It takes care of making authenticated @@ -49,9 +49,8 @@ function makeCreateEnv(config: Config) { } ``` -This instance contains all -[the default URL Reader providers](https://github.com/backstage/backstage/blob/master/packages/backend-common/src/reading/UrlReaders.ts) -in the backend-common package including GitHub, GitLab, Bitbucket, Azure, Google +This instance contains all the default URL Reader providers +in the backend-defaults package including GitHub, GitLab, Bitbucket, Azure, Google GCS. As the need arises, more URL Readers are being written to support different providers. diff --git a/package.json b/package.json index 2951eb8540..c81f4bf07d 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "build:all": "backstage-cli repo build --all", "build:api-docs": "LANG=en_EN yarn build:api-reports --docs --exclude 'plugins/@(adr|adr-backend|adr-common|airbrake|airbrake-backend|allure|analytics-module-ga|analytics-module-ga4|analytics-module-newrelic-browser|apache-airflow|api-docs|api-docs-module-protoc-gen-doc|apollo-explorer|app-visualizer|azure-devops|azure-devops-backend|azure-devops-common|azure-sites|azure-sites-backend|azure-sites-common|badges|badges-backend|bazaar|bazaar-backend|bitbucket-cloud-common|bitrise|catalog-graph|catalog-graphql|catalog-import|catalog-unprocessed-entities|cicd-statistics|cicd-statistics-module-gitlab|circleci|cloudbuild|code-climate|code-coverage|code-coverage-backend|codescene|config-schema|cost-insights|cost-insights-common|dynatrace|entity-feedback|entity-feedback-backend|entity-feedback-common|entity-validation|example-todo-list|example-todo-list-backend|example-todo-list-common|firehydrant|fossa|gcalendar|gcp-projects|git-release-manager|github-actions|github-deployments|github-issues|github-pull-requests-board|gitops-profiles|gocd|graphiql|graphql-backend|graphql-voyager|ilert|jenkins|jenkins-backend|jenkins-common|kafka|kafka-backend|lighthouse|lighthouse-backend|lighthouse-common|linguist|linguist-backend|linguist-common|microsoft-calendar|newrelic|newrelic-dashboard|nomad|nomad-backend|octopus-deploy|opencost|pagerduty|periskop|periskop-backend|playlist|playlist-backend|playlist-common|proxy-backend|puppetdb|rollbar|rollbar-backend|sentry|shortcuts|splunk-on-call|stack-overflow|stack-overflow-backend|stackstorm|tech-radar|tech-radar-2|todo|todo-backend|xcmetrics)'", "build:api-reports": "yarn build:api-reports:only --tsc", - "build:api-reports:only": "NODE_OPTIONS=--max-old-space-size=8192 backstage-repo-tools api-reports --allow-warnings 'packages/core-components,plugins/+(catalog|catalog-import|git-release-manager|jenkins|kubernetes)' -o ae-wrong-input-file-type --validate-release-tags", + "build:api-reports:only": "NODE_OPTIONS=--max-old-space-size=8192 backstage-repo-tools api-reports --allow-warnings 'packages/backend-common,packages/core-components,plugins/+(catalog|catalog-import|git-release-manager|jenkins|kubernetes)' -o ae-wrong-input-file-type --validate-release-tags", "build:backend": "yarn workspace example-backend build", "build:knip-reports": "backstage-repo-tools knip-reports", "build:plugins-report": "node ./scripts/build-plugins-report", diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index 11d9dd90d4..3d7357cb87 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -42,7 +42,7 @@ import { ServiceFactory } from '@backstage/backend-plugin-api'; import { ServiceFactoryOrFunction } from '@backstage/backend-plugin-api'; import { TokenManagerService } from '@backstage/backend-plugin-api'; import { transport } from 'winston'; -import { UrlReader } from '@backstage/backend-common'; +import { UrlReaderService } from '@backstage/backend-plugin-api'; import { UserInfoService } from '@backstage/backend-plugin-api'; // @public (undocumented) @@ -339,7 +339,10 @@ export const tokenManagerServiceFactory: () => ServiceFactory< >; // @public @deprecated (undocumented) -export const urlReaderServiceFactory: () => ServiceFactory; +export const urlReaderServiceFactory: () => ServiceFactory< + UrlReaderService, + 'plugin' +>; // @public (undocumented) export const userInfoServiceFactory: () => ServiceFactory< diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index 2947741fe3..977809071b 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -49,26 +49,32 @@ import { PluginMetadataService } from '@backstage/backend-plugin-api'; import { PushResult } from 'isomorphic-git'; import { Readable } from 'stream'; import { ReadCommitResult } from 'isomorphic-git'; -import { ReadTreeOptions } from '@backstage/backend-plugin-api'; -import { ReadTreeResponse } from '@backstage/backend-plugin-api'; -import { ReadTreeResponseDirOptions } from '@backstage/backend-plugin-api'; -import { ReadTreeResponseFile } from '@backstage/backend-plugin-api'; -import { ReadUrlOptions } from '@backstage/backend-plugin-api'; -import { ReadUrlResponse } from '@backstage/backend-plugin-api'; +import type { ReadTreeOptions as ReadTreeOptions_2 } from '@backstage/backend-plugin-api'; +import type { ReadTreeResponse as ReadTreeResponse_2 } from '@backstage/backend-plugin-api'; +import type { ReadTreeResponseDirOptions as ReadTreeResponseDirOptions_2 } from '@backstage/backend-plugin-api'; +import type { ReadTreeResponseFile as ReadTreeResponseFile_2 } from '@backstage/backend-plugin-api'; +import type { ReadUrlOptions as ReadUrlOptions_2 } from '@backstage/backend-plugin-api'; +import type { ReadUrlResponse as ReadUrlResponse_2 } from '@backstage/backend-plugin-api'; import { RequestHandler } from 'express'; import { resolvePackagePath as resolvePackagePath_2 } from '@backstage/backend-plugin-api'; import { resolveSafeChildPath as resolveSafeChildPath_2 } from '@backstage/backend-plugin-api'; import { RootConfigService } from '@backstage/backend-plugin-api'; import { Router } from 'express'; import { SchedulerService } from '@backstage/backend-plugin-api'; -import { SearchOptions } from '@backstage/backend-plugin-api'; -import { SearchResponse } from '@backstage/backend-plugin-api'; -import { SearchResponseFile } from '@backstage/backend-plugin-api'; +import type { SearchOptions as SearchOptions_2 } from '@backstage/backend-plugin-api'; +import type { SearchResponse as SearchResponse_2 } from '@backstage/backend-plugin-api'; +import type { SearchResponseFile as SearchResponseFile_2 } from '@backstage/backend-plugin-api'; import { Server } from 'http'; import { ServiceRef } from '@backstage/backend-plugin-api'; import { TokenManagerService as TokenManager } from '@backstage/backend-plugin-api'; import { TransportStreamOptions } from 'winston-transport'; -import { UrlReaderService as UrlReader } from '@backstage/backend-plugin-api'; +import { UrlReaderReadTreeOptions } from '@backstage/backend-plugin-api'; +import { UrlReaderReadTreeResponse } from '@backstage/backend-plugin-api'; +import { UrlReaderReadUrlOptions } from '@backstage/backend-plugin-api'; +import { UrlReaderReadUrlResponse } from '@backstage/backend-plugin-api'; +import { UrlReaderSearchOptions } from '@backstage/backend-plugin-api'; +import { UrlReaderSearchResponse } from '@backstage/backend-plugin-api'; +import { UrlReaderService } from '@backstage/backend-plugin-api'; import { UserInfoService } from '@backstage/backend-plugin-api'; import { V1PodTemplateSpec } from '@kubernetes/client-node'; import * as winston from 'winston'; @@ -80,118 +86,30 @@ export type AuthCallbackOptions = { logger?: LoggerService; }; -// @public -export class AwsS3UrlReader implements UrlReader { - constructor( - credsManager: AwsCredentialsManager, - integration: AwsS3Integration, - deps: { - treeResponseFactory: ReadTreeResponseFactory; - }, - ); - // (undocumented) - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(url: string, options?: ReadTreeOptions): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "AwsS3UrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const AwsS3UrlReader: typeof AwsS3UrlReader_2; -// @public -export class AzureUrlReader implements UrlReader { - constructor( - integration: AzureIntegration, - deps: { - treeResponseFactory: ReadTreeResponseFactory; - credentialsProvider: AzureDevOpsCredentialsProvider; - }, - ); - // (undocumented) - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(url: string, options?: ReadTreeOptions): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(url: string, options?: SearchOptions): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "AzureUrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const AzureUrlReader: typeof AzureUrlReader_2; -// @public -export class BitbucketCloudUrlReader implements UrlReader { - constructor( - integration: BitbucketCloudIntegration, - deps: { - treeResponseFactory: ReadTreeResponseFactory; - }, - ); - // (undocumented) - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(url: string, options?: ReadTreeOptions): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(url: string, options?: SearchOptions): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "BitbucketCloudUrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const BitbucketCloudUrlReader: typeof BitbucketCloudUrlReader_2; -// @public -export class BitbucketServerUrlReader implements UrlReader { - constructor( - integration: BitbucketServerIntegration, - deps: { - treeResponseFactory: ReadTreeResponseFactory; - }, - ); - // (undocumented) - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(url: string, options?: ReadTreeOptions): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(url: string, options?: SearchOptions): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "BitbucketServerUrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const BitbucketServerUrlReader: typeof BitbucketServerUrlReader_2; -// @public @deprecated -export class BitbucketUrlReader implements UrlReader { - constructor( - integration: BitbucketIntegration, - logger: LoggerService, - deps: { - treeResponseFactory: ReadTreeResponseFactory; - }, - ); - // (undocumented) - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(url: string, options?: ReadTreeOptions): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(url: string, options?: SearchOptions): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "BitbucketUrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const BitbucketUrlReader: typeof BitbucketUrlReader_2; // @public @deprecated (undocumented) export type CacheClient = CacheService; @@ -330,50 +248,20 @@ export type ErrorHandlerOptions = { logClientErrors?: boolean; }; -// @public -export class FetchUrlReader implements UrlReader { - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "FetchUrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const FetchUrlReader: typeof FetchUrlReader_2; -// @public -export type FromReadableArrayOptions = Array<{ - data: Readable; - path: string; - lastModifiedAt?: Date; -}>; +// Warning: (ae-forgotten-export) The symbol "FromReadableArrayOptions_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export type FromReadableArrayOptions = FromReadableArrayOptions_2; -// @public -export class GerritUrlReader implements UrlReader { - constructor( - integration: GerritIntegration, - deps: { - treeResponseFactory: ReadTreeResponseFactory; - }, - workDir: string, - ); - // (undocumented) - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(url: string, options?: ReadTreeOptions): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "GerritUrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const GerritUrlReader: typeof GerritUrlReader_2; // @public @deprecated export function getRootLogger(): winston.Logger; @@ -457,94 +345,25 @@ export class Git { resolveRef(options: { dir: string; ref: string }): Promise; } -// @public -export class GiteaUrlReader implements UrlReader { - constructor( - integration: GiteaIntegration, - deps: { - treeResponseFactory: ReadTreeResponseFactory; - }, - ); - // (undocumented) - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(url: string, options?: ReadTreeOptions): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "GiteaUrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const GiteaUrlReader: typeof GiteaUrlReader_2; -// @public -export class GithubUrlReader implements UrlReader { - constructor( - integration: GithubIntegration, - deps: { - treeResponseFactory: ReadTreeResponseFactory; - credentialsProvider: GithubCredentialsProvider; - }, - ); - // (undocumented) - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(url: string, options?: ReadTreeOptions): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(url: string, options?: SearchOptions): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "GithubUrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const GithubUrlReader: typeof GithubUrlReader_2; -// @public -export class GitlabUrlReader implements UrlReader { - constructor( - integration: GitLabIntegration, - deps: { - treeResponseFactory: ReadTreeResponseFactory; - }, - ); - // (undocumented) - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(url: string, options?: ReadTreeOptions): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(url: string, options?: SearchOptions): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "GitlabUrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const GitlabUrlReader: typeof GitlabUrlReader_2; -// @public -export class HarnessUrlReader implements UrlReader { - constructor( - integration: HarnessIntegration, - deps: { - treeResponseFactory: ReadTreeResponseFactory; - }, - ); - // (undocumented) - static factory: ReaderFactory; - // (undocumented) - read(url: string): Promise; - // (undocumented) - readTree(url: string, options?: ReadTreeOptions): Promise; - // (undocumented) - readUrl(url: string, options?: ReadUrlOptions): Promise; - // (undocumented) - search(): Promise; - // (undocumented) - toString(): string; -} +// Warning: (ae-forgotten-export) The symbol "HarnessUrlReader_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const HarnessUrlReader: typeof HarnessUrlReader_2; // @public @deprecated export const HostDiscovery: typeof HostDiscovery_2; @@ -596,7 +415,7 @@ export const legacyPlugin: ( permissions: PermissionsService; scheduler: SchedulerService; tokenManager: TokenManager; - reader: UrlReader; + reader: UrlReaderService; identity: IdentityService; }, { @@ -677,73 +496,49 @@ export interface PullOptions { }; } -// @public -export type ReaderFactory = (options: { - config: Config; - logger: LoggerService; - treeResponseFactory: ReadTreeResponseFactory; -}) => UrlReaderPredicateTuple[]; +// Warning: (ae-forgotten-export) The symbol "ReaderFactory_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export type ReaderFactory = ReaderFactory_2; -export { ReadTreeOptions }; +// @public @deprecated (undocumented) +export type ReadTreeOptions = ReadTreeOptions_2; -export { ReadTreeResponse }; +// @public @deprecated (undocumented) +export type ReadTreeResponse = ReadTreeResponse_2; -export { ReadTreeResponseDirOptions }; +// @public @deprecated (undocumented) +export type ReadTreeResponseDirOptions = ReadTreeResponseDirOptions_2; -// @public -export interface ReadTreeResponseFactory { - // (undocumented) - fromReadableArray( - options: FromReadableArrayOptions, - ): Promise; - // (undocumented) - fromTarArchive( - options: ReadTreeResponseFactoryOptions & { - stripFirstDirectory?: boolean; - }, - ): Promise; - // (undocumented) - fromZipArchive( - options: ReadTreeResponseFactoryOptions, - ): Promise; -} +// Warning: (ae-forgotten-export) The symbol "ReadTreeResponseFactory_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export type ReadTreeResponseFactory = ReadTreeResponseFactory_2; -// @public -export type ReadTreeResponseFactoryOptions = { - stream: Readable; - subpath?: string; - etag: string; - filter?: ( - path: string, - info?: { - size: number; - }, - ) => boolean; -}; +// Warning: (ae-forgotten-export) The symbol "ReadTreeResponseFactoryOptions_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export type ReadTreeResponseFactoryOptions = ReadTreeResponseFactoryOptions_2; -export { ReadTreeResponseFile }; +// @public @deprecated (undocumented) +export type ReadTreeResponseFile = ReadTreeResponseFile_2; -export { ReadUrlOptions }; +// @public @deprecated (undocumented) +export type ReadUrlOptions = ReadUrlOptions_2; -export { ReadUrlResponse }; +// @public @deprecated (undocumented) +export type ReadUrlResponse = ReadUrlResponse_2; -// @public -export class ReadUrlResponseFactory { - static fromNodeJSReadable( - oldStyleStream: NodeJS.ReadableStream, - options?: ReadUrlResponseFactoryFromStreamOptions, - ): Promise; - static fromReadable( - stream: Readable, - options?: ReadUrlResponseFactoryFromStreamOptions, - ): Promise; -} +// Warning: (ae-forgotten-export) The symbol "ReadUrlResponseFactory_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const ReadUrlResponseFactory: typeof ReadUrlResponseFactory_2; -// @public -export type ReadUrlResponseFactoryFromStreamOptions = { - etag?: string; - lastModifiedAt?: Date; -}; +// Warning: (ae-forgotten-export) The symbol "ReadUrlResponseFactoryFromStreamOptions_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export type ReadUrlResponseFactoryFromStreamOptions = + ReadUrlResponseFactoryFromStreamOptions_2; // @public export function redactWinstonLogLine( @@ -778,11 +573,14 @@ export type RunContainerOptions = { pullOptions?: PullOptions; }; -export { SearchOptions }; +// @public @deprecated (undocumented) +export type SearchOptions = SearchOptions_2; -export { SearchResponse }; +// @public @deprecated (undocumented) +export type SearchResponse = SearchResponse_2; -export { SearchResponseFile }; +// @public @deprecated (undocumented) +export type SearchResponseFile = SearchResponseFile_2; // @public export class ServerTokenManager implements TokenManager { @@ -861,26 +659,23 @@ export interface StatusCheckHandlerOptions { export { TokenManager }; -export { UrlReader }; +// @public @deprecated (undocumented) +export type UrlReader = UrlReaderService; -// @public -export type UrlReaderPredicateTuple = { - predicate: (url: URL) => boolean; - reader: UrlReader; -}; +// Warning: (ae-forgotten-export) The symbol "UrlReaderPredicateTuple_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export type UrlReaderPredicateTuple = UrlReaderPredicateTuple_2; -// @public -export class UrlReaders { - static create(options: UrlReadersOptions): UrlReader; - static default(options: UrlReadersOptions): UrlReader; -} +// Warning: (ae-forgotten-export) The symbol "UrlReaders_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export const UrlReaders: typeof UrlReaders_2; -// @public -export type UrlReadersOptions = { - config: Config; - logger: LoggerService; - factories?: ReaderFactory[]; -}; +// Warning: (ae-forgotten-export) The symbol "UrlReadersOptions_2" needs to be exported by the entry point index.d.ts +// +// @public @deprecated (undocumented) +export type UrlReadersOptions = UrlReadersOptions_2; // @public @deprecated export function useHotCleanup( diff --git a/packages/backend-common/src/reading/index.ts b/packages/backend-common/src/reading/index.ts index a99bb6dda1..0b037ed6c2 100644 --- a/packages/backend-common/src/reading/index.ts +++ b/packages/backend-common/src/reading/index.ts @@ -14,35 +14,207 @@ * limitations under the License. */ -export { AzureUrlReader } from './AzureUrlReader'; -export { BitbucketCloudUrlReader } from './BitbucketCloudUrlReader'; -export { BitbucketUrlReader } from './BitbucketUrlReader'; -export { BitbucketServerUrlReader } from './BitbucketServerUrlReader'; -export { GerritUrlReader } from './GerritUrlReader'; -export { GithubUrlReader } from './GithubUrlReader'; -export { GitlabUrlReader } from './GitlabUrlReader'; -export { GiteaUrlReader } from './GiteaUrlReader'; -export { HarnessUrlReader } from './HarnessUrlReader'; -export { AwsS3UrlReader } from './AwsS3UrlReader'; -export { FetchUrlReader } from './FetchUrlReader'; -export { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; -export type { - FromReadableArrayOptions, - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - ReadTreeResponseFactory, - ReadTreeResponseFile, - ReadTreeResponseDirOptions, - ReadTreeResponseFactoryOptions, - ReadUrlOptions, - ReadUrlResponse, - ReadUrlResponseFactoryFromStreamOptions, - SearchOptions, - SearchResponse, - SearchResponseFile, - UrlReader, - UrlReaderPredicateTuple, -} from './types'; -export { UrlReaders } from './UrlReaders'; -export type { UrlReadersOptions } from './UrlReaders'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { AzureUrlReader as _AzureUrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/AzureUrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { BitbucketCloudUrlReader as _BitbucketCloudUrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { BitbucketUrlReader as _BitbucketUrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/BitbucketUrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { BitbucketServerUrlReader as _BitbucketServerUrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/BitbucketServerUrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { GerritUrlReader as _GerritUrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { GithubUrlReader as _GithubUrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/GithubUrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { GitlabUrlReader as _GitlabUrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/GitlabUrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { GiteaUrlReader as _GiteaUrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/GiteaUrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { HarnessUrlReader as _HarnessUrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/HarnessUrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { AwsS3UrlReader as _AwsS3UrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/AwsS3UrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { FetchUrlReader as _FetchUrlReader } from '../../../backend-defaults/src/entrypoints/urlReader/lib/FetchUrlReader'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { UrlReaders as _UrlReaders } from '../../../backend-defaults/src/entrypoints/urlReader/lib/UrlReaders'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { ReadUrlResponseFactory as _ReadUrlResponseFactory } from '../../../backend-defaults/src/entrypoints/urlReader/lib/ReadUrlResponseFactory'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import type { UrlReadersOptions as _UrlReadersOptions } from '../../../backend-defaults/src/entrypoints/urlReader/lib/UrlReaders'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import type { FromReadableArrayOptions as _FromReadableArrayOptions } from '../../../backend-defaults/src/entrypoints/urlReader/lib/types'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import type { + ReaderFactory as _ReaderFactory, + ReadTreeResponseFactory as _ReadTreeResponseFactory, + ReadTreeResponseFactoryOptions as _ReadTreeResponseFactoryOptions, + ReadUrlResponseFactoryFromStreamOptions as _ReadUrlResponseFactoryFromStreamOptions, + UrlReaderPredicateTuple as _UrlReaderPredicateTuple, +} from '../../../backend-defaults/src/entrypoints/urlReader/lib/types'; + +import type { + ReadTreeOptions as _ReadTreeOptions, + ReadTreeResponse as _ReadTreeResponse, + ReadTreeResponseFile as _ReadTreeResponseFile, + ReadTreeResponseDirOptions as _ReadTreeResponseDirOptions, + ReadUrlOptions as _ReadUrlOptions, + ReadUrlResponse as _ReadUrlResponse, + SearchOptions as _SearchOptions, + SearchResponse as _SearchResponse, + SearchResponseFile as _SearchResponseFile, + UrlReaderService as _UrlReaderService, +} from '@backstage/backend-plugin-api'; + +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const AzureUrlReader = _AzureUrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const BitbucketCloudUrlReader = _BitbucketCloudUrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const BitbucketUrlReader = _BitbucketUrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const BitbucketServerUrlReader = _BitbucketServerUrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const GerritUrlReader = _GerritUrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const GithubUrlReader = _GithubUrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const GitlabUrlReader = _GitlabUrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const GiteaUrlReader = _GiteaUrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const HarnessUrlReader = _HarnessUrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const AwsS3UrlReader = _AwsS3UrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const FetchUrlReader = _FetchUrlReader; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const UrlReaders = _UrlReaders; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export const ReadUrlResponseFactory = _ReadUrlResponseFactory; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export type UrlReadersOptions = _UrlReadersOptions; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export type FromReadableArrayOptions = _FromReadableArrayOptions; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export type ReaderFactory = _ReaderFactory; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export type ReadTreeResponseFactory = _ReadTreeResponseFactory; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export type ReadTreeResponseFactoryOptions = _ReadTreeResponseFactoryOptions; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export type ReadUrlResponseFactoryFromStreamOptions = + _ReadUrlResponseFactoryFromStreamOptions; +/** + * @public + * @deprecated Import from `@backstage/backend-defaults/urlReader` instead + */ +export type UrlReaderPredicateTuple = _UrlReaderPredicateTuple; + +/** + * @public + * @deprecated Use `ÙrlReaderReadTreeOptions` from `@backstage/backend-plugin-api` instead + */ +export type ReadTreeOptions = _ReadTreeOptions; +/** + * @public + * @deprecated Use `ÙrlReaderReadTreeResponse` from `@backstage/backend-plugin-api` instead + */ +export type ReadTreeResponse = _ReadTreeResponse; +/** + * @public + * @deprecated Use `ÙrlReaderReadTreeResponseFile` from `@backstage/backend-plugin-api` instead + */ +export type ReadTreeResponseFile = _ReadTreeResponseFile; +/** + * @public + * @deprecated Use `ÙrlReaderReadTreeResponseDirOptions` from `@backstage/backend-plugin-api` instead + */ +export type ReadTreeResponseDirOptions = _ReadTreeResponseDirOptions; +/** + * @public + * @deprecated Use `ÙrlReaderReadUrlOptions` from `@backstage/backend-plugin-api` instead + */ +export type ReadUrlOptions = _ReadUrlOptions; +/** + * @public + * @deprecated Use `ÙrlReaderReadUrlResponse` from `@backstage/backend-plugin-api` instead + */ +export type ReadUrlResponse = _ReadUrlResponse; +/** + * @public + * @deprecated Use `ÙrlReaderSearchOptions` from `@backstage/backend-plugin-api` instead + */ +export type SearchOptions = _SearchOptions; +/** + * @public + * @deprecated Use `ÙrlReaderSearchResponse` from `@backstage/backend-plugin-api` instead + */ +export type SearchResponse = _SearchResponse; +/** + * @public + * @deprecated Use `ÙrlReaderSearchResponseFile` from `@backstage/backend-plugin-api` instead + */ +export type SearchResponseFile = _SearchResponseFile; +/** + * @public + * @deprecated Use `ÙrlReaderService` from `@backstage/backend-plugin-api` instead + */ +export type UrlReader = _UrlReaderService; diff --git a/packages/backend-defaults/api-report-urlReader.md b/packages/backend-defaults/api-report-urlReader.md index 8c7147bd7c..d9300d731a 100644 --- a/packages/backend-defaults/api-report-urlReader.md +++ b/packages/backend-defaults/api-report-urlReader.md @@ -3,11 +3,441 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +/// + +import { AwsCredentialsManager } from '@backstage/integration-aws-node'; +import { AwsS3Integration } from '@backstage/integration'; +import { AzureDevOpsCredentialsProvider } from '@backstage/integration'; +import { AzureIntegration } from '@backstage/integration'; +import { BitbucketCloudIntegration } from '@backstage/integration'; +import { BitbucketIntegration } from '@backstage/integration'; +import { BitbucketServerIntegration } from '@backstage/integration'; +import { Config } from '@backstage/config'; +import { GerritIntegration } from '@backstage/integration'; +import { GiteaIntegration } from '@backstage/integration'; +import { GithubCredentialsProvider } from '@backstage/integration'; +import { GithubIntegration } from '@backstage/integration'; +import { GitLabIntegration } from '@backstage/integration'; +import { HarnessIntegration } from '@backstage/integration'; +import { LoggerService } from '@backstage/backend-plugin-api'; +import { Readable } from 'stream'; import { ServiceFactory } from '@backstage/backend-plugin-api'; -import { UrlReader } from '@backstage/backend-common'; +import { UrlReaderReadTreeOptions } from '@backstage/backend-plugin-api'; +import { UrlReaderReadTreeResponse } from '@backstage/backend-plugin-api'; +import { UrlReaderReadUrlOptions } from '@backstage/backend-plugin-api'; +import { UrlReaderReadUrlResponse } from '@backstage/backend-plugin-api'; +import { UrlReaderSearchOptions } from '@backstage/backend-plugin-api'; +import { UrlReaderSearchResponse } from '@backstage/backend-plugin-api'; +import { UrlReaderService } from '@backstage/backend-plugin-api'; + +// @public +export class AwsS3UrlReader implements UrlReaderService { + constructor( + credsManager: AwsCredentialsManager, + integration: AwsS3Integration, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search(): Promise; + // (undocumented) + toString(): string; +} + +// @public +export class AzureUrlReader implements UrlReaderService { + constructor( + integration: AzureIntegration, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + credentialsProvider: AzureDevOpsCredentialsProvider; + }, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise; + // (undocumented) + toString(): string; +} + +// @public +export class BitbucketCloudUrlReader implements UrlReaderService { + constructor( + integration: BitbucketCloudIntegration, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise; + // (undocumented) + toString(): string; +} + +// @public +export class BitbucketServerUrlReader implements UrlReaderService { + constructor( + integration: BitbucketServerIntegration, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise; + // (undocumented) + toString(): string; +} + +// @public @deprecated +export class BitbucketUrlReader implements UrlReaderService { + constructor( + integration: BitbucketIntegration, + logger: LoggerService, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise; + // (undocumented) + toString(): string; +} + +// @public +export class FetchUrlReader implements UrlReaderService { + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree(): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search(): Promise; + // (undocumented) + toString(): string; +} + +// @public +export type FromReadableArrayOptions = Array<{ + data: Readable; + path: string; + lastModifiedAt?: Date; +}>; + +// @public +export class GerritUrlReader implements UrlReaderService { + constructor( + integration: GerritIntegration, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + workDir: string, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search(): Promise; + // (undocumented) + toString(): string; +} + +// @public +export class GiteaUrlReader implements UrlReaderService { + constructor( + integration: GiteaIntegration, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search(): Promise; + // (undocumented) + toString(): string; +} + +// @public +export class GithubUrlReader implements UrlReaderService { + constructor( + integration: GithubIntegration, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + credentialsProvider: GithubCredentialsProvider; + }, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise; + // (undocumented) + toString(): string; +} + +// @public +export class GitlabUrlReader implements UrlReaderService { + constructor( + integration: GitLabIntegration, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise; + // (undocumented) + toString(): string; +} + +// @public +export class HarnessUrlReader implements UrlReaderService { + constructor( + integration: HarnessIntegration, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ); + // (undocumented) + static factory: ReaderFactory; + // (undocumented) + read(url: string): Promise; + // (undocumented) + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + // (undocumented) + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + // (undocumented) + search(): Promise; + // (undocumented) + toString(): string; +} + +// @public +export type ReaderFactory = (options: { + config: Config; + logger: LoggerService; + treeResponseFactory: ReadTreeResponseFactory; +}) => UrlReaderPredicateTuple[]; + +// @public +export interface ReadTreeResponseFactory { + // (undocumented) + fromReadableArray( + options: FromReadableArrayOptions, + ): Promise; + // (undocumented) + fromTarArchive( + options: ReadTreeResponseFactoryOptions & { + stripFirstDirectory?: boolean; + }, + ): Promise; + // (undocumented) + fromZipArchive( + options: ReadTreeResponseFactoryOptions, + ): Promise; +} + +// @public +export type ReadTreeResponseFactoryOptions = { + stream: Readable; + subpath?: string; + etag: string; + filter?: ( + path: string, + info?: { + size: number; + }, + ) => boolean; +}; + +// @public +export class ReadUrlResponseFactory { + static fromNodeJSReadable( + oldStyleStream: NodeJS.ReadableStream, + options?: ReadUrlResponseFactoryFromStreamOptions, + ): Promise; + static fromReadable( + stream: Readable, + options?: ReadUrlResponseFactoryFromStreamOptions, + ): Promise; +} + +// @public +export type ReadUrlResponseFactoryFromStreamOptions = { + etag?: string; + lastModifiedAt?: Date; +}; + +// @public +export type UrlReaderPredicateTuple = { + predicate: (url: URL) => boolean; + reader: UrlReaderService; +}; + +// @public +export class UrlReaders { + static create(options: UrlReadersOptions): UrlReaderService; + static default(options: UrlReadersOptions): UrlReaderService; +} // @public (undocumented) -export const urlReaderServiceFactory: () => ServiceFactory; +export const urlReaderServiceFactory: () => ServiceFactory< + UrlReaderService, + 'plugin' +>; + +// @public +export type UrlReadersOptions = { + config: Config; + logger: LoggerService; + factories?: ReaderFactory[]; +}; // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 505c8924ba..19d0781e7e 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -82,6 +82,11 @@ "test": "backstage-cli package test" }, "dependencies": { + "@aws-sdk/abort-controller": "^3.347.0", + "@aws-sdk/client-codecommit": "^3.350.0", + "@aws-sdk/client-s3": "^3.350.0", + "@aws-sdk/credential-providers": "^3.350.0", + "@aws-sdk/types": "^3.347.0", "@backstage/backend-app-api": "workspace:^", "@backstage/backend-common": "workspace:^", "@backstage/backend-dev-utils": "workspace:^", @@ -89,31 +94,48 @@ "@backstage/config": "workspace:^", "@backstage/config-loader": "workspace:^", "@backstage/errors": "workspace:^", + "@backstage/integration": "workspace:^", + "@backstage/integration-aws-node": "workspace:^", "@backstage/plugin-events-node": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", "@backstage/types": "workspace:^", + "@google-cloud/storage": "^7.0.0", "@keyv/memcache": "^1.3.5", "@keyv/redis": "^2.5.3", + "@octokit/rest": "^19.0.3", "@opentelemetry/api": "^1.3.0", + "archiver": "^6.0.0", + "base64-stream": "^1.0.0", "better-sqlite3": "^9.0.0", + "concat-stream": "^2.0.0", "cron": "^3.0.0", "fs-extra": "^11.2.0", + "git-url-parse": "^14.0.0", + "isomorphic-git": "^1.23.0", "keyv": "^4.5.2", "knex": "^3.0.0", "lodash": "^4.17.21", "luxon": "^3.0.0", + "minimatch": "^9.0.0", "mysql2": "^3.0.0", + "node-fetch": "^2.6.7", "p-limit": "^3.1.0", "pg": "^8.11.3", "pg-connection-string": "^2.3.0", + "raw-body": "^2.4.1", + "tar": "^6.1.12", "uuid": "^9.0.0", + "yauzl": "^3.0.0", "yn": "^4.0.0", "zod": "^3.22.4" }, "devDependencies": { + "@aws-sdk/util-stream-node": "^3.350.0", "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", + "aws-sdk-client-mock": "^4.0.0", + "msw": "^1.0.0", "wait-for-expect": "^3.0.2" }, "configSchema": "config.d.ts" diff --git a/packages/backend-defaults/src/entrypoints/urlReader/index.ts b/packages/backend-defaults/src/entrypoints/urlReader/index.ts index 6a4b9f65be..cf927ea031 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/index.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ +export * from './lib'; export { urlReaderServiceFactory } from './urlReaderServiceFactory'; diff --git a/packages/backend-common/src/reading/AwsCodeCommitUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/AwsCodeCommitUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/AwsCodeCommitUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/AwsCodeCommitUrlReader.test.ts diff --git a/packages/backend-common/src/reading/AwsCodeCommitUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/AwsCodeCommitUrlReader.ts similarity index 95% rename from packages/backend-common/src/reading/AwsCodeCommitUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/AwsCodeCommitUrlReader.ts index fda8e4c3a0..f204d1390d 100644 --- a/packages/backend-common/src/reading/AwsCodeCommitUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/AwsCodeCommitUrlReader.ts @@ -14,16 +14,15 @@ * limitations under the License. */ +import { ReaderFactory, ReadTreeResponseFactory } from './types'; import { - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - ReadTreeResponseFactory, - ReadUrlOptions, - ReadUrlResponse, - SearchResponse, - UrlReader, -} from './types'; + UrlReaderService, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; import { AwsCredentialsManager, DefaultAwsCredentialsManager, @@ -118,7 +117,7 @@ export function parseUrl( * * @public */ -export class AwsCodeCommitUrlReader implements UrlReader { +export class AwsCodeCommitUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, treeResponseFactory }) => { const integrations = ScmIntegrations.fromConfig(config); const credsManager = DefaultAwsCredentialsManager.fromConfig(config); @@ -222,8 +221,8 @@ export class AwsCodeCommitUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { // etag and lastModifiedAfter are not supported by the CodeCommit API try { const { path, repositoryName, region, commitSpecifier } = parseUrl( @@ -326,8 +325,8 @@ export class AwsCodeCommitUrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { // url: https://eu-west-1.console.aws.amazon.com/codesuite/codecommit/repositories/test-stijn-delete-techdocs/browse?region=eu-west-1 try { const { path, repositoryName, region, commitSpecifier } = parseUrl(url); @@ -380,7 +379,7 @@ export class AwsCodeCommitUrlReader implements UrlReader { } } - async search(): Promise { + async search(): Promise { throw new Error('AwsCodeCommitReader does not implement search'); } diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/AwsS3UrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/AwsS3UrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/AwsS3UrlReader.test.ts diff --git a/packages/backend-common/src/reading/AwsS3UrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/AwsS3UrlReader.ts similarity index 95% rename from packages/backend-common/src/reading/AwsS3UrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/AwsS3UrlReader.ts index 3ba4eebb48..b98b285f99 100644 --- a/packages/backend-common/src/reading/AwsS3UrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/AwsS3UrlReader.ts @@ -15,15 +15,14 @@ */ import { - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - ReadTreeResponseFactory, - ReadUrlOptions, - ReadUrlResponse, - SearchResponse, - UrlReader, -} from './types'; + UrlReaderService, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; +import { ReaderFactory, ReadTreeResponseFactory } from './types'; import { AwsCredentialsManager, DefaultAwsCredentialsManager, @@ -132,7 +131,7 @@ export function parseUrl( * * @public */ -export class AwsS3UrlReader implements UrlReader { +export class AwsS3UrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, treeResponseFactory }) => { const integrations = ScmIntegrations.fromConfig(config); const credsManager = DefaultAwsCredentialsManager.fromConfig(config); @@ -253,8 +252,8 @@ export class AwsS3UrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { const { etag, lastModifiedAfter } = options ?? {}; try { @@ -300,8 +299,8 @@ export class AwsS3UrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { try { const { path, bucket, region } = parseUrl(url, this.integration.config); const s3Client = await this.buildS3Client( @@ -357,7 +356,7 @@ export class AwsS3UrlReader implements UrlReader { } } - async search(): Promise { + async search(): Promise { throw new Error('AwsS3Reader does not implement search'); } diff --git a/packages/backend-common/src/reading/AzureUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/AzureUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/AzureUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/AzureUrlReader.test.ts diff --git a/packages/backend-common/src/reading/AzureUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/AzureUrlReader.ts similarity index 91% rename from packages/backend-common/src/reading/AzureUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/AzureUrlReader.ts index 783736b639..b6945f11ea 100644 --- a/packages/backend-common/src/reading/AzureUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/AzureUrlReader.ts @@ -14,6 +14,15 @@ * limitations under the License. */ +import { + UrlReaderService, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchOptions, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; import { getAzureCommitsUrl, getAzureDownloadUrl, @@ -27,17 +36,7 @@ import fetch, { Response } from 'node-fetch'; import { Minimatch } from 'minimatch'; import { Readable } from 'stream'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; -import { - ReadTreeResponseFactory, - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - SearchOptions, - SearchResponse, - UrlReader, - ReadUrlOptions, - ReadUrlResponse, -} from './types'; +import { ReadTreeResponseFactory, ReaderFactory } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; /** @@ -45,7 +44,7 @@ import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; * * @public */ -export class AzureUrlReader implements UrlReader { +export class AzureUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, treeResponseFactory }) => { const integrations = ScmIntegrations.fromConfig(config); const credentialProvider = @@ -75,8 +74,8 @@ export class AzureUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { // TODO: etag is not implemented yet. const { signal } = options ?? {}; @@ -114,8 +113,8 @@ export class AzureUrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { const { etag, filter, signal } = options ?? {}; // TODO: Support filepath based reading tree feature like other providers @@ -180,7 +179,10 @@ export class AzureUrlReader implements UrlReader { }); } - async search(url: string, options?: SearchOptions): Promise { + async search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise { const treeUrl = new URL(url); const path = treeUrl.searchParams.get('path'); diff --git a/packages/backend-common/src/reading/BitbucketCloudUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/BitbucketCloudUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.test.ts diff --git a/packages/backend-common/src/reading/BitbucketCloudUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts similarity index 92% rename from packages/backend-common/src/reading/BitbucketCloudUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts index 93587cd6ae..5235215758 100644 --- a/packages/backend-common/src/reading/BitbucketCloudUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketCloudUrlReader.ts @@ -14,6 +14,15 @@ * limitations under the License. */ +import { + UrlReaderService, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchOptions, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; import { BitbucketCloudIntegration, @@ -28,17 +37,7 @@ import parseGitUrl from 'git-url-parse'; import { trimEnd } from 'lodash'; import { Minimatch } from 'minimatch'; import { Readable } from 'stream'; -import { - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - ReadTreeResponseFactory, - ReadUrlOptions, - ReadUrlResponse, - SearchOptions, - SearchResponse, - UrlReader, -} from './types'; +import { ReaderFactory, ReadTreeResponseFactory } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { parseLastModified } from './util'; @@ -47,7 +46,7 @@ import { parseLastModified } from './util'; * * @public */ -export class BitbucketCloudUrlReader implements UrlReader { +export class BitbucketCloudUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, treeResponseFactory }) => { const integrations = ScmIntegrations.fromConfig(config); return integrations.bitbucketCloud.list().map(integration => { @@ -79,8 +78,8 @@ export class BitbucketCloudUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { const { etag, lastModifiedAfter, signal } = options ?? {}; const bitbucketUrl = getBitbucketCloudFileFetchUrl( url, @@ -134,8 +133,8 @@ export class BitbucketCloudUrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { const { filepath } = parseGitUrl(url); const lastCommitShortHash = await this.getLastCommitShortHash(url); @@ -167,7 +166,10 @@ export class BitbucketCloudUrlReader implements UrlReader { }); } - async search(url: string, options?: SearchOptions): Promise { + async search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise { const { filepath } = parseGitUrl(url); const matcher = new Minimatch(filepath); diff --git a/packages/backend-common/src/reading/BitbucketServerUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketServerUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/BitbucketServerUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketServerUrlReader.test.ts diff --git a/packages/backend-common/src/reading/BitbucketServerUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketServerUrlReader.ts similarity index 92% rename from packages/backend-common/src/reading/BitbucketServerUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketServerUrlReader.ts index 8e2f1708c4..d539b006ed 100644 --- a/packages/backend-common/src/reading/BitbucketServerUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketServerUrlReader.ts @@ -14,6 +14,15 @@ * limitations under the License. */ +import { + UrlReaderService, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchOptions, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; import { BitbucketServerIntegration, @@ -27,17 +36,7 @@ import parseGitUrl from 'git-url-parse'; import { trimEnd } from 'lodash'; import { Minimatch } from 'minimatch'; import { Readable } from 'stream'; -import { - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - ReadTreeResponseFactory, - ReadUrlOptions, - ReadUrlResponse, - SearchOptions, - SearchResponse, - UrlReader, -} from './types'; +import { ReaderFactory, ReadTreeResponseFactory } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { parseLastModified } from './util'; @@ -46,7 +45,7 @@ import { parseLastModified } from './util'; * * @public */ -export class BitbucketServerUrlReader implements UrlReader { +export class BitbucketServerUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, treeResponseFactory }) => { const integrations = ScmIntegrations.fromConfig(config); return integrations.bitbucketServer.list().map(integration => { @@ -70,8 +69,8 @@ export class BitbucketServerUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { const { etag, lastModifiedAfter, signal } = options ?? {}; const bitbucketUrl = getBitbucketServerFileFetchUrl( url, @@ -125,8 +124,8 @@ export class BitbucketServerUrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { const { filepath } = parseGitUrl(url); const lastCommitShortHash = await this.getLastCommitShortHash(url); @@ -158,7 +157,10 @@ export class BitbucketServerUrlReader implements UrlReader { }); } - async search(url: string, options?: SearchOptions): Promise { + async search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise { const { filepath } = parseGitUrl(url); const matcher = new Minimatch(filepath); diff --git a/packages/backend-common/src/reading/BitbucketUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/BitbucketUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketUrlReader.test.ts diff --git a/packages/backend-common/src/reading/BitbucketUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketUrlReader.ts similarity index 93% rename from packages/backend-common/src/reading/BitbucketUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketUrlReader.ts index 090fe9098d..7f831800d3 100644 --- a/packages/backend-common/src/reading/BitbucketUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/BitbucketUrlReader.ts @@ -14,6 +14,15 @@ * limitations under the License. */ +import { + UrlReaderService, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchOptions, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; import { BitbucketIntegration, @@ -29,17 +38,7 @@ import { trimEnd } from 'lodash'; import { Minimatch } from 'minimatch'; import { Readable } from 'stream'; import { LoggerService } from '@backstage/backend-plugin-api'; -import { - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - ReadTreeResponseFactory, - ReadUrlOptions, - ReadUrlResponse, - SearchOptions, - SearchResponse, - UrlReader, -} from './types'; +import { ReaderFactory, ReadTreeResponseFactory } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { parseLastModified } from './util'; @@ -50,7 +49,7 @@ import { parseLastModified } from './util'; * @public * @deprecated in favor of BitbucketCloudUrlReader and BitbucketServerUrlReader */ -export class BitbucketUrlReader implements UrlReader { +export class BitbucketUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, logger, treeResponseFactory }) => { const integrations = ScmIntegrations.fromConfig(config); return integrations.bitbucket @@ -95,8 +94,8 @@ export class BitbucketUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { const { etag, lastModifiedAfter, signal } = options ?? {}; const bitbucketUrl = getBitbucketFileFetchUrl(url, this.integration.config); const requestOptions = getBitbucketRequestOptions(this.integration.config); @@ -145,8 +144,8 @@ export class BitbucketUrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { const { filepath } = parseGitUrl(url); const lastCommitShortHash = await this.getLastCommitShortHash(url); @@ -178,7 +177,10 @@ export class BitbucketUrlReader implements UrlReader { }); } - async search(url: string, options?: SearchOptions): Promise { + async search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise { const { filepath } = parseGitUrl(url); const matcher = new Minimatch(filepath); diff --git a/packages/backend-common/src/reading/FetchUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/FetchUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/FetchUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/FetchUrlReader.test.ts diff --git a/packages/backend-common/src/reading/FetchUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/FetchUrlReader.ts similarity index 92% rename from packages/backend-common/src/reading/FetchUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/FetchUrlReader.ts index 475a98ffdc..d62eaedc1a 100644 --- a/packages/backend-common/src/reading/FetchUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/FetchUrlReader.ts @@ -14,16 +14,16 @@ * limitations under the License. */ +import { + UrlReaderService, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; import fetch, { Response } from 'node-fetch'; -import { - ReaderFactory, - ReadTreeResponse, - ReadUrlOptions, - ReadUrlResponse, - SearchResponse, - UrlReader, -} from './types'; +import { ReaderFactory } from './types'; import path from 'path'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { parseLastModified } from './util'; @@ -68,7 +68,7 @@ const parsePortPredicate = (port: string | undefined) => { * * @public */ -export class FetchUrlReader implements UrlReader { +export class FetchUrlReader implements UrlReaderService { /** * The factory creates a single reader that will be used for reading any URL that's listed * in configuration at `backend.reading.allow`. The allow list contains a list of objects describing @@ -121,8 +121,8 @@ export class FetchUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { let response: Response; try { response = await fetch(url, { @@ -165,11 +165,11 @@ export class FetchUrlReader implements UrlReader { throw new Error(message); } - async readTree(): Promise { + async readTree(): Promise { throw new Error('FetchUrlReader does not implement readTree'); } - async search(): Promise { + async search(): Promise { throw new Error('FetchUrlReader does not implement search'); } diff --git a/packages/backend-common/src/reading/GerritUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/GerritUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.test.ts diff --git a/packages/backend-common/src/reading/GerritUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.ts similarity index 93% rename from packages/backend-common/src/reading/GerritUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.ts index 52a541382b..2274182e02 100644 --- a/packages/backend-common/src/reading/GerritUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GerritUrlReader.ts @@ -14,6 +14,14 @@ * limitations under the License. */ +import { + UrlReaderService, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; import { Base64Decode } from 'base64-stream'; import concatStream from 'concat-stream'; import fs from 'fs-extra'; @@ -35,16 +43,7 @@ import { parseGerritJsonResponse, } from '@backstage/integration'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; -import { - ReadTreeOptions, - ReadTreeResponse, - ReadTreeResponseFactory, - ReadUrlOptions, - ReadUrlResponse, - ReaderFactory, - SearchResponse, - UrlReader, -} from './types'; +import { ReadTreeResponseFactory, ReaderFactory } from './types'; import { Git } from './git'; const pipeline = promisify(pipelineCb); @@ -78,7 +77,7 @@ const createTemporaryDirectory = async (workDir: string): Promise => * * @public */ -export class GerritUrlReader implements UrlReader { +export class GerritUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, treeResponseFactory }) => { const integrations = ScmIntegrations.fromConfig(config); if (!integrations.gerrit) { @@ -121,8 +120,8 @@ export class GerritUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { const apiUrl = getGerritFileContentsApiUrl(this.integration.config, url); let response: Response; try { @@ -166,8 +165,8 @@ export class GerritUrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { const apiUrl = getGerritBranchApiUrl(this.integration.config, url); let response: Response; try { @@ -203,7 +202,7 @@ export class GerritUrlReader implements UrlReader { return this.readTreeFromGitClone(url, branchInfo.revision, options); } - async search(): Promise { + async search(): Promise { throw new Error('GerritReader does not implement search'); } @@ -215,7 +214,7 @@ export class GerritUrlReader implements UrlReader { private async readTreeFromGitClone( url: string, revision: string, - options?: ReadTreeOptions, + options?: UrlReaderReadTreeOptions, ) { const { filePath } = parseGerritGitilesUrl(this.integration.config, url); @@ -258,7 +257,7 @@ export class GerritUrlReader implements UrlReader { private async readTreeFromGitiles( url: string, revision: string, - options?: ReadTreeOptions, + options?: UrlReaderReadTreeOptions, ) { const { branch, filePath, project } = parseGerritGitilesUrl( this.integration.config, diff --git a/packages/backend-common/src/reading/GiteaUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GiteaUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/GiteaUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/GiteaUrlReader.test.ts diff --git a/packages/backend-common/src/reading/GiteaUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GiteaUrlReader.ts similarity index 90% rename from packages/backend-common/src/reading/GiteaUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/GiteaUrlReader.ts index c8fab45157..da1b30ab6b 100644 --- a/packages/backend-common/src/reading/GiteaUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GiteaUrlReader.ts @@ -13,6 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import { + UrlReaderService, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; import { getGiteaFileContentsUrl, getGiteaArchiveUrl, @@ -22,16 +31,7 @@ import { GiteaIntegration, ScmIntegrations, } from '@backstage/integration'; -import { - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - ReadTreeResponseFactory, - ReadUrlOptions, - ReadUrlResponse, - SearchResponse, - UrlReader, -} from './types'; +import { ReaderFactory, ReadTreeResponseFactory } from './types'; import fetch, { Response } from 'node-fetch'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { @@ -47,7 +47,7 @@ import { parseLastModified } from './util'; * * @public */ -export class GiteaUrlReader implements UrlReader { +export class GiteaUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, treeResponseFactory }) => { return ScmIntegrations.fromConfig(config) .gitea.list() @@ -74,8 +74,8 @@ export class GiteaUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { let response: Response; const blobUrl = getGiteaFileContentsUrl(this.integration.config, url); @@ -126,8 +126,8 @@ export class GiteaUrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { const lastCommitHash = await this.getLastCommitHash(url); if (options?.etag && options.etag === lastCommitHash) { throw new NotModifiedError(); @@ -156,7 +156,7 @@ export class GiteaUrlReader implements UrlReader { }); } - search(): Promise { + search(): Promise { throw new Error('GiteaUrlReader search not implemented.'); } diff --git a/packages/backend-common/src/reading/GithubUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GithubUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/GithubUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/GithubUrlReader.test.ts diff --git a/packages/backend-common/src/reading/GithubUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GithubUrlReader.ts similarity index 93% rename from packages/backend-common/src/reading/GithubUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/GithubUrlReader.ts index b49945013d..60e9b210cd 100644 --- a/packages/backend-common/src/reading/GithubUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GithubUrlReader.ts @@ -14,6 +14,16 @@ * limitations under the License. */ +import { + UrlReaderService, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchOptions, + UrlReaderSearchResponse, + UrlReaderSearchResponseFile, +} from '@backstage/backend-plugin-api'; import { getGithubFileFetchUrl, DefaultGithubCredentialsProvider, @@ -28,18 +38,7 @@ import parseGitUrl from 'git-url-parse'; import { Minimatch } from 'minimatch'; import { Readable } from 'stream'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; -import { - ReadTreeResponseFactory, - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - SearchOptions, - SearchResponse, - SearchResponseFile, - UrlReader, - ReadUrlOptions, - ReadUrlResponse, -} from './types'; +import { ReadTreeResponseFactory, ReaderFactory } from './types'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { parseLastModified } from './util'; @@ -58,7 +57,7 @@ export type GhBlobResponse = * * @public */ -export class GithubUrlReader implements UrlReader { +export class GithubUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, treeResponseFactory }) => { const integrations = ScmIntegrations.fromConfig(config); const credentialsProvider = @@ -113,8 +112,8 @@ export class GithubUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { const credentials = await this.getCredentials(url, options); const ghUrl = getGithubFileFetchUrl( @@ -149,8 +148,8 @@ export class GithubUrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { const repoDetails = await this.getRepoDetails(url); const commitSha = repoDetails.commitSha; @@ -176,7 +175,10 @@ export class GithubUrlReader implements UrlReader { ); } - async search(url: string, options?: SearchOptions): Promise { + async search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise { const repoDetails = await this.getRepoDetails(url); const commitSha = repoDetails.commitSha; @@ -209,8 +211,8 @@ export class GithubUrlReader implements UrlReader { sha: string, subpath: string, init: RequestInit, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { // archive_url looks like "https://api.github.com/repos/owner/repo/{archive_format}{/ref}" const archive = await this.fetchResponse( archiveUrl @@ -236,7 +238,7 @@ export class GithubUrlReader implements UrlReader { sha: string, query: string, init: RequestInit, - ): Promise { + ): Promise { function pathToUrl(path: string): string { // TODO(freben): Use the integration package facility for this instead // pathname starts as /backstage/backstage/blob/master/ diff --git a/packages/backend-common/src/reading/GitlabUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GitlabUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/GitlabUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/GitlabUrlReader.test.ts diff --git a/packages/backend-common/src/reading/GitlabUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GitlabUrlReader.ts similarity index 95% rename from packages/backend-common/src/reading/GitlabUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/GitlabUrlReader.ts index 178e65b40a..b45a61a40e 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GitlabUrlReader.ts @@ -14,6 +14,15 @@ * limitations under the License. */ +import { + UrlReaderService, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchOptions, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; import { getGitLabFileFetchUrl, getGitLabIntegrationRelativePath, @@ -26,17 +35,7 @@ import parseGitUrl from 'git-url-parse'; import { Minimatch } from 'minimatch'; import { Readable } from 'stream'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; -import { - ReadTreeResponseFactory, - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - SearchOptions, - SearchResponse, - UrlReader, - ReadUrlResponse, - ReadUrlOptions, -} from './types'; +import { ReadTreeResponseFactory, ReaderFactory } from './types'; import { trimEnd, trimStart } from 'lodash'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { parseLastModified } from './util'; @@ -46,7 +45,7 @@ import { parseLastModified } from './util'; * * @public */ -export class GitlabUrlReader implements UrlReader { +export class GitlabUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, treeResponseFactory }) => { const integrations = ScmIntegrations.fromConfig(config); return integrations.gitlab.list().map(integration => { @@ -70,8 +69,8 @@ export class GitlabUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { const { etag, lastModifiedAfter, signal } = options ?? {}; const builtUrl = await this.getGitlabFetchUrl(url); @@ -119,8 +118,8 @@ export class GitlabUrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { const { etag, signal } = options ?? {}; const { ref, full_name, filepath } = parseGitUrl(url); @@ -236,7 +235,10 @@ export class GitlabUrlReader implements UrlReader { }); } - async search(url: string, options?: SearchOptions): Promise { + async search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise { const { filepath } = parseGitUrl(url); const staticPart = this.getStaticPart(filepath); const matcher = new Minimatch(filepath); diff --git a/packages/backend-common/src/reading/GoogleGcsUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.test.ts similarity index 95% rename from packages/backend-common/src/reading/GoogleGcsUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.test.ts index bc31818d23..318b134aa4 100644 --- a/packages/backend-common/src/reading/GoogleGcsUrlReader.test.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.test.ts @@ -19,7 +19,7 @@ import { JsonObject } from '@backstage/types'; import { DefaultReadTreeResponseFactory } from './tree'; import { GoogleGcsUrlReader } from './GoogleGcsUrlReader'; import { UrlReaderPredicateTuple } from './types'; -import packageinfo from '../../package.json'; +import packageinfo from '@backstage/backend-defaults/package.json'; import { mockServices } from '@backstage/backend-test-utils'; const bucketGetFilesMock = jest.fn(); @@ -80,7 +80,7 @@ describe('GcsUrlReader', () => { }); it('check if userAgent has been called with this key value', async () => { const getStorage: any = { - userAgent: `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`, + userAgent: `backstage/backend-defaults.GoogleGcsUrlReader/${packageinfo.version}`, }; jest.mock('@google-cloud/storage', () => { return { @@ -89,7 +89,7 @@ describe('GcsUrlReader', () => { }); const getUserAgent = getStorage.userAgent.toString(); expect(getUserAgent).toBe( - `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`, + `backstage/backend-defaults.GoogleGcsUrlReader/${packageinfo.version}`, ); }); diff --git a/packages/backend-common/src/reading/GoogleGcsUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.ts similarity index 84% rename from packages/backend-common/src/reading/GoogleGcsUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.ts index 9cf6bbcd61..124461ff80 100644 --- a/packages/backend-common/src/reading/GoogleGcsUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/GoogleGcsUrlReader.ts @@ -14,15 +14,15 @@ * limitations under the License. */ -import { Storage } from '@google-cloud/storage'; import { - ReaderFactory, - ReadTreeResponse, - ReadUrlOptions, - ReadUrlResponse, - SearchResponse, - UrlReader, -} from './types'; + UrlReaderService, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchResponse, +} from '@backstage/backend-plugin-api'; +import { Storage } from '@google-cloud/storage'; +import { ReaderFactory } from './types'; import getRawBody from 'raw-body'; import { GoogleGcsIntegrationConfig, @@ -30,7 +30,7 @@ import { } from '@backstage/integration'; import { Readable } from 'stream'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; -import packageinfo from '../../package.json'; +import packageinfo from '@backstage/backend-defaults/package.json'; const GOOGLE_GCS_HOST = 'storage.cloud.google.com'; @@ -56,7 +56,7 @@ const parseURL = ( * * @public */ -export class GoogleGcsUrlReader implements UrlReader { +export class GoogleGcsUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, logger }) => { if (!config.has('integrations.googleGcs')) { return []; @@ -70,7 +70,7 @@ export class GoogleGcsUrlReader implements UrlReader { 'googleGcs credentials not found in config. Using default credentials provider.', ); storage = new Storage({ - userAgent: `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`, + userAgent: `backstage/backend-defaults.GoogleGcsUrlReader/${packageinfo.version}`, }); } else { storage = new Storage({ @@ -78,7 +78,7 @@ export class GoogleGcsUrlReader implements UrlReader { client_email: gcsConfig.clientEmail || undefined, private_key: gcsConfig.privateKey || undefined, }, - userAgent: `backstage/backend-common.GoogleGcsUrlReader/${packageinfo.version}`, + userAgent: `backstage/backend-defaults.GoogleGcsUrlReader/${packageinfo.version}`, }); } const reader = new GoogleGcsUrlReader(gcsConfig, storage); @@ -106,18 +106,18 @@ export class GoogleGcsUrlReader implements UrlReader { async readUrl( url: string, - _options?: ReadUrlOptions, - ): Promise { + _options?: UrlReaderReadUrlOptions, + ): Promise { // TODO etag is not implemented yet. const stream = this.readStreamFromUrl(url); return ReadUrlResponseFactory.fromReadable(stream); } - async readTree(): Promise { + async readTree(): Promise { throw new Error('GcsUrlReader does not implement readTree'); } - async search(url: string): Promise { + async search(url: string): Promise { const { bucket, key: pattern } = parseURL(url); if (!pattern.endsWith('*') || pattern.indexOf('*') !== pattern.length - 1) { diff --git a/packages/backend-common/src/reading/HarnessUrlReader.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/HarnessUrlReader.test.ts similarity index 100% rename from packages/backend-common/src/reading/HarnessUrlReader.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/HarnessUrlReader.test.ts diff --git a/packages/backend-common/src/reading/HarnessUrlReader.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/HarnessUrlReader.ts similarity index 90% rename from packages/backend-common/src/reading/HarnessUrlReader.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/HarnessUrlReader.ts index 76ad882d80..23b5284b43 100644 --- a/packages/backend-common/src/reading/HarnessUrlReader.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/HarnessUrlReader.ts @@ -13,6 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +import { + UrlReaderService, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchResponse, + UrlReaderReadTreeOptions, +} from '@backstage/backend-plugin-api'; import { getHarnessRequestOptions, getHarnessFileContentsUrl, @@ -22,16 +31,7 @@ import { getHarnessArchiveUrl, parseHarnessUrl, } from '@backstage/integration'; -import { - ReaderFactory, - ReadTreeOptions, - ReadTreeResponse, - SearchResponse, - ReadTreeResponseFactory, - ReadUrlOptions, - ReadUrlResponse, - UrlReader, -} from './types'; +import { ReadTreeResponseFactory, ReaderFactory } from './types'; import fetch, { Response } from 'node-fetch'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; import { @@ -47,7 +47,7 @@ import { Readable } from 'stream'; * * @public */ -export class HarnessUrlReader implements UrlReader { +export class HarnessUrlReader implements UrlReaderService { static factory: ReaderFactory = ({ config, treeResponseFactory }) => { return ScmIntegrations.fromConfig(config) .harness.list() @@ -75,8 +75,8 @@ export class HarnessUrlReader implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { let response: Response; const blobUrl = getHarnessFileContentsUrl(this.integration.config, url); @@ -123,8 +123,8 @@ export class HarnessUrlReader implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { const lastCommitHash = await this.getLastCommitHash(url); if (options?.etag && options.etag === lastCommitHash) { @@ -153,7 +153,8 @@ export class HarnessUrlReader implements UrlReader { filter: options?.filter, }); } - search(): Promise { + + search(): Promise { throw new Error('HarnessUrlReader search not implemented.'); } diff --git a/packages/backend-common/src/reading/ReadUrlResponseFactory.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/ReadUrlResponseFactory.test.ts similarity index 100% rename from packages/backend-common/src/reading/ReadUrlResponseFactory.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/ReadUrlResponseFactory.test.ts diff --git a/packages/backend-common/src/reading/ReadUrlResponseFactory.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/ReadUrlResponseFactory.ts similarity index 91% rename from packages/backend-common/src/reading/ReadUrlResponseFactory.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/ReadUrlResponseFactory.ts index 5eb4b2f5bc..805008c34e 100644 --- a/packages/backend-common/src/reading/ReadUrlResponseFactory.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/ReadUrlResponseFactory.ts @@ -15,12 +15,10 @@ */ import { ConflictError } from '@backstage/errors'; +import { UrlReaderReadUrlResponse } from '@backstage/backend-plugin-api'; import getRawBody from 'raw-body'; import { Readable } from 'stream'; -import { - ReadUrlResponse, - ReadUrlResponseFactoryFromStreamOptions, -} from './types'; +import { ReadUrlResponseFactoryFromStreamOptions } from './types'; /** * Utility class for UrlReader implementations to create valid ReadUrlResponse @@ -35,7 +33,7 @@ export class ReadUrlResponseFactory { static async fromReadable( stream: Readable, options?: ReadUrlResponseFactoryFromStreamOptions, - ): Promise { + ): Promise { // Reference to eventual buffer enables callers to call buffer() multiple // times without consequence. let buffer: Promise; @@ -71,7 +69,7 @@ export class ReadUrlResponseFactory { static async fromNodeJSReadable( oldStyleStream: NodeJS.ReadableStream, options?: ReadUrlResponseFactoryFromStreamOptions, - ): Promise { + ): Promise { const readable = Readable.from(oldStyleStream); return ReadUrlResponseFactory.fromReadable(readable, options); } diff --git a/packages/backend-common/src/reading/UrlReaderPredicateMux.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaderPredicateMux.test.ts similarity index 100% rename from packages/backend-common/src/reading/UrlReaderPredicateMux.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaderPredicateMux.test.ts diff --git a/packages/backend-common/src/reading/UrlReaderPredicateMux.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaderPredicateMux.ts similarity index 74% rename from packages/backend-common/src/reading/UrlReaderPredicateMux.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaderPredicateMux.ts index a7c2e5f983..b6db60af0a 100644 --- a/packages/backend-common/src/reading/UrlReaderPredicateMux.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaderPredicateMux.ts @@ -14,17 +14,17 @@ * limitations under the License. */ -import { NotAllowedError } from '@backstage/errors'; import { - ReadTreeOptions, - ReadTreeResponse, - ReadUrlOptions, - ReadUrlResponse, - SearchOptions, - SearchResponse, - UrlReader, - UrlReaderPredicateTuple, -} from './types'; + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadUrlOptions, + UrlReaderReadUrlResponse, + UrlReaderSearchOptions, + UrlReaderSearchResponse, + UrlReaderService, +} from '@backstage/backend-plugin-api'; +import { NotAllowedError } from '@backstage/errors'; +import { UrlReaderPredicateTuple } from './types'; function notAllowedMessage(url: string) { return ( @@ -35,10 +35,10 @@ function notAllowedMessage(url: string) { } /** - * A UrlReader implementation that selects from a set of UrlReaders + * A UrlReaderService implementation that selects from a set of readers * based on a predicate tied to each reader. */ -export class UrlReaderPredicateMux implements UrlReader { +export class UrlReaderPredicateMux implements UrlReaderService { private readonly readers: UrlReaderPredicateTuple[] = []; register(tuple: UrlReaderPredicateTuple): void { @@ -47,8 +47,8 @@ export class UrlReaderPredicateMux implements UrlReader { async readUrl( url: string, - options?: ReadUrlOptions, - ): Promise { + options?: UrlReaderReadUrlOptions, + ): Promise { const parsed = new URL(url); for (const { predicate, reader } of this.readers) { @@ -62,8 +62,8 @@ export class UrlReaderPredicateMux implements UrlReader { async readTree( url: string, - options?: ReadTreeOptions, - ): Promise { + options?: UrlReaderReadTreeOptions, + ): Promise { const parsed = new URL(url); for (const { predicate, reader } of this.readers) { @@ -75,7 +75,10 @@ export class UrlReaderPredicateMux implements UrlReader { throw new NotAllowedError(notAllowedMessage(url)); } - async search(url: string, options?: SearchOptions): Promise { + async search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise { const parsed = new URL(url); for (const { predicate, reader } of this.readers) { diff --git a/packages/backend-common/src/reading/UrlReaders.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaders.ts similarity index 94% rename from packages/backend-common/src/reading/UrlReaders.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaders.ts index 7aaaf120b4..cb496dd702 100644 --- a/packages/backend-common/src/reading/UrlReaders.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/UrlReaders.ts @@ -14,9 +14,9 @@ * limitations under the License. */ -import { LoggerService } from '@backstage/backend-plugin-api'; +import { LoggerService, UrlReaderService } from '@backstage/backend-plugin-api'; import { Config } from '@backstage/config'; -import { ReaderFactory, UrlReader } from './types'; +import { ReaderFactory } from './types'; import { UrlReaderPredicateMux } from './UrlReaderPredicateMux'; import { AzureUrlReader } from './AzureUrlReader'; import { BitbucketCloudUrlReader } from './BitbucketCloudUrlReader'; @@ -56,7 +56,7 @@ export class UrlReaders { /** * Creates a custom {@link @backstage/backend-plugin-api#UrlReaderService} wrapper for your own set of factories. */ - static create(options: UrlReadersOptions): UrlReader { + static create(options: UrlReadersOptions): UrlReaderService { const { logger, config, factories } = options; const mux = new UrlReaderPredicateMux(); const treeResponseFactory = DefaultReadTreeResponseFactory.create({ diff --git a/packages/backend-common/src/reading/__fixtures__/awsCodeCommit/awsCodeCommit-mock-object.yaml b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/awsCodeCommit/awsCodeCommit-mock-object.yaml similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/awsCodeCommit/awsCodeCommit-mock-object.yaml rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/awsCodeCommit/awsCodeCommit-mock-object.yaml diff --git a/packages/backend-common/src/reading/__fixtures__/awsCodeCommit/subFolder/awsCodeCommit-mock-object2.yaml b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/awsCodeCommit/subFolder/awsCodeCommit-mock-object2.yaml similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/awsCodeCommit/subFolder/awsCodeCommit-mock-object2.yaml rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/awsCodeCommit/subFolder/awsCodeCommit-mock-object2.yaml diff --git a/packages/backend-common/src/reading/__fixtures__/awsS3/awsS3-mock-object.yaml b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/awsS3/awsS3-mock-object.yaml similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/awsS3/awsS3-mock-object.yaml rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/awsS3/awsS3-mock-object.yaml diff --git a/packages/backend-common/src/reading/__fixtures__/awsS3/awsS3-mock-object2.yaml b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/awsS3/awsS3-mock-object2.yaml similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/awsS3/awsS3-mock-object2.yaml rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/awsS3/awsS3-mock-object2.yaml diff --git a/packages/backend-common/src/reading/__fixtures__/awsS3/awsS3-mock-object3.yaml b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/awsS3/awsS3-mock-object3.yaml similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/awsS3/awsS3-mock-object3.yaml rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/awsS3/awsS3-mock-object3.yaml diff --git a/packages/backend-common/src/reading/__fixtures__/backstage-mock-etag123.tar.gz b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/backstage-mock-etag123.tar.gz similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/backstage-mock-etag123.tar.gz rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/backstage-mock-etag123.tar.gz diff --git a/packages/backend-common/src/reading/__fixtures__/bitbucket-repo-with-commit-hash.tar.gz b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/bitbucket-repo-with-commit-hash.tar.gz similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/bitbucket-repo-with-commit-hash.tar.gz rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/bitbucket-repo-with-commit-hash.tar.gz diff --git a/packages/backend-common/src/reading/__fixtures__/bitbucket-server-repo.tar.gz b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/bitbucket-server-repo.tar.gz similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/bitbucket-server-repo.tar.gz rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/bitbucket-server-repo.tar.gz diff --git a/packages/backend-common/src/reading/__fixtures__/gerrit/branch-info-response.txt b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gerrit/branch-info-response.txt similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/gerrit/branch-info-response.txt rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gerrit/branch-info-response.txt diff --git a/packages/backend-common/src/reading/__fixtures__/gerrit/gerrit-master-docs.tar.gz b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gerrit/gerrit-master-docs.tar.gz similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/gerrit/gerrit-master-docs.tar.gz rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gerrit/gerrit-master-docs.tar.gz diff --git a/packages/backend-common/src/reading/__fixtures__/gerrit/gerrit-master.tar.gz b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gerrit/gerrit-master.tar.gz similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/gerrit/gerrit-master.tar.gz rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gerrit/gerrit-master.tar.gz diff --git a/packages/backend-common/src/reading/__fixtures__/gitlab-archive.tar.gz b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gitlab-archive.tar.gz similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/gitlab-archive.tar.gz rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gitlab-archive.tar.gz diff --git a/packages/backend-common/src/reading/__fixtures__/gitlab-archive.zip b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gitlab-archive.zip similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/gitlab-archive.zip rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gitlab-archive.zip diff --git a/packages/backend-common/src/reading/__fixtures__/gitlab-subpath-archive.tar.gz b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gitlab-subpath-archive.tar.gz similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/gitlab-subpath-archive.tar.gz rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/gitlab-subpath-archive.tar.gz diff --git a/packages/backend-common/src/reading/__fixtures__/mallory.zip b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/mallory.zip similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/mallory.zip rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/mallory.zip diff --git a/packages/backend-common/src/reading/__fixtures__/mock-corrupted.zip b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/mock-corrupted.zip similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/mock-corrupted.zip rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/mock-corrupted.zip diff --git a/packages/backend-common/src/reading/__fixtures__/mock-main.tar.gz b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/mock-main.tar.gz similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/mock-main.tar.gz rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/mock-main.tar.gz diff --git a/packages/backend-common/src/reading/__fixtures__/mock-main.zip b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/mock-main.zip similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/mock-main.zip rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/mock-main.zip diff --git a/packages/backend-common/src/reading/__fixtures__/mock-with-extra-root-dir.zip b/packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/mock-with-extra-root-dir.zip similarity index 100% rename from packages/backend-common/src/reading/__fixtures__/mock-with-extra-root-dir.zip rename to packages/backend-defaults/src/entrypoints/urlReader/lib/__fixtures__/mock-with-extra-root-dir.zip diff --git a/packages/backend-common/src/reading/git.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/git.ts similarity index 100% rename from packages/backend-common/src/reading/git.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/git.ts diff --git a/packages/backend-defaults/src/entrypoints/urlReader/lib/index.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/index.ts new file mode 100644 index 0000000000..678c6ef64b --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/index.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2020 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 { AzureUrlReader } from './AzureUrlReader'; +export { BitbucketCloudUrlReader } from './BitbucketCloudUrlReader'; +export { BitbucketUrlReader } from './BitbucketUrlReader'; +export { BitbucketServerUrlReader } from './BitbucketServerUrlReader'; +export { GerritUrlReader } from './GerritUrlReader'; +export { GithubUrlReader } from './GithubUrlReader'; +export { GitlabUrlReader } from './GitlabUrlReader'; +export { GiteaUrlReader } from './GiteaUrlReader'; +export { HarnessUrlReader } from './HarnessUrlReader'; +export { AwsS3UrlReader } from './AwsS3UrlReader'; +export { FetchUrlReader } from './FetchUrlReader'; +export { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; +export type { + FromReadableArrayOptions, + ReaderFactory, + ReadTreeResponseFactory, + ReadTreeResponseFactoryOptions, + ReadUrlResponseFactoryFromStreamOptions, + UrlReaderPredicateTuple, +} from './types'; +export { UrlReaders } from './UrlReaders'; +export type { UrlReadersOptions } from './UrlReaders'; diff --git a/packages/backend-common/src/reading/tree/ReadTreeResponseFactory.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadTreeResponseFactory.ts similarity index 90% rename from packages/backend-common/src/reading/tree/ReadTreeResponseFactory.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadTreeResponseFactory.ts index 90c58c0efa..e61ce3242e 100644 --- a/packages/backend-common/src/reading/tree/ReadTreeResponseFactory.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadTreeResponseFactory.ts @@ -17,7 +17,6 @@ import os from 'os'; import { Config } from '@backstage/config'; import { - ReadTreeResponse, ReadTreeResponseFactoryOptions, ReadTreeResponseFactory, FromReadableArrayOptions, @@ -25,6 +24,7 @@ import { import { TarArchiveResponse } from './TarArchiveResponse'; import { ZipArchiveResponse } from './ZipArchiveResponse'; import { ReadableArrayResponse } from './ReadableArrayResponse'; +import { UrlReaderReadTreeResponse } from '@backstage/backend-plugin-api'; export class DefaultReadTreeResponseFactory implements ReadTreeResponseFactory { static create(options: { config: Config }): DefaultReadTreeResponseFactory { @@ -40,7 +40,7 @@ export class DefaultReadTreeResponseFactory implements ReadTreeResponseFactory { options: ReadTreeResponseFactoryOptions & { stripFirstDirectory?: boolean; }, - ): Promise { + ): Promise { return new TarArchiveResponse( options.stream, options.subpath ?? '', @@ -53,7 +53,7 @@ export class DefaultReadTreeResponseFactory implements ReadTreeResponseFactory { async fromZipArchive( options: ReadTreeResponseFactoryOptions, - ): Promise { + ): Promise { return new ZipArchiveResponse( options.stream, options.subpath ?? '', @@ -65,7 +65,7 @@ export class DefaultReadTreeResponseFactory implements ReadTreeResponseFactory { async fromReadableArray( options: FromReadableArrayOptions, - ): Promise { + ): Promise { return new ReadableArrayResponse(options, this.workDir, ''); } } diff --git a/packages/backend-common/src/reading/tree/ReadableArrayResponse.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadableArrayResponse.test.ts similarity index 100% rename from packages/backend-common/src/reading/tree/ReadableArrayResponse.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadableArrayResponse.test.ts diff --git a/packages/backend-common/src/reading/tree/ReadableArrayResponse.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadableArrayResponse.ts similarity index 84% rename from packages/backend-common/src/reading/tree/ReadableArrayResponse.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadableArrayResponse.ts index 3c8bfd1fbc..4e1b24f47f 100644 --- a/packages/backend-common/src/reading/tree/ReadableArrayResponse.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ReadableArrayResponse.ts @@ -14,27 +14,26 @@ * limitations under the License. */ +import { + UrlReaderReadTreeResponse, + UrlReaderReadTreeResponseDirOptions, + UrlReaderReadTreeResponseFile, +} from '@backstage/backend-plugin-api'; import concatStream from 'concat-stream'; import platformPath, { dirname } from 'path'; - import getRawBody from 'raw-body'; import fs from 'fs-extra'; import { promisify } from 'util'; import tar from 'tar'; import { pipeline as pipelineCb, Readable } from 'stream'; -import { - ReadTreeResponse, - ReadTreeResponseFile, - ReadTreeResponseDirOptions, - FromReadableArrayOptions, -} from '../types'; +import { FromReadableArrayOptions } from '../types'; const pipeline = promisify(pipelineCb); /** * Wraps a array of Readable objects into a tree response reader. */ -export class ReadableArrayResponse implements ReadTreeResponse { +export class ReadableArrayResponse implements UrlReaderReadTreeResponse { private read = false; constructor( @@ -53,10 +52,10 @@ export class ReadableArrayResponse implements ReadTreeResponse { this.read = true; } - async files(): Promise { + async files(): Promise { this.onlyOnce(); - const files = Array(); + const files = Array(); for (let i = 0; i < this.stream.length; i++) { if (!this.stream[i].path.endsWith('/')) { @@ -87,7 +86,7 @@ export class ReadableArrayResponse implements ReadTreeResponse { } } - async dir(options?: ReadTreeResponseDirOptions): Promise { + async dir(options?: UrlReaderReadTreeResponseDirOptions): Promise { this.onlyOnce(); const dir = diff --git a/packages/backend-common/src/reading/tree/TarArchiveResponse.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/TarArchiveResponse.test.ts similarity index 100% rename from packages/backend-common/src/reading/tree/TarArchiveResponse.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/tree/TarArchiveResponse.test.ts diff --git a/packages/backend-common/src/reading/tree/TarArchiveResponse.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/TarArchiveResponse.ts similarity index 93% rename from packages/backend-common/src/reading/tree/TarArchiveResponse.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/tree/TarArchiveResponse.ts index 294ec22609..59b750eb1e 100644 --- a/packages/backend-common/src/reading/tree/TarArchiveResponse.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/TarArchiveResponse.ts @@ -14,17 +14,17 @@ * limitations under the License. */ +import { + UrlReaderReadTreeResponse, + UrlReaderReadTreeResponseDirOptions, + UrlReaderReadTreeResponseFile, +} from '@backstage/backend-plugin-api'; import concatStream from 'concat-stream'; import fs from 'fs-extra'; import platformPath from 'path'; import { pipeline as pipelineCb, Readable } from 'stream'; import tar, { Parse, ParseStream, ReadEntry } from 'tar'; import { promisify } from 'util'; -import { - ReadTreeResponse, - ReadTreeResponseDirOptions, - ReadTreeResponseFile, -} from '../types'; import { stripFirstDirectoryFromPath } from './util'; // Tar types for `Parse` is not a proper constructor, but it should be @@ -35,7 +35,7 @@ const pipeline = promisify(pipelineCb); /** * Wraps a tar archive stream into a tree response reader. */ -export class TarArchiveResponse implements ReadTreeResponse { +export class TarArchiveResponse implements UrlReaderReadTreeResponse { private read = false; constructor( @@ -68,10 +68,10 @@ export class TarArchiveResponse implements ReadTreeResponse { this.read = true; } - async files(): Promise { + async files(): Promise { this.onlyOnce(); - const files = Array(); + const files = Array(); const parser = new TarParseStream(); parser.on('entry', (entry: ReadEntry & Readable) => { @@ -142,7 +142,7 @@ export class TarArchiveResponse implements ReadTreeResponse { } } - async dir(options?: ReadTreeResponseDirOptions): Promise { + async dir(options?: UrlReaderReadTreeResponseDirOptions): Promise { this.onlyOnce(); const dir = diff --git a/packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ZipArchiveResponse.test.ts similarity index 100% rename from packages/backend-common/src/reading/tree/ZipArchiveResponse.test.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ZipArchiveResponse.test.ts diff --git a/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ZipArchiveResponse.ts similarity index 93% rename from packages/backend-common/src/reading/tree/ZipArchiveResponse.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ZipArchiveResponse.ts index 412819c5b9..3d3b615ee7 100644 --- a/packages/backend-common/src/reading/tree/ZipArchiveResponse.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/ZipArchiveResponse.ts @@ -14,23 +14,23 @@ * limitations under the License. */ +import { + UrlReaderReadTreeResponse, + UrlReaderReadTreeResponseDirOptions, + UrlReaderReadTreeResponseFile, +} from '@backstage/backend-plugin-api'; import archiver from 'archiver'; import yauzl, { Entry } from 'yauzl'; import fs from 'fs-extra'; import platformPath from 'path'; import { Readable } from 'stream'; -import { - ReadTreeResponse, - ReadTreeResponseDirOptions, - ReadTreeResponseFile, -} from '../types'; import { streamToBuffer } from './util'; import { resolveSafeChildPath } from '@backstage/backend-plugin-api'; /** * Wraps a zip archive stream into a tree response reader. */ -export class ZipArchiveResponse implements ReadTreeResponse { +export class ZipArchiveResponse implements UrlReaderReadTreeResponse { private read = false; constructor( @@ -141,9 +141,9 @@ export class ZipArchiveResponse implements ReadTreeResponse { }); } - async files(): Promise { + async files(): Promise { this.onlyOnce(); - const files = Array(); + const files = Array(); const temporary = await this.streamToTemporaryFile(this.stream); await this.forEveryZipEntry(temporary.fileName, async (entry, content) => { @@ -184,7 +184,7 @@ export class ZipArchiveResponse implements ReadTreeResponse { return archive; } - async dir(options?: ReadTreeResponseDirOptions): Promise { + async dir(options?: UrlReaderReadTreeResponseDirOptions): Promise { this.onlyOnce(); const dir = options?.targetDir ?? diff --git a/packages/backend-common/src/reading/tree/index.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/index.ts similarity index 100% rename from packages/backend-common/src/reading/tree/index.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/tree/index.ts diff --git a/packages/backend-common/src/reading/tree/util.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/tree/util.ts similarity index 100% rename from packages/backend-common/src/reading/tree/util.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/tree/util.ts diff --git a/packages/backend-common/src/reading/types.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/types.ts similarity index 88% rename from packages/backend-common/src/reading/types.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/types.ts index 90a3c6287e..254fe1dcec 100644 --- a/packages/backend-common/src/reading/types.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/lib/types.ts @@ -18,23 +18,10 @@ import { Readable } from 'stream'; import { Config } from '@backstage/config'; import { UrlReaderService, - ReadTreeResponse, + UrlReaderReadTreeResponse, LoggerService, } from '@backstage/backend-plugin-api'; -export type { - UrlReaderService as UrlReader, - ReadTreeOptions, - ReadTreeResponse, - ReadTreeResponseDirOptions, - ReadTreeResponseFile, - ReadUrlResponse, - ReadUrlOptions, - SearchOptions, - SearchResponse, - SearchResponseFile, -} from '@backstage/backend-plugin-api'; - /** * A predicate that decides whether a specific {@link @backstage/backend-plugin-api#UrlReaderService} can handle a * given URL. @@ -123,11 +110,11 @@ export interface ReadTreeResponseFactory { */ stripFirstDirectory?: boolean; }, - ): Promise; + ): Promise; fromZipArchive( options: ReadTreeResponseFactoryOptions, - ): Promise; + ): Promise; fromReadableArray( options: FromReadableArrayOptions, - ): Promise; + ): Promise; } diff --git a/packages/backend-common/src/reading/util.ts b/packages/backend-defaults/src/entrypoints/urlReader/lib/util.ts similarity index 100% rename from packages/backend-common/src/reading/util.ts rename to packages/backend-defaults/src/entrypoints/urlReader/lib/util.ts diff --git a/packages/backend-defaults/src/entrypoints/urlReader/urlReaderServiceFactory.ts b/packages/backend-defaults/src/entrypoints/urlReader/urlReaderServiceFactory.ts index 7f404a24b1..dae8d692cb 100644 --- a/packages/backend-defaults/src/entrypoints/urlReader/urlReaderServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/urlReader/urlReaderServiceFactory.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { UrlReaders } from '@backstage/backend-common'; +import { UrlReaders } from './lib/UrlReaders'; import { coreServices, createServiceFactory, diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 70ab3d8eed..5ba4e758ca 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -466,54 +466,23 @@ export function readSchedulerServiceTaskScheduleDefinitionFromConfig( config: Config, ): SchedulerServiceTaskScheduleDefinition; -// @public -export type ReadTreeOptions = { - filter?( - path: string, - info?: { - size: number; - }, - ): boolean; - etag?: string; - signal?: AbortSignal; - token?: string; -}; +// @public @deprecated (undocumented) +export type ReadTreeOptions = UrlReaderReadTreeOptions; -// @public -export type ReadTreeResponse = { - files(): Promise; - archive(): Promise; - dir(options?: ReadTreeResponseDirOptions): Promise; - etag: string; -}; +// @public @deprecated (undocumented) +export type ReadTreeResponse = UrlReaderReadTreeResponse; -// @public -export type ReadTreeResponseDirOptions = { - targetDir?: string; -}; +// @public @deprecated (undocumented) +export type ReadTreeResponseDirOptions = UrlReaderReadTreeResponseDirOptions; -// @public -export type ReadTreeResponseFile = { - path: string; - content(): Promise; - lastModifiedAt?: Date; -}; +// @public @deprecated (undocumented) +export type ReadTreeResponseFile = UrlReaderReadTreeResponseFile; -// @public -export type ReadUrlOptions = { - etag?: string; - lastModifiedAfter?: Date; - signal?: AbortSignal; - token?: string; -}; +// @public @deprecated (undocumented) +export type ReadUrlOptions = UrlReaderReadUrlOptions; -// @public -export type ReadUrlResponse = { - buffer(): Promise; - stream?(): Readable; - etag?: string; - lastModifiedAt?: Date; -}; +// @public @deprecated (undocumented) +export type ReadUrlResponse = UrlReaderReadUrlResponse; // @public export function resolvePackagePath(name: string, ...paths: string[]): string; @@ -617,25 +586,14 @@ export interface SchedulerServiceTaskScheduleDefinitionConfig { timeout: string | HumanDuration; } -// @public -export type SearchOptions = { - etag?: string; - signal?: AbortSignal; - token?: string; -}; +// @public @deprecated (undocumented) +export type SearchOptions = UrlReaderSearchOptions; -// @public -export type SearchResponse = { - files: SearchResponseFile[]; - etag: string; -}; +// @public @deprecated (undocumented) +export type SearchResponse = UrlReaderSearchResponse; -// @public -export type SearchResponseFile = { - url: string; - content(): Promise; - lastModifiedAt?: Date; -}; +// @public @deprecated (undocumented) +export type SearchResponseFile = UrlReaderSearchResponseFile; // @public (undocumented) export interface ServiceFactory< @@ -680,11 +638,89 @@ export interface TokenManagerService { }>; } +// @public +export type UrlReaderReadTreeOptions = { + filter?( + path: string, + info?: { + size: number; + }, + ): boolean; + etag?: string; + signal?: AbortSignal; + token?: string; +}; + +// @public +export type UrlReaderReadTreeResponse = { + files(): Promise; + archive(): Promise; + dir(options?: UrlReaderReadTreeResponseDirOptions): Promise; + etag: string; +}; + +// @public +export type UrlReaderReadTreeResponseDirOptions = { + targetDir?: string; +}; + +// @public +export type UrlReaderReadTreeResponseFile = { + path: string; + content(): Promise; + lastModifiedAt?: Date; +}; + +// @public +export type UrlReaderReadUrlOptions = { + etag?: string; + lastModifiedAfter?: Date; + signal?: AbortSignal; + token?: string; +}; + +// @public +export type UrlReaderReadUrlResponse = { + buffer(): Promise; + stream?(): Readable; + etag?: string; + lastModifiedAt?: Date; +}; + +// @public +export type UrlReaderSearchOptions = { + etag?: string; + signal?: AbortSignal; + token?: string; +}; + +// @public +export type UrlReaderSearchResponse = { + files: UrlReaderSearchResponseFile[]; + etag: string; +}; + +// @public +export type UrlReaderSearchResponseFile = { + url: string; + content(): Promise; + lastModifiedAt?: Date; +}; + // @public export interface UrlReaderService { - readTree(url: string, options?: ReadTreeOptions): Promise; - readUrl(url: string, options?: ReadUrlOptions): Promise; - search(url: string, options?: SearchOptions): Promise; + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; + search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise; } // @public diff --git a/packages/backend-plugin-api/src/services/definitions/UrlReaderService.ts b/packages/backend-plugin-api/src/services/definitions/UrlReaderService.ts index 8cb40ff202..085b0b6844 100644 --- a/packages/backend-plugin-api/src/services/definitions/UrlReaderService.ts +++ b/packages/backend-plugin-api/src/services/definitions/UrlReaderService.ts @@ -27,17 +27,26 @@ export interface UrlReaderService { /** * Reads a single file and return its content. */ - readUrl(url: string, options?: ReadUrlOptions): Promise; + readUrl( + url: string, + options?: UrlReaderReadUrlOptions, + ): Promise; /** * Reads a full or partial file tree. */ - readTree(url: string, options?: ReadTreeOptions): Promise; + readTree( + url: string, + options?: UrlReaderReadTreeOptions, + ): Promise; /** * Searches for a file in a tree using a glob pattern. */ - search(url: string, options?: SearchOptions): Promise; + search( + url: string, + options?: UrlReaderSearchOptions, + ): Promise; } /** @@ -45,7 +54,7 @@ export interface UrlReaderService { * * @public */ -export type ReadUrlOptions = { +export type UrlReaderReadUrlOptions = { /** * An ETag which can be provided to check whether a * {@link UrlReaderService.readUrl} response has changed from a previous execution. @@ -113,7 +122,7 @@ export type ReadUrlOptions = { * * @public */ -export type ReadUrlResponse = { +export type UrlReaderReadUrlResponse = { /** * Returns the data that was read from the remote URL. */ @@ -148,7 +157,7 @@ export type ReadUrlResponse = { * * @public */ -export type ReadTreeOptions = { +export type UrlReaderReadTreeOptions = { /** * A filter that can be used to select which files should be included. * @@ -208,11 +217,11 @@ export type ReadTreeOptions = { }; /** - * Options that control {@link ReadTreeResponse.dir} execution. + * Options that control {@link UrlReaderReadTreeResponse.dir} execution. * * @public */ -export type ReadTreeResponseDirOptions = { +export type UrlReaderReadTreeResponseDirOptions = { /** * The directory to write files to. * @@ -228,12 +237,12 @@ export type ReadTreeResponseDirOptions = { * * @public */ -export type ReadTreeResponse = { +export type UrlReaderReadTreeResponse = { /** * Returns an array of all the files inside the tree, and corresponding * functions to read their content. */ - files(): Promise; + files(): Promise; /** * Returns the tree contents as a binary archive, using a stream. @@ -246,7 +255,7 @@ export type ReadTreeResponse = { * * **NOTE**: It is the responsibility of the caller to remove the directory after use. */ - dir(options?: ReadTreeResponseDirOptions): Promise; + dir(options?: UrlReaderReadTreeResponseDirOptions): Promise; /** * Etag returned by content provider. @@ -263,7 +272,7 @@ export type ReadTreeResponse = { * * @public */ -export type ReadTreeResponseFile = { +export type UrlReaderReadTreeResponseFile = { /** * The filepath of the data. */ @@ -285,7 +294,7 @@ export type ReadTreeResponseFile = { * * @public */ -export type SearchOptions = { +export type UrlReaderSearchOptions = { /** * An etag can be provided to check whether the search response has changed from a previous execution. * @@ -326,11 +335,11 @@ export type SearchOptions = { * * @public */ -export type SearchResponse = { +export type UrlReaderSearchResponse = { /** * The files that matched the search query. */ - files: SearchResponseFile[]; + files: UrlReaderSearchResponseFile[]; /** * A unique identifier of the current remote tree, usually the commit SHA or etag from the target. @@ -343,7 +352,7 @@ export type SearchResponse = { * * @public */ -export type SearchResponseFile = { +export type UrlReaderSearchResponseFile = { /** * The full URL to the file. */ @@ -359,3 +368,49 @@ export type SearchResponseFile = { */ lastModifiedAt?: Date; }; + +/** + * @public + * @deprecated Use `UrlReaderReadTreeOptions` instead + */ +export type ReadTreeOptions = UrlReaderReadTreeOptions; +/** + * @public + * @deprecated Use `UrlReaderReadTreeResponse` instead + */ +export type ReadTreeResponse = UrlReaderReadTreeResponse; +/** + * @public + * @deprecated Use `UrlReaderReadTreeResponseDirOptions` instead + */ +export type ReadTreeResponseDirOptions = UrlReaderReadTreeResponseDirOptions; +/** + * @public + * @deprecated Use `UrlReaderReadTreeResponseFile` instead + */ +export type ReadTreeResponseFile = UrlReaderReadTreeResponseFile; +/** + * @public + * @deprecated Use `UrlReaderReadUrlResponse` instead + */ +export type ReadUrlResponse = UrlReaderReadUrlResponse; +/** + * @public + * @deprecated Use `UrlReaderReadUrlOptions` instead + */ +export type ReadUrlOptions = UrlReaderReadUrlOptions; +/** + * @public + * @deprecated Use `UrlReaderSearchOptions` instead + */ +export type SearchOptions = UrlReaderSearchOptions; +/** + * @public + * @deprecated Use `UrlReaderSearchResponse` instead + */ +export type SearchResponse = UrlReaderSearchResponse; +/** + * @public + * @deprecated Use `UrlReaderSearchResponseFile` instead + */ +export type SearchResponseFile = UrlReaderSearchResponseFile; diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index f22213a285..13175b96ae 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -74,6 +74,15 @@ export type { SearchOptions, SearchResponse, SearchResponseFile, + UrlReaderReadTreeOptions, + UrlReaderReadTreeResponse, + UrlReaderReadTreeResponseDirOptions, + UrlReaderReadTreeResponseFile, + UrlReaderReadUrlResponse, + UrlReaderReadUrlOptions, + UrlReaderSearchOptions, + UrlReaderSearchResponse, + UrlReaderSearchResponseFile, UrlReaderService, } from './UrlReaderService'; export type { BackstageUserInfo, UserInfoService } from './UserInfoService'; diff --git a/yarn.lock b/yarn.lock index ee4185b5b4..5c0993f074 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3588,6 +3588,12 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/backend-defaults@workspace:packages/backend-defaults" dependencies: + "@aws-sdk/abort-controller": ^3.347.0 + "@aws-sdk/client-codecommit": ^3.350.0 + "@aws-sdk/client-s3": ^3.350.0 + "@aws-sdk/credential-providers": ^3.350.0 + "@aws-sdk/types": ^3.347.0 + "@aws-sdk/util-stream-node": ^3.350.0 "@backstage/backend-app-api": "workspace:^" "@backstage/backend-common": "workspace:^" "@backstage/backend-dev-utils": "workspace:^" @@ -3597,25 +3603,41 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/config-loader": "workspace:^" "@backstage/errors": "workspace:^" + "@backstage/integration": "workspace:^" + "@backstage/integration-aws-node": "workspace:^" "@backstage/plugin-events-node": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" "@backstage/types": "workspace:^" + "@google-cloud/storage": ^7.0.0 "@keyv/memcache": ^1.3.5 "@keyv/redis": ^2.5.3 + "@octokit/rest": ^19.0.3 "@opentelemetry/api": ^1.3.0 + archiver: ^6.0.0 + aws-sdk-client-mock: ^4.0.0 + base64-stream: ^1.0.0 better-sqlite3: ^9.0.0 + concat-stream: ^2.0.0 cron: ^3.0.0 fs-extra: ^11.2.0 + git-url-parse: ^14.0.0 + isomorphic-git: ^1.23.0 keyv: ^4.5.2 knex: ^3.0.0 lodash: ^4.17.21 luxon: ^3.0.0 + minimatch: ^9.0.0 + msw: ^1.0.0 mysql2: ^3.0.0 + node-fetch: ^2.6.7 p-limit: ^3.1.0 pg: ^8.11.3 pg-connection-string: ^2.3.0 + raw-body: ^2.4.1 + tar: ^6.1.12 uuid: ^9.0.0 wait-for-expect: ^3.0.2 + yauzl: ^3.0.0 yn: ^4.0.0 zod: ^3.22.4 languageName: unknown