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');
}
}