diff options
author | Patryk Niedźwiedziński <pniedzwiedzinski19@gmail.com> | 2020-01-02 19:55:58 +0100 |
---|---|---|
committer | Patryk Niedźwiedziński <pniedzwiedzinski19@gmail.com> | 2020-01-02 19:55:58 +0100 |
commit | 53e2f45c6a62bc66185213252378944b19a6c7f9 (patch) | |
tree | c6cfb1f70993e760bd62b79773a9f14f57c8291a /scripts/generateApi.js | |
parent | 6b3b28848f06667f36b4c20bf83ada0e5f578a99 (diff) | |
download | puszcza-53e2f45c6a62bc66185213252378944b19a6c7f9.tar.gz puszcza-53e2f45c6a62bc66185213252378944b19a6c7f9.zip |
Add basic api
Diffstat (limited to 'scripts/generateApi.js')
-rwxr-xr-x | scripts/generateApi.js | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/scripts/generateApi.js b/scripts/generateApi.js index 4b7426a..ad266cc 100755 --- a/scripts/generateApi.js +++ b/scripts/generateApi.js @@ -1,8 +1,64 @@ import fs from 'fs' import k from '../api' +import path from 'path' + +function mkDirByPathSync(targetDir, { isRelativeToScript = false } = {}) { + const sep = path.sep + const initDir = path.isAbsolute(targetDir) ? sep : '' + const baseDir = isRelativeToScript ? __dirname : '.' + + return targetDir.split(sep).reduce((parentDir, childDir) => { + const curDir = path.resolve(baseDir, parentDir, childDir) + try { + fs.mkdirSync(curDir) + } catch (err) { + if (err.code === 'EEXIST') { + // curDir already exists! + return curDir + } + + // To avoid `EISDIR` error on Mac and `EACCES`-->`ENOENT` and `EPERM` on Windows. + if (err.code === 'ENOENT') { + // Throw the original parentDir error on curDir `ENOENT` failure. + throw new Error(`EACCES: permission denied, mkdir '${parentDir}'`) + } + + const caughtErr = ['EACCES', 'EPERM', 'EISDIR'].indexOf(err.code) > -1 + if (!caughtErr || (caughtErr && targetDir === curDir)) { + throw err // Throw if it's just the last created dir. + } + } + + return curDir + }, initDir) +} let posts = k.getPosts() +posts.forEach(post => { + const { year, month, day } = post.date + const dir = `api/posts/${year}/${month}/${day}` + mkDirByPathSync(`./dist/${dir}`) + mkDirByPathSync(`./static/${dir}`) + console.log(`${dir}/${post.title}.json`) + const apiEntry = { + title: post.title, + date: `${year}-${month}-${day}`, + content: post.content.html, + meta: post.content.meta + } + fs.writeFile( + `./dist/${dir}/${post.title}.json`, + JSON.stringify(apiEntry), + err => (err ? console.log(err) : null) + ) + fs.writeFile( + `./static/${dir}/${post.title}.json`, + JSON.stringify(apiEntry), + err => (err ? console.log(err) : null) + ) +}) + posts = posts.map(({ date, title, content, route }) => { const { year, month, day } = date const { description, meta } = content |