/** * 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 globby = require('globby'); const path = require('path'); const {encodePath, fileToPath, idx} = require('./utils'); async function loadPages({pagesDir, env, siteConfig}) { const pagesFiles = await globby(['**/*.js'], { cwd: pagesDir, }); const {baseUrl} = siteConfig; // Prepare metadata container. const pagesMetadatas = []; // Translation. const translationEnabled = idx(env, ['translation', 'enabled']); const enabledLanguages = translationEnabled && idx(env, ['translation', 'enabledLanguages']); const enabledLangTags = (enabledLanguages && enabledLanguages.map(lang => lang.tag)) || []; const defaultLangTag = idx(env, ['translation', 'defaultLanguage', 'tag']); await Promise.all( pagesFiles.map(async relativeSource => { const source = path.join(pagesDir, relativeSource); const pathName = encodePath(fileToPath(relativeSource)); if (translationEnabled && enabledLangTags.length > 0) { enabledLangTags.forEach(langTag => { // Default lang should also be available. E.g: /en/users and /users is the same. if (langTag === defaultLangTag) { pagesMetadatas.push({ permalink: pathName.replace(/^\//, baseUrl), language: langTag, source, }); } const metadata = { permalink: pathName.replace(/^\//, `${baseUrl}${langTag}/`), language: langTag, source, }; pagesMetadatas.push(metadata); }); } else { // Default Language. const metadata = { permalink: pathName.replace(/^\//, baseUrl), source, }; pagesMetadatas.push(metadata); } }), ); return pagesMetadatas; } module.exports = loadPages;