chore: rename SignalService to SignalsService

Signed-off-by: Heikki Hellgren <heikki.hellgren@op.fi>
This commit is contained in:
Heikki Hellgren
2024-03-12 08:54:03 +02:00
parent 0b120df27b
commit 6d84ee63ce
18 changed files with 137 additions and 56 deletions
+48 -6
View File
@@ -6,28 +6,70 @@ Signals plugin allows backend plugins to publish messages to frontend plugins.
## Getting started
### New backend system
In `packages/backend/index.ts`, add the signals backend:
```ts
backend.add(import('@backstage/plugin-signals-backend'));
```
To use signals in your plugin, add it as a dependency to `my-plugin/plugin.ts`:
```ts
import {
coreServices,
createBackendPlugin,
} from '@backstage/backend-plugin-api';
import { signalsServiceRef } from '@backstage/plugin-signals-node';
export const myPlugin = createBackendPlugin({
pluginId: 'my-plugin',
register(env) {
env.registerInit({
deps: {
httpRouter: coreServices.httpRouter,
signals: signalsServiceRef,
},
async init({ httpRouter, signals }) {
httpRouter.use(
await createRouter({
signals,
}),
);
},
});
},
});
```
### Old backend system
Add SignalService to your plugin environment in `packages/backend/src/types.ts`:
```ts
import { SignalService } from '@backstage/plugin-signals-node';
import { SignalsService } from '@backstage/plugin-signals-node';
export type PluginEnvironment = {
// ...
signalService: SignalService;
signals: SignalsService;
};
```
Add it also to your `makeCreateEnv` to allow access from the other plugins:
```ts
import { SignalService } from '@backstage/plugin-signals-node';
import {
SignalsService,
DefaultSignalsService,
} from '@backstage/plugin-signals-node';
import { DefaultEventBroker } from '@backstage/plugin-events-backend';
function makeCreateEnv(config: Config) {
// ...
const eventBroker = new DefaultEventBroker(root.child({ type: 'plugin' }));
const signalService = DefaultSignalService.create({
const signalsService = DefaultSignalsService.create({
eventBroker,
});
@@ -36,7 +78,7 @@ function makeCreateEnv(config: Config) {
return {
logger,
eventBroker,
signalService,
signals: signalsService,
// ...
};
};
@@ -54,7 +96,7 @@ all subscribers, you can use `null` as `recipients` parameter.
```ts
// Periodic sending example
setInterval(async () => {
await signalService.publish({
await signals.publish({
recipients: null,
channel: 'my_plugin',
message: {
+16 -7
View File
@@ -7,10 +7,13 @@ import { EventsService } from '@backstage/plugin-events-node';
import { JsonObject } from '@backstage/types';
import { ServiceRef } from '@backstage/backend-plugin-api';
// @public @deprecated (undocumented)
export const DefaultSignalService: typeof DefaultSignalsService;
// @public (undocumented)
export class DefaultSignalService implements SignalService {
export class DefaultSignalsService implements SignalsService {
// (undocumented)
static create(options: SignalServiceOptions): DefaultSignalService;
static create(options: SignalsServiceOptions): DefaultSignalsService;
publish<TMessage extends JsonObject = JsonObject>(
signal: SignalPayload<TMessage>,
): Promise<void>;
@@ -23,20 +26,26 @@ export type SignalPayload<TMessage extends JsonObject = JsonObject> = {
message: TMessage;
};
// @public @deprecated (undocumented)
export interface SignalService extends SignalsService {}
// @public @deprecated (undocumented)
export const signalService: ServiceRef<SignalsService, 'plugin'>;
// @public (undocumented)
export interface SignalService {
export interface SignalsService {
publish<TMessage extends JsonObject = JsonObject>(
signal: SignalPayload<TMessage>,
): Promise<void>;
}
// @public (undocumented)
export const signalService: ServiceRef<SignalService, 'plugin'>;
// @public (undocumented)
export type SignalServiceOptions = {
export type SignalsServiceOptions = {
events: EventsService;
};
// @public (undocumented)
export const signalsServiceRef: ServiceRef<SignalsService, 'plugin'>;
// (No @packageDocumentation comment for this package)
```
@@ -13,15 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { DefaultSignalService } from './DefaultSignalService';
import { DefaultSignalsService } from './DefaultSignalsService';
describe('DefaultSignalService', () => {
describe('DefaultSignalsService', () => {
const mockEvents = {
publish: jest.fn(),
subscribe: jest.fn(),
};
const service = DefaultSignalService.create({ events: mockEvents });
const service = DefaultSignalsService.create({ events: mockEvents });
it('should publish signal', () => {
const signal = {
@@ -14,19 +14,19 @@
* limitations under the License.
*/
import { EventsService } from '@backstage/plugin-events-node';
import { SignalPayload, SignalServiceOptions } from './types';
import { SignalService } from './SignalService';
import { SignalPayload, SignalsServiceOptions } from './types';
import { SignalsService } from './SignalsService';
import { JsonObject } from '@backstage/types';
/** @public */
export class DefaultSignalService implements SignalService {
export class DefaultSignalsService implements SignalsService {
private events: EventsService;
static create(options: SignalServiceOptions) {
return new DefaultSignalService(options);
static create(options: SignalsServiceOptions) {
return new DefaultSignalsService(options);
}
private constructor(options: SignalServiceOptions) {
private constructor(options: SignalsServiceOptions) {
({ events: this.events } = options);
}
@@ -43,3 +43,9 @@ export class DefaultSignalService implements SignalService {
});
}
}
/**
* @public
* @deprecated Use `DefaultSignalsService` instead
*/
export const DefaultSignalService = DefaultSignalsService;
@@ -17,7 +17,7 @@ import { SignalPayload } from './types';
import { JsonObject } from '@backstage/types';
/** @public */
export interface SignalService {
export interface SignalsService {
/**
* Publishes a signal to user refs to specific topic
* @param signal - Signal to publish
@@ -26,3 +26,9 @@ export interface SignalService {
signal: SignalPayload<TMessage>,
): Promise<void>;
}
/**
* @public
* @deprecated Use `SignalsService` instead
*/
export interface SignalService extends SignalsService {}
+2 -2
View File
@@ -15,6 +15,6 @@
*/
export * from './lib';
export * from './DefaultSignalService';
export * from './SignalService';
export * from './DefaultSignalsService';
export * from './SignalsService';
export * from './types';
+10 -4
View File
@@ -17,12 +17,12 @@ import {
createServiceFactory,
createServiceRef,
} from '@backstage/backend-plugin-api';
import { DefaultSignalService } from './DefaultSignalService';
import { SignalService } from './SignalService';
import { DefaultSignalsService } from './DefaultSignalsService';
import { SignalsService } from './SignalsService';
import { eventsServiceRef } from '@backstage/plugin-events-node';
/** @public */
export const signalService = createServiceRef<SignalService>({
export const signalsServiceRef = createServiceRef<SignalsService>({
id: 'signals.service',
scope: 'plugin',
defaultFactory: async service =>
@@ -32,7 +32,13 @@ export const signalService = createServiceRef<SignalService>({
events: eventsServiceRef,
},
factory({ events }) {
return DefaultSignalService.create({ events });
return DefaultSignalsService.create({ events });
},
}),
});
/**
* @public
* @deprecated Use `signalsServiceRef` instead
*/
export const signalService = signalsServiceRef;
+1 -1
View File
@@ -19,7 +19,7 @@ import { JsonObject } from '@backstage/types';
/**
* @public
*/
export type SignalServiceOptions = {
export type SignalsServiceOptions = {
events: EventsService;
};