#!/usr/bin/env node /** * Copyright (c) 2017-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ const chalk = require('chalk'); const commander = require('commander'); const fs = require('fs-extra'); const glob = require('glob'); const path = require('path'); const CWD = process.cwd(); let feature; commander .arguments('[feature]') .action(feat => { feature = feat; }) .parse(process.argv); // add scripts to package.json file if (fs.existsSync(CWD + '/package.json')) { const packageContent = JSON.parse( fs.readFileSync(CWD + '/package.json', 'utf8') ); if (!packageContent.scripts) { packageContent.scripts = {}; } packageContent.scripts['start'] = 'docusaurus-start'; packageContent.scripts['build'] = 'docusaurus-build'; packageContent.scripts['publish-gh-pages'] = 'docusaurus-publish'; packageContent.scripts['examples'] = 'docusaurus-examples'; packageContent.scripts['write-translations'] = 'docusaurus-write-translations'; packageContent.scripts['version'] = 'docusaurus-version'; packageContent.scripts['rename-version'] = 'docusaurus-rename-version'; fs.writeFileSync( CWD + '/package.json', JSON.stringify(packageContent, null, 2) + '\n' ); console.log( `${chalk.green('Wrote docusaurus scripts to package.json file.')}\n` ); } const outerFolder = path.basename(path.dirname(CWD)); let docsCreated = false; let blogCreated = false; let exampleSiteCreated = false; // handles cases where feature is "translations", "versions" or neither/not present if (feature === 'translations') { // copy files for translations const folder = path.join(__dirname, '..', 'examples', 'translations'); if (fs.existsSync(CWD + '/../crowdin.yaml')) { console.log( `${chalk.yellow('crowdin.yaml already exists')} in ${chalk.yellow( outerFolder + '/' )}. Rename or remove the file to regenerate an example version.\n` ); } else { fs.copySync(folder + '/crowdin.yaml', CWD + '/../crowdin.yaml'); exampleSiteCreated = true; } let files = glob.sync(folder + '/**/*'); files.forEach(file => { if (fs.lstatSync(file).isDirectory()) { return; } if (path.basename(file) === 'crowdin.yaml') { return; } const filePath = path.resolve(file).split(path.resolve(folder))[1]; try { fs.copySync(file, CWD + filePath, { overwrite: false, errorOnExist: true, }); exampleSiteCreated = true; } catch (e) { console.log( `${chalk.yellow( path.basename(filePath) + ' already exists' )} in ${chalk.yellow( 'website' + filePath.split(path.basename(filePath))[0] )}. Rename or remove the file to regenerate an example version.\n` ); } }); } else if (feature === 'versions') { // copy files for versions const folder = path.join(__dirname, '..', 'examples', 'versions'); let files = glob.sync(folder + '/**/*'); files.forEach(file => { if (fs.lstatSync(file).isDirectory()) { return; } const filePath = path.resolve(file).split(path.resolve(folder))[1]; try { fs.copySync(file, CWD + filePath, { overwrite: false, errorOnExist: true, }); exampleSiteCreated = true; } catch (e) { console.log( `${chalk.yellow( path.basename(filePath) + ' already exists' )} in ${chalk.yellow( 'website' + filePath.split(path.basename(filePath))[0] )}. Rename or remove the file to regenerate an example version.\n` ); } }); } else { const folder = path.join(__dirname, '..', 'examples', 'basics'); // copy docs examples if (fs.existsSync(CWD + '/../docs-examples-from-docusaurus')) { console.log( `${chalk.yellow( 'Example docs already exist!' )} Rename or remove ${chalk.yellow( outerFolder + '/docs-examples-from-docusaurus' )} to regenerate example docs.\n` ); } else { fs.copySync( folder + '/docs-examples-from-docusaurus', CWD + '/../docs-examples-from-docusaurus' ); exampleSiteCreated = true; docsCreated = true; } // copy blog examples if (fs.existsSync(CWD + '/blog-examples-from-docusaurus')) { console.log( `${chalk.yellow( 'Example blog posts already exist!' )} Rename or remove ${chalk.yellow( outerFolder + '/website/blog-examples-from-docusaurus' )} to regenerate example blog posts.\n` ); } else { fs.copySync( path.join(folder, 'blog-examples-from-docusaurus'), path.join(CWD, 'blog-examples-from-docusaurus') ); exampleSiteCreated = true; blogCreated = true; } // copy .gitignore file let gitignoreName = '.gitignore'; if (fs.existsSync(CWD + '/../.gitignore')) { gitignoreName = '.gitignore-example-from-docusaurus'; console.log( `${chalk.yellow('.gitignore already exists')} in ${chalk.yellow( CWD )}. Creating an example gitignore file for you to copy from if desired.\n` ); } fs.copySync( path.join(folder, 'gitignore'), path.join(CWD, '/../' + gitignoreName) ); // copy other files let files = glob.sync(folder + '/**/*'); files.forEach(file => { if (fs.lstatSync(file).isDirectory()) { return; } const containingFolder = path.basename(path.dirname(file)); if ( path.basename(file) === 'gitignore' || containingFolder === 'blog-examples-from-docusaurus' || containingFolder === 'docs-examples-from-docusaurus' ) { return; } const filePath = path.resolve(file).split(path.resolve(folder))[1]; try { fs.copySync(file, CWD + filePath, { overwrite: false, errorOnExist: true, }); exampleSiteCreated = true; } catch (e) { console.log( `${chalk.yellow( path.basename(filePath) + ' already exists' )} in ${chalk.yellow( 'website' + filePath.split(path.basename(filePath))[0] )}. Rename or remove the file to regenerate an example version.\n` ); } }); if (exampleSiteCreated) { const tree = require('tree-node-cli'); const dirString = tree(path.join(CWD, '..'), { exclude: [/node_modules/], }); console.log(dirString); } } if (docsCreated) { console.log( `Rename ${chalk.yellow( outerFolder + '/docs-examples-from-docusaurus' )} to ${chalk.yellow( outerFolder + '/docs' )} to see the example docs on your site.\n` ); } if (blogCreated) { console.log( `Rename ${chalk.yellow( outerFolder + '/website/blog-examples-from-docusaurus' )} to ${chalk.yellow( outerFolder + '/website/blog' )} to see the example blog posts on your site.\n` ); }