Skip to content

Commit c9a2728

Browse files
committed
Fixed add-ons loader problem in seven app
1 parent 7acf411 commit c9a2728

File tree

3 files changed

+50
-11
lines changed

3 files changed

+50
-11
lines changed

apps/seven/app/routes.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
import type { RouteConfig } from '@react-router/dev/routes';
2+
import type { ReactRouterRouteEntry } from '@plone/types';
23
import { route } from '@react-router/dev/routes';
34
import { getAddonRoutesConfig } from '@plone/react-router';
4-
import config from '@plone/registry';
5-
// eslint-disable-next-line import/no-unresolved
6-
import applyAddonConfiguration, { addonsInfo } from '../.plone/registry.loader';
75

8-
applyAddonConfiguration(config);
6+
// eslint-disable-next-line import/no-unresolved
7+
import addonsRoutes from '../.plone/registry.routes.json';
8+
// eslint-disable-next-line import/no-unresolved
9+
import addonsInfo from '../.plone/registry.addonsInfo.json';
910

1011
const routes: RouteConfig = [
1112
route('ok', 'okroute.tsx', { id: 'ok' }),
1213
route('reset-fetcher', 'reset-fetcher.tsx', { id: 'reset-fetcher' }),
13-
...getAddonRoutesConfig(config.routes || [], addonsInfo),
14+
...getAddonRoutesConfig(
15+
(addonsRoutes as ReactRouterRouteEntry[]) || [],
16+
addonsInfo,
17+
),
1418
];
1519

1620
export default routes;

apps/seven/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
"sideEffects": false,
66
"type": "module",
77
"scripts": {
8-
"dev": "react-router dev",
9-
"dev:publicui": "REGISTRYCONFIG=registry-publicui.config.ts react-router dev",
8+
"dev": "pnpm exec init-loaders && react-router dev",
9+
"dev:publicui": "REGISTRYCONFIG=registry-publicui.config.ts pnpm exec init-loaders && react-router dev",
1010
"test": "pnpm exec init-loaders && vitest --coverage",
11-
"start": "react-router dev",
12-
"build": "react-router build",
13-
"build:publicui": "REGISTRYCONFIG=registry-publicui.config.ts react-router build",
11+
"start": "pnpm exec init-loaders && react-router dev",
12+
"build": "pnpm exec init-loaders && react-router build",
13+
"build:publicui": "REGISTRYCONFIG=registry-publicui.config.ts pnpm exec init-loaders && react-router build",
1414
"start:prod": "react-router-serve ./build/server/index.js",
1515
"typecheck": "react-router typegen && tsc",
1616
"typegen": "react-router typegen",

packages/registry/bin/init-loaders.js

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,45 @@
55
// See https://github.com/remix-run/react-router/issues/13078#issuecomment-2863445977
66
import fs from 'fs';
77
import path from 'path';
8+
import { createServer } from 'vite';
89
import { AddonRegistry } from '@plone/registry/addon-registry';
910
import { createAddonsLoader } from '@plone/registry/create-addons-loader';
1011
import { createAddonsServerLoader } from '@plone/registry/create-addons-loader-server';
1112
import { createAddonsStyleLoader } from '@plone/registry/create-addons-styles-loader';
1213
import { createAddonsLocalesLoader } from '@plone/registry/create-addons-locales-loader';
14+
import { PloneRegistryVitePlugin } from '@plone/registry/vite-plugin';
15+
import config from '@plone/registry';
1316

14-
function initPloneRegistryLoaders() {
17+
async function evaluateAddons(addonsLoaderPath) {
18+
const projectRootPath = path.resolve('.');
19+
20+
const ploneDir = path.join(projectRootPath, '.plone');
21+
22+
const server = await createServer({
23+
root: projectRootPath,
24+
configFile: false,
25+
server: { middlewareMode: true },
26+
plugins: [PloneRegistryVitePlugin()],
27+
});
28+
29+
try {
30+
const { default: loader, addonsInfo } =
31+
await server.ssrLoadModule(addonsLoaderPath);
32+
33+
fs.writeFileSync(
34+
path.join(ploneDir, 'registry.routes.json'),
35+
JSON.stringify(loader(config).routes, null, 2),
36+
);
37+
fs.writeFileSync(
38+
path.join(ploneDir, 'registry.addonsInfo.json'),
39+
JSON.stringify(addonsInfo, null, 2),
40+
);
41+
} finally {
42+
await server.close();
43+
}
44+
}
45+
46+
async function initPloneRegistryLoaders() {
1547
const projectRootPath = path.resolve('.');
1648
const { registry, shadowAliases } = AddonRegistry.init(projectRootPath);
1749

@@ -25,6 +57,9 @@ function initPloneRegistryLoaders() {
2557
registry.getAddons(),
2658
{ tempInProject: true },
2759
);
60+
61+
await evaluateAddons(addonsLoaderPath);
62+
2863
createAddonsServerLoader(
2964
registry.getAddonDependencies(),
3065
registry.getAddons(),

0 commit comments

Comments
 (0)