aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/archivers/gemlog.js11
-rw-r--r--lib/blog.js55
-rw-r--r--lib/constants.js3
-rw-r--r--lib/generators/static.js15
-rw-r--r--lib/remote.js5
-rw-r--r--lib/utils.js36
6 files changed, 69 insertions, 56 deletions
diff --git a/lib/archivers/gemlog.js b/lib/archivers/gemlog.js
index 50bb334..3e08be4 100644
--- a/lib/archivers/gemlog.js
+++ b/lib/archivers/gemlog.js
@@ -1,14 +1,13 @@
-const { mkdir, readdir, rm, writeFile } = require('fs/promises');
-const { debuglog, promisify } = require('util');
-const { ncp } = require('ncp');
+const { cp, mkdir, readdir, writeFile } = require('fs/promises');
+const { debuglog } = require('util');
const { resolve, join } = require('path');
+const { rmIfExists } = require('../utils');
const internals = {
kArchiveName: resolve(join(__dirname, '../..', '.gemlog')),
kIndexName: 'index.gmi',
kGeminiRe: /\.gmi$/i,
- ncp: promisify(ncp),
debuglog: debuglog('blog'),
buildUrl(id, slug) {
@@ -53,7 +52,7 @@ module.exports = async function(archiveDirectory) {
try {
internals.debuglog('Removing index');
- await rm(internals.kArchiveName, { recursive: true });
+ await rmIfExists(internals.kArchiveName);
}
finally {
internals.debuglog('Creating index');
@@ -62,6 +61,6 @@ module.exports = async function(archiveDirectory) {
await writeFile(indexFile, index);
internals.debuglog('Copying posts to archive');
- await internals.ncp(archiveDirectory, internals.kArchiveName);
+ await cp(archiveDirectory, internals.kArchiveName, { recursive: true });
}
};
diff --git a/lib/blog.js b/lib/blog.js
index 0b291df..d2acbb4 100644
--- a/lib/blog.js
+++ b/lib/blog.js
@@ -1,11 +1,13 @@
'use strict';
-const { access, cp, mkdir, readdir, readFile, rm, writeFile } = require('fs/promises');
+const { access, cp, mkdir, readdir, readFile, writeFile } = require('fs/promises');
const { exec } = require('child_process');
const { basename, resolve, join } = require('path');
const ParseGemini = require('gemini-to-html/parse');
const RenderGemini = require('gemini-to-html/render');
const { debuglog, promisify } = require('util');
+const { ensureDirectoryExists, rmIfExists } = require('./utils');
+const { kFileNotFoundError } = require('./constants');
// Generators for the Blog
@@ -31,7 +33,6 @@ const internals = {
// constants
- kFileNotFoundError: 'ENOENT',
kGeminiRe: /\.gmi$/i,
kMetadataFilename: 'metadata.json',
@@ -70,15 +71,15 @@ module.exports = class Blog {
*/
async add(postLocation) {
- await this._ensurePostsDirectoryExists();
+ await ensureDirectoryExists(this.postsDirectory);
try {
await this.syncDown();
}
catch {};
await this._shift();
const firstDirectory = join(this.postsDirectory, '0');
- await rm(firstDirectory, { recursive: true, force: true });
- await this._ensurePostsDirectoryExists(firstDirectory);
+ await rmIfExists(firstDirectory);
+ await ensureDirectoryExists(firstDirectory);
await this._update(postLocation);
}
@@ -221,7 +222,7 @@ module.exports = class Blog {
async _update(postLocation) {
const metadata = await this._getMetadata();
- await this._ensurePostsDirectoryExists();
+ await ensureDirectoryExists(this.postsDirectory);
await this._copyPost(postLocation);
await this._writeMetadata(metadata);
@@ -263,7 +264,7 @@ module.exports = class Blog {
posts.push(await this._readPost(i));
}
catch (error) {
- if (error.code === internals.kFileNotFoundError) {
+ if (error.code === kFileNotFoundError) {
internals.debuglog(`Skipping ${i}`);
continue;
}
@@ -311,14 +312,14 @@ module.exports = class Blog {
try {
internals.debuglog(`Archiving ${targetPath}`);
- await rm(targetPath, { recursive: true, force: true });
+ await rmIfExists(targetPath);
await access(sourcePath); // check the source path
internals.debuglog(`Shifting blog post ${sourcePath} to ${targetPath}`);
await cp(sourcePath, targetPath, { recursive: true });
}
catch (error) {
- if (error.code === internals.kFileNotFoundError) {
+ if (error.code === kFileNotFoundError) {
internals.debuglog(`Skipping ${sourcePath}: Does not exist.`);
continue;
}
@@ -333,14 +334,14 @@ module.exports = class Blog {
async _archive() {
internals.debuglog('Archiving post');
const post = await this._readPost(0);
- await this._ensureDirectoryExists(this.archiveDirectory);
+ await ensureDirectoryExists(this.archiveDirectory);
const targetPath = join(this.archiveDirectory, post.id);
internals.debuglog(`Removing ${targetPath}`);
- await rm(targetPath, { recursive: true, force: true });
+ await rmIfExists(targetPath);
internals.debuglog(`Adding ${post.location} to ${targetPath}`);
- await this._ensureDirectoryExists(targetPath);
+ await ensureDirectoryExists(targetPath);
await cp(post.location, targetPath, { recursive: true });
internals.debuglog(`Added ${post.location} to ${targetPath}`);
}
@@ -386,39 +387,13 @@ module.exports = class Blog {
const targetPost = join(targetPath, postName);
internals.debuglog(`Removing ${targetPath}`);
- await rm(targetPath, { recursive: true, force: true });
- await this._ensureDirectoryExists(targetPath);
+ await rmIfExists(targetPath);
+ await ensureDirectoryExists(targetPath);
internals.debuglog(`Adding ${postLocation} to ${targetPost}`);
await cp(postLocation, targetPost, { recursive: true });
internals.debuglog(`Added ${postLocation} to ${targetPath}`);
}
- // Ensures a directory exists.
-
- async _ensureDirectoryExists(directory) {
-
- internals.debuglog(`Checking if ${directory} exists.`);
- try {
- await access(directory);
- }
- catch (error) {
- if (error.code === internals.kFileNotFoundError) {
- internals.debuglog(`Creating ${directory}`);
- await mkdir(directory, { recursive: true });
- return;
- }
-
- throw error;
- }
- }
-
- // Ensures posts directory exists
-
- async _ensurePostsDirectoryExists() {
-
- return this._ensureDirectoryExists(this.postsDirectory);
- }
-
// Looks for a `.gmi` file in the blog directory, and returns the path
async _findBlogContent(directory) {
diff --git a/lib/constants.js b/lib/constants.js
new file mode 100644
index 0000000..9b4ce31
--- /dev/null
+++ b/lib/constants.js
@@ -0,0 +1,3 @@
+module.exports = {
+ kFileNotFoundError: 'ENOENT',
+};
diff --git a/lib/generators/static.js b/lib/generators/static.js
index 4713ea7..416076c 100644
--- a/lib/generators/static.js
+++ b/lib/generators/static.js
@@ -1,14 +1,13 @@
'use strict';
-const { access, rm } = require('fs/promises');
-const { ncp } = require('ncp');
+const { access, cp } = require('fs/promises');
const { join } = require('path');
-const { debuglog, promisify } = require('util');
+const { debuglog } = require('util');
+const { rmIfExists } = require('../utils');
+const { kFileNotFoundError } = require('../constants');
const internals = {
- ncp: promisify(ncp),
debuglog: debuglog('blog'),
-
kAssetsDirectoryName: 'assets'
};
@@ -25,7 +24,7 @@ module.exports = async function StaticGenerator(source, target, posts) {
const assetsTarget = join(target, internals.kAssetsDirectoryName);
internals.debuglog(`Removing ${assetsTarget}`);
- await rm(assetsTarget, { recursive: true, force: true });
+ await rmIfExists(assetsTarget);
for (let i = 0; i < posts.length; ++i) {
const postSourcePath = join(source, `${i}`);
@@ -36,10 +35,10 @@ module.exports = async function StaticGenerator(source, target, posts) {
const assetsSource = join(postSourcePath, internals.kAssetsDirectoryName);
internals.debuglog(`Copying ${assetsSource} to ${assetsTarget}`);
- await internals.ncp(assetsSource, assetsTarget);
+ await cp(assetsSource, assetsTarget, { recursive: true });
}
catch (error) {
- if (error.code === internals.kFileNotFoundError) {
+ if (error.code === kFileNotFoundError) {
internals.debuglog(`Skipping ${i}`);
continue;
}
diff --git a/lib/remote.js b/lib/remote.js
index 8b29c4e..373958f 100644
--- a/lib/remote.js
+++ b/lib/remote.js
@@ -1,4 +1,5 @@
-const { readFile, rm, writeFile } = require('fs/promises');
+const { readFile, writeFile } = require('fs/promises');
+const { rmIfExists } = require('./utils');
const internals = {
strings: {
@@ -17,7 +18,7 @@ module.exports = {
async remove(remoteConfig) {
- await rm(remoteConfig, { force: true })
+ await rmIfExists(remoteConfig);
},
async syncUp(remoteConfig, blogDirectory) {
diff --git a/lib/utils.js b/lib/utils.js
new file mode 100644
index 0000000..24b9407
--- /dev/null
+++ b/lib/utils.js
@@ -0,0 +1,36 @@
+const { access, constants, mkdir, rm } = require('fs/promises');
+const { kFileNotFoundError } = require('./constants');
+
+// File system utilities
+
+module.exports = {
+ async rmIfExists(location) {
+
+ try {
+ await access(location, constants.F_OK);
+ await rm(location, { recursive: true });
+ }
+ catch (error) {
+ if (error.code === kFileNotFoundError) {
+ return;
+ }
+
+ throw error;
+ }
+ },
+
+ async ensureDirectoryExists(directory) {
+
+ try {
+ await access(directory);
+ }
+ catch (error) {
+ if (error.code === kFileNotFoundError) {
+ await mkdir(directory, { recursive: true });
+ return;
+ }
+
+ throw error;
+ }
+ }
+};