updates to use new option factory callback pattern

Co-authored-by: Fredrik Adelöw <freben@gmail.com>
Co-authored-by: blam <ben@blam.sh>
Co-authored-by: Johan Haals <johan.haals@gmail.com>
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-01-11 14:59:33 +01:00
parent 4ed8ac14e0
commit 01a318f75d
5 changed files with 132 additions and 129 deletions
@@ -23,30 +23,32 @@ import { Handler } from 'express';
/**
* @public
*/
export type HttpRouterFactoryOptions = {
export interface HttpRouterFactoryOptions {
/**
* A callback used to generate the path for each plugin, defaults to `/api/{pluginId}`.
*/
getPath(pluginId: string): string;
};
}
/** @public */
export const httpRouterFactory = createServiceFactory({
service: coreServices.httpRouter,
deps: {
plugin: coreServices.pluginMetadata,
rootHttpRouter: coreServices.rootHttpRouter,
},
async factory({ rootHttpRouter }, options?: HttpRouterFactoryOptions) {
const getPath = options?.getPath ?? (id => `/api/${id}`);
export const httpRouterFactory = createServiceFactory(
(options?: HttpRouterFactoryOptions) => ({
service: coreServices.httpRouter,
deps: {
plugin: coreServices.pluginMetadata,
rootHttpRouter: coreServices.rootHttpRouter,
},
async factory({ rootHttpRouter }) {
const getPath = options?.getPath ?? (id => `/api/${id}`);
return async ({ plugin }) => {
const path = getPath(plugin.getId());
return {
use(handler: Handler) {
rootHttpRouter.use(path, handler);
},
return async ({ plugin }) => {
const path = getPath(plugin.getId());
return {
use(handler: Handler) {
rootHttpRouter.use(path, handler);
},
};
};
};
},
});
},
}),
);
@@ -143,7 +143,7 @@ describe('ServiceRegistry', () => {
const factory = createServiceFactory({
service: ref1,
deps: { rootDep: ref2 },
async factory({ rootDep }) {
factory: async ({ rootDep }) => {
return async () => ({ x: rootDep.x });
},
});
+3 -3
View File
@@ -70,9 +70,9 @@ export type AppPluginOptions = {
* The App plugin is responsible for serving the frontend app bundle and static assets.
* @alpha
*/
export const appPlugin = createBackendPlugin({
export const appPlugin = createBackendPlugin((options: AppPluginOptions) => ({
id: 'app',
register(env, options: AppPluginOptions) {
register(env) {
env.registerInit({
deps: {
logger: coreServices.logger,
@@ -101,4 +101,4 @@ export const appPlugin = createBackendPlugin({
},
});
},
});
}));
@@ -31,51 +31,50 @@ import { WrapperProviders } from './WrapperProviders';
* @alpha
*/
export const incrementalIngestionEntityProviderCatalogModule =
createBackendModule({
pluginId: 'catalog',
moduleId: 'incrementalIngestionEntityProvider',
register(
env,
options: {
providers: Array<{
provider: IncrementalEntityProvider<unknown, unknown>;
options: IncrementalEntityProviderOptions;
}>;
},
) {
env.registerInit({
deps: {
catalog: catalogProcessingExtensionPoint,
config: coreServices.config,
database: coreServices.database,
httpRouter: coreServices.httpRouter,
logger: coreServices.logger,
scheduler: coreServices.scheduler,
},
async init({
catalog,
config,
database,
httpRouter,
logger,
scheduler,
}) {
const client = await database.getClient();
const providers = new WrapperProviders({
createBackendModule(
(options: {
providers: Array<{
provider: IncrementalEntityProvider<unknown, unknown>;
options: IncrementalEntityProviderOptions;
}>;
}) => ({
pluginId: 'catalog',
moduleId: 'incrementalIngestionEntityProvider',
register(env) {
env.registerInit({
deps: {
catalog: catalogProcessingExtensionPoint,
config: coreServices.config,
database: coreServices.database,
httpRouter: coreServices.httpRouter,
logger: coreServices.logger,
scheduler: coreServices.scheduler,
},
async init({
catalog,
config,
database,
httpRouter,
logger,
client,
scheduler,
});
}) {
const client = await database.getClient();
for (const entry of options.providers) {
const wrapped = providers.wrap(entry.provider, entry.options);
catalog.addEntityProvider(wrapped);
}
const providers = new WrapperProviders({
config,
logger,
client,
scheduler,
});
httpRouter.use(await providers.adminRouter());
},
});
},
});
for (const entry of options.providers) {
const wrapped = providers.wrap(entry.provider, entry.options);
catalog.addEntityProvider(wrapped);
}
httpRouter.use(await providers.adminRouter());
},
});
},
}),
);
@@ -70,72 +70,74 @@ export const scaffolderActionsExtensionPoint =
* Catalog plugin
* @alpha
*/
export const scaffolderPlugin = createBackendPlugin({
id: 'scaffolder',
register(env, options: ScaffolderPluginOptions) {
const actionsExtensions = new ScaffolderActionsExtensionPointImpl();
env.registerExtensionPoint(
scaffolderActionsExtensionPoint,
actionsExtensions,
);
export const scaffolderPlugin = createBackendPlugin(
(options: ScaffolderPluginOptions) => ({
id: 'scaffolder',
register(env) {
const actionsExtensions = new ScaffolderActionsExtensionPointImpl();
env.registerExtensionPoint(
scaffolderActionsExtensionPoint,
actionsExtensions,
);
env.registerInit({
deps: {
logger: coreServices.logger,
config: coreServices.config,
reader: coreServices.urlReader,
permissions: coreServices.permissions,
database: coreServices.database,
httpRouter: coreServices.httpRouter,
catalogClient: catalogServiceRef,
},
async init({
logger,
config,
reader,
database,
httpRouter,
catalogClient,
}) {
const {
additionalTemplateFilters,
taskBroker,
taskWorkers,
additionalTemplateGlobals,
} = options;
const log = loggerToWinstonLogger(logger);
env.registerInit({
deps: {
logger: coreServices.logger,
config: coreServices.config,
reader: coreServices.urlReader,
permissions: coreServices.permissions,
database: coreServices.database,
httpRouter: coreServices.httpRouter,
catalogClient: catalogServiceRef,
},
async init({
logger,
config,
reader,
database,
httpRouter,
catalogClient,
}) {
const {
additionalTemplateFilters,
taskBroker,
taskWorkers,
additionalTemplateGlobals,
} = options;
const log = loggerToWinstonLogger(logger);
const actions = options.actions || [
...actionsExtensions.actions,
...createBuiltinActions({
integrations: ScmIntegrations.fromConfig(config),
const actions = options.actions || [
...actionsExtensions.actions,
...createBuiltinActions({
integrations: ScmIntegrations.fromConfig(config),
catalogClient,
reader,
config,
additionalTemplateFilters,
additionalTemplateGlobals,
}),
];
const actionIds = actions.map(action => action.id).join(', ');
log.info(
`Starting scaffolder with the following actions enabled ${actionIds}`,
);
const router = await createRouter({
logger: log,
config,
database,
catalogClient,
reader,
config,
actions,
taskBroker,
taskWorkers,
additionalTemplateFilters,
additionalTemplateGlobals,
}),
];
const actionIds = actions.map(action => action.id).join(', ');
log.info(
`Starting scaffolder with the following actions enabled ${actionIds}`,
);
const router = await createRouter({
logger: log,
config,
database,
catalogClient,
reader,
actions,
taskBroker,
taskWorkers,
additionalTemplateFilters,
additionalTemplateGlobals,
});
httpRouter.use(router);
},
});
},
});
});
httpRouter.use(router);
},
});
},
}),
);