@davidbc01/telar 0.1.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.
package/dist/tipos.js ADDED
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ // ---
3
+ // tipos.ts
4
+ // Define el vocabulario de todo el compilador de Telar.
5
+ // Aquí están los tokens, los nodos del árbol, y los errores.
6
+ // ---
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.TelarError = exports.TipoToken = void 0;
9
+ // --- TOKENS ---
10
+ // Un token es la unidad mínima de significado.
11
+ // El lexer convierte el texto crudo en una lista de tokens.
12
+ var TipoToken;
13
+ (function (TipoToken) {
14
+ // Palabras clave - estructura
15
+ TipoToken["Aplicacion"] = "aplicacion";
16
+ TipoToken["Pagina"] = "pagina";
17
+ TipoToken["Datos"] = "datos";
18
+ TipoToken["En"] = "en";
19
+ // Palabras clave - contenido
20
+ TipoToken["Titulo"] = "titulo";
21
+ TipoToken["Descripcion"] = "descripcion";
22
+ TipoToken["Mostrar"] = "mostrar";
23
+ TipoToken["Boton"] = "boton";
24
+ TipoToken["Campo"] = "campo";
25
+ // Palabras clave - lógica
26
+ TipoToken["Si"] = "si";
27
+ TipoToken["SiNo"] = "si_no";
28
+ TipoToken["El"] = "el";
29
+ TipoToken["La"] = "la";
30
+ TipoToken["Esta"] = "esta";
31
+ TipoToken["Es"] = "es";
32
+ TipoToken["Hay"] = "hay";
33
+ TipoToken["Falla"] = "falla";
34
+ TipoToken["Funciona"] = "funciona";
35
+ // Palabras clave - modificadores
36
+ TipoToken["Maximo"] = "maximo";
37
+ TipoToken["Ordenados"] = "ordenados";
38
+ TipoToken["Filtrados"] = "filtrados";
39
+ TipoToken["Por"] = "por";
40
+ TipoToken["Recientes"] = "recientes";
41
+ TipoToken["Para"] = "para";
42
+ TipoToken["Movil"] = "movil";
43
+ TipoToken["Cache"] = "cache";
44
+ TipoToken["Reintentar"] = "reintentar";
45
+ TipoToken["Minutos"] = "minutos";
46
+ TipoToken["Horas"] = "horas";
47
+ TipoToken["Segundos"] = "segundos";
48
+ TipoToken["Optimizar"] = "optimizar";
49
+ TipoToken["Ir"] = "ir";
50
+ TipoToken["Hacer"] = "hacer";
51
+ TipoToken["Tipo"] = "tipo";
52
+ TipoToken["Idioma"] = "idioma";
53
+ // Valores
54
+ TipoToken["Texto"] = "TEXTO";
55
+ TipoToken["Numero"] = "NUMERO";
56
+ TipoToken["Nombre"] = "NOMBRE";
57
+ TipoToken["Identificador"] = "IDENTIFICADOR";
58
+ // Puntuación
59
+ TipoToken["DosPuntos"] = ":";
60
+ TipoToken["Mayor"] = ">";
61
+ TipoToken["Igual"] = "=";
62
+ // Especiales
63
+ TipoToken["NuevaLinea"] = "NUEVA_LINEA";
64
+ TipoToken["Indentacion"] = "INDENTACION";
65
+ TipoToken["FinIndentacion"] = "FIN_INDENTACION";
66
+ TipoToken["FinArchivo"] = "FIN_ARCHIVO";
67
+ TipoToken["Desconocido"] = "DESCONOCIDO";
68
+ })(TipoToken || (exports.TipoToken = TipoToken = {}));
69
+ class TelarError extends Error {
70
+ constructor(error) {
71
+ super(error.mensaje);
72
+ this.linea = error.linea;
73
+ this.columna = error.columna;
74
+ this.sugerencia = error.sugerencia;
75
+ this.name = "TelarError";
76
+ }
77
+ // Formatea el error para mostrarlo en la terminal
78
+ formatear(nombreArchivo) {
79
+ const ubicacion = `${nombreArchivo}:${this.linea}:${this.columna}`;
80
+ let salida = `\n✗ ${ubicacion}: ${this.message}\n`;
81
+ if (this.sugerencia) {
82
+ salida += ` Sugerencia: ${this.sugerencia}\n`;
83
+ }
84
+ return salida;
85
+ }
86
+ }
87
+ exports.TelarError = TelarError;
88
+ //# sourceMappingURL=tipos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tipos.js","sourceRoot":"","sources":["../src/tipos.ts"],"names":[],"mappings":";AAAA,MAAM;AACN,WAAW;AACX,wDAAwD;AACxD,6DAA6D;AAC7D,MAAM;;;AAGN,iBAAiB;AACjB,+CAA+C;AAC/C,4DAA4D;AAE5D,IAAY,SA6DX;AA7DD,WAAY,SAAS;IACjB,8BAA8B;IAC9B,sCAAyB,CAAA;IACzB,8BAAiB,CAAA;IACjB,4BAAe,CAAA;IACf,sBAAS,CAAA;IAET,6BAA6B;IAC7B,8BAAiB,CAAA;IACjB,wCAA2B,CAAA;IAC3B,gCAAmB,CAAA;IACnB,4BAAe,CAAA;IACf,4BAAe,CAAA;IAEf,0BAA0B;IAC1B,sBAAS,CAAA;IACT,2BAAc,CAAA;IACd,sBAAS,CAAA;IACT,sBAAS,CAAA;IACT,0BAAa,CAAA;IACb,sBAAS,CAAA;IACT,wBAAW,CAAA;IACX,4BAAe,CAAA;IACf,kCAAqB,CAAA;IAErB,iCAAiC;IACjC,8BAAiB,CAAA;IACjB,oCAAuB,CAAA;IACvB,oCAAuB,CAAA;IACvB,wBAAW,CAAA;IACX,oCAAuB,CAAA;IACvB,0BAAa,CAAA;IACb,4BAAe,CAAA;IACf,4BAAe,CAAA;IACf,sCAAyB,CAAA;IACzB,gCAAmB,CAAA;IACnB,4BAAe,CAAA;IACf,kCAAqB,CAAA;IACrB,oCAAuB,CAAA;IACvB,sBAAS,CAAA;IACT,4BAAe,CAAA;IACf,0BAAa,CAAA;IACb,8BAAiB,CAAA;IAEjB,UAAU;IACV,4BAAe,CAAA;IACf,8BAAiB,CAAA;IACjB,8BAAiB,CAAA;IACjB,4CAA+B,CAAA;IAE/B,aAAa;IACb,4BAAe,CAAA;IACf,wBAAW,CAAA;IACX,wBAAW,CAAA;IAEX,aAAa;IACb,uCAA0B,CAAA;IAC1B,wCAA2B,CAAA;IAC3B,+CAAkC,CAAA;IAClC,uCAA0B,CAAA;IAC1B,wCAA2B,CAAA;AAC/B,CAAC,EA7DW,SAAS,yBAAT,SAAS,QA6DpB;AAyLD,MAAa,UAAW,SAAQ,KAAK;IAKjC,YAAY,KAAiB;QACzB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAA;QAC5B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QAClC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAA;IAC5B,CAAC;IAED,kDAAkD;IAClD,SAAS,CAAC,aAAqB;QAC3B,MAAM,SAAS,GAAG,GAAG,aAAa,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAA;QAClE,IAAI,MAAM,GAAG,QAAQ,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,CAAA;QACnD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,IAAI,kBAAkB,IAAI,CAAC,UAAU,IAAI,CAAA;QACnD,CAAC;QACD,OAAO,MAAM,CAAA;IACjB,CAAC;CACJ;AAtBD,gCAsBC"}
@@ -0,0 +1,61 @@
1
+ # Ejemplo: Blog personal
2
+ # Un blog sencillo con listado de artículos y página de detalle.
3
+
4
+ aplicación MiBlog
5
+ idioma español
6
+
7
+ datos Articulo
8
+ título: texto
9
+ contenido: texto
10
+ fecha: fecha
11
+ autor: texto
12
+ etiquetas: lista de texto
13
+
14
+ # Página principal
15
+
16
+ página inicio en "/"
17
+ título "Mi Blog"
18
+ descripción "Artículos sobre tecnología y diseño"
19
+
20
+ mostrar Articulo recientes
21
+ máximo 10
22
+ ordenados por fecha
23
+ si falla
24
+ mostrar "No se pudieron cargar los artículos."
25
+
26
+ optimizar para móvil
27
+ caché 30 minutos
28
+
29
+ # Detalle de artículo
30
+
31
+ página articulo en "/articulo/(id)"
32
+ título "(articulo.título)"
33
+ descripción "(articulo.contenido primeras 200 letras)"
34
+
35
+ mostrar articulo.título
36
+ mostrar articulo.fecha
37
+ mostrar articulo.autor
38
+ mostrar articulo.contenido
39
+ mostrar articulo.etiquetas
40
+
41
+ mostrar "Artículos relacionados"
42
+ filtrados por etiquetas = articulo.etiquetas
43
+ máximo 3
44
+
45
+ optimizar para móvil
46
+ caché 1 hora
47
+
48
+ # Página de contacto
49
+
50
+ página contacto en "/contacto"
51
+ título "Contacto"
52
+
53
+ campo "Tu nombre" tipo texto
54
+ campo "Tu correo" tipo email
55
+ campo "Mensaje" tipo área de texto
56
+
57
+ botón "Enviar" hacer enviarMensaje
58
+ si falla
59
+ mostrar "No se pudo enviar. Intenta de nuevo."
60
+ si funciona
61
+ mostrar "Mensaje enviado. Te respondo pronto."
@@ -0,0 +1,86 @@
1
+ # Ejemplo: Tienda online
2
+ # Muestra una tienda con listado de productos, detalle y carrito.
3
+
4
+ aplicación MiTienda
5
+ idioma español
6
+
7
+ datos Producto
8
+ nombre: texto
9
+ precio: número
10
+ imagen: foto
11
+ descripción: texto
12
+ stock: número
13
+
14
+ datos Pedido
15
+ productos: lista de Producto
16
+ total: número
17
+ estado: texto
18
+
19
+ # Página de inicio
20
+
21
+ página inicio en "/"
22
+ título "Bienvenido a MiTienda"
23
+ descripción "Los mejores productos al mejor precio"
24
+
25
+ mostrar Producto recientes
26
+ máximo 8
27
+ ordenados por fecha
28
+ si falla
29
+ mostrar "No se pudieron cargar los productos."
30
+ reintentar en 10 segundos
31
+
32
+ si el usuario está conectado
33
+ mostrar "Hola, (usuario.nombre)"
34
+ botón "Mi cuenta" ir a cuenta
35
+ botón "Mi carrito" ir a carrito
36
+ si no
37
+ botón "Entrar" ir a login
38
+ botón "Registrarse" ir a registro
39
+
40
+ optimizar para móvil
41
+ caché 5 minutos
42
+
43
+ # Detalle de producto
44
+
45
+ página detalle en "/producto/(id)"
46
+ título "(producto.nombre)"
47
+
48
+ mostrar producto.imagen
49
+ mostrar producto.nombre
50
+ mostrar producto.precio
51
+ mostrar producto.descripción
52
+
53
+ si producto.stock > 0
54
+ botón "Añadir al carrito" hacer añadirAlCarrito
55
+ si no
56
+ mostrar "Sin stock — avísame cuando llegue"
57
+ botón "Avisarme" hacer suscribirStock
58
+
59
+ optimizar para móvil
60
+
61
+ # Carrito
62
+
63
+ página carrito en "/carrito"
64
+ título "Tu carrito"
65
+
66
+ si hay resultados
67
+ mostrar pedido.productos
68
+ mostrar "Total: (pedido.total) €"
69
+ botón "Finalizar compra" ir a pago
70
+ si no
71
+ mostrar "Tu carrito está vacío"
72
+ botón "Ver productos" ir a inicio
73
+
74
+ # Login
75
+
76
+ página login en "/entrar"
77
+ título "Entrar"
78
+
79
+ campo "Correo electrónico" tipo email
80
+ campo "Contraseña" tipo contraseña
81
+
82
+ botón "Entrar" hacer iniciarSesion
83
+ si falla
84
+ mostrar "Correo o contraseña incorrectos"
85
+
86
+ botón "¿Olvidaste tu contraseña?" ir a recuperarContraseña
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@davidbc01/telar",
3
+ "version": "0.1.0",
4
+ "description": "Lenguaje de programación declarativo para la web, escrito en español",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "telar": "./dist/cli.js"
8
+ },
9
+ "files": [
10
+ "dist/",
11
+ "examples/",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "dev": "ts-node src/cli.ts",
18
+ "test": "vitest",
19
+ "test:run": "vitest run",
20
+ "lint": "tsc --noEmit"
21
+ },
22
+ "keywords": ["programming-language", "spanish", "web", "declarative", "compiler"],
23
+ "license": "Apache-2.0",
24
+ "devDependencies": {
25
+ "@types/node": "^20.0.0",
26
+ "ts-node": "^10.9.0",
27
+ "typescript": "^5.0.0",
28
+ "vitest": "^1.0.0"
29
+ }
30
+ }