evophp 1.0.26 → 1.0.27

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.
package/helpers.js CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const readline = require('readline');
4
+ const editJsonFile = require("edit-json-file");
4
5
 
5
6
  /**
6
7
  * Prompt user for input with a message
@@ -52,4 +53,49 @@ const splitPluginName = async (name) => {
52
53
  return arr;
53
54
  };
54
55
 
55
- module.exports = { readLineAsync, splitPluginName };
56
+ const isObject = (item) => {
57
+ return (item && typeof item === 'object' && !Array.isArray(item));
58
+ }
59
+
60
+ /**
61
+ * Deep merge two objects.
62
+ * @param target
63
+ * @param ...sources
64
+ */
65
+ const mergeDeep = async (target, ...sources) => {
66
+ if (!sources.length) return target;
67
+ const source = sources.shift();
68
+
69
+ if (isObject(target) && isObject(source)) {
70
+ for (const key in source) {
71
+ if (isObject(source[key])) {
72
+ if (!target[key]) Object.assign(target, { [key]: {} });
73
+ mergeDeep(target[key], source[key]);
74
+ } else {
75
+ Object.assign(target, { [key]: source[key] });
76
+ }
77
+ }
78
+ }
79
+
80
+ return mergeDeep(target, ...sources);
81
+ }
82
+
83
+ const mergeConfig = async (config) => {
84
+ let file = editJsonFile("./config.json");
85
+ for(var data in config) {
86
+ const oldValue = file.get(data);
87
+ if(oldValue == undefined) {
88
+ file.set(data, config[data]);
89
+ } else {
90
+ if(isObject(oldValue)) {
91
+ var deep = await mergeDeep(oldValue, config[data]);
92
+ file.set(data, deep);
93
+ } else {
94
+ file.set(data, config[data]);
95
+ }
96
+ }
97
+ }
98
+ file.save();
99
+ }
100
+
101
+ module.exports = { readLineAsync, splitPluginName, mergeConfig };
@@ -25,7 +25,7 @@ const { readLineAsync } = require('./helpers');
25
25
 
26
26
  const depType = isProd ? 'prod' : 'dev';
27
27
 
28
- const pluginPath = path.join('EvoJsDev', 'Module', pluginName);
28
+ const pluginPath = path.join('EvoJsDev', 'Modules', pluginName);
29
29
 
30
30
  if (!fs.existsSync(pluginPath)) {
31
31
  console.error(`Plugin "${pluginName}" not found in ${pluginPath}.`);
@@ -50,9 +50,9 @@ const { readLineAsync } = require('./helpers');
50
50
 
51
51
  // Add new dependencies to the respective array
52
52
  if (newDeps.length) {
53
- dependencies[depType] = dependencies[depType]
53
+ dependencies[depType] = (dependencies[depType]
54
54
  ? dependencies[depType] + ' ' + newDeps.join(' ')
55
- : newDeps.join(' ');
55
+ : newDeps.join(' ')).trim().split(' ').filter((value, index, array) => array.indexOf(value) === index).join(' ');
56
56
  }
57
57
 
58
58
  // Write updated dependencies to dependencies.json
package/install-plugin.js CHANGED
@@ -3,7 +3,7 @@
3
3
  const { execSync } = require('child_process');
4
4
  const path = require('path');
5
5
  const helpersPath = path.resolve(__dirname, 'helpers.js');
6
- const { readLineAsync, splitPluginName } = require(helpersPath);
6
+ const { readLineAsync, splitPluginName, mergeConfig } = require(helpersPath);
7
7
  const fs = require('fs');
8
8
 
9
9
  (async () => {
@@ -36,8 +36,8 @@ const fs = require('fs');
36
36
  let paths;
37
37
  if (type === 'plugin') {
38
38
  paths = [
39
- path.join('Public', 'Module', itemName), // Main plugin path
40
- path.join('EvoJsDev', 'Module', itemName), // .js plugin path
39
+ path.join('Public', 'Modules', itemName), // Main plugin path
40
+ path.join('EvoJsDev', 'Modules', itemName), // .js plugin path
41
41
  ];
42
42
  } else if (type === 'theme') {
43
43
  paths = [path.join('Public', 'Themes', itemName)];
@@ -63,6 +63,12 @@ const fs = require('fs');
63
63
  const jsRepoURL = `https://github.com/${author}/${itemName}.js.git`;
64
64
  execSync(`git clone ${jsRepoURL} ${paths[1]}`, { stdio: 'inherit' });
65
65
 
66
+ const configFile = path.resolve(`./EvoJsDev/Modules/${itemName}/config.json`)
67
+ if (fs.existsSync(configFile)) {
68
+ const pluginConfig = require(configFile)
69
+ mergeConfig(pluginConfig)
70
+ }
71
+
66
72
  // Check for dependencies.json in the .js plugin path
67
73
  const dependenciesFile = path.join(paths[1], 'dependencies.json');
68
74
  if (fs.existsSync(dependenciesFile)) {
@@ -90,7 +96,6 @@ const fs = require('fs');
90
96
  }
91
97
 
92
98
  console.log(`The ${type} "${itemName}" has been installed successfully.`);
93
- process.exit(1);
94
99
  } catch (error) {
95
100
  console.error("An error occurred while installing:", error.message);
96
101
  process.exit(1);
package/installer.js CHANGED
@@ -58,7 +58,8 @@ let [, , command, type, name] = process.argv;
58
58
  } else if (command === "install-dependencies" || command === "d") {
59
59
  // sample command
60
60
  // evophp (d | install-dependencies) <plugin-name> ?(--save-dev | --save)
61
- const args = name ? name : [];
61
+ const args = name ? [name] : [];
62
+ console.log(args)
62
63
  name = type;
63
64
  if (!name) {
64
65
  console.error("Please specify the name of the plugin.");
package/new-plugin.js CHANGED
@@ -5,7 +5,8 @@ const path = require('path');
5
5
  const fs = require('fs');
6
6
  const axios = require('axios');
7
7
  const helpersPath = path.resolve(__dirname, 'helpers.js');
8
- const { readLineAsync, splitPluginName } = require(helpersPath);
8
+ const { readLineAsync, splitPluginName, mergeConfig } = require(helpersPath);
9
+ const rimraf = require('rimraf');
9
10
 
10
11
  (async () => {
11
12
  try {
@@ -87,7 +88,7 @@ const { readLineAsync, splitPluginName } = require(helpersPath);
87
88
  });
88
89
  } catch(e) {}
89
90
 
90
- const configFile = path.resolve(__dirname, `./EvoJsDev/Modules/${pluginName}/config.json`)
91
+ const configFile = path.resolve(`./EvoJsDev/Modules/${pluginName}/config.json`)
91
92
  if (fs.existsSync(configFile)) {
92
93
  const pluginConfig = require(configFile)
93
94
  mergeConfig(pluginConfig)
@@ -101,7 +102,7 @@ const { readLineAsync, splitPluginName } = require(helpersPath);
101
102
  pluginPrefix: pluginPrefix
102
103
  })
103
104
 
104
- if (fs.existsSync(path.resolve(__dirname, `./Public/Modules/${pluginName}/Controller.php`))) {
105
+ if (fs.existsSync(path.resolve(`./Public/Modules/${pluginName}/Controller.php`))) {
105
106
  await editFile(`./Public/Modules/${pluginName}/Controller.php`, {
106
107
  pluginName: pluginName,
107
108
  pluginPrefix: pluginPrefix
@@ -202,10 +203,17 @@ async function cloneRepository(author, pluginName, cloneDir) {
202
203
  let retries = 5;
203
204
  while (retries > 0) {
204
205
  try {
206
+ if (fs.existsSync(cloneDir)) {
207
+ console.log(`The directory "${cloneDir}" already exists. Deleting it...`);
208
+
209
+ // Use rimraf to delete the directory and its contents
210
+ rimraf.sync(cloneDir);
211
+ console.log(`The directory "${cloneDir}" was deleted.`);
212
+ }
205
213
  execSync(`git clone ${cloneUrl} ${cloneDir}`, { stdio: 'inherit' });
206
214
 
207
215
  // Check if the cloned repository is non-empty
208
- const files = fs.readdirSync(cloneDir);
216
+ const files = fs.readdirSync(cloneDir).filter(file => file !== '.git');
209
217
  if (files.length > 0) {
210
218
  console.log(`Cloned the repository ${pluginName} successfully.`);
211
219
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evophp",
3
- "version": "1.0.26",
3
+ "version": "1.0.27",
4
4
  "description": "Installer for the Evolution PHP project",
5
5
  "main": "installer.js",
6
6
  "scripts": {
@@ -10,7 +10,9 @@
10
10
  "evophp": "installer.js"
11
11
  },
12
12
  "dependencies": {
13
- "axios": "^1.7.9"
13
+ "axios": "^1.7.9",
14
+ "edit-json-file": "^1.8.0",
15
+ "rimraf": "^6.0.1"
14
16
  },
15
17
  "files": [
16
18
  "installer.js",
@@ -20,4 +22,3 @@
20
22
  "helpers.js"
21
23
  ]
22
24
  }
23
-