@backstage/backend-app-api 0.2.4-next.1 → 0.2.4-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @backstage/backend-app-api might be problematic. Click here for more details.
- package/CHANGELOG.md +23 -0
- package/alpha/package.json +1 -1
- package/dist/index.cjs.js +36 -36
- package/dist/index.cjs.js.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @backstage/backend-app-api
|
|
2
2
|
|
|
3
|
+
## 0.2.4-next.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
- @backstage/backend-tasks@0.4.0-next.3
|
|
9
|
+
- @backstage/plugin-permission-node@0.7.2-next.3
|
|
10
|
+
- @backstage/backend-common@0.17.0-next.3
|
|
11
|
+
- @backstage/backend-plugin-api@0.2.0-next.3
|
|
12
|
+
- @backstage/errors@1.1.4-next.1
|
|
13
|
+
|
|
14
|
+
## 0.2.4-next.2
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- 884d749b14: Refactored to use `coreServices` from `@backstage/backend-plugin-api`.
|
|
19
|
+
- Updated dependencies
|
|
20
|
+
- @backstage/backend-common@0.17.0-next.2
|
|
21
|
+
- @backstage/backend-plugin-api@0.2.0-next.2
|
|
22
|
+
- @backstage/backend-tasks@0.4.0-next.2
|
|
23
|
+
- @backstage/plugin-permission-node@0.7.2-next.2
|
|
24
|
+
- @backstage/errors@1.1.4-next.1
|
|
25
|
+
|
|
3
26
|
## 0.2.4-next.1
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
package/alpha/package.json
CHANGED
package/dist/index.cjs.js
CHANGED
|
@@ -275,10 +275,10 @@ _loadedDefaultFactories = new WeakMap();
|
|
|
275
275
|
_implementations = new WeakMap();
|
|
276
276
|
_resolveFactory = new WeakSet();
|
|
277
277
|
resolveFactory_fn = function(ref, pluginId) {
|
|
278
|
-
if (ref.id === backendPluginApi.
|
|
278
|
+
if (ref.id === backendPluginApi.coreServices.pluginMetadata.id) {
|
|
279
279
|
return Promise.resolve({
|
|
280
280
|
scope: "plugin",
|
|
281
|
-
service: backendPluginApi.
|
|
281
|
+
service: backendPluginApi.coreServices.pluginMetadata,
|
|
282
282
|
deps: {},
|
|
283
283
|
factory: async () => async () => ({
|
|
284
284
|
getId() {
|
|
@@ -314,7 +314,7 @@ _separateMapForTheRootService = new WeakMap();
|
|
|
314
314
|
_checkForMissingDeps = new WeakSet();
|
|
315
315
|
checkForMissingDeps_fn = function(factory, pluginId) {
|
|
316
316
|
const missingDeps = Object.values(factory.deps).filter((ref) => {
|
|
317
|
-
if (ref.id === backendPluginApi.
|
|
317
|
+
if (ref.id === backendPluginApi.coreServices.pluginMetadata.id) {
|
|
318
318
|
return false;
|
|
319
319
|
}
|
|
320
320
|
if (__privateGet$2(this, _providedFactories).get(ref.id)) {
|
|
@@ -373,10 +373,10 @@ function createSpecializedBackend(options) {
|
|
|
373
373
|
}
|
|
374
374
|
|
|
375
375
|
const cacheFactory = backendPluginApi.createServiceFactory({
|
|
376
|
-
service: backendPluginApi.
|
|
376
|
+
service: backendPluginApi.coreServices.cache,
|
|
377
377
|
deps: {
|
|
378
|
-
config: backendPluginApi.
|
|
379
|
-
plugin: backendPluginApi.
|
|
378
|
+
config: backendPluginApi.coreServices.config,
|
|
379
|
+
plugin: backendPluginApi.coreServices.pluginMetadata
|
|
380
380
|
},
|
|
381
381
|
async factory({ config }) {
|
|
382
382
|
const cacheManager = backendCommon.CacheManager.fromConfig(config);
|
|
@@ -387,9 +387,9 @@ const cacheFactory = backendPluginApi.createServiceFactory({
|
|
|
387
387
|
});
|
|
388
388
|
|
|
389
389
|
const configFactory = backendPluginApi.createServiceFactory({
|
|
390
|
-
service: backendPluginApi.
|
|
390
|
+
service: backendPluginApi.coreServices.config,
|
|
391
391
|
deps: {
|
|
392
|
-
logger: backendPluginApi.
|
|
392
|
+
logger: backendPluginApi.coreServices.rootLogger
|
|
393
393
|
},
|
|
394
394
|
async factory({ logger }) {
|
|
395
395
|
const config = await backendCommon.loadBackendConfig({
|
|
@@ -401,10 +401,10 @@ const configFactory = backendPluginApi.createServiceFactory({
|
|
|
401
401
|
});
|
|
402
402
|
|
|
403
403
|
const databaseFactory = backendPluginApi.createServiceFactory({
|
|
404
|
-
service: backendPluginApi.
|
|
404
|
+
service: backendPluginApi.coreServices.database,
|
|
405
405
|
deps: {
|
|
406
|
-
config: backendPluginApi.
|
|
407
|
-
plugin: backendPluginApi.
|
|
406
|
+
config: backendPluginApi.coreServices.config,
|
|
407
|
+
plugin: backendPluginApi.coreServices.pluginMetadata
|
|
408
408
|
},
|
|
409
409
|
async factory({ config }) {
|
|
410
410
|
const databaseManager = backendCommon.DatabaseManager.fromConfig(config);
|
|
@@ -415,9 +415,9 @@ const databaseFactory = backendPluginApi.createServiceFactory({
|
|
|
415
415
|
});
|
|
416
416
|
|
|
417
417
|
const discoveryFactory = backendPluginApi.createServiceFactory({
|
|
418
|
-
service: backendPluginApi.
|
|
418
|
+
service: backendPluginApi.coreServices.discovery,
|
|
419
419
|
deps: {
|
|
420
|
-
config: backendPluginApi.
|
|
420
|
+
config: backendPluginApi.coreServices.config
|
|
421
421
|
},
|
|
422
422
|
async factory({ config }) {
|
|
423
423
|
const discovery = backendCommon.SingleHostDiscovery.fromConfig(config);
|
|
@@ -428,10 +428,10 @@ const discoveryFactory = backendPluginApi.createServiceFactory({
|
|
|
428
428
|
});
|
|
429
429
|
|
|
430
430
|
const loggerFactory = backendPluginApi.createServiceFactory({
|
|
431
|
-
service: backendPluginApi.
|
|
431
|
+
service: backendPluginApi.coreServices.logger,
|
|
432
432
|
deps: {
|
|
433
|
-
rootLogger: backendPluginApi.
|
|
434
|
-
plugin: backendPluginApi.
|
|
433
|
+
rootLogger: backendPluginApi.coreServices.rootLogger,
|
|
434
|
+
plugin: backendPluginApi.coreServices.pluginMetadata
|
|
435
435
|
},
|
|
436
436
|
async factory({ rootLogger }) {
|
|
437
437
|
return async ({ plugin }) => {
|
|
@@ -455,7 +455,7 @@ class BackstageLogger {
|
|
|
455
455
|
}
|
|
456
456
|
}
|
|
457
457
|
const rootLoggerFactory = backendPluginApi.createServiceFactory({
|
|
458
|
-
service: backendPluginApi.
|
|
458
|
+
service: backendPluginApi.coreServices.rootLogger,
|
|
459
459
|
deps: {},
|
|
460
460
|
async factory() {
|
|
461
461
|
return BackstageLogger.fromWinston(backendCommon.createRootLogger());
|
|
@@ -463,11 +463,11 @@ const rootLoggerFactory = backendPluginApi.createServiceFactory({
|
|
|
463
463
|
});
|
|
464
464
|
|
|
465
465
|
const permissionsFactory = backendPluginApi.createServiceFactory({
|
|
466
|
-
service: backendPluginApi.
|
|
466
|
+
service: backendPluginApi.coreServices.permissions,
|
|
467
467
|
deps: {
|
|
468
|
-
config: backendPluginApi.
|
|
469
|
-
discovery: backendPluginApi.
|
|
470
|
-
tokenManager: backendPluginApi.
|
|
468
|
+
config: backendPluginApi.coreServices.config,
|
|
469
|
+
discovery: backendPluginApi.coreServices.discovery,
|
|
470
|
+
tokenManager: backendPluginApi.coreServices.tokenManager
|
|
471
471
|
},
|
|
472
472
|
async factory({ config }) {
|
|
473
473
|
return async ({ discovery, tokenManager }) => {
|
|
@@ -480,10 +480,10 @@ const permissionsFactory = backendPluginApi.createServiceFactory({
|
|
|
480
480
|
});
|
|
481
481
|
|
|
482
482
|
const schedulerFactory = backendPluginApi.createServiceFactory({
|
|
483
|
-
service: backendPluginApi.
|
|
483
|
+
service: backendPluginApi.coreServices.scheduler,
|
|
484
484
|
deps: {
|
|
485
|
-
config: backendPluginApi.
|
|
486
|
-
plugin: backendPluginApi.
|
|
485
|
+
config: backendPluginApi.coreServices.config,
|
|
486
|
+
plugin: backendPluginApi.coreServices.pluginMetadata
|
|
487
487
|
},
|
|
488
488
|
async factory({ config }) {
|
|
489
489
|
const taskScheduler = backendTasks.TaskScheduler.fromConfig(config);
|
|
@@ -494,10 +494,10 @@ const schedulerFactory = backendPluginApi.createServiceFactory({
|
|
|
494
494
|
});
|
|
495
495
|
|
|
496
496
|
const tokenManagerFactory = backendPluginApi.createServiceFactory({
|
|
497
|
-
service: backendPluginApi.
|
|
497
|
+
service: backendPluginApi.coreServices.tokenManager,
|
|
498
498
|
deps: {
|
|
499
|
-
config: backendPluginApi.
|
|
500
|
-
logger: backendPluginApi.
|
|
499
|
+
config: backendPluginApi.coreServices.config,
|
|
500
|
+
logger: backendPluginApi.coreServices.logger
|
|
501
501
|
},
|
|
502
502
|
async factory() {
|
|
503
503
|
return async ({ config, logger }) => {
|
|
@@ -509,10 +509,10 @@ const tokenManagerFactory = backendPluginApi.createServiceFactory({
|
|
|
509
509
|
});
|
|
510
510
|
|
|
511
511
|
const urlReaderFactory = backendPluginApi.createServiceFactory({
|
|
512
|
-
service: backendPluginApi.
|
|
512
|
+
service: backendPluginApi.coreServices.urlReader,
|
|
513
513
|
deps: {
|
|
514
|
-
config: backendPluginApi.
|
|
515
|
-
logger: backendPluginApi.
|
|
514
|
+
config: backendPluginApi.coreServices.config,
|
|
515
|
+
logger: backendPluginApi.coreServices.logger
|
|
516
516
|
},
|
|
517
517
|
async factory() {
|
|
518
518
|
return async ({ config, logger }) => {
|
|
@@ -525,10 +525,10 @@ const urlReaderFactory = backendPluginApi.createServiceFactory({
|
|
|
525
525
|
});
|
|
526
526
|
|
|
527
527
|
const httpRouterFactory = backendPluginApi.createServiceFactory({
|
|
528
|
-
service: backendPluginApi.
|
|
528
|
+
service: backendPluginApi.coreServices.httpRouter,
|
|
529
529
|
deps: {
|
|
530
|
-
config: backendPluginApi.
|
|
531
|
-
plugin: backendPluginApi.
|
|
530
|
+
config: backendPluginApi.coreServices.config,
|
|
531
|
+
plugin: backendPluginApi.coreServices.pluginMetadata
|
|
532
532
|
},
|
|
533
533
|
async factory({ config }, options) {
|
|
534
534
|
var _a;
|
|
@@ -615,10 +615,10 @@ class PluginScopedLifecycleImpl {
|
|
|
615
615
|
}
|
|
616
616
|
}
|
|
617
617
|
const lifecycleFactory = backendPluginApi.createServiceFactory({
|
|
618
|
-
service: backendPluginApi.
|
|
618
|
+
service: backendPluginApi.coreServices.lifecycle,
|
|
619
619
|
deps: {
|
|
620
|
-
logger: backendPluginApi.
|
|
621
|
-
plugin: backendPluginApi.
|
|
620
|
+
logger: backendPluginApi.coreServices.rootLogger,
|
|
621
|
+
plugin: backendPluginApi.coreServices.pluginMetadata
|
|
622
622
|
},
|
|
623
623
|
async factory({ logger }) {
|
|
624
624
|
const rootLifecycle = new BackendLifecycleImpl(
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/wiring/BackendInitializer.ts","../src/wiring/ServiceRegistry.ts","../src/wiring/BackstageBackend.ts","../src/wiring/types.ts","../src/services/implementations/cacheService.ts","../src/services/implementations/configService.ts","../src/services/implementations/databaseService.ts","../src/services/implementations/discoveryService.ts","../src/services/implementations/loggerService.ts","../src/services/implementations/rootLoggerService.ts","../src/services/implementations/permissionsService.ts","../src/services/implementations/schedulerService.ts","../src/services/implementations/tokenManagerService.ts","../src/services/implementations/urlReaderService.ts","../src/services/implementations/httpRouterService.ts","../src/services/implementations/lifecycleService.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BackendFeature,\n ExtensionPoint,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport {\n BackendRegisterInit,\n ServiceHolder,\n ServiceOrExtensionPoint,\n} from './types';\n\nexport class BackendInitializer {\n #started = false;\n #features = new Map<BackendFeature, unknown>();\n #registerInits = new Array<BackendRegisterInit>();\n #extensionPoints = new Map<ExtensionPoint<unknown>, unknown>();\n #serviceHolder: ServiceHolder;\n\n constructor(serviceHolder: ServiceHolder) {\n this.#serviceHolder = serviceHolder;\n }\n\n async #getInitDeps(\n deps: { [name: string]: ServiceOrExtensionPoint },\n pluginId: string,\n ) {\n const result = new Map<string, unknown>();\n const missingRefs = new Set<ServiceOrExtensionPoint>();\n\n for (const [name, ref] of Object.entries(deps)) {\n const extensionPoint = this.#extensionPoints.get(\n ref as ExtensionPoint<unknown>,\n );\n if (extensionPoint) {\n result.set(name, extensionPoint);\n } else {\n const impl = await this.#serviceHolder.get(\n ref as ServiceRef<unknown>,\n pluginId,\n );\n if (impl) {\n result.set(name, impl);\n } else {\n missingRefs.add(ref);\n }\n }\n }\n\n if (missingRefs.size > 0) {\n const missing = Array.from(missingRefs).join(', ');\n throw new Error(\n `No extension point or service available for the following ref(s): ${missing}`,\n );\n }\n\n return Object.fromEntries(result);\n }\n\n add<TOptions>(feature: BackendFeature, options?: TOptions) {\n if (this.#started) {\n throw new Error('feature can not be added after the backend has started');\n }\n this.#features.set(feature, options);\n }\n\n async start(): Promise<void> {\n if (this.#started) {\n throw new Error('Backend has already started');\n }\n this.#started = true;\n\n for (const [feature] of this.#features) {\n const provides = new Set<ExtensionPoint<unknown>>();\n\n let registerInit: BackendRegisterInit | undefined = undefined;\n\n feature.register({\n registerExtensionPoint: (extensionPointRef, impl) => {\n if (registerInit) {\n throw new Error('registerExtensionPoint called after registerInit');\n }\n if (this.#extensionPoints.has(extensionPointRef)) {\n throw new Error(`API ${extensionPointRef.id} already registered`);\n }\n this.#extensionPoints.set(extensionPointRef, impl);\n provides.add(extensionPointRef);\n },\n registerInit: registerOptions => {\n if (registerInit) {\n throw new Error('registerInit must only be called once');\n }\n registerInit = {\n id: feature.id,\n provides,\n consumes: new Set(Object.values(registerOptions.deps)),\n deps: registerOptions.deps,\n init: registerOptions.init as BackendRegisterInit['init'],\n };\n },\n });\n\n if (!registerInit) {\n throw new Error(\n `registerInit was not called by register in ${feature.id}`,\n );\n }\n\n this.#registerInits.push(registerInit);\n }\n\n const orderedRegisterResults = this.#resolveInitOrder(this.#registerInits);\n\n for (const registerInit of orderedRegisterResults) {\n const deps = await this.#getInitDeps(registerInit.deps, registerInit.id);\n await registerInit.init(deps);\n }\n }\n\n #resolveInitOrder(registerInits: Array<BackendRegisterInit>) {\n let registerInitsToOrder = registerInits.slice();\n const orderedRegisterInits = new Array<BackendRegisterInit>();\n\n // TODO: Validate duplicates\n\n while (registerInitsToOrder.length > 0) {\n const toRemove = new Set<unknown>();\n\n for (const registerInit of registerInitsToOrder) {\n const unInitializedDependents = [];\n\n for (const provided of registerInit.provides) {\n if (\n registerInitsToOrder.some(\n init => init !== registerInit && init.consumes.has(provided),\n )\n ) {\n unInitializedDependents.push(provided);\n }\n }\n\n if (unInitializedDependents.length === 0) {\n orderedRegisterInits.push(registerInit);\n toRemove.add(registerInit);\n }\n }\n\n registerInitsToOrder = registerInitsToOrder.filter(r => !toRemove.has(r));\n }\n\n return orderedRegisterInits;\n }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ServiceFactory,\n ServiceRef,\n pluginMetadataServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { stringifyError } from '@backstage/errors';\n\n/**\n * Keep in sync with `@backstage/backend-plugin-api/src/services/system/types.ts`\n * @internal\n */\nexport type InternalServiceRef<T> = ServiceRef<T> & {\n __defaultFactory?: (\n service: ServiceRef<T>,\n ) => Promise<ServiceFactory<T> | (() => ServiceFactory<T>)>;\n};\n\nexport class ServiceRegistry {\n readonly #providedFactories: Map<string, ServiceFactory>;\n readonly #loadedDefaultFactories: Map<Function, Promise<ServiceFactory>>;\n readonly #implementations: Map<\n ServiceFactory,\n {\n factoryFunc: Promise<\n (deps: { [name in string]: unknown }) => Promise<unknown>\n >;\n byPlugin: Map<string, Promise<unknown>>;\n }\n >;\n\n constructor(\n factories: Array<ServiceFactory<unknown> | (() => ServiceFactory<unknown>)>,\n ) {\n this.#providedFactories = new Map(\n factories.map(f => {\n if (typeof f === 'function') {\n const cf = f();\n return [cf.service.id, cf];\n }\n return [f.service.id, f];\n }),\n );\n this.#loadedDefaultFactories = new Map();\n this.#implementations = new Map();\n }\n\n #resolveFactory(\n ref: ServiceRef<unknown>,\n pluginId: string,\n ): Promise<ServiceFactory> | undefined {\n // Special case handling of the plugin metadata service, generating a custom factory for it each time\n if (ref.id === pluginMetadataServiceRef.id) {\n return Promise.resolve({\n scope: 'plugin',\n service: pluginMetadataServiceRef,\n deps: {},\n factory: async () => async () => ({\n getId() {\n return pluginId;\n },\n }),\n });\n }\n\n let resolvedFactory: Promise<ServiceFactory> | ServiceFactory | undefined =\n this.#providedFactories.get(ref.id);\n const { __defaultFactory: defaultFactory } =\n ref as InternalServiceRef<unknown>;\n if (!resolvedFactory && !defaultFactory) {\n return undefined;\n }\n\n if (!resolvedFactory) {\n let loadedFactory = this.#loadedDefaultFactories.get(defaultFactory!);\n if (!loadedFactory) {\n loadedFactory = Promise.resolve()\n .then(() => defaultFactory!(ref))\n .then(f =>\n typeof f === 'function' ? f() : f,\n ) as Promise<ServiceFactory>;\n this.#loadedDefaultFactories.set(defaultFactory!, loadedFactory);\n }\n resolvedFactory = loadedFactory.catch(error => {\n throw new Error(\n `Failed to instantiate service '${\n ref.id\n }' because the default factory loader threw an error, ${stringifyError(\n error,\n )}`,\n );\n });\n }\n\n return Promise.resolve(resolvedFactory);\n }\n\n #separateMapForTheRootService = new Map<ServiceFactory, Promise<unknown>>();\n\n #checkForMissingDeps(factory: ServiceFactory, pluginId: string) {\n const missingDeps = Object.values(factory.deps).filter(ref => {\n if (ref.id === pluginMetadataServiceRef.id) {\n return false;\n }\n if (this.#providedFactories.get(ref.id)) {\n return false;\n }\n\n return !(ref as InternalServiceRef<unknown>).__defaultFactory;\n });\n\n if (missingDeps.length) {\n const missing = missingDeps.map(r => `'${r.id}'`).join(', ');\n throw new Error(\n `Failed to instantiate service '${factory.service.id}' for '${pluginId}' because the following dependent services are missing: ${missing}`,\n );\n }\n }\n\n get<T>(ref: ServiceRef<T>, pluginId: string): Promise<T> | undefined {\n return this.#resolveFactory(ref, pluginId)?.then(factory => {\n if (factory.scope === 'root') {\n let existing = this.#separateMapForTheRootService.get(factory);\n if (!existing) {\n this.#checkForMissingDeps(factory, pluginId);\n const rootDeps = new Array<Promise<[name: string, impl: unknown]>>();\n\n for (const [name, serviceRef] of Object.entries(factory.deps)) {\n if (serviceRef.scope !== 'root') {\n throw new Error(\n `Failed to instantiate 'root' scoped service '${ref.id}' because it depends on '${serviceRef.scope}' scoped service '${serviceRef.id}'.`,\n );\n }\n const target = this.get(serviceRef, pluginId)!;\n rootDeps.push(target.then(impl => [name, impl]));\n }\n\n existing = Promise.all(rootDeps).then(entries =>\n factory.factory(Object.fromEntries(entries)),\n );\n this.#separateMapForTheRootService.set(factory, existing);\n }\n return existing as Promise<T>;\n }\n\n let implementation = this.#implementations.get(factory);\n if (!implementation) {\n this.#checkForMissingDeps(factory, pluginId);\n const rootDeps = new Array<Promise<[name: string, impl: unknown]>>();\n\n for (const [name, serviceRef] of Object.entries(factory.deps)) {\n if (serviceRef.scope === 'root') {\n const target = this.get(serviceRef, pluginId)!;\n rootDeps.push(target.then(impl => [name, impl]));\n }\n }\n\n implementation = {\n factoryFunc: Promise.all(rootDeps)\n .then(entries => factory.factory(Object.fromEntries(entries)))\n .catch(error => {\n const cause = stringifyError(error);\n throw new Error(\n `Failed to instantiate service '${ref.id}' because the top-level factory function threw an error, ${cause}`,\n );\n }),\n byPlugin: new Map(),\n };\n\n this.#implementations.set(factory, implementation);\n }\n\n let result = implementation.byPlugin.get(pluginId) as Promise<any>;\n if (!result) {\n const allDeps = new Array<Promise<[name: string, impl: unknown]>>();\n\n for (const [name, serviceRef] of Object.entries(factory.deps)) {\n const target = this.get(serviceRef, pluginId)!;\n allDeps.push(target.then(impl => [name, impl]));\n }\n\n result = implementation.factoryFunc\n .then(func =>\n Promise.all(allDeps).then(entries =>\n func(Object.fromEntries(entries)),\n ),\n )\n .catch(error => {\n const cause = stringifyError(error);\n throw new Error(\n `Failed to instantiate service '${ref.id}' for '${pluginId}' because the factory function threw an error, ${cause}`,\n );\n });\n implementation.byPlugin.set(pluginId, result);\n }\n\n return result;\n });\n }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ServiceFactory, BackendFeature } from '@backstage/backend-plugin-api';\nimport { BackendInitializer } from './BackendInitializer';\nimport { ServiceRegistry } from './ServiceRegistry';\nimport { Backend } from './types';\n\nexport class BackstageBackend implements Backend {\n #services: ServiceRegistry;\n #initializer: BackendInitializer;\n\n constructor(apiFactories: ServiceFactory[]) {\n this.#services = new ServiceRegistry(apiFactories);\n this.#initializer = new BackendInitializer(this.#services);\n }\n\n add(feature: BackendFeature): void {\n this.#initializer.add(feature);\n }\n\n async start(): Promise<void> {\n await this.#initializer.start();\n }\n\n // async stop(): Promise<void> {\n // await this.#initializer.stop();\n // }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ServiceFactory,\n BackendFeature,\n ExtensionPoint,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { BackstageBackend } from './BackstageBackend';\n\n/**\n * @public\n */\nexport interface Backend {\n add(feature: BackendFeature): void;\n start(): Promise<void>;\n}\n\nexport interface BackendRegisterInit {\n id: string;\n consumes: Set<ServiceOrExtensionPoint>;\n provides: Set<ServiceOrExtensionPoint>;\n deps: { [name: string]: ServiceOrExtensionPoint };\n init: (deps: { [name: string]: unknown }) => Promise<void>;\n}\n\n/**\n * @public\n */\nexport interface CreateSpecializedBackendOptions {\n services: (ServiceFactory | (() => ServiceFactory))[];\n}\n\nexport type ServiceHolder = {\n get<T>(api: ServiceRef<T>, pluginId: string): Promise<T> | undefined;\n};\n\n/**\n * @public\n */\nexport function createSpecializedBackend(\n options: CreateSpecializedBackendOptions,\n): Backend {\n return new BackstageBackend(\n options.services.map(s => (typeof s === 'function' ? s() : s)),\n );\n}\n\n/**\n * @public\n */\nexport type ServiceOrExtensionPoint<T = unknown> =\n | ExtensionPoint<T>\n | ServiceRef<T>;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CacheManager } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n pluginMetadataServiceRef,\n cacheServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const cacheFactory = createServiceFactory({\n service: cacheServiceRef,\n deps: {\n config: configServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ config }) {\n const cacheManager = CacheManager.fromConfig(config);\n return async ({ plugin }) => {\n return cacheManager.forPlugin(plugin.getId());\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { loadBackendConfig } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n loggerToWinstonLogger,\n rootLoggerServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const configFactory = createServiceFactory({\n service: configServiceRef,\n deps: {\n logger: rootLoggerServiceRef,\n },\n async factory({ logger }) {\n const config = await loadBackendConfig({\n argv: process.argv,\n logger: loggerToWinstonLogger(logger),\n });\n return config;\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DatabaseManager } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n databaseServiceRef,\n pluginMetadataServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const databaseFactory = createServiceFactory({\n service: databaseServiceRef,\n deps: {\n config: configServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ config }) {\n const databaseManager = DatabaseManager.fromConfig(config);\n return async ({ plugin }) => {\n return databaseManager.forPlugin(plugin.getId());\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SingleHostDiscovery } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n discoveryServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const discoveryFactory = createServiceFactory({\n service: discoveryServiceRef,\n deps: {\n config: configServiceRef,\n },\n async factory({ config }) {\n const discovery = SingleHostDiscovery.fromConfig(config);\n return async () => {\n return discovery;\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createServiceFactory,\n loggerServiceRef,\n pluginMetadataServiceRef,\n rootLoggerServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const loggerFactory = createServiceFactory({\n service: loggerServiceRef,\n deps: {\n rootLogger: rootLoggerServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ rootLogger }) {\n return async ({ plugin }) => {\n return rootLogger.child({ pluginId: plugin.getId() });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createRootLogger } from '@backstage/backend-common';\nimport {\n createServiceFactory,\n Logger,\n rootLoggerServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { Logger as WinstonLogger } from 'winston';\n\nclass BackstageLogger implements Logger {\n static fromWinston(logger: WinstonLogger): BackstageLogger {\n return new BackstageLogger(logger);\n }\n\n private constructor(private readonly winston: WinstonLogger) {}\n\n info(message: string, ...meta: any[]): void {\n this.winston.info(message, ...meta);\n }\n\n child(fields: { [name: string]: string }): Logger {\n return new BackstageLogger(this.winston.child(fields));\n }\n}\n\n/** @public */\nexport const rootLoggerFactory = createServiceFactory({\n service: rootLoggerServiceRef,\n deps: {},\n async factory() {\n return BackstageLogger.fromWinston(createRootLogger());\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n configServiceRef,\n createServiceFactory,\n discoveryServiceRef,\n permissionsServiceRef,\n tokenManagerServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { ServerPermissionClient } from '@backstage/plugin-permission-node';\n\n/** @public */\nexport const permissionsFactory = createServiceFactory({\n service: permissionsServiceRef,\n deps: {\n config: configServiceRef,\n discovery: discoveryServiceRef,\n tokenManager: tokenManagerServiceRef,\n },\n async factory({ config }) {\n return async ({ discovery, tokenManager }) => {\n return ServerPermissionClient.fromConfig(config, {\n discovery,\n tokenManager,\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n configServiceRef,\n createServiceFactory,\n pluginMetadataServiceRef,\n schedulerServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { TaskScheduler } from '@backstage/backend-tasks';\n\n/** @public */\nexport const schedulerFactory = createServiceFactory({\n service: schedulerServiceRef,\n deps: {\n config: configServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ config }) {\n const taskScheduler = TaskScheduler.fromConfig(config);\n return async ({ plugin }) => {\n return taskScheduler.forPlugin(plugin.getId());\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n configServiceRef,\n loggerServiceRef,\n createServiceFactory,\n tokenManagerServiceRef,\n loggerToWinstonLogger,\n} from '@backstage/backend-plugin-api';\nimport { ServerTokenManager } from '@backstage/backend-common';\n\n/** @public */\nexport const tokenManagerFactory = createServiceFactory({\n service: tokenManagerServiceRef,\n deps: {\n config: configServiceRef,\n logger: loggerServiceRef,\n },\n async factory() {\n return async ({ config, logger }) => {\n return ServerTokenManager.fromConfig(config, {\n logger: loggerToWinstonLogger(logger),\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UrlReaders } from '@backstage/backend-common';\nimport {\n configServiceRef,\n createServiceFactory,\n loggerServiceRef,\n loggerToWinstonLogger,\n urlReaderServiceRef,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const urlReaderFactory = createServiceFactory({\n service: urlReaderServiceRef,\n deps: {\n config: configServiceRef,\n logger: loggerServiceRef,\n },\n async factory() {\n return async ({ config, logger }) => {\n return UrlReaders.default({\n config,\n logger: loggerToWinstonLogger(logger),\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createServiceFactory,\n httpRouterServiceRef,\n configServiceRef,\n pluginMetadataServiceRef,\n} from '@backstage/backend-plugin-api';\nimport Router from 'express-promise-router';\nimport { Handler } from 'express';\nimport { createServiceBuilder } from '@backstage/backend-common';\n\n/**\n * @public\n */\nexport type HttpRouterFactoryOptions = {\n /**\n * The plugin ID used for the index route. Defaults to 'app'\n */\n indexPlugin?: string;\n};\n\n/** @public */\nexport const httpRouterFactory = createServiceFactory({\n service: httpRouterServiceRef,\n deps: {\n config: configServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ config }, options?: HttpRouterFactoryOptions) {\n const defaultPluginId = options?.indexPlugin ?? 'app';\n\n const apiRouter = Router();\n const rootRouter = Router();\n\n const service = createServiceBuilder(module)\n .loadConfig(config)\n .addRouter('/api', apiRouter)\n .addRouter('', rootRouter);\n\n await service.start();\n\n return async ({ plugin }) => {\n const pluginId = plugin.getId();\n return {\n use(handler: Handler) {\n if (pluginId === defaultPluginId) {\n rootRouter.use(handler);\n } else {\n apiRouter.use(`/${pluginId}`, handler);\n }\n },\n };\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n BackendLifecycle,\n createServiceFactory,\n lifecycleServiceRef,\n loggerToWinstonLogger,\n pluginMetadataServiceRef,\n rootLoggerServiceRef,\n BackendLifecycleShutdownHook,\n} from '@backstage/backend-plugin-api';\nimport { Logger } from 'winston';\n\nconst CALLBACKS = ['SIGTERM', 'SIGINT', 'beforeExit'];\nexport class BackendLifecycleImpl {\n constructor(private readonly logger: Logger) {\n CALLBACKS.map(signal => process.on(signal, () => this.shutdown()));\n }\n\n #isCalled = false;\n #shutdownTasks: Array<BackendLifecycleShutdownHook & { pluginId: string }> =\n [];\n\n addShutdownHook(\n options: BackendLifecycleShutdownHook & { pluginId: string },\n ): void {\n this.#shutdownTasks.push(options);\n }\n\n async shutdown(): Promise<void> {\n if (this.#isCalled) {\n return;\n }\n this.#isCalled = true;\n\n this.logger.info(`Running ${this.#shutdownTasks.length} shutdown tasks...`);\n await Promise.all(\n this.#shutdownTasks.map(hook =>\n Promise.resolve()\n .then(() => hook.fn())\n .catch(e => {\n this.logger.error(\n `Shutdown hook registered by plugin '${hook.pluginId}' failed with: ${e}`,\n );\n })\n .then(() =>\n this.logger.info(\n `Successfully ran shutdown hook registered by plugin ${hook.pluginId}`,\n ),\n ),\n ),\n );\n }\n}\n\nclass PluginScopedLifecycleImpl implements BackendLifecycle {\n constructor(\n private readonly lifecycle: BackendLifecycleImpl,\n private readonly pluginId: string,\n ) {}\n addShutdownHook(options: BackendLifecycleShutdownHook): void {\n this.lifecycle.addShutdownHook({ ...options, pluginId: this.pluginId });\n }\n}\n\n/**\n * Allows plugins to register shutdown hooks that are run when the process is about to exit.\n * @public */\nexport const lifecycleFactory = createServiceFactory({\n service: lifecycleServiceRef,\n deps: {\n logger: rootLoggerServiceRef,\n plugin: pluginMetadataServiceRef,\n },\n async factory({ logger }) {\n const rootLifecycle = new BackendLifecycleImpl(\n loggerToWinstonLogger(logger),\n );\n return async ({ plugin }) => {\n return new PluginScopedLifecycleImpl(rootLifecycle, plugin.getId());\n };\n },\n});\n"],"names":["__privateAdd","__privateSet","__privateGet","__privateMethod","stringifyError","pluginMetadataServiceRef","createServiceFactory","cacheServiceRef","configServiceRef","CacheManager","rootLoggerServiceRef","loadBackendConfig","loggerToWinstonLogger","databaseServiceRef","DatabaseManager","discoveryServiceRef","SingleHostDiscovery","loggerServiceRef","createRootLogger","permissionsServiceRef","tokenManagerServiceRef","ServerPermissionClient","schedulerServiceRef","TaskScheduler","ServerTokenManager","urlReaderServiceRef","UrlReaders","httpRouterServiceRef","Router","createServiceBuilder","lifecycleServiceRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/wiring/BackendInitializer.ts","../src/wiring/ServiceRegistry.ts","../src/wiring/BackstageBackend.ts","../src/wiring/types.ts","../src/services/implementations/cacheService.ts","../src/services/implementations/configService.ts","../src/services/implementations/databaseService.ts","../src/services/implementations/discoveryService.ts","../src/services/implementations/loggerService.ts","../src/services/implementations/rootLoggerService.ts","../src/services/implementations/permissionsService.ts","../src/services/implementations/schedulerService.ts","../src/services/implementations/tokenManagerService.ts","../src/services/implementations/urlReaderService.ts","../src/services/implementations/httpRouterService.ts","../src/services/implementations/lifecycleService.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BackendFeature,\n ExtensionPoint,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport {\n BackendRegisterInit,\n ServiceHolder,\n ServiceOrExtensionPoint,\n} from './types';\n\nexport class BackendInitializer {\n #started = false;\n #features = new Map<BackendFeature, unknown>();\n #registerInits = new Array<BackendRegisterInit>();\n #extensionPoints = new Map<ExtensionPoint<unknown>, unknown>();\n #serviceHolder: ServiceHolder;\n\n constructor(serviceHolder: ServiceHolder) {\n this.#serviceHolder = serviceHolder;\n }\n\n async #getInitDeps(\n deps: { [name: string]: ServiceOrExtensionPoint },\n pluginId: string,\n ) {\n const result = new Map<string, unknown>();\n const missingRefs = new Set<ServiceOrExtensionPoint>();\n\n for (const [name, ref] of Object.entries(deps)) {\n const extensionPoint = this.#extensionPoints.get(\n ref as ExtensionPoint<unknown>,\n );\n if (extensionPoint) {\n result.set(name, extensionPoint);\n } else {\n const impl = await this.#serviceHolder.get(\n ref as ServiceRef<unknown>,\n pluginId,\n );\n if (impl) {\n result.set(name, impl);\n } else {\n missingRefs.add(ref);\n }\n }\n }\n\n if (missingRefs.size > 0) {\n const missing = Array.from(missingRefs).join(', ');\n throw new Error(\n `No extension point or service available for the following ref(s): ${missing}`,\n );\n }\n\n return Object.fromEntries(result);\n }\n\n add<TOptions>(feature: BackendFeature, options?: TOptions) {\n if (this.#started) {\n throw new Error('feature can not be added after the backend has started');\n }\n this.#features.set(feature, options);\n }\n\n async start(): Promise<void> {\n if (this.#started) {\n throw new Error('Backend has already started');\n }\n this.#started = true;\n\n for (const [feature] of this.#features) {\n const provides = new Set<ExtensionPoint<unknown>>();\n\n let registerInit: BackendRegisterInit | undefined = undefined;\n\n feature.register({\n registerExtensionPoint: (extensionPointRef, impl) => {\n if (registerInit) {\n throw new Error('registerExtensionPoint called after registerInit');\n }\n if (this.#extensionPoints.has(extensionPointRef)) {\n throw new Error(`API ${extensionPointRef.id} already registered`);\n }\n this.#extensionPoints.set(extensionPointRef, impl);\n provides.add(extensionPointRef);\n },\n registerInit: registerOptions => {\n if (registerInit) {\n throw new Error('registerInit must only be called once');\n }\n registerInit = {\n id: feature.id,\n provides,\n consumes: new Set(Object.values(registerOptions.deps)),\n deps: registerOptions.deps,\n init: registerOptions.init as BackendRegisterInit['init'],\n };\n },\n });\n\n if (!registerInit) {\n throw new Error(\n `registerInit was not called by register in ${feature.id}`,\n );\n }\n\n this.#registerInits.push(registerInit);\n }\n\n const orderedRegisterResults = this.#resolveInitOrder(this.#registerInits);\n\n for (const registerInit of orderedRegisterResults) {\n const deps = await this.#getInitDeps(registerInit.deps, registerInit.id);\n await registerInit.init(deps);\n }\n }\n\n #resolveInitOrder(registerInits: Array<BackendRegisterInit>) {\n let registerInitsToOrder = registerInits.slice();\n const orderedRegisterInits = new Array<BackendRegisterInit>();\n\n // TODO: Validate duplicates\n\n while (registerInitsToOrder.length > 0) {\n const toRemove = new Set<unknown>();\n\n for (const registerInit of registerInitsToOrder) {\n const unInitializedDependents = [];\n\n for (const provided of registerInit.provides) {\n if (\n registerInitsToOrder.some(\n init => init !== registerInit && init.consumes.has(provided),\n )\n ) {\n unInitializedDependents.push(provided);\n }\n }\n\n if (unInitializedDependents.length === 0) {\n orderedRegisterInits.push(registerInit);\n toRemove.add(registerInit);\n }\n }\n\n registerInitsToOrder = registerInitsToOrder.filter(r => !toRemove.has(r));\n }\n\n return orderedRegisterInits;\n }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ServiceFactory,\n ServiceRef,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { stringifyError } from '@backstage/errors';\n\n/**\n * Keep in sync with `@backstage/backend-plugin-api/src/services/system/types.ts`\n * @internal\n */\nexport type InternalServiceRef<T> = ServiceRef<T> & {\n __defaultFactory?: (\n service: ServiceRef<T>,\n ) => Promise<ServiceFactory<T> | (() => ServiceFactory<T>)>;\n};\n\nexport class ServiceRegistry {\n readonly #providedFactories: Map<string, ServiceFactory>;\n readonly #loadedDefaultFactories: Map<Function, Promise<ServiceFactory>>;\n readonly #implementations: Map<\n ServiceFactory,\n {\n factoryFunc: Promise<\n (deps: { [name in string]: unknown }) => Promise<unknown>\n >;\n byPlugin: Map<string, Promise<unknown>>;\n }\n >;\n\n constructor(\n factories: Array<ServiceFactory<unknown> | (() => ServiceFactory<unknown>)>,\n ) {\n this.#providedFactories = new Map(\n factories.map(f => {\n if (typeof f === 'function') {\n const cf = f();\n return [cf.service.id, cf];\n }\n return [f.service.id, f];\n }),\n );\n this.#loadedDefaultFactories = new Map();\n this.#implementations = new Map();\n }\n\n #resolveFactory(\n ref: ServiceRef<unknown>,\n pluginId: string,\n ): Promise<ServiceFactory> | undefined {\n // Special case handling of the plugin metadata service, generating a custom factory for it each time\n if (ref.id === coreServices.pluginMetadata.id) {\n return Promise.resolve({\n scope: 'plugin',\n service: coreServices.pluginMetadata,\n deps: {},\n factory: async () => async () => ({\n getId() {\n return pluginId;\n },\n }),\n });\n }\n\n let resolvedFactory: Promise<ServiceFactory> | ServiceFactory | undefined =\n this.#providedFactories.get(ref.id);\n const { __defaultFactory: defaultFactory } =\n ref as InternalServiceRef<unknown>;\n if (!resolvedFactory && !defaultFactory) {\n return undefined;\n }\n\n if (!resolvedFactory) {\n let loadedFactory = this.#loadedDefaultFactories.get(defaultFactory!);\n if (!loadedFactory) {\n loadedFactory = Promise.resolve()\n .then(() => defaultFactory!(ref))\n .then(f =>\n typeof f === 'function' ? f() : f,\n ) as Promise<ServiceFactory>;\n this.#loadedDefaultFactories.set(defaultFactory!, loadedFactory);\n }\n resolvedFactory = loadedFactory.catch(error => {\n throw new Error(\n `Failed to instantiate service '${\n ref.id\n }' because the default factory loader threw an error, ${stringifyError(\n error,\n )}`,\n );\n });\n }\n\n return Promise.resolve(resolvedFactory);\n }\n\n #separateMapForTheRootService = new Map<ServiceFactory, Promise<unknown>>();\n\n #checkForMissingDeps(factory: ServiceFactory, pluginId: string) {\n const missingDeps = Object.values(factory.deps).filter(ref => {\n if (ref.id === coreServices.pluginMetadata.id) {\n return false;\n }\n if (this.#providedFactories.get(ref.id)) {\n return false;\n }\n\n return !(ref as InternalServiceRef<unknown>).__defaultFactory;\n });\n\n if (missingDeps.length) {\n const missing = missingDeps.map(r => `'${r.id}'`).join(', ');\n throw new Error(\n `Failed to instantiate service '${factory.service.id}' for '${pluginId}' because the following dependent services are missing: ${missing}`,\n );\n }\n }\n\n get<T>(ref: ServiceRef<T>, pluginId: string): Promise<T> | undefined {\n return this.#resolveFactory(ref, pluginId)?.then(factory => {\n if (factory.scope === 'root') {\n let existing = this.#separateMapForTheRootService.get(factory);\n if (!existing) {\n this.#checkForMissingDeps(factory, pluginId);\n const rootDeps = new Array<Promise<[name: string, impl: unknown]>>();\n\n for (const [name, serviceRef] of Object.entries(factory.deps)) {\n if (serviceRef.scope !== 'root') {\n throw new Error(\n `Failed to instantiate 'root' scoped service '${ref.id}' because it depends on '${serviceRef.scope}' scoped service '${serviceRef.id}'.`,\n );\n }\n const target = this.get(serviceRef, pluginId)!;\n rootDeps.push(target.then(impl => [name, impl]));\n }\n\n existing = Promise.all(rootDeps).then(entries =>\n factory.factory(Object.fromEntries(entries)),\n );\n this.#separateMapForTheRootService.set(factory, existing);\n }\n return existing as Promise<T>;\n }\n\n let implementation = this.#implementations.get(factory);\n if (!implementation) {\n this.#checkForMissingDeps(factory, pluginId);\n const rootDeps = new Array<Promise<[name: string, impl: unknown]>>();\n\n for (const [name, serviceRef] of Object.entries(factory.deps)) {\n if (serviceRef.scope === 'root') {\n const target = this.get(serviceRef, pluginId)!;\n rootDeps.push(target.then(impl => [name, impl]));\n }\n }\n\n implementation = {\n factoryFunc: Promise.all(rootDeps)\n .then(entries => factory.factory(Object.fromEntries(entries)))\n .catch(error => {\n const cause = stringifyError(error);\n throw new Error(\n `Failed to instantiate service '${ref.id}' because the top-level factory function threw an error, ${cause}`,\n );\n }),\n byPlugin: new Map(),\n };\n\n this.#implementations.set(factory, implementation);\n }\n\n let result = implementation.byPlugin.get(pluginId) as Promise<any>;\n if (!result) {\n const allDeps = new Array<Promise<[name: string, impl: unknown]>>();\n\n for (const [name, serviceRef] of Object.entries(factory.deps)) {\n const target = this.get(serviceRef, pluginId)!;\n allDeps.push(target.then(impl => [name, impl]));\n }\n\n result = implementation.factoryFunc\n .then(func =>\n Promise.all(allDeps).then(entries =>\n func(Object.fromEntries(entries)),\n ),\n )\n .catch(error => {\n const cause = stringifyError(error);\n throw new Error(\n `Failed to instantiate service '${ref.id}' for '${pluginId}' because the factory function threw an error, ${cause}`,\n );\n });\n implementation.byPlugin.set(pluginId, result);\n }\n\n return result;\n });\n }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ServiceFactory, BackendFeature } from '@backstage/backend-plugin-api';\nimport { BackendInitializer } from './BackendInitializer';\nimport { ServiceRegistry } from './ServiceRegistry';\nimport { Backend } from './types';\n\nexport class BackstageBackend implements Backend {\n #services: ServiceRegistry;\n #initializer: BackendInitializer;\n\n constructor(apiFactories: ServiceFactory[]) {\n this.#services = new ServiceRegistry(apiFactories);\n this.#initializer = new BackendInitializer(this.#services);\n }\n\n add(feature: BackendFeature): void {\n this.#initializer.add(feature);\n }\n\n async start(): Promise<void> {\n await this.#initializer.start();\n }\n\n // async stop(): Promise<void> {\n // await this.#initializer.stop();\n // }\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ServiceFactory,\n BackendFeature,\n ExtensionPoint,\n ServiceRef,\n} from '@backstage/backend-plugin-api';\nimport { BackstageBackend } from './BackstageBackend';\n\n/**\n * @public\n */\nexport interface Backend {\n add(feature: BackendFeature): void;\n start(): Promise<void>;\n}\n\nexport interface BackendRegisterInit {\n id: string;\n consumes: Set<ServiceOrExtensionPoint>;\n provides: Set<ServiceOrExtensionPoint>;\n deps: { [name: string]: ServiceOrExtensionPoint };\n init: (deps: { [name: string]: unknown }) => Promise<void>;\n}\n\n/**\n * @public\n */\nexport interface CreateSpecializedBackendOptions {\n services: (ServiceFactory | (() => ServiceFactory))[];\n}\n\nexport type ServiceHolder = {\n get<T>(api: ServiceRef<T>, pluginId: string): Promise<T> | undefined;\n};\n\n/**\n * @public\n */\nexport function createSpecializedBackend(\n options: CreateSpecializedBackendOptions,\n): Backend {\n return new BackstageBackend(\n options.services.map(s => (typeof s === 'function' ? s() : s)),\n );\n}\n\n/**\n * @public\n */\nexport type ServiceOrExtensionPoint<T = unknown> =\n | ExtensionPoint<T>\n | ServiceRef<T>;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CacheManager } from '@backstage/backend-common';\nimport {\n coreServices,\n createServiceFactory,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const cacheFactory = createServiceFactory({\n service: coreServices.cache,\n deps: {\n config: coreServices.config,\n plugin: coreServices.pluginMetadata,\n },\n async factory({ config }) {\n const cacheManager = CacheManager.fromConfig(config);\n return async ({ plugin }) => {\n return cacheManager.forPlugin(plugin.getId());\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { loadBackendConfig } from '@backstage/backend-common';\nimport {\n coreServices,\n createServiceFactory,\n loggerToWinstonLogger,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const configFactory = createServiceFactory({\n service: coreServices.config,\n deps: {\n logger: coreServices.rootLogger,\n },\n async factory({ logger }) {\n const config = await loadBackendConfig({\n argv: process.argv,\n logger: loggerToWinstonLogger(logger),\n });\n return config;\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DatabaseManager } from '@backstage/backend-common';\nimport {\n coreServices,\n createServiceFactory,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const databaseFactory = createServiceFactory({\n service: coreServices.database,\n deps: {\n config: coreServices.config,\n plugin: coreServices.pluginMetadata,\n },\n async factory({ config }) {\n const databaseManager = DatabaseManager.fromConfig(config);\n return async ({ plugin }) => {\n return databaseManager.forPlugin(plugin.getId());\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SingleHostDiscovery } from '@backstage/backend-common';\nimport {\n coreServices,\n createServiceFactory,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const discoveryFactory = createServiceFactory({\n service: coreServices.discovery,\n deps: {\n config: coreServices.config,\n },\n async factory({ config }) {\n const discovery = SingleHostDiscovery.fromConfig(config);\n return async () => {\n return discovery;\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createServiceFactory,\n coreServices,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const loggerFactory = createServiceFactory({\n service: coreServices.logger,\n deps: {\n rootLogger: coreServices.rootLogger,\n plugin: coreServices.pluginMetadata,\n },\n async factory({ rootLogger }) {\n return async ({ plugin }) => {\n return rootLogger.child({ pluginId: plugin.getId() });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createRootLogger } from '@backstage/backend-common';\nimport {\n createServiceFactory,\n Logger,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { Logger as WinstonLogger } from 'winston';\n\nclass BackstageLogger implements Logger {\n static fromWinston(logger: WinstonLogger): BackstageLogger {\n return new BackstageLogger(logger);\n }\n\n private constructor(private readonly winston: WinstonLogger) {}\n\n info(message: string, ...meta: any[]): void {\n this.winston.info(message, ...meta);\n }\n\n child(fields: { [name: string]: string }): Logger {\n return new BackstageLogger(this.winston.child(fields));\n }\n}\n\n/** @public */\nexport const rootLoggerFactory = createServiceFactory({\n service: coreServices.rootLogger,\n deps: {},\n async factory() {\n return BackstageLogger.fromWinston(createRootLogger());\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n coreServices,\n createServiceFactory,\n} from '@backstage/backend-plugin-api';\nimport { ServerPermissionClient } from '@backstage/plugin-permission-node';\n\n/** @public */\nexport const permissionsFactory = createServiceFactory({\n service: coreServices.permissions,\n deps: {\n config: coreServices.config,\n discovery: coreServices.discovery,\n tokenManager: coreServices.tokenManager,\n },\n async factory({ config }) {\n return async ({ discovery, tokenManager }) => {\n return ServerPermissionClient.fromConfig(config, {\n discovery,\n tokenManager,\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n coreServices,\n createServiceFactory,\n} from '@backstage/backend-plugin-api';\nimport { TaskScheduler } from '@backstage/backend-tasks';\n\n/** @public */\nexport const schedulerFactory = createServiceFactory({\n service: coreServices.scheduler,\n deps: {\n config: coreServices.config,\n plugin: coreServices.pluginMetadata,\n },\n async factory({ config }) {\n const taskScheduler = TaskScheduler.fromConfig(config);\n return async ({ plugin }) => {\n return taskScheduler.forPlugin(plugin.getId());\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n coreServices,\n createServiceFactory,\n loggerToWinstonLogger,\n} from '@backstage/backend-plugin-api';\nimport { ServerTokenManager } from '@backstage/backend-common';\n\n/** @public */\nexport const tokenManagerFactory = createServiceFactory({\n service: coreServices.tokenManager,\n deps: {\n config: coreServices.config,\n logger: coreServices.logger,\n },\n async factory() {\n return async ({ config, logger }) => {\n return ServerTokenManager.fromConfig(config, {\n logger: loggerToWinstonLogger(logger),\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { UrlReaders } from '@backstage/backend-common';\nimport {\n coreServices,\n createServiceFactory,\n loggerToWinstonLogger,\n} from '@backstage/backend-plugin-api';\n\n/** @public */\nexport const urlReaderFactory = createServiceFactory({\n service: coreServices.urlReader,\n deps: {\n config: coreServices.config,\n logger: coreServices.logger,\n },\n async factory() {\n return async ({ config, logger }) => {\n return UrlReaders.default({\n config,\n logger: loggerToWinstonLogger(logger),\n });\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createServiceFactory,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport Router from 'express-promise-router';\nimport { Handler } from 'express';\nimport { createServiceBuilder } from '@backstage/backend-common';\n\n/**\n * @public\n */\nexport type HttpRouterFactoryOptions = {\n /**\n * The plugin ID used for the index route. Defaults to 'app'\n */\n indexPlugin?: string;\n};\n\n/** @public */\nexport const httpRouterFactory = createServiceFactory({\n service: coreServices.httpRouter,\n deps: {\n config: coreServices.config,\n plugin: coreServices.pluginMetadata,\n },\n async factory({ config }, options?: HttpRouterFactoryOptions) {\n const defaultPluginId = options?.indexPlugin ?? 'app';\n\n const apiRouter = Router();\n const rootRouter = Router();\n\n const service = createServiceBuilder(module)\n .loadConfig(config)\n .addRouter('/api', apiRouter)\n .addRouter('', rootRouter);\n\n await service.start();\n\n return async ({ plugin }) => {\n const pluginId = plugin.getId();\n return {\n use(handler: Handler) {\n if (pluginId === defaultPluginId) {\n rootRouter.use(handler);\n } else {\n apiRouter.use(`/${pluginId}`, handler);\n }\n },\n };\n };\n },\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n BackendLifecycle,\n createServiceFactory,\n coreServices,\n loggerToWinstonLogger,\n BackendLifecycleShutdownHook,\n} from '@backstage/backend-plugin-api';\nimport { Logger } from 'winston';\n\nconst CALLBACKS = ['SIGTERM', 'SIGINT', 'beforeExit'];\nexport class BackendLifecycleImpl {\n constructor(private readonly logger: Logger) {\n CALLBACKS.map(signal => process.on(signal, () => this.shutdown()));\n }\n\n #isCalled = false;\n #shutdownTasks: Array<BackendLifecycleShutdownHook & { pluginId: string }> =\n [];\n\n addShutdownHook(\n options: BackendLifecycleShutdownHook & { pluginId: string },\n ): void {\n this.#shutdownTasks.push(options);\n }\n\n async shutdown(): Promise<void> {\n if (this.#isCalled) {\n return;\n }\n this.#isCalled = true;\n\n this.logger.info(`Running ${this.#shutdownTasks.length} shutdown tasks...`);\n await Promise.all(\n this.#shutdownTasks.map(hook =>\n Promise.resolve()\n .then(() => hook.fn())\n .catch(e => {\n this.logger.error(\n `Shutdown hook registered by plugin '${hook.pluginId}' failed with: ${e}`,\n );\n })\n .then(() =>\n this.logger.info(\n `Successfully ran shutdown hook registered by plugin ${hook.pluginId}`,\n ),\n ),\n ),\n );\n }\n}\n\nclass PluginScopedLifecycleImpl implements BackendLifecycle {\n constructor(\n private readonly lifecycle: BackendLifecycleImpl,\n private readonly pluginId: string,\n ) {}\n addShutdownHook(options: BackendLifecycleShutdownHook): void {\n this.lifecycle.addShutdownHook({ ...options, pluginId: this.pluginId });\n }\n}\n\n/**\n * Allows plugins to register shutdown hooks that are run when the process is about to exit.\n * @public */\nexport const lifecycleFactory = createServiceFactory({\n service: coreServices.lifecycle,\n deps: {\n logger: coreServices.rootLogger,\n plugin: coreServices.pluginMetadata,\n },\n async factory({ logger }) {\n const rootLifecycle = new BackendLifecycleImpl(\n loggerToWinstonLogger(logger),\n );\n return async ({ plugin }) => {\n return new PluginScopedLifecycleImpl(rootLifecycle, plugin.getId());\n };\n },\n});\n"],"names":["__privateAdd","__privateSet","__privateGet","__privateMethod","stringifyError","coreServices","createServiceFactory","CacheManager","loadBackendConfig","loggerToWinstonLogger","DatabaseManager","SingleHostDiscovery","createRootLogger","ServerPermissionClient","TaskScheduler","ServerTokenManager","UrlReaders","Router","createServiceBuilder"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/backend-app-api",
|
|
3
3
|
"description": "Core API used by Backstage backend apps",
|
|
4
|
-
"version": "0.2.4-next.
|
|
4
|
+
"version": "0.2.4-next.3",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"publishConfig": {
|
|
@@ -33,17 +33,17 @@
|
|
|
33
33
|
"start": "backstage-cli package start"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@backstage/backend-common": "^0.17.0-next.
|
|
37
|
-
"@backstage/backend-plugin-api": "^0.
|
|
38
|
-
"@backstage/backend-tasks": "^0.4.0-next.
|
|
36
|
+
"@backstage/backend-common": "^0.17.0-next.3",
|
|
37
|
+
"@backstage/backend-plugin-api": "^0.2.0-next.3",
|
|
38
|
+
"@backstage/backend-tasks": "^0.4.0-next.3",
|
|
39
39
|
"@backstage/errors": "^1.1.4-next.1",
|
|
40
|
-
"@backstage/plugin-permission-node": "^0.7.2-next.
|
|
40
|
+
"@backstage/plugin-permission-node": "^0.7.2-next.3",
|
|
41
41
|
"express": "^4.17.1",
|
|
42
42
|
"express-promise-router": "^4.1.0",
|
|
43
43
|
"winston": "^3.2.1"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@backstage/cli": "^0.
|
|
46
|
+
"@backstage/cli": "^0.22.0-next.4"
|
|
47
47
|
},
|
|
48
48
|
"files": [
|
|
49
49
|
"dist",
|