/** * 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 path = require('path'); const loadBlog = require('./blog'); const loadConfig = require('./config'); const loadDocs = require('./docs'); const loadEnv = require('./env'); const loadPages = require('./pages'); const loadTheme = require('./theme'); const {generate} = require('./utils'); const genRoutesConfig = require('./routes'); module.exports = async function load(siteDir) { // @tested - siteConfig const siteConfig = loadConfig(siteDir); await generate( 'siteConfig.js', `export default ${JSON.stringify(siteConfig, null, 2)};`, ); // @tested - env const env = loadEnv({siteDir, siteConfig}); await generate('env.js', `export default ${JSON.stringify(env, null, 2)};`); // docs const docsDir = path.resolve(siteDir, '..', siteConfig.customDocsPath); const {docsMetadatas, docsSidebars} = await loadDocs({ siteDir, docsDir, env, siteConfig, }); await generate( 'docsMetadatas.js', `export default ${JSON.stringify(docsMetadatas, null, 2)};`, ); await generate( 'docsSidebars.js', `export default ${JSON.stringify(docsSidebars, null, 2)};`, ); /* Create source to metadata mapping */ const sourceToMetadata = {}; Object.values(docsMetadatas).forEach( ({source, version, permalink, language}) => { sourceToMetadata[source] = { version, permalink, language, }; }, ); // pages const pagesDir = path.resolve(siteDir, 'pages'); const pagesMetadatas = await loadPages({pagesDir, env, siteConfig}); await generate( 'pagesMetadatas.js', `export default ${JSON.stringify(pagesMetadatas, null, 2)};`, ); // blog const blogDir = path.resolve(siteDir, 'blog'); const blogMetadatas = await loadBlog({blogDir, env, siteConfig}); await generate( 'blogMetadatas.js', `export default ${JSON.stringify(blogMetadatas, null, 2)};`, ); // resolve outDir const outDir = path.resolve(siteDir, 'build'); // resolve the theme const themePath = loadTheme(siteDir); const {baseUrl} = siteConfig; const versionedDir = path.join(siteDir, 'versioned_docs'); const translatedDir = path.join(siteDir, 'translated_docs'); const props = { siteConfig, siteDir, blogDir, blogMetadatas, docsDir, docsMetadatas, docsSidebars, env, pagesDir, pagesMetadatas, outDir, themePath, baseUrl, sourceToMetadata, versionedDir, translatedDir, }; // Generate React Router Config const routesConfig = await genRoutesConfig(props); await generate('routes.js', routesConfig); return props; };