node-pluginsmanager 2.3.7 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +10 -186
  3. package/lib/cjs/PluginsManager.d.ts +38 -0
  4. package/lib/cjs/PluginsManager.js +442 -0
  5. package/lib/cjs/checkers/checkAbsoluteDirectory.d.ts +1 -0
  6. package/lib/cjs/checkers/checkAbsoluteDirectory.js +20 -0
  7. package/lib/cjs/checkers/checkDirectory.d.ts +1 -0
  8. package/lib/cjs/checkers/checkDirectory.js +24 -0
  9. package/lib/cjs/checkers/checkFunction.d.ts +1 -0
  10. package/lib/cjs/checkers/checkFunction.js +16 -0
  11. package/lib/cjs/checkers/checkNonEmptyArray.d.ts +1 -0
  12. package/lib/cjs/checkers/checkNonEmptyArray.js +19 -0
  13. package/lib/cjs/checkers/checkNonEmptyString.d.ts +1 -0
  14. package/lib/cjs/checkers/checkNonEmptyString.js +19 -0
  15. package/lib/cjs/checkers/checkOrchestrator.d.ts +1 -0
  16. package/lib/cjs/checkers/checkOrchestrator.js +36 -0
  17. package/lib/cjs/cmd/cmd.d.ts +1 -0
  18. package/lib/cjs/cmd/cmd.js +37 -0
  19. package/lib/cjs/cmd/git/gitInstall.d.ts +1 -0
  20. package/lib/cjs/cmd/git/gitInstall.js +42 -0
  21. package/lib/cjs/cmd/git/gitUpdate.d.ts +1 -0
  22. package/lib/cjs/cmd/git/gitUpdate.js +18 -0
  23. package/lib/cjs/cmd/npm/npmCmd.d.ts +1 -0
  24. package/lib/cjs/cmd/npm/npmCmd.js +18 -0
  25. package/lib/cjs/cmd/npm/npmInstall.d.ts +1 -0
  26. package/lib/cjs/cmd/npm/npmInstall.js +14 -0
  27. package/lib/cjs/cmd/npm/npmUpdate.d.ts +1 -0
  28. package/lib/cjs/cmd/npm/npmUpdate.js +14 -0
  29. package/lib/cjs/cmd/stdToString.d.ts +1 -0
  30. package/lib/cjs/cmd/stdToString.js +16 -0
  31. package/lib/cjs/createPluginByDirectory.d.ts +2 -0
  32. package/lib/cjs/createPluginByDirectory.js +61 -0
  33. package/lib/cjs/extractGithub.d.ts +1 -0
  34. package/lib/cjs/extractGithub.js +20 -0
  35. package/lib/cjs/initSortedPlugins.d.ts +2 -0
  36. package/lib/cjs/initSortedPlugins.js +56 -0
  37. package/lib/cjs/loadSortedPlugins.d.ts +2 -0
  38. package/lib/cjs/loadSortedPlugins.js +74 -0
  39. package/lib/cjs/main.cjs +8 -0
  40. package/lib/cjs/main.d.cts +2 -0
  41. package/package.json +31 -13
  42. package/lib/checkers/isAbsoluteDirectory.js +0 -27
  43. package/lib/checkers/isDirectory.js +0 -34
  44. package/lib/checkers/isFunction.js +0 -18
  45. package/lib/checkers/isNonEmptyArray.js +0 -21
  46. package/lib/checkers/isNonEmptyString.js +0 -21
  47. package/lib/checkers/isOrchestrator.js +0 -41
  48. package/lib/cmd/cmd.js +0 -44
  49. package/lib/cmd/git/install.js +0 -49
  50. package/lib/cmd/git/update.js +0 -23
  51. package/lib/cmd/npm/cmd.js +0 -23
  52. package/lib/cmd/npm/install.js +0 -15
  53. package/lib/cmd/npm/update.js +0 -15
  54. package/lib/cmd/stdToString.js +0 -17
  55. package/lib/createPluginByDirectory.js +0 -64
  56. package/lib/index.d.ts +0 -81
  57. package/lib/initSortedPlugins.js +0 -96
  58. package/lib/loadSortedPlugins.js +0 -132
  59. package/lib/main.js +0 -745
package/lib/cmd/cmd.js DELETED
@@ -1,44 +0,0 @@
1
- "use strict";
2
-
3
- // deps
4
-
5
- // natives
6
- const { join } = require("path");
7
- const { spawn } = require("child_process");
8
-
9
- // locals
10
- const isDirectory = require(join(__dirname, "..", "checkers", "isDirectory.js"));
11
- const isNonEmptyArray = require(join(__dirname, "..", "checkers", "isNonEmptyArray.js"));
12
- const isNonEmptyString = require(join(__dirname, "..", "checkers", "isNonEmptyString.js"));
13
- const stdToString = require(join(__dirname, "stdToString.js"));
14
-
15
- // module
16
-
17
- module.exports = function cmd (directory, command, params) {
18
-
19
- return isDirectory("cmd/directory", directory).then(() => {
20
- return isNonEmptyString("cmd/command", command);
21
- }).then(() => {
22
- return isNonEmptyArray("cmd/params", params);
23
- }).then(() => {
24
-
25
- return new Promise((resolve, reject) => {
26
-
27
- let result = "";
28
- const mySpawn = spawn(command, params, {
29
- "cwd": directory
30
- }).on("error", (err) => {
31
- result += stdToString(err);
32
- }).on("close", (code) => {
33
- return code ? reject(new Error(result)) : resolve();
34
- });
35
-
36
- mySpawn.stderr.on("data", (msg) => {
37
- result += stdToString(msg);
38
- });
39
-
40
- });
41
-
42
- });
43
-
44
- };
@@ -1,49 +0,0 @@
1
- "use strict";
2
-
3
- // deps
4
-
5
- // natives
6
- const { join, dirname } = require("path");
7
-
8
- // locals
9
- const isDirectory = require(join(__dirname, "..", "..", "checkers", "isDirectory.js"));
10
- const isNonEmptyString = require(join(__dirname, "..", "..", "checkers", "isNonEmptyString.js"));
11
- const cmd = require(join(__dirname, "..", "cmd.js"));
12
-
13
- // module
14
-
15
- module.exports = function gitinstall (directory, user, repo) {
16
-
17
- return isNonEmptyString("cmd/git/install/directory", directory).then(() => {
18
-
19
- return new Promise((resolve, reject) => {
20
-
21
- isDirectory("cmd/git/install/directory", directory).then(() => {
22
- reject(new Error("\"" + directory + "\" aldready exists"));
23
- }).catch(() => {
24
- resolve();
25
- });
26
-
27
- });
28
-
29
- }).then(() => {
30
- return isNonEmptyString("cmd/git/install/user", user);
31
- }).then(() => {
32
- return isNonEmptyString("cmd/git/install/repo", repo);
33
- }).then(() => {
34
-
35
- // git clone
36
- return cmd(dirname(directory), "git", [
37
- "-c",
38
- "core.quotepath=false",
39
- "clone",
40
- "--recursive",
41
- "--depth",
42
- "1",
43
- "https://github.com/" + user + "/" + repo + "/",
44
- directory
45
- ]);
46
-
47
- });
48
-
49
- };
@@ -1,23 +0,0 @@
1
- "use strict";
2
-
3
- // deps
4
-
5
- // natives
6
- const { join } = require("path");
7
-
8
- // locals
9
- const isDirectory = require(join(__dirname, "..", "..", "checkers", "isDirectory.js"));
10
- const cmd = require(join(__dirname, "..", "cmd.js"));
11
-
12
- // module
13
-
14
- module.exports = function gitupdate (directory) {
15
-
16
- return isDirectory("cmd/git/update/directory", directory).then(() => {
17
-
18
- // git update
19
- return cmd(directory, "git", [ "pull" ]);
20
-
21
- });
22
-
23
- };
@@ -1,23 +0,0 @@
1
- "use strict";
2
-
3
- // deps
4
-
5
- // natives
6
- const { join } = require("path");
7
-
8
- // locals
9
- const isDirectory = require(join(__dirname, "..", "..", "checkers", "isDirectory.js"));
10
- const cmd = require(join(__dirname, "..", "cmd.js"));
11
-
12
- // module
13
-
14
- module.exports = function npmcmd (directory, params) {
15
-
16
- return isDirectory("cmd/npm/cmd/directory", directory).then(() => {
17
-
18
- // npm install
19
- return cmd(directory, (/^win/).test((0, process).platform) ? "npm.cmd" : "npm", params);
20
-
21
- });
22
-
23
- };
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- // deps
4
-
5
- // natives
6
- const { join } = require("path");
7
-
8
- // locals
9
- const cmd = require(join(__dirname, "cmd.js"));
10
-
11
- // module
12
-
13
- module.exports = function npminstall (directory) {
14
- return cmd(directory, [ "install", "--prod" ]);
15
- };
@@ -1,15 +0,0 @@
1
- "use strict";
2
-
3
- // deps
4
-
5
- // natives
6
- const { join } = require("path");
7
-
8
- // locals
9
- const cmd = require(join(__dirname, "cmd.js"));
10
-
11
- // module
12
-
13
- module.exports = function npmupdate (directory) {
14
- return cmd(directory, [ "update", "--prod" ]);
15
- };
@@ -1,17 +0,0 @@
1
- "use strict";
2
-
3
- // module
4
-
5
- module.exports = (msg) => {
6
-
7
- if ("object" !== typeof msg) {
8
- return String(msg);
9
- }
10
- else if (msg instanceof Buffer) {
11
- return msg.toString("utf8");
12
- }
13
- else {
14
- return msg.message ? msg.message : String(msg);
15
- }
16
-
17
- };
@@ -1,64 +0,0 @@
1
- "use strict";
2
-
3
- // deps
4
-
5
- // natives
6
- const { join, basename } = require("path");
7
-
8
- // locals
9
- const isAbsoluteDirectory = require(join(__dirname, "checkers", "isAbsoluteDirectory.js"));
10
- const isFunction = require(join(__dirname, "checkers", "isFunction.js"));
11
- const isOrchestrator = require(join(__dirname, "checkers", "isOrchestrator.js"));
12
-
13
- // module
14
-
15
- module.exports = function createPluginByDirectory (directory, externalRessourcesDirectory, logger, data) {
16
-
17
- return isAbsoluteDirectory("createPluginByDirectory/directory", directory).then(() => {
18
-
19
- return isAbsoluteDirectory("createPluginByDirectory/externalRessourcesDirectory", externalRessourcesDirectory);
20
-
21
- }).then(() => {
22
-
23
- let Plugin = null;
24
- let plugin = null;
25
-
26
- const pluginBaseNameDirectory = basename(directory);
27
-
28
- return Promise.resolve().then(() => {
29
-
30
- Plugin = require(directory);
31
- Plugin = Plugin.Orchestrator ? Plugin.Orchestrator : Plugin;
32
-
33
- return isFunction("createPluginByDirectory/function", Plugin);
34
-
35
- }).then(() => {
36
-
37
- plugin = new Plugin({
38
- "externalRessourcesDirectory": join(externalRessourcesDirectory, pluginBaseNameDirectory),
39
- "logger": logger
40
- });
41
-
42
- return isOrchestrator("createPluginByDirectory/orchestrator", plugin);
43
-
44
- }).then(() => {
45
-
46
- plugin.name = pluginBaseNameDirectory;
47
-
48
- return plugin.load(data).then(() => {
49
-
50
- return plugin.name === pluginBaseNameDirectory ? Promise.resolve() : Promise.reject(new Error(
51
- "Plugin's name (\"" + plugin.name + "\") does not fit with plugin's directory basename (\"" + pluginBaseNameDirectory + "\")"
52
- ));
53
-
54
- });
55
-
56
- }).then(() => {
57
-
58
- return Promise.resolve(plugin);
59
-
60
- });
61
-
62
- });
63
-
64
- };
package/lib/index.d.ts DELETED
@@ -1,81 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node-pluginsmanager-plugin" />
3
-
4
- declare module "node-pluginsmanager" {
5
-
6
- import { EventEmitter } from "events";
7
- import { Orchestrator } from "node-pluginsmanager-plugin";
8
- import { Server as WebSocketServer } from "ws";
9
-
10
- interface iPluginManagerOptions {
11
- "directory": string; // plugins location. default : join(homedir(), "node-pluginsmanager-plugins")
12
- "externalRessourcesDirectory": string; // external resources locations (sqlite, files, cache, etc...). default : join(homedir(), "node-pluginsmanager-resources")
13
- "logger": Function | null;
14
- }
15
-
16
- class PluginManager extends EventEmitter {
17
-
18
- // attributes
19
-
20
- // protected
21
-
22
- protected _beforeLoadAll: Function | null;
23
- protected _beforeInitAll: Function | null;
24
-
25
- protected _orderedPluginsNames: Array<string>;
26
-
27
- // public
28
-
29
- public directory: string;
30
- public externalRessourcesDirectory: string;
31
- public plugins: Array<Orchestrator>;
32
-
33
- // constructor
34
-
35
- constructor (options?: iPluginManagerOptions);
36
-
37
- // methods
38
-
39
- // public
40
-
41
- // getters
42
-
43
- public getPluginsNames(): Array<string>;
44
-
45
- // setters
46
-
47
- public setOrder(pluginsNames: Array<string>): Promise<void>;
48
-
49
- // checkers
50
-
51
- public checkAllModules(): Promise<void>;
52
- public checkModules(plugin: Orchestrator): Promise<void>;
53
-
54
- // network
55
-
56
- public appMiddleware(req: Request, res: Response, next: Function): void;
57
- public socketMiddleware(server: WebSocketServer): void;
58
-
59
- // load / destroy
60
-
61
- public beforeLoadAll(callback: () => Promise<any>): Promise<void>;
62
- public loadAll(data?: any): Promise<void>;
63
- public destroyAll(data?: any): Promise<void>;
64
-
65
- // init / release
66
-
67
- public beforeInitAll(callback: () => Promise<any>): Promise<void>;
68
- public initAll(data?: any): Promise<void>;
69
- public releaseAll(data?: any): Promise<void>;
70
-
71
- // write
72
-
73
- public installViaGithub(user: string, repo: string, data?: any): Promise<Orchestrator>;
74
- public updateViaGithub(plugin: Orchestrator, data?: any): Promise<Orchestrator>;
75
- public uninstall(plugin: Orchestrator, data?: any): Promise<string>;
76
-
77
- }
78
-
79
- export = PluginManager;
80
-
81
- }
@@ -1,96 +0,0 @@
1
- "use strict";
2
-
3
- // private
4
-
5
- // methods
6
-
7
- /**
8
- * Load plugins with sort conditions
9
- * @param {object} plugin : plugin to init
10
- * @param {function} emit : emit data function
11
- * @param {object} data : data to send
12
- * @return {Promise} : result operation
13
- */
14
- function _initPlugin (plugin, emit, data) {
15
-
16
- emit("initializing", plugin, data);
17
-
18
- return plugin.init(data).then(() => {
19
-
20
- emit("initialized", plugin, data);
21
-
22
- return Promise.resolve();
23
-
24
- });
25
-
26
- }
27
-
28
- /**
29
- * Load plugins with sort conditions
30
- * @param {object} pluginsToInit : plugins to init
31
- * @param {function} emit : emit data function
32
- * @param {object} data : data to send
33
- * @param {number} i : stepper
34
- * @return {Promise} : result operation
35
- */
36
- function _initPlugins (pluginsToInit, emit, data, i = 0) {
37
-
38
- return i < pluginsToInit.length ? Promise.resolve().then(() => {
39
-
40
- return _initPlugin(pluginsToInit[i], emit, data);
41
-
42
- // loop
43
- }).then(() => {
44
-
45
- return _initPlugins(pluginsToInit, emit, data, i + 1);
46
-
47
- }) : Promise.resolve();
48
-
49
- }
50
-
51
- // module
52
-
53
- module.exports = function initSortedPlugins (plugins, orderedPluginsNames, emit, data) {
54
-
55
- // if no plugins, does not run
56
- return !plugins.length ? Promise.resolve() : Promise.resolve().then(() => {
57
-
58
- const sortedPlugins = [
59
- ...plugins.filter((plugin) => {
60
- return orderedPluginsNames.includes(plugin.name);
61
- })
62
- ];
63
-
64
- // first, sorted plugins
65
- return sortedPlugins.length ?
66
- _initPlugins(sortedPlugins, emit, data) :
67
- Promise.resolve();
68
-
69
- }).then(() => {
70
-
71
- const unsortedPlugin = [
72
- ...plugins.filter((plugin) => {
73
- return !orderedPluginsNames.includes(plugin.name);
74
- }).sort((a, b) => {
75
-
76
- if (a < b) {
77
- return -1;
78
- }
79
- else if (a > b) {
80
- return 1;
81
- }
82
- else {
83
- return 0;
84
- }
85
-
86
- })
87
- ];
88
-
89
- // then, all other plugins, asynchronously
90
- return unsortedPlugin.length ?
91
- _initPlugins(unsortedPlugin, emit, data) :
92
- Promise.resolve();
93
-
94
- });
95
-
96
- };
@@ -1,132 +0,0 @@
1
- /*
2
- eslint max-params: 0
3
- */
4
-
5
- "use strict";
6
-
7
- // deps
8
-
9
- // natives
10
- const { join } = require("path");
11
-
12
- // locals
13
- const createPluginByDirectory = require(join(__dirname, "createPluginByDirectory.js"));
14
-
15
- // private
16
-
17
- // methods
18
-
19
- /**
20
- * Load plugins with sort conditions
21
- * @param {string} globalDirectory : get plugins directory
22
- * @param {string} externalRessourcesDirectory : get ressources directory
23
- * @param {string} pluginFileName : get ressources directory
24
- * @param {object} loadedPlugins : already loaded plugins
25
- * @param {function} emit : emit data function
26
- * @param {function|null} logger : if logger, send it to plugin
27
- * @param {object} data : data to send
28
- * @return {Promise} : result operation
29
- */
30
- function _loadPlugin (globalDirectory, externalRessourcesDirectory, pluginFileName, loadedPlugins, emit, logger, data) {
31
-
32
- // is already loaded ?
33
- const plugin = loadedPlugins.find((p) => {
34
- return pluginFileName === p.name;
35
- });
36
-
37
- // is already exists ?
38
- return plugin ? Promise.resolve() : Promise.resolve().then(() => {
39
-
40
- emit("loading", pluginFileName, data);
41
-
42
- const directory = join(globalDirectory, pluginFileName);
43
-
44
- return createPluginByDirectory(directory, externalRessourcesDirectory, logger, data);
45
-
46
- // emit event
47
- }).then((createdPlugin) => {
48
-
49
- emit("loaded", createdPlugin, data);
50
- loadedPlugins.push(createdPlugin);
51
-
52
- return Promise.resolve();
53
-
54
- });
55
-
56
- }
57
-
58
- /**
59
- * Load plugins with sort conditions
60
- * @param {string} globalDirectory : get plugins directory
61
- * @param {string} externalRessourcesDirectory : get ressources directory
62
- * @param {Array} pluginsToLoad : plugins to load
63
- * @param {object} loadedPlugins : already loaded plugins
64
- * @param {function} emit : emit data function
65
- * @param {function|null} logger : if logger, send it to plugin
66
- * @param {object} data : data to send
67
- * @param {number} i : stepper
68
- * @return {Promise} : result operation
69
- */
70
- function _loadPlugins (globalDirectory, externalRessourcesDirectory, pluginsToLoad, loadedPlugins, emit, logger, data, i = 0) {
71
-
72
- return i < pluginsToLoad.length ? Promise.resolve().then(() => {
73
-
74
- return _loadPlugin(globalDirectory, externalRessourcesDirectory, pluginsToLoad[i], loadedPlugins, emit, logger, data);
75
-
76
- // loop
77
- }).then(() => {
78
-
79
- return _loadPlugins(globalDirectory, externalRessourcesDirectory, pluginsToLoad, loadedPlugins, emit, logger, data, i + 1);
80
-
81
- }) : Promise.resolve();
82
-
83
- }
84
-
85
- // module
86
-
87
- module.exports = function loadSortedPlugins (
88
- globalDirectory, externalRessourcesDirectory, files, loadedPlugins, orderedPluginsNames, emit, logger, data
89
- ) {
90
-
91
- // if no files, does not run
92
- return !files.length ? Promise.resolve() : Promise.resolve().then(() => {
93
-
94
- const sortedPluginsNames = [
95
- ...files.filter((pluginName) => {
96
- return orderedPluginsNames.includes(pluginName);
97
- })
98
- ];
99
-
100
- // first, sorted plugins
101
- return sortedPluginsNames.length ?
102
- _loadPlugins(globalDirectory, externalRessourcesDirectory, sortedPluginsNames, loadedPlugins, emit, logger, data) :
103
- Promise.resolve();
104
-
105
- }).then(() => {
106
-
107
- const unsortedPluginsNames = [
108
- ...files.filter((pluginName) => {
109
- return !orderedPluginsNames.includes(pluginName);
110
- }).sort((a, b) => {
111
-
112
- if (a < b) {
113
- return -1;
114
- }
115
- else if (a > b) {
116
- return 1;
117
- }
118
- else {
119
- return 0;
120
- }
121
-
122
- })
123
- ];
124
-
125
- // then, all other plugins, asynchronously
126
- return unsortedPluginsNames.length ?
127
- _loadPlugins(globalDirectory, externalRessourcesDirectory, unsortedPluginsNames, loadedPlugins, emit, logger, data) :
128
- Promise.resolve();
129
-
130
- });
131
-
132
- };