chore(fs.dev): Prebuild for strapi
This commit is contained in:
parent
d8fb6868f1
commit
2f0b48cc94
10 changed files with 4658 additions and 26 deletions
|
@ -2,6 +2,8 @@ import Page from 'shared/components/wrappers/page.js'
|
||||||
import useApp from 'site/hooks/useApp.js'
|
import useApp from 'site/hooks/useApp.js'
|
||||||
import ThemePicker from 'shared/components/theme-picker.js'
|
import ThemePicker from 'shared/components/theme-picker.js'
|
||||||
|
|
||||||
|
import { blog, mdx } from 'site/prebuild/index.js'
|
||||||
|
|
||||||
export default (props) => {
|
export default (props) => {
|
||||||
const app = useApp()
|
const app = useApp()
|
||||||
return (
|
return (
|
||||||
|
@ -13,6 +15,8 @@ export default (props) => {
|
||||||
>Toggle</button>
|
>Toggle</button>
|
||||||
</p>
|
</p>
|
||||||
<ThemePicker app={app} />
|
<ThemePicker app={app} />
|
||||||
|
<pre>{JSON.stringify(blog, null ,2)}</pre>
|
||||||
|
<pre>{JSON.stringify(mdx, null ,2)}</pre>
|
||||||
</Page>
|
</Page>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
5
packages/freesewing.dev/prebuild/index.js
Normal file
5
packages/freesewing.dev/prebuild/index.js
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import mdxImport from './mdx.js'
|
||||||
|
import blogImport from './strapi.blog.js'
|
||||||
|
|
||||||
|
export const mdx = mdxImport
|
||||||
|
export const blog = blogImport
|
2541
packages/freesewing.dev/prebuild/mdx.en.js
Normal file
2541
packages/freesewing.dev/prebuild/mdx.en.js
Normal file
File diff suppressed because it is too large
Load diff
3
packages/freesewing.dev/prebuild/mdx.js
Normal file
3
packages/freesewing.dev/prebuild/mdx.js
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
import en from './mdx.en.js'
|
||||||
|
|
||||||
|
export default { en }
|
1991
packages/freesewing.dev/prebuild/strapi.blog.en.js
Normal file
1991
packages/freesewing.dev/prebuild/strapi.blog.en.js
Normal file
File diff suppressed because it is too large
Load diff
4
packages/freesewing.dev/prebuild/strapi.blog.js
Normal file
4
packages/freesewing.dev/prebuild/strapi.blog.js
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
import { posts as en } from './strapi.blog.en.js'
|
||||||
|
|
||||||
|
export default { en }
|
||||||
|
|
7
packages/freesewing.shared/config/freesewing.mjs
Normal file
7
packages/freesewing.shared/config/freesewing.mjs
Normal 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'
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
import { prebuildMdx } from './mdx.mjs'
|
import { prebuildMdx } from './mdx.mjs'
|
||||||
|
import { prebuildStrapi } from './strapi.mjs'
|
||||||
|
|
||||||
const SITE = process.env.SITE
|
const SITE = process.env.SITE
|
||||||
const LANG = process.env.LANG
|
const LANG = process.env.LANG
|
||||||
|
|
||||||
const run = async () => {
|
const run = async () => {
|
||||||
await prebuildMdx(SITE, LANG)
|
//await prebuildMdx(SITE, LANG)
|
||||||
|
await prebuildStrapi(SITE, LANG)
|
||||||
}
|
}
|
||||||
|
|
||||||
run()
|
run()
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
|
import { languages, strapiHost } from '../config/freesewing.mjs'
|
||||||
import rdir from 'recursive-readdir'
|
import rdir from 'recursive-readdir'
|
||||||
import { unified } from 'unified'
|
import { unified } from 'unified'
|
||||||
import remarkParser from 'remark-parse'
|
import remarkParser from 'remark-parse'
|
||||||
|
@ -21,7 +22,7 @@ import { remarkIntroPlugin } from './remark-intro-plugin.mjs'
|
||||||
* - folder: the root folder to look in
|
* - folder: the root folder to look in
|
||||||
* - lang: the language files to looks for
|
* - lang: the language files to looks for
|
||||||
*/
|
*/
|
||||||
const getMdxFileList = async (folder, lang='en') => {
|
const getMdxFileList = async (folder, lang) => {
|
||||||
let allFiles
|
let allFiles
|
||||||
try {
|
try {
|
||||||
allFiles = await rdir(folder)
|
allFiles = await rdir(folder)
|
||||||
|
@ -69,42 +70,46 @@ const mdxMetaInfo = async file => await unified()
|
||||||
/*
|
/*
|
||||||
* Main method that does what needs doing
|
* Main method that does what needs doing
|
||||||
*/
|
*/
|
||||||
export const prebuildMdx = async(site, lang) => {
|
export const prebuildMdx = async(site) => {
|
||||||
|
|
||||||
// Say hi
|
// Say hi
|
||||||
console.log()
|
console.log()
|
||||||
console.log('Prebuilding MDX for:')
|
console.log(`Prebuilding MDX for freesewing.${site}`)
|
||||||
console.log(` - Website: freesewing.${site}`)
|
|
||||||
console.log(` - Language: ${lang}`)
|
|
||||||
console.log()
|
console.log()
|
||||||
|
|
||||||
// Setup MDX root path
|
// Setup MDX root path
|
||||||
const mdxRoot = path.resolve('..', '..', 'markdown', site)
|
const mdxRoot = path.resolve('..', '..', 'markdown', site)
|
||||||
|
|
||||||
// Get list of filenames
|
// Loop over languages
|
||||||
const list = await getMdxFileList(mdxRoot, lang)
|
for (const lang of (site === 'dev' ? ['en'] : languages)) {
|
||||||
|
|
||||||
// Parse them for title and intro
|
console.log(` - Language: ${lang}`)
|
||||||
const pages = {}
|
|
||||||
for (const file of list) {
|
// Get list of filenames
|
||||||
const slug = fileToSlug(file, site, lang)
|
const list = await getMdxFileList(mdxRoot, lang)
|
||||||
if (slug) {
|
|
||||||
const meta = await mdxMetaInfo(file)
|
// Parse them for title and intro
|
||||||
if (meta) {
|
const pages = {}
|
||||||
pages[slug] = {
|
for (const file of list) {
|
||||||
...meta.data,
|
const slug = fileToSlug(file, site, lang)
|
||||||
slug,
|
if (slug) {
|
||||||
order: meta?.data?.order
|
const meta = await mdxMetaInfo(file)
|
||||||
? `${meta.data.order}${meta.data.title}`
|
if (meta) {
|
||||||
: meta.data.title
|
pages[slug] = {
|
||||||
|
...meta.data,
|
||||||
|
slug,
|
||||||
|
order: meta?.data?.order
|
||||||
|
? `${meta.data.order}${meta.data.title}`
|
||||||
|
: meta.data.title
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
path.resolve('..', `freesewing.${site}`, 'prebuild', 'mdx-pages.json'),
|
path.resolve('..', `freesewing.${site}`, 'prebuild', `mdx.${lang}.js`),
|
||||||
JSON.stringify(pages, null ,2)
|
`export default ${JSON.stringify(pages, null ,2)}`
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
70
packages/freesewing.shared/prebuild/strapi.mjs
Normal file
70
packages/freesewing.shared/prebuild/strapi.mjs
Normal 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)}`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue