export async function load()

in packages/docusaurus/src/server/index.ts [115:262]


export async function load(options: LoadContextOptions): Promise<Props> {
  const {siteDir} = options;
  const context = await loadContext(options);
  const {
    generatedFilesDir,
    siteConfig,
    siteConfigPath,
    outDir,
    baseUrl,
    i18n,
    ssrTemplate,
    codeTranslations: siteCodeTranslations,
  } = context;
  const {plugins, pluginsRouteConfigs, globalData} = await loadPlugins(context);
  const clientModules = loadClientModules(plugins);
  const {headTags, preBodyTags, postBodyTags} = loadHtmlTags(plugins);
  const {registry, routesChunkNames, routesConfig, routesPaths} =
    await loadRoutes(
      pluginsRouteConfigs,
      baseUrl,
      siteConfig.onDuplicateRoutes,
    );
  const codeTranslations = {
    ...(await getPluginsDefaultCodeTranslationMessages(plugins)),
    ...siteCodeTranslations,
  };
  const siteMetadata = await loadSiteMetadata({plugins, siteDir});

  // === Side-effects part ===

  const genWarning = generate(
    generatedFilesDir,
    'DONT-EDIT-THIS-FOLDER',
    `This folder stores temp files that Docusaurus' client bundler accesses.

DO NOT hand-modify files in this folder because they will be overwritten in the
next build. You can clear all build artifacts (including this folder) with the
\`docusaurus clear\` command.
`,
  );

  // Site config must be generated after plugins
  // We want the generated config to have been normalized by the plugins!
  const genSiteConfig = generate(
    generatedFilesDir,
    DEFAULT_CONFIG_FILE_NAME,
    `/*
 * AUTOGENERATED - DON'T EDIT
 * Your edits in this file will be overwritten in the next build!
 * Modify the docusaurus.config.js file at your site's root instead.
 */
export default ${JSON.stringify(siteConfig, null, 2)};
`,
  );

  const genClientModules = generate(
    generatedFilesDir,
    'client-modules.js',
    `export default [
${clientModules
  // import() is async so we use require() because client modules can have
  // CSS and the order matters for loading CSS.
  .map((module) => `  require('${escapePath(module)}'),`)
  .join('\n')}
];
`,
  );

  const genRegistry = generate(
    generatedFilesDir,
    'registry.js',
    `export default {
${Object.entries(registry)
  .sort((a, b) => a[0].localeCompare(b[0]))
  .map(
    ([key, chunk]) =>
      `  '${key}': [${chunk.loader}, '${escapePath(
        chunk.modulePath,
      )}', require.resolveWeak('${escapePath(chunk.modulePath)}')],`,
  )
  .join('\n')}};
`,
  );

  const genRoutesChunkNames = generate(
    generatedFilesDir,
    'routesChunkNames.json',
    JSON.stringify(routesChunkNames, null, 2),
  );

  const genRoutes = generate(generatedFilesDir, 'routes.js', routesConfig);

  const genGlobalData = generate(
    generatedFilesDir,
    'globalData.json',
    JSON.stringify(globalData, null, 2),
  );

  const genI18n = generate(
    generatedFilesDir,
    'i18n.json',
    JSON.stringify(i18n, null, 2),
  );

  const genCodeTranslations = generate(
    generatedFilesDir,
    'codeTranslations.json',
    JSON.stringify(codeTranslations, null, 2),
  );

  const genSiteMetadata = generate(
    generatedFilesDir,
    'site-metadata.json',
    JSON.stringify(siteMetadata, null, 2),
  );

  await Promise.all([
    genWarning,
    genClientModules,
    genSiteConfig,
    genRegistry,
    genRoutesChunkNames,
    genRoutes,
    genGlobalData,
    genSiteMetadata,
    genI18n,
    genCodeTranslations,
  ]);

  return {
    siteConfig,
    siteConfigPath,
    siteMetadata,
    siteDir,
    outDir,
    baseUrl,
    i18n,
    generatedFilesDir,
    routes: pluginsRouteConfigs,
    routesPaths,
    plugins,
    headTags,
    preBodyTags,
    postBodyTags,
    ssrTemplate,
    codeTranslations,
  };
}