@plone/registry
Version:
Add-on and configuration registry for Plone and for JavaScript and TypeScript-based apps.
74 lines (61 loc) • 2.48 kB
JavaScript
// This script was created to initialize and create the loaders for the Plone registry.
// Nowadays it is not used in the build process, but it's still needed for initialize
// the unit tests before they run.
// It was used when React Router was evaluating `routes.ts` before running vite build.
// See https://github.com/remix-run/react-router/issues/13078#issuecomment-2863445977
import fs from 'fs';
import path from 'path';
import { createServer } from 'vite';
import { AddonRegistry } from '@plone/registry/addon-registry';
import { createAddonsLoader } from '@plone/registry/create-addons-loader';
import { createAddonsServerLoader } from '@plone/registry/create-addons-loader-server';
import { createAddonsStyleLoader } from '@plone/registry/create-addons-styles-loader';
import { createAddonsLocalesLoader } from '@plone/registry/create-addons-locales-loader';
import { PloneRegistryVitePlugin } from '@plone/registry/vite-plugin';
import config from '@plone/registry';
async function evaluateAddons(addonsLoaderPath) {
const projectRootPath = path.resolve('.');
const ploneDir = path.join(projectRootPath, '.plone');
const server = await createServer({
root: projectRootPath,
configFile: false,
server: { middlewareMode: true },
plugins: [PloneRegistryVitePlugin()],
});
try {
const { default: loader, addonsInfo } =
await server.ssrLoadModule(addonsLoaderPath);
fs.writeFileSync(
path.join(ploneDir, 'registry.routes.json'),
JSON.stringify(loader(config).routes, null, 2),
);
fs.writeFileSync(
path.join(ploneDir, 'registry.addonsInfo.json'),
JSON.stringify(addonsInfo, null, 2),
);
} finally {
await server.close();
}
}
async function initPloneRegistryLoaders() {
const projectRootPath = path.resolve('.');
const { registry, shadowAliases } = AddonRegistry.init(projectRootPath);
const ploneDir = path.join(projectRootPath, '.plone');
if (!fs.existsSync(ploneDir)) {
fs.mkdirSync(ploneDir, { recursive: true });
}
const addonsLoaderPath = createAddonsLoader(
registry.getAddonDependencies(),
registry.getAddons(),
{ tempInProject: true },
);
await evaluateAddons(addonsLoaderPath);
createAddonsServerLoader(
registry.getAddonDependencies(),
registry.getAddons(),
);
createAddonsStyleLoader(registry);
createAddonsLocalesLoader(registry);
return { registry, shadowAliases, addonsLoaderPath };
}
initPloneRegistryLoaders();