Commit Graph

11 Commits

Author SHA1 Message Date
8db2e0df37 Genearte .zig verions of templates to use in production. 2026-01-28 17:01:28 +05:30
4092e6ad8e feat: add cached vs non-cached benchmark modes, fix ViewEngine memory issues
- Add two benchmark modes: cached AST (render only) and no cache (parse+render)
- Shows parse overhead is 69.2% of total time (331ms out of 478ms)
- Fix use-after-free in ViewEngine.processIncludes by transferring child ownership
- Fix memory leaks by using ArenaAllocator pattern in test_includes
- Update test expectations to match actual template content (mixins, not partials)
- All tests pass

Benchmark results (2000 iterations):
- Cached (render only): 147.3ms
- No cache (parse+render): 478.3ms
- Parse overhead: 331.0ms (3.2x slower without caching)
2026-01-27 16:45:04 +05:30
90c8f6f2fb - removed cache
- few comptime related changes
2026-01-27 16:04:02 +05:30
aaf6a1af2d fix: add scoped error logging for lexer/parser errors
- Add std.log.scoped(.pugz) to template.zig and view_engine.zig
- Log detailed error info (code, line, column, message) when parsing fails
- Log template path context in ViewEngine on parse errors
- Remove debug print from lexer, use proper scoped logging instead
- Move benchmarks, docs, examples, playground, tests out of src/ to project root
- Update build.zig and documentation paths accordingly
- Bump version to 0.3.1
2026-01-25 17:10:02 +05:30
1b2da224be feat: add template inheritance (extends/block) support
- ViewEngine now supports extends and named blocks
- Each route gets exclusive cached AST (no shared parent layouts)
- Fix iteration over struct arrays in each loops
- Add demo app with full e-commerce layout using extends
- Serve static files from public folder
- Bump version to 0.3.0
2026-01-25 15:23:57 +05:30
27c4898706 follow PugJs 2026-01-24 23:53:19 +05:30
654b45ee10 Compiled temapltes.
Benchmark cleanup
2026-01-22 11:10:47 +05:30
0bccce8bf9 Add configurable max_file_size option
- Default 5 MB for template files
- Configurable via ViewEngine.init options
2026-01-18 00:05:16 +05:30
458de03c02 Add README and simplify ViewEngine API
- ViewEngine.init() no longer requires allocator
- render() and renderTpl() accept allocator parameter
- Remove deinit() - no resources to clean up
- Remove unused parse/renderDoc methods
- Add memory management guidance to runtime.zig
- Clean up unused imports and options
2026-01-18 00:05:16 +05:30
1fff91d7d9 Add string concatenation in attributes, lazy mixin loading, and benchmarks
Features:
- Fix string concatenation in attribute values (e.g., class="btn btn-" + type)
- Lexer now properly captures full expressions with operators
- Runtime evaluates expressions for class attributes

ViewEngine improvements:
- Change mixin loading from eager to lazy (on-demand)
- Mixins are now loaded from mixins directory only when first called
- Template-defined mixins take precedence over directory mixins

Benchmarks:
- Add src/benchmark.zig with three template complexity levels
- Simple: ~150k renders/sec, 6KB memory
- Medium: ~70k renders/sec, 45KB memory
- Complex: ~32k renders/sec, 94KB memory
- Memory leak detection confirms no leaks

Documentation:
- Update CLAUDE.md with lazy mixin loading details
- Document mixin resolution order
2026-01-18 00:05:16 +05:30
4538b17f0a Add ViewEngine for easy server integration
- ViewEngine manages views directory with path resolution
- Auto-loads mixins from views/mixins/ directory
- Simplifies template paths (relative to views dir, auto-adds extension)
- Updated example app to use ViewEngine
- Added example mixins (buttons.pug, cards.pug)
- Updated CLAUDE.md with ViewEngine documentation
2026-01-18 00:05:16 +05:30