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 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>
|
||||
)
|
||||
}
|
||||
|
|
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 { 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()
|
||||
|
|
|
@ -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)}`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
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