slicejs-cli 1.0.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 (24) hide show
  1. package/PROJECT_TEMPLATES/Basic/Components/Service/FetchManager/FetchManager.js +62 -0
  2. package/PROJECT_TEMPLATES/Basic/Components/Service/IndexedDbManager/IndexedDbManager.js +138 -0
  3. package/PROJECT_TEMPLATES/Basic/Components/Service/LocalStorageManager/LocalStorageManager.js +45 -0
  4. package/PROJECT_TEMPLATES/Basic/Components/Service/Translator/Translator.js +59 -0
  5. package/PROJECT_TEMPLATES/Basic/Components/Structural/Controller/Controller.js +108 -0
  6. package/PROJECT_TEMPLATES/Basic/Components/Structural/Debugger/Debugger.css +58 -0
  7. package/PROJECT_TEMPLATES/Basic/Components/Structural/Debugger/Debugger.html +6 -0
  8. package/PROJECT_TEMPLATES/Basic/Components/Structural/Debugger/Debugger.js +177 -0
  9. package/PROJECT_TEMPLATES/Basic/Components/Structural/Logger/Log.js +10 -0
  10. package/PROJECT_TEMPLATES/Basic/Components/Structural/Logger/Logger.js +112 -0
  11. package/PROJECT_TEMPLATES/Basic/Components/Structural/StylesManager/CustomStylesManager/CustomStylesManager.js +52 -0
  12. package/PROJECT_TEMPLATES/Basic/Components/Structural/StylesManager/StylesManager.js +38 -0
  13. package/PROJECT_TEMPLATES/Basic/Components/Structural/StylesManager/ThemeManager/ThemeManager.js +25 -0
  14. package/PROJECT_TEMPLATES/Basic/Slice.js +172 -0
  15. package/PROJECT_TEMPLATES/Basic/sliceConfig.json +24 -0
  16. package/client.js +54 -0
  17. package/commands/createComponent/componentTemplate.js +30 -0
  18. package/commands/createComponent/createComponent.js +84 -0
  19. package/commands/init/init.js +34 -0
  20. package/commands/listComponents/listComponents.js +41 -0
  21. package/commands/modifyComponent/modifyComponent copy.js +111 -0
  22. package/commands/modifyComponent/modifyComponent.js +158 -0
  23. package/package.json +23 -0
  24. package/postInstall.js +27 -0
@@ -0,0 +1,111 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+
4
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
5
+
6
+ function modifyComponent(componentName, category, addProperties, removeProperties) {
7
+ if (!componentName) {
8
+ console.error('Component name is required');
9
+ return;
10
+ }
11
+
12
+ if (!isValidComponentName(componentName)) {
13
+ console.error('Invalid component name. Please use only alphanumeric characters and start with a letter.');
14
+ return;
15
+ }
16
+
17
+ if (!['Service', 'Visual', 'Provider', 'Structural'].includes(category)) {
18
+ console.error('Invalid category. Please use one of the following categories: Service, Visual, Provider, Structural');
19
+ return;
20
+ }
21
+
22
+ const fileName = `${componentName}.js`;
23
+ const componentPath = path.join('Components', category, fileName);
24
+
25
+ if (!fs.existsSync(componentPath)) {
26
+ console.error(`Component '${componentName}' does not exist.`);
27
+ return;
28
+ }
29
+
30
+ let componentContent = fs.readFileSync(componentPath, 'utf-8');
31
+ let existingProperties = extractProperties(componentContent);
32
+
33
+ addProperties.forEach(property => {
34
+ if (!existingProperties.includes(property)) {
35
+ existingProperties.push(property);
36
+ console.log(`Property '${property}' added to component '${componentName}'.`);
37
+ // Agregar getters y setters al componente
38
+ componentContent = addGetterSetter(componentContent, property);
39
+ } else {
40
+ console.log(`Property '${property}' already exists in component '${componentName}'.`);
41
+ }
42
+ });
43
+
44
+ removeProperties.forEach(property => {
45
+ if (existingProperties.includes(property)) {
46
+ existingProperties = existingProperties.filter(prop => prop !== property);
47
+ console.log(`Property '${property}' removed from component '${componentName}'.`);
48
+ componentContent = removeGetterSetter(componentContent, property);
49
+ } else {
50
+ console.log(`Property '${property}' does not exist in component '${componentName}'.`);
51
+ }
52
+ });
53
+
54
+ componentContent = updateComponentProps(componentContent, existingProperties);
55
+ fs.writeFileSync(componentPath, componentContent);
56
+ console.log(`Component '${componentName}' modified successfully.`);
57
+ }
58
+
59
+ function isValidComponentName(componentName) {
60
+ const regex = /^[a-zA-Z][a-zA-Z0-9]*$/;
61
+ return regex.test(componentName);
62
+ }
63
+
64
+ function extractProperties(componentContent) {
65
+ const propRegex = /this\.debuggerProps\s*=\s*\[(.*?)\];/s;
66
+ const match = componentContent.match(propRegex);
67
+ if (match && match[1]) {
68
+ return match[1].split(',').map(prop => prop.trim().replace(/['"]/g, ''));
69
+ }
70
+ return [];
71
+ }
72
+
73
+ function addGetterSetter(componentContent, property) {
74
+ // Agregar los métodos getters y setters al componente
75
+ const getterSetterCode = `
76
+ get ${property}() {
77
+ return this._${property};
78
+ }
79
+
80
+ set ${property}(value) {
81
+ this._${property} = value;
82
+ }\n\n`;
83
+
84
+ const classEndIndex = componentContent.lastIndexOf('}');
85
+ if (classEndIndex !== -1) {
86
+ const updatedComponentContent = componentContent.slice(0, classEndIndex) + getterSetterCode + componentContent.slice(classEndIndex);
87
+ return updatedComponentContent;
88
+ }
89
+ return componentContent;
90
+ }
91
+
92
+ function removeGetterSetter(componentContent, property) {
93
+ // Eliminar los métodos getters y setters del componente
94
+ const getterSetterRegex = new RegExp(`get ${property}\\(\\)\\s*{[^}]+}\\s*set ${property}\\([^)]+\\)\\s*{[^}]+}`);
95
+
96
+ const updatedComponentContent = componentContent.replace(getterSetterRegex, '');
97
+ return updatedComponentContent;
98
+ }
99
+
100
+ function updateComponentProps(componentContent, properties) {
101
+ const updatedPropsList = properties.map(prop => `'${prop}'`).join(', ');
102
+ const propIndex = componentContent.indexOf('this.debuggerProps = [');
103
+ const propsStartIndex = componentContent.indexOf('[', propIndex);
104
+ const propsEndIndex = componentContent.indexOf(']', propIndex);
105
+ const updatedComponentContent = `${componentContent.slice(0, propsStartIndex + 1)}${updatedPropsList}${componentContent.slice(propsEndIndex)}`;
106
+ return updatedComponentContent;
107
+ }
108
+
109
+ export default modifyComponent;
110
+
111
+ modifyComponent('Input', 'Visual', ['placeholder', 'conditions'], []);
@@ -0,0 +1,158 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+
4
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
5
+
6
+ function modifyComponent(componentName, category, addProperties, removeProperties) {
7
+ if (!componentName) {
8
+ console.error('Component name is required');
9
+ return;
10
+ }
11
+
12
+ if (!isValidComponentName(componentName)) {
13
+ console.error('Invalid component name. Please use only alphanumeric characters and start with a letter.');
14
+ return;
15
+ }
16
+
17
+
18
+ const categoryVariations = {
19
+ 'Service': ['service', 'servicio', 'serv'],
20
+ 'Visual': ['visual', 'vis'],
21
+ 'Provider': ['provider', 'proveedor', 'prov'],
22
+ 'Structural': ['structural', 'estructural', 'est']
23
+ };
24
+
25
+
26
+
27
+ // Verificar si la categoría es válida
28
+ let categoryIsValid = false;
29
+ Object.keys(categoryVariations).forEach(validCategory => {
30
+ if (categoryVariations[validCategory].includes(category.toLowerCase())) {
31
+ category = validCategory
32
+ categoryIsValid = true;
33
+ }
34
+ });
35
+
36
+ if (!categoryIsValid) {
37
+ console.error('Invalid category. Please use one of the following categories: Service, Visual, Provider, Structural');
38
+ return;
39
+ }
40
+
41
+ const componentDir = path.join(__dirname, '../../../../Slice/Components', category, componentName);
42
+ const fileName = `${componentName}.js`;
43
+ let componentPath = path.join(componentDir, fileName);
44
+ componentPath=componentPath.slice(1);
45
+
46
+ console.log(componentPath);
47
+ if (!fs.existsSync(componentPath)) {
48
+ console.error(`Component '${componentName}' does not exist.`);
49
+ return;
50
+ }
51
+
52
+
53
+ let componentContent = fs.readFileSync(componentPath, 'utf-8');
54
+ let existingProperties = extractProperties(componentContent);
55
+
56
+ addProperties.forEach(property => {
57
+ if (!existingProperties.includes(property)) {
58
+ existingProperties.push(property);
59
+ console.log(`Property '${property}' added to component '${componentName}'.`);
60
+ // Verificar si existen getters y setters para la propiedad y agregarlos si es necesario
61
+ componentContent = addGetterSetterIfNeeded(componentContent, property);
62
+ } else {
63
+ console.log(`Property '${property}' already exists in component '${componentName}'.`);
64
+ }
65
+ });
66
+
67
+ removeProperties.forEach(property => {
68
+ if (existingProperties.includes(property)) {
69
+ existingProperties = existingProperties.filter(prop => prop !== property);
70
+ console.log(`Property '${property}' removed from component '${componentName}'.`);
71
+ componentContent = removePropertyIfNeeded(componentContent, property);
72
+ } else {
73
+ console.log(`Property '${property}' does not exist in component '${componentName}'.`);
74
+ }
75
+ });
76
+
77
+ componentContent = updateComponentProps(componentContent, existingProperties);
78
+ fs.writeFileSync(componentPath, componentContent);
79
+ console.log(`Component '${componentName}' modified successfully.`);
80
+ }
81
+
82
+ function isValidComponentName(componentName) {
83
+ const regex = /^[a-zA-Z][a-zA-Z0-9]*$/;
84
+ return regex.test(componentName);
85
+ }
86
+
87
+ function extractProperties(componentContent) {
88
+ const propRegex = /this\.debuggerProps\s*=\s*\[(.*?)\];/s;
89
+ const match = componentContent.match(propRegex);
90
+ if (match && match[1]) {
91
+ return match[1].split(',').map(prop => prop.trim().replace(/['"]/g, ''));
92
+ }
93
+ return [];
94
+ }
95
+
96
+ function addGetterSetterIfNeeded(componentContent, property) {
97
+ // Verificar si existen getters y setters para la propiedad
98
+ const hasGetterSetter = hasGetterSetterForProperty(componentContent, property);
99
+ if (!hasGetterSetter) {
100
+ // Agregar getters y setters al componente
101
+ componentContent = addGetterSetter(componentContent, property);
102
+ }
103
+ return componentContent;
104
+ }
105
+
106
+ function removePropertyIfNeeded(componentContent, property) {
107
+ // Verificar si no está en debuggerProps pero tiene getters y setters
108
+ const propInDebuggerProps = componentContent.includes(`'${property}'`);
109
+ const hasGetterSetter = hasGetterSetterForProperty(componentContent, property);
110
+ if (!propInDebuggerProps && hasGetterSetter) {
111
+ // Eliminar los getters y setters del componente
112
+ componentContent = removeGetterSetter(componentContent, property);
113
+ }
114
+ return componentContent;
115
+ }
116
+
117
+ function hasGetterSetterForProperty(componentContent, property) {
118
+ const getterRegex = new RegExp(`get ${property}\\(\\)\\s*{`);
119
+ const setterRegex = new RegExp(`set ${property}\\([^)]+\\)\\s*{`);
120
+ return getterRegex.test(componentContent) && setterRegex.test(componentContent);
121
+ }
122
+
123
+ function addGetterSetter(componentContent, property) {
124
+ // Agregar los métodos getters y setters al componente
125
+ const getterSetterCode = `
126
+ get ${property}() {
127
+ return this._${property};
128
+ }
129
+
130
+ set ${property}(value) {
131
+ this._${property} = value;
132
+ }\n\n`;
133
+
134
+ const classEndIndex = componentContent.lastIndexOf('}');
135
+ if (classEndIndex !== -1) {
136
+ const updatedComponentContent = componentContent.slice(0, classEndIndex) + getterSetterCode + componentContent.slice(classEndIndex);
137
+ return updatedComponentContent;
138
+ }
139
+ return componentContent;
140
+ }
141
+
142
+ function removeGetterSetter(componentContent, property) {
143
+ // Eliminar los métodos getters y setters del componente
144
+ const getterSetterRegex = new RegExp(`get ${property}\\(\\)\\s*{[^}]+}\\s*set ${property}\\([^)]+\\)\\s*{[^}]+}`);
145
+ return componentContent.replace(getterSetterRegex, '');
146
+ }
147
+
148
+ function updateComponentProps(componentContent, properties) {
149
+ const updatedPropsList = properties.map(prop => `'${prop}'`).join(', ');
150
+ const propIndex = componentContent.indexOf('this.debuggerProps = [');
151
+ const propsStartIndex = componentContent.indexOf('[', propIndex);
152
+ const propsEndIndex = componentContent.indexOf(']', propIndex);
153
+ const updatedComponentContent = `${componentContent.slice(0, propsStartIndex + 1)}${updatedPropsList}${componentContent.slice(propsEndIndex)}`;
154
+ return updatedComponentContent;
155
+ }
156
+
157
+ export default modifyComponent;
158
+
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "slicejs-cli",
3
+ "version": "1.0.0",
4
+ "description": "Command client for developing web applications with Slice.js",
5
+ "main": "client.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "postinstall": "node postInstall.js"
9
+ },
10
+ "keywords": [
11
+ "framework",
12
+ "web",
13
+ "client",
14
+ "cli"
15
+ ],
16
+ "author": "vkneider",
17
+ "type": "module",
18
+ "license": "ISC",
19
+ "dependencies": {
20
+ "commander": "^12.0.0",
21
+ "fs-extra": "^11.2.0"
22
+ }
23
+ }
package/postInstall.js ADDED
@@ -0,0 +1,27 @@
1
+ import fs from 'fs';
2
+
3
+ // Ruta al package.json del proyecto que está instalando tu paquete
4
+ const projectPackageJsonPath = './node_modules/.bin/package.json';
5
+
6
+ // Lee el contenido del package.json del proyecto
7
+ fs.promises.readFile(projectPackageJsonPath, 'utf8')
8
+ .then(data => {
9
+ // Convierte el contenido del archivo a un objeto JSON
10
+ const projectPackageJson = JSON.parse(data);
11
+
12
+ // Agrega los comandos personalizados a los scripts del proyecto
13
+ projectPackageJson.scripts = projectPackageJson.scripts || {};
14
+ projectPackageJson.scripts['slice:init'] = 'node node_modules/slice-cli/client.js init';
15
+ projectPackageJson.scripts['slice:create'] = 'node node_modules/slice-cli/client.js create';
16
+ projectPackageJson.scripts['slice:modify'] = 'node node_modules/slice-cli/client.js modify';
17
+ projectPackageJson.scripts['slice:list'] = 'node node_modules/slice-cli/client.js list';
18
+
19
+ // Escribe el nuevo contenido en el package.json del proyecto
20
+ return fs.promises.writeFile(projectPackageJsonPath, JSON.stringify(projectPackageJson, null, 2), 'utf8');
21
+ })
22
+ .then(() => {
23
+ console.log('Comandos agregados al package.json del proyecto.');
24
+ })
25
+ .catch(err => {
26
+ console.error('Error:', err);
27
+ });