feat: add loadEnv to check if translation / versioning is enabled

This commit is contained in:
endiliey 2018-09-04 23:36:51 +08:00
parent 828d99dc8e
commit 1ff6733464
15 changed files with 608 additions and 20 deletions

View file

@ -2,7 +2,7 @@ const fs = require('fs-extra');
const path = require('path'); const path = require('path');
const fm = require('front-matter'); const fm = require('front-matter');
const globby = require('globby'); const globby = require('globby');
const {encodePath, fileToPath} = require('./utils'); const {encodePath, fileToPath} = require('../utils');
function parse(fileString) { function parse(fileString) {
if (!fm.test(fileString)) { if (!fm.test(fileString)) {

39
lib/load/env.js Normal file
View 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
};
};

View file

@ -1,6 +1,7 @@
const path = require('path'); const path = require('path');
const loadConfig = require('./config'); const loadConfig = require('./config');
const loadDocs = require('./docs'); const loadDocs = require('./docs');
const loadEnv = require('./env');
const loadPages = require('./pages'); const loadPages = require('./pages');
const loadTheme = require('./theme'); const loadTheme = require('./theme');
const {generate} = require('./utils'); const {generate} = require('./utils');
@ -10,6 +11,9 @@ module.exports = async function load(siteDir) {
// siteConfig // siteConfig
const siteConfig = loadConfig(siteDir); const siteConfig = loadConfig(siteDir);
// env
const env = loadEnv({siteDir, siteConfig});
// docs // docs
const docsDir = path.resolve( const docsDir = path.resolve(
siteDir, siteDir,
@ -43,6 +47,7 @@ module.exports = async function load(siteDir) {
siteDir, siteDir,
docsDir, docsDir,
docsData, docsData,
env,
pagesDir, pagesDir,
pagesData, pagesData,
outDir, outDir,

View file

@ -19,7 +19,6 @@ function applyChainWebpack(userChainWebpack, config, isServer) {
if (userChainWebpack) { if (userChainWebpack) {
userChainWebpack(config, isServer); userChainWebpack(config, isServer);
} }
} }
module.exports = { module.exports = {

View 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;

View file

@ -0,0 +1,7 @@
module.exports = {
title: 'Hello',
tagline: 'Hello World',
organizationName: 'endiliey',
projectName: 'hello',
baseUrl: '/'
};

View 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;

View file

@ -0,0 +1,7 @@
module.exports = {
title: 'Hello',
tagline: 'Hello World',
organizationName: 'endiliey',
projectName: 'hello',
baseUrl: '/'
};

View file

@ -0,0 +1,4 @@
[
"1.0.1",
"1.0.0"
]

View file

@ -0,0 +1,7 @@
module.exports = {
title: 'Hello',
tagline: 'Hello World',
organizationName: 'endiliey',
projectName: 'hello',
baseUrl: '/'
};

View file

@ -0,0 +1,4 @@
[
"1.0.1",
"1.0.0"
]

View 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",
],
},
}
`;

View file

@ -2,14 +2,14 @@
exports[`loadPages valid pages 1`] = ` exports[`loadPages valid pages 1`] = `
Array [ Array [
Object {
"path": "/foo",
"source": "foo.js",
},
Object { Object {
"path": "/", "path": "/",
"source": "index.js", "source": "index.js",
}, },
Object {
"path": "/foo",
"source": "foo.js",
},
Object { Object {
"path": "/bar/baz", "path": "/bar/baz",
"source": "bar/baz.js", "source": "bar/baz.js",

View file

@ -36,10 +36,10 @@ const routes = [
}) })
}, },
{ {
path: \\"/foo/bar\\", path: \\"/foo/baz\\",
exact: true, exact: true,
component: Loadable({ component: Loadable({
loader: () => import('@docs/foo/bar.md'), loader: () => import('@docs/foo/baz.md'),
loading: Loading, loading: Loading,
render(loaded, props) { render(loaded, props) {
let Content = loaded.default; let Content = loaded.default;
@ -48,10 +48,10 @@ const routes = [
}) })
}, },
{ {
path: \\"/foo/baz\\", path: \\"/foo/bar\\",
exact: true, exact: true,
component: Loadable({ component: Loadable({
loader: () => import('@docs/foo/baz.md'), loader: () => import('@docs/foo/bar.md'),
loading: Loading, loading: Loading,
render(loaded, props) { render(loaded, props) {
let Content = loaded.default; let Content = loaded.default;
@ -159,14 +159,6 @@ const routes = [
} }
}) })
}, },
{
path: \\"/foo\\",
exact: true,
component: Loadable({
loader: () => import('@pages/foo.js'),
loading: Loading
})
},
{ {
path: \\"/\\", path: \\"/\\",
exact: true, exact: true,
@ -176,10 +168,10 @@ const routes = [
}) })
}, },
{ {
path: \\"/bar/baz\\", path: \\"/foo\\",
exact: true, exact: true,
component: Loadable({ component: Loadable({
loader: () => import('@pages/bar/baz.js'), loader: () => import('@pages/foo.js'),
loading: Loading loading: Loading
}) })
}, },
@ -191,6 +183,14 @@ const routes = [
loading: Loading loading: Loading
}) })
}, },
{
path: \\"/bar/baz\\",
exact: true,
component: Loadable({
loader: () => import('@pages/bar/baz.js'),
loading: Loading
})
},
{ {
path: '*', path: '*',
component: NotFound component: NotFound

41
test/load/env.test.js Normal file
View 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();
});
});