export async function migrateDocusaurusProject()

in packages/docusaurus-migrate/src/index.ts [77:198]


export async function migrateDocusaurusProject(
  siteDir: string,
  newDir: string,
  shouldMigrateMdFiles: boolean = false,
  shouldMigratePages: boolean = false,
): Promise<void> {
  async function createMigrationContext(): Promise<MigrationContext> {
    const v1Config = importFresh(`${siteDir}/siteConfig`) as VersionOneConfig;
    logger.info('Starting migration from v1 to v2...');
    const deps = {
      '@docusaurus/core': DOCUSAURUS_VERSION,
      '@docusaurus/preset-classic': DOCUSAURUS_VERSION,
      clsx: '^1.1.1',
      react: '^17.0.2',
      'react-dom': '^17.0.2',
    };
    const partialMigrationContext = {
      siteDir,
      newDir,
      deps,
      shouldMigrateMdFiles,
      shouldMigratePages,
      v1Config,
    };
    const v2Config = createConfigFile(partialMigrationContext);
    return {
      ...partialMigrationContext,
      v2Config,
    };
  }

  const migrationContext = await createMigrationContext();
  let errorCount = 0;
  try {
    createClientRedirects(migrationContext);
    logger.success('Created client redirect for non clean URL');
  } catch (err) {
    logger.error(`Failed to creating redirects: ${err}`);
    errorCount += 1;
  }
  if (shouldMigratePages) {
    try {
      await createPages(migrationContext);
      logger.success(
        'Created new doc pages (check migration page for more details)',
      );
    } catch (err) {
      logger.error(`Failed to create new doc pages: ${err}`);
      errorCount += 1;
    }
  } else {
    try {
      await createDefaultLandingPage(migrationContext);
      logger.success(
        'Created landing page (check migration page for more details)',
      );
    } catch (err) {
      logger.error(`Failed to create landing page: ${err}`);
      errorCount += 1;
    }
  }

  try {
    await migrateStaticFiles(migrationContext);
    logger.success('Migrated static folder');
  } catch (err) {
    logger.error(`Failed to copy static folder: ${err}`);
    errorCount += 1;
  }
  try {
    await migrateBlogFiles(migrationContext);
  } catch (err) {
    logger.error(`Failed to migrate blogs: ${err}`);
    errorCount += 1;
  }
  try {
    await handleVersioning(migrationContext);
  } catch (err) {
    logger.error(`Failed to migrate versioned docs: ${err}`);
    errorCount += 1;
  }

  try {
    await migrateLatestDocs(migrationContext);
  } catch (err) {
    logger.error(`Failed to migrate docs: ${err}`);
    errorCount += 1;
  }

  try {
    await migrateLatestSidebar(migrationContext);
  } catch (err) {
    logger.error(`Failed to migrate sidebar: ${err}`);
    errorCount += 1;
  }

  try {
    await fs.outputFile(
      path.join(newDir, 'docusaurus.config.js'),
      `module.exports=${JSON.stringify(migrationContext.v2Config, null, 2)}`,
    );
    logger.success(
      `Created a new config file with new navbar and footer config`,
    );
  } catch (err) {
    logger.error(`Failed to create config file: ${err}`);
    errorCount += 1;
  }
  try {
    await migratePackageFile(migrationContext);
  } catch (err) {
    logger.error(
      `Error occurred while creating package.json file for project: ${err}`,
    );
    errorCount += 1;
  }
  if (errorCount) {
    logger.warn`Migration from v1 to v2 failed with number=${errorCount} errors: please check the log above`;
  } else {
    logger.success('Completed migration from v1 to v2');
  }
}