@icarusmx/creta 1.1.1 → 1.2.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.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // LECCIÓN 7: Un objeto es un conjunto de datos y procedimientos que operan sobre esos datos
4
- // Enfoque práctico: Comparación entre código procedural vs orientado a objetos
4
+ // Enfoque conceptual: Entender qué es un dato, qué es un procedimiento, y por qué están unidos
5
5
 
6
6
  import { createInterface } from 'readline'
7
7
 
@@ -16,369 +16,277 @@ export class Lesson7ObjectDefinition {
16
16
  async start() {
17
17
  await this.waitForEnter("\nPresiona Enter para comenzar...")
18
18
 
19
- await this.practicalExercise()
19
+ await this.conceptualExercise()
20
20
  await this.conclusion()
21
21
 
22
22
  this.rl.close()
23
23
  }
24
24
 
25
- async practicalExercise() {
25
+ async conceptualExercise() {
26
26
  console.clear()
27
- console.log("Exploraremos qué ES un objeto comparando dos enfoques:")
28
- console.log("1. Datos separados + funciones sueltas")
29
- console.log("2. Objeto = datos + procedimientos unidos")
27
+ console.log("Para entender qué ES un objeto,")
28
+ console.log("primero debemos entender dos conceptos fundamentales:")
29
+ console.log("")
30
+ console.log("1. ¿Qué es un DATO?")
31
+ console.log("2. ¿Qué es un PROCEDIMIENTO?")
30
32
 
31
33
  await this.waitForEnter("\nPresiona Enter para continuar...")
32
34
 
33
- await this.step1_ProceduralApproach()
34
- await this.step2_ObjectOrientedApproach()
35
- await this.step3_ComparisonAndBenefits()
35
+ await this.step1_WhatIsData()
36
+ await this.step2_WhatIsProcedure()
37
+ await this.step3_WhyTogether()
38
+ await this.step4_ObjectDefinition()
36
39
  }
37
40
 
38
- async step1_ProceduralApproach() {
41
+ async step1_WhatIsData() {
39
42
  console.clear()
40
- console.log("🔧 Enfoque Procedural: Datos Separados")
43
+ console.log("¿Qué es un DATO?")
41
44
  console.log("=" .repeat(50))
42
45
 
43
- console.log("\n💳 Ejemplo: Sistema de Cuenta Bancaria")
44
- console.log("\n📊 Datos sueltos:")
46
+ console.log("\n🔍 Un dato es información que describe el estado de algo")
45
47
 
46
- const dataCode = `// Datos de la cuenta
47
- let accountNumber = "001-234567"
48
- let ownerName = "María González"
49
- let balance = 5000
50
- let isActive = true`
48
+ await this.waitForEnter("\nPresiona Enter para ver ejemplos conceptuales...")
51
49
 
52
- this.printCodeWithColors("Variables globales", dataCode)
50
+ console.log("\n📦 Ejemplos de datos:")
51
+ console.log("")
52
+ console.log("• El saldo de una cuenta")
53
+ console.log(" → Este número describe cuánto dinero hay")
54
+ console.log("")
55
+ console.log("• El nombre de un usuario")
56
+ console.log(" → Este texto describe quién es")
57
+ console.log("")
58
+ console.log("• El estado de una puerta (abierta/cerrada)")
59
+ console.log(" → Este valor describe la condición actual")
60
+ console.log("")
61
+ console.log("• La lista de productos en un carrito")
62
+ console.log(" → Esta colección describe qué contiene")
53
63
 
54
- await this.waitForEnter("\nPresiona Enter para ver las funciones...")
55
-
56
- console.log("\n⚙️ Funciones separadas que operan sobre esos datos:")
64
+ await this.waitForEnter("\nPresiona Enter para continuar...")
57
65
 
58
- const functionsCode = `function deposit(amount) {
59
- if (!isActive) {
60
- console.log("Cuenta inactiva")
61
- return false
62
- }
63
- if (amount <= 0) {
64
- console.log("Cantidad inválida")
65
- return false
66
- }
67
- balance += amount
68
- return true
69
- }
66
+ console.log("\n💡 Característica clave de los datos:")
67
+ console.log("Los datos DESCRIBEN, no HACEN nada por sí mismos")
68
+ console.log("")
69
+ console.log("El saldo de 5000 no se deposita solo")
70
+ console.log("El nombre 'María' no se cambia solo")
71
+ console.log("La puerta cerrada no se abre sola")
72
+ console.log("")
73
+ console.log("Los datos son PASIVOS. Solo representan información.")
70
74
 
71
- function withdraw(amount) {
72
- if (!isActive) return false
73
- if (amount <= 0) return false
74
- if (amount > balance) {
75
- console.log("Fondos insuficientes")
76
- return false
75
+ await this.waitForEnter("\nPresiona Enter para ver qué es un procedimiento...")
77
76
  }
78
- balance -= amount
79
- return true
80
- }
81
-
82
- function getBalance() {
83
- return isActive ? balance : 0
84
- }
85
-
86
- function deactivate() {
87
- isActive = false
88
- }`
89
-
90
- this.printCodeWithColors("Funciones sueltas", functionsCode)
91
-
92
- await this.waitForEnter("\nPresiona Enter para ver el problema...")
93
77
 
78
+ async step2_WhatIsProcedure() {
94
79
  console.clear()
95
- console.log(" Problemas del enfoque procedural:")
80
+ console.log("¿Qué es un PROCEDIMIENTO?")
96
81
  console.log("=" .repeat(50))
97
82
 
98
- console.log("\n1️⃣ Datos expuestos globalmente:")
99
- console.log(" • Cualquier código puede modificar 'balance' directamente")
100
- console.log(" • No hay protección de los datos")
101
-
102
- console.log("\n2️⃣ Funciones no están vinculadas a datos:")
103
- console.log(" • deposit() asume que 'balance' existe")
104
- console.log(" • ¿Qué pasa si necesitamos múltiples cuentas?")
105
-
106
- console.log("\n3️⃣ Difícil de escalar:")
83
+ console.log("\n🔍 Un procedimiento es una secuencia de pasos que MODIFICA o LEE datos")
107
84
 
108
- const problemCode = `// ¿Cómo manejamos dos cuentas?
109
- let balance1 = 5000
110
- let balance2 = 3000
111
- let accountNumber1 = "001"
112
- let accountNumber2 = "002"
85
+ await this.waitForEnter("\nPresiona Enter para ver ejemplos conceptuales...")
113
86
 
114
- // Las funciones solo trabajan con una cuenta
115
- deposit(100) // ¿A cuál cuenta?`
87
+ console.log("\n⚙️ Ejemplos de procedimientos:")
88
+ console.log("")
89
+ console.log("• Depositar dinero en una cuenta")
90
+ console.log(" → MODIFICA el dato 'saldo' sumándole una cantidad")
91
+ console.log("")
92
+ console.log("• Cambiar el nombre de un usuario")
93
+ console.log(" → MODIFICA el dato 'nombre' asignándole un nuevo valor")
94
+ console.log("")
95
+ console.log("• Abrir una puerta")
96
+ console.log(" → MODIFICA el dato 'estado' de 'cerrada' a 'abierta'")
97
+ console.log("")
98
+ console.log("• Consultar el saldo")
99
+ console.log(" → LEE el dato 'saldo' sin modificarlo")
116
100
 
117
- this.printCodeWithColors("Escalabilidad problemática", problemCode)
101
+ await this.waitForEnter("\nPresiona Enter para continuar...")
118
102
 
119
- await this.waitForEnter("\nPresiona Enter para ver la solución...")
103
+ console.log("\n💡 Característica clave de los procedimientos:")
104
+ console.log("Los procedimientos son ACTIVOS. Hacen algo con los datos.")
105
+ console.log("")
106
+ console.log("Un procedimiento sin datos no tiene sentido:")
107
+ console.log(" • ¿Depositar en dónde?")
108
+ console.log(" • ¿Cambiar qué nombre?")
109
+ console.log(" • ¿Abrir cuál puerta?")
110
+ console.log("")
111
+ console.log("Los procedimientos NECESITAN datos para operar")
112
+
113
+ await this.waitForEnter("\nPresiona Enter para ver por qué están unidos...")
120
114
  }
121
115
 
122
- async step2_ObjectOrientedApproach() {
116
+ async step3_WhyTogether() {
123
117
  console.clear()
124
- console.log(" Enfoque Orientado a Objetos: Datos + Procedimientos")
118
+ console.log("¿Por qué DATOS y PROCEDIMIENTOS están JUNTOS?")
125
119
  console.log("=" .repeat(50))
126
120
 
127
- console.log("\n💡 Un objeto AGRUPA datos y procedimientos")
128
- console.log("Los datos quedan unidos con sus procedimientos")
121
+ console.log("\n🤔 La pregunta fundamental:")
122
+ console.log("Si los datos describen el estado,")
123
+ console.log("y los procedimientos modifican ese estado,")
124
+ console.log("¿no deberían estar relacionados?")
129
125
 
130
- await this.waitForEnter("\nPresiona Enter para ver el código...")
126
+ await this.waitForEnter("\nPresiona Enter para ver la respuesta...")
131
127
 
132
- const objectCode = `class BankAccount {
133
- // Constructor: inicializa los DATOS del objeto
134
- constructor(accountNumber, ownerName, initialBalance) {
135
- this.accountNumber = accountNumber
136
- this.ownerName = ownerName
137
- this.balance = initialBalance
138
- this.isActive = true
139
- }
128
+ console.log("\n✨ La respuesta: EL OBJETO")
129
+ console.log("")
130
+ console.log("Un objeto es la unión natural de:")
131
+ console.log(" • Los datos que describen SU estado")
132
+ console.log(" • Los procedimientos que operan sobre ESE estado")
140
133
 
141
- // PROCEDIMIENTOS que operan sobre ESTOS datos específicos
142
- deposit(amount) {
143
- if (!this.isActive) {
144
- console.log("Cuenta inactiva")
145
- return false
146
- }
147
- if (amount <= 0) {
148
- console.log("Cantidad inválida")
149
- return false
150
- }
151
- this.balance += amount
152
- return true
153
- }
134
+ await this.waitForEnter("\nPresiona Enter para ver un ejemplo conceptual...")
154
135
 
155
- withdraw(amount) {
156
- if (!this.isActive) return false
157
- if (amount <= 0) return false
158
- if (amount > this.balance) {
159
- console.log("Fondos insuficientes")
160
- return false
161
- }
162
- this.balance -= amount
163
- return true
164
- }
136
+ console.log("\n📍 Ejemplo conceptual: Una cuenta bancaria")
137
+ console.log("")
138
+ console.log("┌─────────────────────────────────────┐")
139
+ console.log("│ OBJETO: Cuenta │")
140
+ console.log("├─────────────────────────────────────┤")
141
+ console.log("│ DATOS (estado): │")
142
+ console.log("│ • saldo │")
143
+ console.log("│ • titular │")
144
+ console.log("│ • activa │")
145
+ console.log("├─────────────────────────────────────┤")
146
+ console.log("│ PROCEDIMIENTOS (operaciones): │")
147
+ console.log("│ • depositar │")
148
+ console.log("│ • retirar │")
149
+ console.log("│ • consultarSaldo │")
150
+ console.log("│ • desactivar │")
151
+ console.log("└─────────────────────────────────────┘")
165
152
 
166
- getBalance() {
167
- return this.isActive ? this.balance : 0
168
- }
153
+ await this.waitForEnter("\nPresiona Enter para continuar...")
169
154
 
170
- deactivate() {
171
- this.isActive = false
172
- }
155
+ console.log("\n🔗 La relación esencial:")
156
+ console.log("")
157
+ console.log("• 'depositar' opera sobre 'saldo'")
158
+ console.log(" → No tiene sentido depositar sin un saldo que modificar")
159
+ console.log("")
160
+ console.log("• 'desactivar' opera sobre 'activa'")
161
+ console.log(" → No tiene sentido desactivar sin un estado que cambiar")
162
+ console.log("")
163
+ console.log("• 'consultarSaldo' lee 'saldo'")
164
+ console.log(" → No tiene sentido consultar sin un saldo que leer")
173
165
 
174
- getAccountInfo() {
175
- return {
176
- number: this.accountNumber,
177
- owner: this.ownerName,
178
- balance: this.getBalance(),
179
- status: this.isActive ? 'Activa' : 'Inactiva'
180
- }
181
- }
182
- }`
166
+ await this.waitForEnter("\nPresiona Enter para continuar...")
183
167
 
184
- this.printCodeWithColors("Clase BankAccount", objectCode)
168
+ console.log("\n💭 La intuición:")
169
+ console.log("Los datos y los procedimientos están ATADOS entre sí")
170
+ console.log("")
171
+ console.log("No existen datos sin procedimientos que los manipulen")
172
+ console.log("No existen procedimientos sin datos sobre los que operen")
173
+ console.log("")
174
+ console.log("Esta unión es lo que llamamos: OBJETO")
185
175
 
186
- await this.waitForEnter("\nPresiona Enter para ver múltiples instancias...")
176
+ await this.waitForEnter("\nPresiona Enter para ver la definición completa...")
177
+ }
187
178
 
179
+ async step4_ObjectDefinition() {
188
180
  console.clear()
189
- console.log("🎯 Múltiples objetos = Múltiples conjuntos de datos")
181
+ console.log("La Definición Completa")
190
182
  console.log("=" .repeat(50))
191
183
 
192
- const usageCode = `// Crear múltiples cuentas es simple
193
- const account1 = new BankAccount("001-234567", "María González", 5000)
194
- const account2 = new BankAccount("001-789012", "Juan Pérez", 3000)
184
+ console.log("\n💎 'Un objeto es un conjunto de datos y procedimientos")
185
+ console.log(" que operan sobre esos datos'")
195
186
 
196
- // Cada objeto tiene SUS PROPIOS datos
197
- account1.deposit(500)
198
- account2.withdraw(200)
187
+ await this.waitForEnter("\nPresiona Enter para desglosar la definición...")
199
188
 
200
- console.log(account1.getBalance()) // 5500
201
- console.log(account2.getBalance()) // 2800
189
+ console.log("\n🔍 Desglose de la definición:")
190
+ console.log("")
191
+ console.log("1️⃣ 'Un objeto es un CONJUNTO'")
192
+ console.log(" → No es un solo elemento, es una agrupación")
193
+ console.log(" → Datos y procedimientos forman una unidad")
194
+ console.log("")
202
195
 
203
- // Los procedimientos operan sobre los datos del objeto específico
204
- account1.deactivate()
205
- console.log(account1.isActive) // false
206
- console.log(account2.isActive) // true ← No afectado`
196
+ await this.waitForEnter("Presiona Enter para continuar...")
207
197
 
208
- this.printCodeWithColors("Uso del objeto", usageCode)
198
+ console.log("2️⃣ '...de DATOS'")
199
+ console.log(" → Información que describe el estado del objeto")
200
+ console.log(" → Valores que representan lo que el objeto 'es'")
201
+ console.log(" → PASIVOS: no hacen nada por sí mismos")
202
+ console.log("")
209
203
 
210
- await this.waitForEnter("\nPresiona Enter para ver las ventajas...")
211
- }
204
+ await this.waitForEnter("Presiona Enter para continuar...")
212
205
 
213
- async step3_ComparisonAndBenefits() {
214
- console.clear()
215
- console.log("📊 Comparación Directa")
216
- console.log("=" .repeat(50))
206
+ console.log("3️⃣ '...y PROCEDIMIENTOS'")
207
+ console.log(" → Secuencias de pasos que modifican o leen datos")
208
+ console.log(" Operaciones que representan lo que el objeto 'hace'")
209
+ console.log(" → ACTIVOS: transforman el estado")
210
+ console.log("")
217
211
 
218
- console.log("\n🔴 Enfoque Procedural:")
219
- console.log(" Datos: let balance = 5000")
220
- console.log(" Procedimiento: function deposit(amount) { balance += amount }")
221
- console.log(" ❌ Separados, sin relación formal")
212
+ await this.waitForEnter("Presiona Enter para continuar...")
222
213
 
223
- console.log("\n🟢 Enfoque Orientado a Objetos:")
224
- console.log(" Datos: this.balance = 5000")
225
- console.log(" Procedimiento: deposit(amount) { this.balance += amount }")
226
- console.log(" Unidos en el MISMO objeto")
214
+ console.log("4️⃣ '...que OPERAN SOBRE esos datos'")
215
+ console.log(" Los procedimientos NO operan sobre datos ajenos")
216
+ console.log(" Solo modifican/leen los datos del MISMO objeto")
217
+ console.log(" Esta es la relación fundamental")
227
218
 
228
- await this.waitForEnter("\nPresiona Enter para ver ejemplo visual...")
219
+ await this.waitForEnter("\nPresiona Enter para ver por qué esto importa...")
229
220
 
230
221
  console.clear()
231
- console.log("🎨 Visualización del Concepto")
222
+ console.log("¿Por qué esta definición es fundamental?")
232
223
  console.log("=" .repeat(50))
233
224
 
234
- console.log("\n┌─────────────────────────────────────┐")
235
- console.log("│ OBJETO: account1 │")
236
- console.log("├─────────────────────────────────────┤")
237
- console.log("│ DATOS:")
238
- console.log("│ • accountNumber = \"001-234567\" │")
239
- console.log("│ • ownerName = \"María González\" │")
240
- console.log("balance = 5000 │")
241
- console.log("│ • isActive = true │")
242
- console.log("├─────────────────────────────────────┤")
243
- console.log("│ PROCEDIMIENTOS:")
244
- console.log("│ • deposit(amount) │")
245
- console.log("│ • withdraw(amount) │")
246
- console.log("getBalance() │")
247
- console.log("│ • deactivate()")
248
- console.log("└─────────────────────────────────────┘")
249
-
250
- console.log("\n📌 Nota clave:")
251
- console.log("Los procedimientos SOLO operan sobre los datos de ESTE objeto")
252
- console.log("account1.deposit() modifica account1.balance")
253
- console.log("account2.deposit() modifica account2.balance")
254
-
255
- await this.waitForEnter("\nPresiona Enter para ver otro ejemplo...")
256
-
257
- console.clear()
258
- console.log("🎮 Ejemplo 2: Sistema de Carrito de Compras")
259
- console.log("=" .repeat(50))
260
-
261
- const cartCode = `class ShoppingCart {
262
- // DATOS del carrito
263
- constructor(userId) {
264
- this.userId = userId
265
- this.items = []
266
- this.totalAmount = 0
267
- }
268
-
269
- // PROCEDIMIENTOS que operan sobre estos datos
270
- addItem(product, quantity) {
271
- const item = { product, quantity, price: product.price * quantity }
272
- this.items.push(item)
273
- this.totalAmount += item.price
274
- }
275
-
276
- removeItem(productId) {
277
- const itemIndex = this.items.findIndex(i => i.product.id === productId)
278
- if (itemIndex > -1) {
279
- this.totalAmount -= this.items[itemIndex].price
280
- this.items.splice(itemIndex, 1)
281
- }
282
- }
283
-
284
- getTotal() {
285
- return this.totalAmount
286
- }
287
-
288
- getItemCount() {
289
- return this.items.reduce((sum, item) => sum + item.quantity, 0)
290
- }
291
-
292
- clear() {
293
- this.items = []
294
- this.totalAmount = 0
295
- }
296
- }
297
-
298
- // Uso
299
- const cart = new ShoppingCart("user123")
300
- cart.addItem({ id: 1, name: "Libro", price: 299 }, 2)
301
- cart.addItem({ id: 2, name: "Café", price: 85 }, 1)
302
-
303
- console.log(cart.getTotal()) // 683
304
- console.log(cart.getItemCount()) // 3`
305
-
306
- this.printCodeWithColors("Clase ShoppingCart", cartCode)
225
+ console.log("\n🎯 Sin entender qué ES un objeto,")
226
+ console.log(" no podemos entender los otros 6 enunciados:")
227
+ console.log("")
228
+ console.log("• Enunciado 1: ¿Cómo descomponemos en objetos")
229
+ console.log(" si no sabemos qué es un objeto?")
230
+ console.log("")
231
+ console.log("• Enunciado 2: ¿Cómo interactúan los objetos")
232
+ console.log(" si no entendemos su naturaleza?")
233
+ console.log("")
234
+ console.log("• Enunciado 3: ¿Por qué solicitudes son la única forma")
235
+ console.log(" de invocar procedimientos?")
236
+ console.log("")
237
+ console.log("• Enunciado 4: ¿Qué firmas tienen las operaciones")
238
+ console.log(" (los procedimientos) del objeto?")
239
+ console.log("")
240
+ console.log("• Enunciado 5: ¿Qué es la interfaz del objeto")
241
+ console.log(" sino el conjunto de sus operaciones?")
242
+ console.log("")
243
+ console.log(" Enunciado 6: ¿Por qué diseñar las interfaces primero")
244
+ console.log(" si no sabemos que exponen operaciones?")
307
245
 
308
246
  await this.waitForEnter("\nPresiona Enter para la conclusión...")
309
247
  }
310
248
 
311
249
  async conclusion() {
312
250
  console.clear()
313
- console.log("🎓 Conclusión: Definición del Objeto")
251
+ console.log("🎓 Conclusión: La Naturaleza del Objeto")
314
252
  console.log("=" .repeat(50))
315
253
 
316
- console.log("\n💎 Enunciado fundamental:")
317
- console.log("'Un objeto es un conjunto de datos y procedimientos")
318
- console.log(" que operan sobre esos datos'")
319
-
320
- console.log("\n🔍 Desglose:")
321
- console.log("1️⃣ CONJUNTO agrupación unificada")
322
- console.log("2️⃣ DATOS → información del objeto (this.balance, this.name)")
323
- console.log("3️⃣ PROCEDIMIENTOS funciones del objeto (deposit, withdraw)")
324
- console.log("4️⃣ OPERAN SOBRE → los procedimientos modifican/leen los datos")
325
-
326
- console.log("\n✅ Ventajas demostradas:")
327
- console.log(" Encapsulación: datos y operaciones juntos")
328
- console.log("• Modularidad: cada objeto es independiente")
329
- console.log(" Escalabilidad: múltiples instancias fácilmente")
330
- console.log("• Organización: responsabilidades claras")
331
-
332
- console.log("\n📚 Ejemplos vistos:")
333
- console.log("• BankAccount: balance + deposit/withdraw")
334
- console.log("• ShoppingCart: items + addItem/removeItem")
335
-
336
- console.log("\n🔗 Conexión con otros enunciados:")
337
- console.log(" Enunciado 1: Estos objetos son los que descomponemos del sistema")
338
- console.log("• Enunciado 2: Estos objetos interactúan mediante solicitudes")
339
- console.log(" Enunciado 5: La interfaz expone los procedimientos disponibles")
340
-
341
- console.log("\n💭 Reflexión:")
342
- console.log("Antes de diseñar cómo los objetos interactúan,")
343
- console.log("debemos entender QUÉ ES un objeto:")
344
- console.log("datos + procedimientos, unidos e inseparables.")
254
+ console.log("\n📌 Lo que aprendimos:")
255
+ console.log("")
256
+ console.log("1. Un DATO describe el estado (información pasiva)")
257
+ console.log("2. Un PROCEDIMIENTO modifica o lee datos (acción activa)")
258
+ console.log("3. Un OBJETO une datos con sus procedimientos")
259
+ console.log("4. Esta unión no es arbitraria, es esencial")
260
+
261
+ console.log("\n💡 La intuición central:")
262
+ console.log("")
263
+ console.log("Los datos no existen aislados")
264
+ console.log("Los procedimientos no operan en el vacío")
265
+ console.log("El objeto es la unión natural de ambos")
266
+
267
+ console.log("\n🔗 Conexión con el resto del paradigma:")
268
+ console.log("")
269
+ console.log("Ahora que sabemos QUÉ es un objeto,")
270
+ console.log("podemos entender:")
271
+ console.log(" Cómo descomponerlos (enunciado 1)")
272
+ console.log(" Cómo se comunican (enunciados 2, 3)")
273
+ console.log(" • Cómo se diseñan (enunciados 4, 5, 6)")
274
+
275
+ console.log("\n💭 Reflexión final:")
276
+ console.log("")
277
+ console.log("Antes de diseñar sistemas orientados a objetos,")
278
+ console.log("debemos entender la naturaleza fundamental del objeto:")
279
+ console.log("")
280
+ console.log(" 'Un conjunto de datos y procedimientos")
281
+ console.log(" que operan sobre esos datos'")
345
282
 
346
283
  await this.waitForEnter("\n✨ ¡Lección 7 completada! Presiona Enter para continuar...")
347
284
  }
348
285
 
349
- formatCode(code) {
350
- const colors = {
351
- keyword: '\x1b[35m',
352
- property: '\x1b[32m',
353
- string: '\x1b[33m',
354
- comment: '\x1b[90m',
355
- reset: '\x1b[0m'
356
- }
357
-
358
- return code
359
- .replace(/\b(class|constructor|return|if|const|let|new|function)\b/g, `${colors.keyword}$1${colors.reset}`)
360
- .replace(/\bthis\./g, `${colors.property}this.${colors.reset}`)
361
- .replace(/'([^']*)'/g, `${colors.string}'$1'${colors.reset}`)
362
- .replace(/"([^"]*)"/g, `${colors.string}"$1"${colors.reset}`)
363
- .replace(/\/\/.*$/gm, `${colors.comment}$&${colors.reset}`)
364
- }
365
-
366
- printCodeWithColors(title, code) {
367
- console.log(`\n${title}`)
368
- console.log("━".repeat(50))
369
-
370
- code.split('\n').forEach(line => {
371
- const formattedLine = this.formatCode(line)
372
- console.log(formattedLine)
373
- })
374
-
375
- console.log("━".repeat(50))
376
- }
377
-
378
286
  async waitForEnter(message) {
379
287
  return new Promise((resolve) => {
380
288
  this.rl.question(message, () => {
381
- console.log("\n\n")
289
+ console.log("\n")
382
290
  resolve()
383
291
  })
384
292
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@icarusmx/creta",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "Salgamos de este laberinto.",
5
5
  "type": "module",
6
6
  "bin": {