strapi/packages/core/utils/src/content-api-router.ts
Jamie Howard e5d4b412da
Fix plugin content-api route extensions (#24147)
* fix: content-api route extension for i18n and users-permissions

* refactor: simplify tests to catch breaking change

* test: cli for openapi plugin routes

* refactor: implement createcontentapiroutesfactory for content-api routes across multiple packages

* fix: more accurate message

* chore: formatting

* chore: cleanup backward compatibility tests

---------

Co-authored-by: Ziyi Yuan <daydreamnation@live.com>
2025-08-18 12:28:39 +01:00

38 lines
975 B
TypeScript

/**
* Creates a content-api route factory that exposes `routes` on the factory function for backward compatibility.
*
* This allows legacy extensions to mutate `plugin.routes["content-api"].routes` directly.
*/
export const createContentApiRoutesFactory = <TRoutes>(buildRoutes: () => TRoutes) => {
let sharedRoutes: TRoutes | undefined;
const ensureSharedRoutes = (): TRoutes => {
if (!sharedRoutes) {
sharedRoutes = buildRoutes();
}
return sharedRoutes;
};
const createContentApiRoutes = () => {
return {
type: 'content-api' as const,
routes: ensureSharedRoutes(),
};
};
Object.defineProperty(createContentApiRoutes, 'routes', {
get: ensureSharedRoutes,
set(next: TRoutes) {
sharedRoutes = next;
},
enumerable: true,
});
return createContentApiRoutes;
};
export type ContentApiRoutesFactory<TRoutes> = ReturnType<
typeof createContentApiRoutesFactory<TRoutes>
> & { routes: TRoutes };