diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 77b64b96d1..4e682851bf 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -35,6 +35,7 @@ "@backstage/config": "^0.1.12", "@backstage/types": "^0.1.1", "@types/express": "^4.17.6", + "globby": "^11.0.0", "express": "^4.17.1", "express-promise-router": "^4.1.0", "fs-extra": "9.1.0", diff --git a/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts b/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts index 7516da7116..35a5171c83 100644 --- a/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts +++ b/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts @@ -19,23 +19,13 @@ import { Knex } from 'knex'; import { Logger } from 'winston'; import { DateTime } from 'luxon'; import partition from 'lodash/partition'; +import { StaticAsset, StaticAssetInput } from './types'; const migrationsDir = resolvePackagePath( '@backstage/plugin-app-backend', 'migrations', ); -export interface StaticAssetInput { - path: string; - content(): Promise; -} - -export interface StaticAsset { - path: string; - content: Buffer; - lastModifiedAt: Date; -} - interface StaticAssetRow { path: string; content: Buffer; diff --git a/plugins/app-backend/src/lib/assets/findStaticAssets.ts b/plugins/app-backend/src/lib/assets/findStaticAssets.ts new file mode 100644 index 0000000000..1e4ba83982 --- /dev/null +++ b/plugins/app-backend/src/lib/assets/findStaticAssets.ts @@ -0,0 +1,35 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import fs from 'fs-extra'; +import globby from 'globby'; +import { StaticAssetInput } from './types'; +import { resolveSafeChildPath } from '@backstage/backend-common'; + +export async function findStaticAssets( + staticDir: string, +): Promise { + const assetPaths = await globby('**/*', { + ignore: ['**/*.map'], // Ignore source maps since they're quite large + cwd: staticDir, + dot: true, + }); + + return assetPaths.map(path => ({ + path, + content: async () => fs.readFile(resolveSafeChildPath(staticDir, path)), + })); +} diff --git a/plugins/app-backend/src/lib/assets/index.ts b/plugins/app-backend/src/lib/assets/index.ts index 0e1e495872..c8cb838dd6 100644 --- a/plugins/app-backend/src/lib/assets/index.ts +++ b/plugins/app-backend/src/lib/assets/index.ts @@ -15,4 +15,5 @@ */ export { StaticAssetsStore } from './StaticAssetsStore'; -export type { StaticAsset, StaticAssetInput } from './StaticAssetsStore'; +export type { StaticAsset, StaticAssetInput } from './types'; +export { findStaticAssets } from './findStaticAssets'; diff --git a/plugins/app-backend/src/lib/assets/types.ts b/plugins/app-backend/src/lib/assets/types.ts new file mode 100644 index 0000000000..c5a01fbaea --- /dev/null +++ b/plugins/app-backend/src/lib/assets/types.ts @@ -0,0 +1,26 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface StaticAssetInput { + path: string; + content(): Promise; +} + +export interface StaticAsset { + path: string; + content: Buffer; + lastModifiedAt: Date; +}