diff --git a/.changeset/beige-coins-type.md b/.changeset/beige-coins-type.md new file mode 100644 index 0000000000..340170a83e --- /dev/null +++ b/.changeset/beige-coins-type.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-app-api': patch +'@backstage/backend-plugin-api': patch +--- + +Made `ApiRef.defaultFactory` internal. diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.ts b/packages/backend-app-api/src/wiring/BackendInitializer.ts index 355fa6001d..afb5250504 100644 --- a/packages/backend-app-api/src/wiring/BackendInitializer.ts +++ b/packages/backend-app-api/src/wiring/BackendInitializer.ts @@ -108,9 +108,7 @@ export class BackendInitializer { id: feature.id, provides, consumes: new Set(Object.values(registerOptions.deps)), - deps: registerOptions.deps as { - [name: string]: ServiceOrExtensionPoint; - }, + deps: registerOptions.deps, init: registerOptions.init as BackendRegisterInit['init'], }; }, diff --git a/packages/backend-app-api/src/wiring/ServiceRegistry.ts b/packages/backend-app-api/src/wiring/ServiceRegistry.ts index 5592a0f0eb..45b82aac56 100644 --- a/packages/backend-app-api/src/wiring/ServiceRegistry.ts +++ b/packages/backend-app-api/src/wiring/ServiceRegistry.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { ServiceFactory, FactoryFunc, @@ -20,6 +21,14 @@ import { } from '@backstage/backend-plugin-api'; import { stringifyError } from '@backstage/errors'; +/** + * Keep in sync with `@backstage/backend-plugin-api/src/services/system/types.ts` + * @internal + */ +export type InternalServiceRef = ServiceRef & { + __defaultFactory?: (service: ServiceRef) => Promise>; +}; + export class ServiceRegistry { readonly #providedFactories: Map; readonly #loadedDefaultFactories: Map>; @@ -39,7 +48,7 @@ export class ServiceRegistry { get(ref: ServiceRef): FactoryFunc | undefined { let factory = this.#providedFactories.get(ref.id); - const { defaultFactory } = ref; + const { __defaultFactory: defaultFactory } = ref as InternalServiceRef; if (!factory && !defaultFactory) { return undefined; } diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 326470535e..5ea7f52c4b 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -192,7 +192,6 @@ export type ServiceFactory = { export type ServiceRef = { id: string; T: T; - defaultFactory?: (service: ServiceRef) => Promise>; toString(): string; $$ref: 'service'; }; diff --git a/packages/backend-plugin-api/src/services/system/types.ts b/packages/backend-plugin-api/src/services/system/types.ts index 3d6ebfc0dd..d622b3917f 100644 --- a/packages/backend-plugin-api/src/services/system/types.ts +++ b/packages/backend-plugin-api/src/services/system/types.ts @@ -28,15 +28,20 @@ export type ServiceRef = { */ T: T; + toString(): string; + + $$ref: 'service'; +}; + +/** + * @internal + */ +export type InternalServiceRef = ServiceRef & { /** * The default factory that will be used to create service * instances if no other factory is provided. */ - defaultFactory?: (service: ServiceRef) => Promise>; - - toString(): string; - - $$ref: 'service'; + __defaultFactory?: (service: ServiceRef) => Promise>; }; /** @public */ @@ -70,12 +75,12 @@ export function createServiceRef(options: { get T(): T { throw new Error(`tried to read ServiceRef.T of ${this}`); }, - defaultFactory, toString() { return `serviceRef{${options.id}}`; }, $$ref: 'service', // TODO: declare - }; + __defaultFactory: defaultFactory, + } as InternalServiceRef; } /**