From 3fbfb4261948a4c6101eff8b6e26681980c74186 Mon Sep 17 00:00:00 2001 From: Emma Indal Date: Thu, 27 Aug 2020 14:01:09 +0200 Subject: [PATCH] register techdocs storage api to dev app (#2139) --- plugins/techdocs/dev/api.ts | 52 ++++++++++++++++++++++++++++++++++ plugins/techdocs/dev/index.tsx | 14 ++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 plugins/techdocs/dev/api.ts diff --git a/plugins/techdocs/dev/api.ts b/plugins/techdocs/dev/api.ts new file mode 100644 index 0000000000..60a17c3dc3 --- /dev/null +++ b/plugins/techdocs/dev/api.ts @@ -0,0 +1,52 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ParsedEntityId } from '../src/types'; + +import { TechDocsStorage } from '../src/api'; + +export class TechDocsDevStorageApi implements TechDocsStorage { + public apiOrigin: string; + + constructor({ apiOrigin }: { apiOrigin: string }) { + this.apiOrigin = apiOrigin; + } + + async getEntityDocs(entityId: ParsedEntityId, path: string) { + const { name } = entityId; + + const url = `${this.apiOrigin}/${name}/${path}`; + + const request = await fetch( + `${url.endsWith('/') ? url : `${url}/`}index.html`, + ); + + if (request.status === 404) { + throw new Error('Page not found'); + } + + return request.text(); + } + + getBaseUrl( + oldBaseUrl: string, + entityId: ParsedEntityId, + path: string, + ): string { + const { name } = entityId; + return new URL(oldBaseUrl, `${this.apiOrigin}/${name}/${path}`).toString(); + } +} diff --git a/plugins/techdocs/dev/index.tsx b/plugins/techdocs/dev/index.tsx index 812a5585d4..b415256fde 100644 --- a/plugins/techdocs/dev/index.tsx +++ b/plugins/techdocs/dev/index.tsx @@ -16,5 +16,17 @@ import { createDevApp } from '@backstage/dev-utils'; import { plugin } from '../src/plugin'; +import { TechDocsDevStorageApi } from './api'; +import { techdocsStorageApiRef } from '../src'; -createDevApp().registerPlugin(plugin).render(); +createDevApp() + .registerApiFactory({ + deps: {}, + factory: () => + new TechDocsDevStorageApi({ + apiOrigin: 'http://localhost:3000/api', + }), + implements: techdocsStorageApiRef, + }) + .registerPlugin(plugin) + .render();