1
0
Fork 0

chore(fs.dev): Prebuild for strapi

This commit is contained in:
Joost De Cock 2021-12-12 12:04:38 +01:00
parent d8fb6868f1
commit 2f0b48cc94
10 changed files with 4658 additions and 26 deletions

View file

@ -2,6 +2,8 @@ import Page from 'shared/components/wrappers/page.js'
import useApp from 'site/hooks/useApp.js'
import ThemePicker from 'shared/components/theme-picker.js'
import { blog, mdx } from 'site/prebuild/index.js'
export default (props) => {
const app = useApp()
return (
@ -13,6 +15,8 @@ export default (props) => {
>Toggle</button>
</p>
<ThemePicker app={app} />
<pre>{JSON.stringify(blog, null ,2)}</pre>
<pre>{JSON.stringify(mdx, null ,2)}</pre>
</Page>
)
}

View file

@ -0,0 +1,5 @@
import mdxImport from './mdx.js'
import blogImport from './strapi.blog.js'
export const mdx = mdxImport
export const blog = blogImport

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,3 @@
import en from './mdx.en.js'
export default { en }

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,4 @@
import { posts as en } from './strapi.blog.en.js'
export default { en }

View file

@ -0,0 +1,7 @@
export const languages = ['en','de','es','fr','nl']
export const strapiHost = 'https://posts.freesewing.org'
export const monorepo = 'https://github.com/freesewing/freesewing'

View file

@ -1,10 +1,12 @@
import { prebuildMdx } from './mdx.mjs'
import { prebuildStrapi } from './strapi.mjs'
const SITE = process.env.SITE
const LANG = process.env.LANG
const run = async () => {
await prebuildMdx(SITE, LANG)
//await prebuildMdx(SITE, LANG)
await prebuildStrapi(SITE, LANG)
}
run()

View file

@ -1,5 +1,6 @@
import path from 'path'
import fs from 'fs'
import { languages, strapiHost } from '../config/freesewing.mjs'
import rdir from 'recursive-readdir'
import { unified } from 'unified'
import remarkParser from 'remark-parse'
@ -21,7 +22,7 @@ import { remarkIntroPlugin } from './remark-intro-plugin.mjs'
* - folder: the root folder to look in
* - lang: the language files to looks for
*/
const getMdxFileList = async (folder, lang='en') => {
const getMdxFileList = async (folder, lang) => {
let allFiles
try {
allFiles = await rdir(folder)
@ -69,18 +70,21 @@ const mdxMetaInfo = async file => await unified()
/*
* Main method that does what needs doing
*/
export const prebuildMdx = async(site, lang) => {
export const prebuildMdx = async(site) => {
// Say hi
console.log()
console.log('Prebuilding MDX for:')
console.log(` - Website: freesewing.${site}`)
console.log(` - Language: ${lang}`)
console.log(`Prebuilding MDX for freesewing.${site}`)
console.log()
// Setup MDX root path
const mdxRoot = path.resolve('..', '..', 'markdown', site)
// Loop over languages
for (const lang of (site === 'dev' ? ['en'] : languages)) {
console.log(` - Language: ${lang}`)
// Get list of filenames
const list = await getMdxFileList(mdxRoot, lang)
@ -103,8 +107,9 @@ export const prebuildMdx = async(site, lang) => {
}
fs.writeFileSync(
path.resolve('..', `freesewing.${site}`, 'prebuild', 'mdx-pages.json'),
JSON.stringify(pages, null ,2)
path.resolve('..', `freesewing.${site}`, 'prebuild', `mdx.${lang}.js`),
`export default ${JSON.stringify(pages, null ,2)}`
)
}
}

View file

@ -0,0 +1,70 @@
import path from 'path'
import fs from 'fs'
import axios from 'axios'
import { languages, strapiHost } from '../config/freesewing.mjs'
//import rdir from 'recursive-readdir'
//import { unified } from 'unified'
//import remarkParser from 'remark-parse'
//import remarkCompiler from 'remark-stringify'
//import remarkFrontmatter from 'remark-frontmatter'
//import remarkFrontmatterExtractor from 'remark-extract-frontmatter'
//import vfileReporter from 'vfile-reporter'
//import { readSync } from 'to-vfile'
//import yaml from 'yaml'
//import { remarkIntroPlugin } from './remark-intro-plugin.mjs'
/*
* Helper method to create the API url for retrieval of Strapi posts
*/
const buildUrl = (type, site, lang) => (type === 'blog')
? `${strapiHost}/blogposts?_locale=${lang}&_sort=date:ASC&dev_${site === 'dev' ? 'eq' : 'ne'}=true`
: `${strapiHost}/showcaseposts?_locale=${lang}&_sort=date:ASC`
/*
* Helper method to load posts from Strapi
*/
const getPosts = async (type, site, lang) => {
let res
try {
res = await axios.get(buildUrl(type, site, lang))
}
catch (err) {
console.log(err)
}
const posts = {}
for (const post of res.data) posts[`${type}/${post.slug}`] = post
return posts
}
/*
* Main method that does what needs doing
*/
export const prebuildStrapi = async(site, lang) => {
// Say hi
console.log()
console.log('Prebuilding Strapi content for:')
console.log(` - Website: freesewing.${site}`)
console.log(` - Language: ${lang}`)
console.log()
// What types of content to load
const types = ['blog']
if (site === 'org') types.push('showcase')
const all = {}
for (const type of types) {
// Loop over languages
for (const lang of (site === 'dev' ? ['en'] : languages)) {
all[type] = await getPosts(type, process.env.SITE, lang)
fs.writeFileSync(
path.resolve('..', `freesewing.${site}`, 'prebuild', `strapi.${type}.${lang}.js`),
`export const posts = ${JSON.stringify(all[type], null, 2)}`
)
}
}
}