docusaurus/packages/docusaurus-1.x/lib/copy-examples.js
2019-03-23 21:53:32 -07:00

251 lines
7.1 KiB
JavaScript
Executable file

#!/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;
}
const 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');
const 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.green(
'docs-examples-from-docusaurus',
)} already exists in ${chalk.blue(outerFolder)}.`,
);
} 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.green(
'blog-examples-from-docusaurus',
)} already exists in ${chalk.blue(`${outerFolder}/website`)}.`,
);
} else {
fs.copySync(
path.join(folder, 'blog-examples-from-docusaurus'),
path.join(CWD, 'blog-examples-from-docusaurus'),
);
exampleSiteCreated = true;
blogCreated = true;
}
const copyFileToProjectFolder = (fileNameFrom, fileNameTo) => {
const copiedFileName = fileNameTo || fileNameFrom;
const src = path.join(folder, fileNameFrom);
const dest = path.join(CWD, '..', copiedFileName);
if (fs.existsSync(dest)) {
console.log(
`- ${chalk.green(copiedFileName)} already exists in ${chalk.blue(
outerFolder,
)}.`,
);
} else {
fs.copySync(src, dest);
}
};
// copy .gitignore file
copyFileToProjectFolder('gitignore', '.gitignore');
// copy Dockerfile file
copyFileToProjectFolder('Dockerfile');
// copy docker-compose.yml file
copyFileToProjectFolder('docker-compose.yml');
// copy .dockerignore file
copyFileToProjectFolder('dockerignore', '.dockerignore');
// copy other files
const 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' ||
path.basename(file) === 'Dockerfile' ||
path.basename(file) === 'docker-compose.yml' ||
path.basename(file) === 'dockerignore' ||
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.green(
`${path.basename(filePath)}`,
)} already exists in ${chalk.blue(
`${outerFolder}/website${filePath.split(path.basename(filePath))[0]}`,
)}.`,
);
}
});
if (exampleSiteCreated) {
try {
const tree = require('tree-node-cli');
const dirString = tree(path.join(CWD, '..'), {
exclude: [
/node_modules/, // npm
/vendor/, // composer
],
});
console.log(dirString);
} catch (error) {
console.warn(`Error printing directory: ${error}`);
}
}
}
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`,
);
}