UNPKG

1.62 kBJavaScriptView Raw
1//--------------------------------------------------------
2//-- Extension
3//--------------------------------------------------------
4'use strict';
5
6const { terminal } = require('@absolunet/terminal');
7const paths = require('~/helpers/paths');
8const toolbox = require('~/helpers/toolbox');
9
10
11class NwayoExtension {
12
13 get id() {
14 throw new Error('Id must be defined by extension');
15 }
16
17 get version() {
18 throw new Error('Version must be defined by extension');
19 }
20
21 set options(options) {
22 this._options = options;
23 }
24
25 get options() {
26 return this._options;
27 }
28
29
30
31 // Params kept to show methods signature, on-the-spot require to avoid inclusion loop
32 /* eslint-disable no-unused-vars, global-require */
33 init({ options }) {
34 this.options = options;
35 }
36
37 taskExists(name) {
38 return false;
39 }
40
41 requireTask(name) {
42 //
43 }
44
45 createTask(name, task) {
46 const flow = require('~/helpers/flow');
47
48 flow.createTask(`${this.id}:${name}`, () => {
49 try {
50 return task();
51 } catch (error) {
52 return this.error(error);
53 }
54 });
55 }
56
57 log(taskName, message, extra) {
58 toolbox.log(`${this.id}:${taskName}`, message, extra);
59 }
60
61 error(error) {
62 terminal.error(`[nwayo-extension:${this.id} error]`);
63 terminal.echo(error);
64 terminal.exit();
65 }
66
67 getComponentDirectory(component) {
68 return `${paths.directory.extensions.replace(paths.pattern.anytree, component)}/${this.id}`;
69 }
70
71 getGeneratedBanner(name, type) {
72 const util = require('~/helpers/util');
73
74 return util.getGeneratedBanner(name, type, this);
75 }
76 /* eslint-enable no-unused-vars, global-require */
77
78}
79
80
81module.exports = NwayoExtension;