mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-11 08:07:26 +02:00
feat: add loadEnv to check if translation / versioning is enabled
This commit is contained in:
parent
828d99dc8e
commit
1ff6733464
15 changed files with 608 additions and 20 deletions
|
@ -2,7 +2,7 @@ const fs = require('fs-extra');
|
|||
const path = require('path');
|
||||
const fm = require('front-matter');
|
||||
const globby = require('globby');
|
||||
const {encodePath, fileToPath} = require('./utils');
|
||||
const {encodePath, fileToPath} = require('../utils');
|
||||
|
||||
function parse(fileString) {
|
||||
if (!fm.test(fileString)) {
|
39
lib/load/env.js
Normal file
39
lib/load/env.js
Normal file
|
@ -0,0 +1,39 @@
|
|||
const fs = require('fs-extra');
|
||||
const path = require('path');
|
||||
|
||||
module.exports = function loadEnv({siteDir, siteConfig}) {
|
||||
// Translation
|
||||
const translation = {
|
||||
enabled: false,
|
||||
enabledLanguages: []
|
||||
};
|
||||
|
||||
const languagesFile = path.join(siteDir, 'languages.js');
|
||||
if (fs.existsSync(languagesFile)) {
|
||||
translation.enabled = true;
|
||||
const languages = require(languagesFile);
|
||||
translation.enabledLanguages = languages.filter(lang => lang.enabled);
|
||||
}
|
||||
|
||||
// Versioning
|
||||
const versioning = {
|
||||
enabled: false,
|
||||
latestVersion: null,
|
||||
defaultVersion: null,
|
||||
versions: []
|
||||
};
|
||||
|
||||
const versionsJSONFile = path.join(siteDir, 'versions.json');
|
||||
if (fs.existsSync(versionsJSONFile)) {
|
||||
versioning.enabled = true;
|
||||
versioning.versions = JSON.parse(fs.readFileSync(versionsJSONFile, 'utf8'));
|
||||
versioning.latestVersion = versioning.versions[0];
|
||||
const {defaultVersionShown} = siteConfig;
|
||||
versioning.defaultVersion = defaultVersionShown || versioning.latestVersion;
|
||||
}
|
||||
|
||||
return {
|
||||
translation,
|
||||
versioning
|
||||
};
|
||||
};
|
|
@ -1,6 +1,7 @@
|
|||
const path = require('path');
|
||||
const loadConfig = require('./config');
|
||||
const loadDocs = require('./docs');
|
||||
const loadEnv = require('./env');
|
||||
const loadPages = require('./pages');
|
||||
const loadTheme = require('./theme');
|
||||
const {generate} = require('./utils');
|
||||
|
@ -10,6 +11,9 @@ module.exports = async function load(siteDir) {
|
|||
// siteConfig
|
||||
const siteConfig = loadConfig(siteDir);
|
||||
|
||||
// env
|
||||
const env = loadEnv({siteDir, siteConfig});
|
||||
|
||||
// docs
|
||||
const docsDir = path.resolve(
|
||||
siteDir,
|
||||
|
@ -43,6 +47,7 @@ module.exports = async function load(siteDir) {
|
|||
siteDir,
|
||||
docsDir,
|
||||
docsData,
|
||||
env,
|
||||
pagesDir,
|
||||
pagesData,
|
||||
outDir,
|
||||
|
|
|
@ -19,7 +19,6 @@ function applyChainWebpack(userChainWebpack, config, isServer) {
|
|||
if (userChainWebpack) {
|
||||
userChainWebpack(config, isServer);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
|
178
test/load/__fixtures__/translated-site/languages.js
Normal file
178
test/load/__fixtures__/translated-site/languages.js
Normal file
|
@ -0,0 +1,178 @@
|
|||
const languages = [
|
||||
{
|
||||
enabled: true,
|
||||
name: 'English',
|
||||
tag: 'en',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: '日本語',
|
||||
tag: 'ja',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'العربية',
|
||||
tag: 'ar',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Bosanski',
|
||||
tag: 'bs-BA',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Català',
|
||||
tag: 'ca',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Čeština',
|
||||
tag: 'cs',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Dansk',
|
||||
tag: 'da',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Deutsch',
|
||||
tag: 'de',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Ελληνικά',
|
||||
tag: 'el',
|
||||
},
|
||||
{
|
||||
enabled: true,
|
||||
name: 'Español',
|
||||
tag: 'es-ES',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'فارسی',
|
||||
tag: 'fa-IR',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Suomi',
|
||||
tag: 'fi',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Français',
|
||||
tag: 'fr',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'עִברִית',
|
||||
tag: 'he',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Magyar',
|
||||
tag: 'hu',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Bahasa Indonesia',
|
||||
tag: 'id-ID',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Italiano',
|
||||
tag: 'it',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Afrikaans',
|
||||
tag: 'af',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: '한국어',
|
||||
tag: 'ko',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'मराठी',
|
||||
tag: 'mr-IN',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Nederlands',
|
||||
tag: 'nl',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Norsk',
|
||||
tag: 'no-NO',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Polskie',
|
||||
tag: 'pl',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Português',
|
||||
tag: 'pt-PT',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Português (Brasil)',
|
||||
tag: 'pt-BR',
|
||||
},
|
||||
{
|
||||
enabled: true,
|
||||
name: 'Română',
|
||||
tag: 'ro',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Русский',
|
||||
tag: 'ru',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Slovenský',
|
||||
tag: 'sk-SK',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Српски језик (Ћирилица)',
|
||||
tag: 'sr',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Svenska',
|
||||
tag: 'sv-SE',
|
||||
},
|
||||
{
|
||||
enabled: true,
|
||||
name: 'Türkçe',
|
||||
tag: 'tr',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Українська',
|
||||
tag: 'uk',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Tiếng Việt',
|
||||
tag: 'vi',
|
||||
},
|
||||
{
|
||||
enabled: true,
|
||||
name: '简体中文',
|
||||
tag: 'zh-CN',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: '繁體中文',
|
||||
tag: 'zh-TW',
|
||||
},
|
||||
];
|
||||
module.exports = languages;
|
7
test/load/__fixtures__/translated-site/siteConfig.js
Normal file
7
test/load/__fixtures__/translated-site/siteConfig.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
module.exports = {
|
||||
title: 'Hello',
|
||||
tagline: 'Hello World',
|
||||
organizationName: 'endiliey',
|
||||
projectName: 'hello',
|
||||
baseUrl: '/'
|
||||
};
|
178
test/load/__fixtures__/transversioned-site/languages.js
Normal file
178
test/load/__fixtures__/transversioned-site/languages.js
Normal file
|
@ -0,0 +1,178 @@
|
|||
const languages = [
|
||||
{
|
||||
enabled: true,
|
||||
name: 'English',
|
||||
tag: 'en',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: '日本語',
|
||||
tag: 'ja',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'العربية',
|
||||
tag: 'ar',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Bosanski',
|
||||
tag: 'bs-BA',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Català',
|
||||
tag: 'ca',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Čeština',
|
||||
tag: 'cs',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Dansk',
|
||||
tag: 'da',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Deutsch',
|
||||
tag: 'de',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Ελληνικά',
|
||||
tag: 'el',
|
||||
},
|
||||
{
|
||||
enabled: true,
|
||||
name: 'Español',
|
||||
tag: 'es-ES',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'فارسی',
|
||||
tag: 'fa-IR',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Suomi',
|
||||
tag: 'fi',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Français',
|
||||
tag: 'fr',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'עִברִית',
|
||||
tag: 'he',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Magyar',
|
||||
tag: 'hu',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Bahasa Indonesia',
|
||||
tag: 'id-ID',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Italiano',
|
||||
tag: 'it',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Afrikaans',
|
||||
tag: 'af',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: '한국어',
|
||||
tag: 'ko',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'मराठी',
|
||||
tag: 'mr-IN',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Nederlands',
|
||||
tag: 'nl',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Norsk',
|
||||
tag: 'no-NO',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Polskie',
|
||||
tag: 'pl',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Português',
|
||||
tag: 'pt-PT',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Português (Brasil)',
|
||||
tag: 'pt-BR',
|
||||
},
|
||||
{
|
||||
enabled: true,
|
||||
name: 'Română',
|
||||
tag: 'ro',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Русский',
|
||||
tag: 'ru',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Slovenský',
|
||||
tag: 'sk-SK',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Српски језик (Ћирилица)',
|
||||
tag: 'sr',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Svenska',
|
||||
tag: 'sv-SE',
|
||||
},
|
||||
{
|
||||
enabled: true,
|
||||
name: 'Türkçe',
|
||||
tag: 'tr',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Українська',
|
||||
tag: 'uk',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: 'Tiếng Việt',
|
||||
tag: 'vi',
|
||||
},
|
||||
{
|
||||
enabled: true,
|
||||
name: '简体中文',
|
||||
tag: 'zh-CN',
|
||||
},
|
||||
{
|
||||
enabled: false,
|
||||
name: '繁體中文',
|
||||
tag: 'zh-TW',
|
||||
},
|
||||
];
|
||||
module.exports = languages;
|
7
test/load/__fixtures__/transversioned-site/siteConfig.js
Normal file
7
test/load/__fixtures__/transversioned-site/siteConfig.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
module.exports = {
|
||||
title: 'Hello',
|
||||
tagline: 'Hello World',
|
||||
organizationName: 'endiliey',
|
||||
projectName: 'hello',
|
||||
baseUrl: '/'
|
||||
};
|
4
test/load/__fixtures__/transversioned-site/versions.json
Normal file
4
test/load/__fixtures__/transversioned-site/versions.json
Normal file
|
@ -0,0 +1,4 @@
|
|||
[
|
||||
"1.0.1",
|
||||
"1.0.0"
|
||||
]
|
7
test/load/__fixtures__/versioned-site/siteConfig.js
Normal file
7
test/load/__fixtures__/versioned-site/siteConfig.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
module.exports = {
|
||||
title: 'Hello',
|
||||
tagline: 'Hello World',
|
||||
organizationName: 'endiliey',
|
||||
projectName: 'hello',
|
||||
baseUrl: '/'
|
||||
};
|
4
test/load/__fixtures__/versioned-site/versions.json
Normal file
4
test/load/__fixtures__/versioned-site/versions.json
Normal file
|
@ -0,0 +1,4 @@
|
|||
[
|
||||
"1.0.1",
|
||||
"1.0.0"
|
||||
]
|
119
test/load/__snapshots__/env.test.js.snap
Normal file
119
test/load/__snapshots__/env.test.js.snap
Normal file
|
@ -0,0 +1,119 @@
|
|||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`loadEnv website with both versioning & translation disabled 1`] = `
|
||||
Object {
|
||||
"translation": Object {
|
||||
"enabled": false,
|
||||
"enabledLanguages": Array [],
|
||||
},
|
||||
"versioning": Object {
|
||||
"defaultVersion": null,
|
||||
"enabled": false,
|
||||
"latestVersion": null,
|
||||
"versions": Array [],
|
||||
},
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`loadEnv website with translation enabled 1`] = `
|
||||
Object {
|
||||
"translation": Object {
|
||||
"enabled": true,
|
||||
"enabledLanguages": Array [
|
||||
Object {
|
||||
"enabled": true,
|
||||
"name": "English",
|
||||
"tag": "en",
|
||||
},
|
||||
Object {
|
||||
"enabled": true,
|
||||
"name": "Español",
|
||||
"tag": "es-ES",
|
||||
},
|
||||
Object {
|
||||
"enabled": true,
|
||||
"name": "Română",
|
||||
"tag": "ro",
|
||||
},
|
||||
Object {
|
||||
"enabled": true,
|
||||
"name": "Türkçe",
|
||||
"tag": "tr",
|
||||
},
|
||||
Object {
|
||||
"enabled": true,
|
||||
"name": "简体中文",
|
||||
"tag": "zh-CN",
|
||||
},
|
||||
],
|
||||
},
|
||||
"versioning": Object {
|
||||
"defaultVersion": null,
|
||||
"enabled": false,
|
||||
"latestVersion": null,
|
||||
"versions": Array [],
|
||||
},
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`loadEnv website with versioning & translation enabled 1`] = `
|
||||
Object {
|
||||
"translation": Object {
|
||||
"enabled": true,
|
||||
"enabledLanguages": Array [
|
||||
Object {
|
||||
"enabled": true,
|
||||
"name": "English",
|
||||
"tag": "en",
|
||||
},
|
||||
Object {
|
||||
"enabled": true,
|
||||
"name": "Español",
|
||||
"tag": "es-ES",
|
||||
},
|
||||
Object {
|
||||
"enabled": true,
|
||||
"name": "Română",
|
||||
"tag": "ro",
|
||||
},
|
||||
Object {
|
||||
"enabled": true,
|
||||
"name": "Türkçe",
|
||||
"tag": "tr",
|
||||
},
|
||||
Object {
|
||||
"enabled": true,
|
||||
"name": "简体中文",
|
||||
"tag": "zh-CN",
|
||||
},
|
||||
],
|
||||
},
|
||||
"versioning": Object {
|
||||
"defaultVersion": "1.0.1",
|
||||
"enabled": true,
|
||||
"latestVersion": "1.0.1",
|
||||
"versions": Array [
|
||||
"1.0.1",
|
||||
"1.0.0",
|
||||
],
|
||||
},
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`loadEnv website with versioning enabled 1`] = `
|
||||
Object {
|
||||
"translation": Object {
|
||||
"enabled": false,
|
||||
"enabledLanguages": Array [],
|
||||
},
|
||||
"versioning": Object {
|
||||
"defaultVersion": "1.0.1",
|
||||
"enabled": true,
|
||||
"latestVersion": "1.0.1",
|
||||
"versions": Array [
|
||||
"1.0.1",
|
||||
"1.0.0",
|
||||
],
|
||||
},
|
||||
}
|
||||
`;
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
exports[`loadPages valid pages 1`] = `
|
||||
Array [
|
||||
Object {
|
||||
"path": "/foo",
|
||||
"source": "foo.js",
|
||||
},
|
||||
Object {
|
||||
"path": "/",
|
||||
"source": "index.js",
|
||||
},
|
||||
Object {
|
||||
"path": "/foo",
|
||||
"source": "foo.js",
|
||||
},
|
||||
Object {
|
||||
"path": "/bar/baz",
|
||||
"source": "bar/baz.js",
|
||||
|
|
|
@ -36,10 +36,10 @@ const routes = [
|
|||
})
|
||||
},
|
||||
{
|
||||
path: \\"/foo/bar\\",
|
||||
path: \\"/foo/baz\\",
|
||||
exact: true,
|
||||
component: Loadable({
|
||||
loader: () => import('@docs/foo/bar.md'),
|
||||
loader: () => import('@docs/foo/baz.md'),
|
||||
loading: Loading,
|
||||
render(loaded, props) {
|
||||
let Content = loaded.default;
|
||||
|
@ -48,10 +48,10 @@ const routes = [
|
|||
})
|
||||
},
|
||||
{
|
||||
path: \\"/foo/baz\\",
|
||||
path: \\"/foo/bar\\",
|
||||
exact: true,
|
||||
component: Loadable({
|
||||
loader: () => import('@docs/foo/baz.md'),
|
||||
loader: () => import('@docs/foo/bar.md'),
|
||||
loading: Loading,
|
||||
render(loaded, props) {
|
||||
let Content = loaded.default;
|
||||
|
@ -159,14 +159,6 @@ const routes = [
|
|||
}
|
||||
})
|
||||
},
|
||||
{
|
||||
path: \\"/foo\\",
|
||||
exact: true,
|
||||
component: Loadable({
|
||||
loader: () => import('@pages/foo.js'),
|
||||
loading: Loading
|
||||
})
|
||||
},
|
||||
{
|
||||
path: \\"/\\",
|
||||
exact: true,
|
||||
|
@ -176,10 +168,10 @@ const routes = [
|
|||
})
|
||||
},
|
||||
{
|
||||
path: \\"/bar/baz\\",
|
||||
path: \\"/foo\\",
|
||||
exact: true,
|
||||
component: Loadable({
|
||||
loader: () => import('@pages/bar/baz.js'),
|
||||
loader: () => import('@pages/foo.js'),
|
||||
loading: Loading
|
||||
})
|
||||
},
|
||||
|
@ -191,6 +183,14 @@ const routes = [
|
|||
loading: Loading
|
||||
})
|
||||
},
|
||||
{
|
||||
path: \\"/bar/baz\\",
|
||||
exact: true,
|
||||
component: Loadable({
|
||||
loader: () => import('@pages/bar/baz.js'),
|
||||
loading: Loading
|
||||
})
|
||||
},
|
||||
{
|
||||
path: '*',
|
||||
component: NotFound
|
||||
|
|
41
test/load/env.test.js
Normal file
41
test/load/env.test.js
Normal file
|
@ -0,0 +1,41 @@
|
|||
import path from 'path';
|
||||
import loadEnv from '@lib/load/env';
|
||||
import loadConfig from '@lib/load/config';
|
||||
|
||||
describe('loadEnv', () => {
|
||||
test('website with both versioning & translation disabled', () => {
|
||||
const siteDir = path.join(__dirname, '__fixtures__', 'simple-site');
|
||||
const siteConfig = loadConfig(siteDir);
|
||||
const env = loadEnv({siteDir, siteConfig});
|
||||
expect(env.versioning.enabled).toBe(false);
|
||||
expect(env.translation.enabled).toBe(false);
|
||||
expect(env).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('website with versioning enabled', () => {
|
||||
const siteDir = path.join(__dirname, '__fixtures__', 'versioned-site');
|
||||
const siteConfig = loadConfig(siteDir);
|
||||
const env = loadEnv({siteDir, siteConfig});
|
||||
expect(env.versioning.enabled).toBe(true);
|
||||
expect(env.translation.enabled).toBe(false);
|
||||
expect(env).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('website with translation enabled', () => {
|
||||
const siteDir = path.join(__dirname, '__fixtures__', 'translated-site');
|
||||
const siteConfig = loadConfig(siteDir);
|
||||
const env = loadEnv({siteDir, siteConfig});
|
||||
expect(env.versioning.enabled).toBe(false);
|
||||
expect(env.translation.enabled).toBe(true);
|
||||
expect(env).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('website with versioning & translation enabled', () => {
|
||||
const siteDir = path.join(__dirname, '__fixtures__', 'transversioned-site');
|
||||
const siteConfig = loadConfig(siteDir);
|
||||
const env = loadEnv({siteDir, siteConfig});
|
||||
expect(env.versioning.enabled).toBe(true);
|
||||
expect(env.translation.enabled).toBe(true);
|
||||
expect(env).toMatchSnapshot();
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue