summaryrefslogtreecommitdiffstats
path: root/lib/utils/error.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/utils/error.js')
-rw-r--r--lib/utils/error.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/lib/utils/error.js b/lib/utils/error.js
new file mode 100644
index 0000000..27fa59d
--- /dev/null
+++ b/lib/utils/error.js
@@ -0,0 +1,105 @@
+var _ = require('lodash');
+var TypedError = require('error/typed');
+var WrappedError = require('error/wrapped');
+var deprecated = require('deprecated');
+
+var Logger = require('./logger');
+
+var log = new Logger();
+
+// Enforce as an Error object, and cleanup message
+function enforce(err) {
+ if (_.isString(err)) err = new Error(err);
+ err.message = err.message.replace(/^Error: /, '');
+
+ return err;
+}
+
+// Random error wrappers during parsing/generation
+var ParsingError = WrappedError({
+ message: 'Parsing Error: {origMessage}',
+ type: 'parse'
+});
+var OutputError = WrappedError({
+ message: 'Output Error: {origMessage}',
+ type: 'generate'
+});
+
+// A file does not exists
+var FileNotFoundError = TypedError({
+ type: 'file.not-found',
+ message: 'No "{filename}" file (or is ignored)',
+ filename: null
+});
+
+// A file is outside the scope
+var FileOutOfScopeError = TypedError({
+ type: 'file.out-of-scope',
+ message: '"{filename}" not in "{root}"',
+ filename: null,
+ root: null,
+ code: 'EACCESS'
+});
+
+// A file is outside the scope
+var RequireInstallError = TypedError({
+ type: 'install.required',
+ message: '"{cmd}" is not installed.\n{install}',
+ cmd: null,
+ code: 'ENOENT',
+ install: ''
+});
+
+// Error for nunjucks templates
+var TemplateError = WrappedError({
+ message: 'Error compiling template "{filename}": {origMessage}',
+ type: 'template',
+ filename: null
+});
+
+// Error for nunjucks templates
+var PluginError = WrappedError({
+ message: 'Error with plugin "{plugin}": {origMessage}',
+ type: 'plugin',
+ plugin: null
+});
+
+// Error with the book's configuration
+var ConfigurationError = WrappedError({
+ message: 'Error with book\'s configuration: {origMessage}',
+ type: 'configuration'
+});
+
+// Error during ebook generation
+var EbookError = WrappedError({
+ message: 'Error during ebook generation: {origMessage}\n{stdout}',
+ type: 'ebook',
+ stdout: ''
+});
+
+// Deprecate methods/fields
+function deprecateMethod(fn, msg) {
+ return deprecated.method(msg, log.warn.ln, fn);
+}
+function deprecateField(obj, prop, value, msg) {
+ return deprecated.field(msg, log.warn.ln, obj, prop, value);
+}
+
+module.exports = {
+ enforce: enforce,
+
+ ParsingError: ParsingError,
+ OutputError: OutputError,
+ RequireInstallError: RequireInstallError,
+
+ FileNotFoundError: FileNotFoundError,
+ FileOutOfScopeError: FileOutOfScopeError,
+
+ TemplateError: TemplateError,
+ PluginError: PluginError,
+ ConfigurationError: ConfigurationError,
+ EbookError: EbookError,
+
+ deprecateMethod: deprecateMethod,
+ deprecateField: deprecateField
+};