veko
Version:
Ultra-lightweight Node.js framework with ZERO dependencies - VSV components, Tailwind CSS, asset imports, SSR
276 lines (212 loc) • 7.58 kB
Markdown
<p align="center">
<img src="https://raw.githubusercontent.com/wiltark/veko.js/main/assets/logo.png" alt="Veko.js Logo" width="200"/>
</p>
<h1 align="center">Veko.js</h1>
<p align="center">
<strong>Framework Node.js ultra-leger avec zero dependances - 4 types de pages, themes .jsv, SSR natif</strong>
</p>
<p align="center">
<a href="https://www.npmjs.com/package/veko"><img src="https://img.shields.io/npm/v/veko.svg?style=flat-square" alt="npm version"></a>
<a href="https://www.npmjs.com/package/veko"><img src="https://img.shields.io/npm/dm/veko.svg?style=flat-square" alt="npm downloads"></a>
<a href="https://github.com/wiltark/veko.js/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square" alt="license"></a>
<a href="https://github.com/wiltark/veko.js"><img src="https://img.shields.io/github/stars/wiltark/veko.js?style=flat-square" alt="github stars"></a>
</p>
<p align="center">
<a href="#installation">Installation</a> -
<a href="#demarrage-rapide">Demarrage</a> -
<a href="#4-types-de-pages">4 Types de Pages</a> -
<a href="#themes-jsv">Themes JSV</a> -
<a href="#documentation">Documentation</a>
</p>
---
## Fonctionnalites
| Fonctionnalite | Description |
|----------------|-------------|
| **Zero Dependances** | Aucun package npm requis - Node.js pur |
| **4 Types de Pages** | ○ Static, ● SSG, ƒ Dynamic, ⚡ Ultra |
| **Themes JSV** | Templates .jsv avec heritage, boucles, conditions |
| **VSV Components** | Composants .jsv/.tsv avec JSX, SSR natif |
| **Tailwind CSS** | Moteur Tailwind integre, zero config |
| **SSR Natif** | Server-Side Rendering sans configuration |
| **Securite** | Headers securises, rate limiting, protection XSS |
| **CMS Ready** | Systeme de themes et modules pour CMS |
## Installation
```bash
npm install veko
```
C est tout. **Zero dependances** a installer.
Prerequis : Node.js >= 18.0.0
## 4 Types de Pages
Veko.js supporte 4 types de pages pour tous les cas d usage :
| Type | Symbole | Description | Cas d usage |
|------|---------|-------------|-------------|
| **Static** | ○ | Prerendu une seule fois | Pages fixes, CGU, FAQ |
| **SSG** | ● | Genere au build avec donnees | Blog, produits, docs |
| **Dynamic** | ƒ | Rendu serveur a chaque requete | Dashboard, admin |
| **Ultra** | ⚡ | Build a la demande, cache intelligent | Pages configurables |
```javascript
// Exemple de routing avec types
app.get('/', handler); // ○ Static
app.get('/blog', ssgHandler); // ● SSG
app.get('/admin', dynamicHandler); // ƒ Dynamic
app.get('/settings', ultraHandler); // ⚡ Ultra
```
## Demarrage Rapide
### API Simple
```javascript
const { createApp } = require('veko');
const app = createApp({ port: 3000 });
app.get('/', (req, res) => {
res.json({ message: 'Hello Veko!' });
});
app.post('/api/users', (req, res) => {
res.status(201).json({ user: req.body });
});
app.listen();
```
## Themes JSV
Systeme de templates .jsv avec syntaxe Jinja-like :
### Syntaxe
```html
<!-- Variables -->
{{ title }}
{{ user.name | capitalize }}
<!-- Conditions -->
{% if user %}
<p>Bienvenue {{ user.name }}</p>
{% else %}
<a href="/login">Connexion</a>
{% endif %}
<!-- Boucles -->
{% for post in posts %}
<article>
<h2>{{ post.title }}</h2>
<p>{{ post.content | truncate(100) }}</p>
</article>
{% endfor %}
<!-- Heritage -->
{% extends 'layout' %}
{% block content %}
Mon contenu ici
{% endblock %}
<!-- Inclusions -->
{% include 'partials/nav' %}
```
### Filtres disponibles
| Filtre | Description | Exemple |
|--------|-------------|---------|
| `upper` | Majuscules | `{{ name \| upper }}` |
| `lower` | Minuscules | `{{ name \| lower }}` |
| `capitalize` | Premiere lettre maj | `{{ name \| capitalize }}` |
| `truncate` | Tronquer | `{{ text \| truncate(100) }}` |
| `date` | Formater date | `{{ date \| date('long') }}` |
| `json` | JSON format | `{{ obj \| json }}` |
| `markdown` | Markdown to HTML | `{{ content \| markdown }}` |
| `default` | Valeur par defaut | `{{ name \| default('Anonyme') }}` |
### Structure des themes
```
themes/
+-- default/
| +-- layout.jsv # Layout principal
| +-- partials/
| | +-- nav.jsv # Navigation
| +-- pages/
| | +-- home.jsv # Page accueil
| | +-- blog.jsv # Liste blog
| | +-- login.jsv # Connexion
| +-- admin/
| +-- layout.jsv # Layout admin
| +-- dashboard.jsv
+-- modern/ # Theme alternatif
+-- dark/ # Theme sombre
+-- minimal/ # Theme minimaliste
```
### Changer de theme
```javascript
const TemplateEngine = require('./engine/template');
const engine = new TemplateEngine({
themesDir: './themes',
theme: 'default'
});
// Changer de theme
engine.setTheme('modern');
// Lister les themes
console.log(engine.listThemes()); // ['default', 'modern', 'dark', 'minimal']
```
## CMS Demo
Un exemple complet de CMS avec themes et authentification :
```bash
cd examples/cms-demo
npm install
npm run setup # Cree la base SQLite
node index.js # http://localhost:3000
```
**Compte admin** : `admin` / `demo`
### Fonctionnalites du CMS
- 4 themes switchables (default, modern, dark, minimal)
- Authentification (login/register)
- CRUD articles avec SQLite
- Dashboard admin avec statistiques
- API REST complete
### Apercu des themes
| Theme | Style |
|-------|-------|
| **default** | Classique Tailwind, clair et professionnel |
| **modern** | Gradient purple/pink, glassmorphism |
| **dark** | Terminal/hacker style, vert sur noir |
| **minimal** | Typographie serif, ultra-minimaliste |
## VSV Components
### Directives Reactives
| Directive | Description | Exemple |
|-----------|-------------|---------|
| `$state` | Etat reactif | `const [val, setVal] = $state(0)` |
| `$computed` | Valeur derivee | `const double = $computed(() => val() * 2)` |
| `$effect` | Effets de bord | `$effect(() => console.log(val()))` |
| `$ref` | Reference DOM | `const el = $ref(null)` |
| `$memo` | Memoisation | `const cached = $memo(() => heavy())` |
## Structure du Projet
```
mon-projet/
+-- app.js # Point d entree
+-- package.json
+-- themes/ # Themes JSV
| +-- default/
| | +-- layout.jsv
| | +-- pages/
| | +-- admin/
| +-- modern/
| +-- dark/
+-- components/ # Composants VSV
| +-- Home.jsv
+-- public/ # Fichiers statiques
+-- db/ # Base de donnees
+-- .veko/ # Cache (auto)
```
## Securite
Securite integree par defaut, sans dependances :
- Headers securises automatiques (X-Content-Type-Options, X-Frame-Options, X-XSS-Protection)
- Rate limiting integre
- Body parsing securise avec erreurs 400
- Protection path traversal sur les fichiers statiques
- HTML escaping dans les pages d erreur
## Documentation
| Document | Description |
|----------|-------------|
| [Guide de Demarrage](docs/getting-started.md) | Installation et premier projet |
| [VSV Components](docs/vsv.md) | Composants, assets, Tailwind |
| [API Reference](docs/api.md) | Reference complete de l API |
| [Securite](docs/security.md) | Bonnes pratiques securite |
| [Plugins](docs/plugins.md) | Creer et utiliser des plugins |
| [Authentification](docs/auth.md) | JWT, sessions, auth patterns |
## Contribution
```bash
git clone https://github.com/wiltark/veko.js.git
cd veko.js
npm test
```
## Licence
MIT - Wiltark
---
<p align="center">
Made with <3 by <a href="https://github.com/wiltark">Wiltark</a>
</p>