From 623e28c6754ed10f15de26c0c9150d085d27f5b6 Mon Sep 17 00:00:00 2001 From: Joost De Cock Date: Sat, 21 May 2022 19:26:43 +0200 Subject: [PATCH] wip(org): Work on new site --- packages/freesewing.org/i18n.config.mjs | 3 ++ .../freesewing.org/next-i18next.config.js | 13 +++++++ packages/freesewing.org/next.config.mjs | 39 ++++++++++++++++++- packages/freesewing.org/pages/_app.js | 5 ++- packages/freesewing.org/pages/_document.js | 23 +++++++++++ packages/freesewing.shared/prebuild/mdx.mjs | 24 ++++++++++-- .../freesewing.shared/prebuild/strapi.mjs | 1 + 7 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 packages/freesewing.org/i18n.config.mjs create mode 100644 packages/freesewing.org/next-i18next.config.js create mode 100644 packages/freesewing.org/pages/_document.js diff --git a/packages/freesewing.org/i18n.config.mjs b/packages/freesewing.org/i18n.config.mjs new file mode 100644 index 00000000000..2dec6ed7918 --- /dev/null +++ b/packages/freesewing.org/i18n.config.mjs @@ -0,0 +1,3 @@ +import i18n from '../freesewing.shared/config/i18n.config.mjs' + +export default i18n() diff --git a/packages/freesewing.org/next-i18next.config.js b/packages/freesewing.org/next-i18next.config.js new file mode 100644 index 00000000000..ab2c71ab36b --- /dev/null +++ b/packages/freesewing.org/next-i18next.config.js @@ -0,0 +1,13 @@ +// See: https://github.com/isaachinman/next-i18next +module.exports = { + i18n: { + defaultLocale: 'en', + locales: ['en', 'de', 'es', 'fr', 'nl'], + defaultNS: 'common', + }, + interpolation: { + prefix: '{', + suffix: '}', + }, + localeStructure: '{lng}/{ns}', +} diff --git a/packages/freesewing.org/next.config.mjs b/packages/freesewing.org/next.config.mjs index 05d14efe112..730582c1a0c 100644 --- a/packages/freesewing.org/next.config.mjs +++ b/packages/freesewing.org/next.config.mjs @@ -1,3 +1,38 @@ -import configBuilder from '../freesewing.shared/config/next.mjs' +import path from 'path' +import { readdirSync } from 'fs' +import i18nConfig from './next-i18next.config.js' -export default configBuilder('dev') +const getDirectories = source => + readdirSync(source, { withFileTypes: true }) + .filter(dirent => dirent.isDirectory()) + .map(dirent => dirent.name) + +const pkgs = getDirectories(path.resolve(`../`)) + +const config = { + experimental: { + externalDir: true, + }, + i18n: i18nConfig.i18n, + pageExtensions: [ 'js' ], + webpack: (config, options) => { + // YAML support + config.module.rules.push({ + test: /\.ya?ml$/, + type: 'json', + use: 'yaml-loader' + }) + + // Aliases + config.resolve.alias.shared = path.resolve('../freesewing.shared/') + config.resolve.alias.site = path.resolve(`.`) + config.resolve.alias.pkgs = path.resolve(`../`) + // This forces webpack to load the code from source, rather than compiled bundle + for (const pkg of pkgs) { + config.resolve.alias[`@freesewing/${pkg}$`] = path.resolve(`../${pkg}/src/index.js`) + } + + return config + } +} +export default config diff --git a/packages/freesewing.org/pages/_app.js b/packages/freesewing.org/pages/_app.js index e125a54674f..6f20ad7a82d 100644 --- a/packages/freesewing.org/pages/_app.js +++ b/packages/freesewing.org/pages/_app.js @@ -1,5 +1,6 @@ import 'shared/styles/globals.css' +import { appWithTranslation } from 'next-i18next' -const FreeSewingDev = ({ Component, pageProps }) => +const FreeSewingOrg = ({ Component, pageProps }) => -export default FreeSewingDev +export default appWithTranslation(FreeSewingOrg) diff --git a/packages/freesewing.org/pages/_document.js b/packages/freesewing.org/pages/_document.js new file mode 100644 index 00000000000..08eeea286ff --- /dev/null +++ b/packages/freesewing.org/pages/_document.js @@ -0,0 +1,23 @@ +/* This is the recommended way to load a font */ +import Document, { Html, Head, Main, NextScript } from 'next/document' + +class FsDocument extends Document { + render() { + return ( + + + + + +
+ + + + ) + } +} + +export default FsDocument diff --git a/packages/freesewing.shared/prebuild/mdx.mjs b/packages/freesewing.shared/prebuild/mdx.mjs index 6150e5c6264..07cb49e2dc1 100644 --- a/packages/freesewing.shared/prebuild/mdx.mjs +++ b/packages/freesewing.shared/prebuild/mdx.mjs @@ -9,6 +9,18 @@ import remarkFrontmatterExtractor from 'remark-extract-frontmatter' import { readSync } from 'to-vfile' import yaml from 'js-yaml' +/* + * There's an issue in crowdin where it changes the frontmatter marker: + * --- + * into this: + * - - - + * which breaks stuff. So this method takes the input and replaces all + * - - - with --- + */ +const fixCrowdinBugs = md => { + md.value = md.value.split("- - -\n").join("---\n") + return md +} /* * Helper method to get a list of MDX files in a folder. @@ -62,12 +74,11 @@ const mdxMetaInfo = async file => { let result try { result = await unified() - //.use(remarkMdx) .use(remarkParser) .use(remarkCompiler) .use(remarkFrontmatter) .use(remarkFrontmatterExtractor, { yaml: yaml.load }) - .process(readSync(file)) + .process(fixCrowdinBugs(readSync(file, { encoding: 'utf-8' }))) } catch (err) { console.log(err) @@ -112,8 +123,13 @@ export const prebuildMdx = async(site) => { : meta.data.title } } else { - console.log(`[${lang}] Failed to extract meta info from: ${slug}`) - if (meta.messages.length > 0) console.log(meta.messages) + if (pages.en[slug]) { + console.log(`⚠️l Falling back to EN metadata for ${slug}`) + pages[lang][slug] = pages.en[slug] + } else { + console.log(`❌ [${lang}] Failed to extract meta info from: ${slug}`) + if (meta.messages.length > 0) console.log(meta.messages) + } } } } diff --git a/packages/freesewing.shared/prebuild/strapi.mjs b/packages/freesewing.shared/prebuild/strapi.mjs index a4cd6f6e296..99637a4df55 100644 --- a/packages/freesewing.shared/prebuild/strapi.mjs +++ b/packages/freesewing.shared/prebuild/strapi.mjs @@ -80,6 +80,7 @@ export const prebuildStrapi = async(site) => { posts[lang][type] = await getPosts(type, site, lang) // Extract list of authors for (const [slug, post] of Object.entries(posts[lang][type])) { + if (!post.author?.slug) console.log(post) authors[type][post.author.slug] = post.author posts[lang][type][slug].author = post.author.slug }