From 505a4d088165a3f6cbf09d98117c4dcdb98e7112 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Jun 2026 23:55:57 +0000 Subject: [PATCH 1/2] Initial plan From 6d6361311902d4693128b0c068d2f4598813002d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Jun 2026 23:59:40 +0000 Subject: [PATCH 2/2] fix: align Core\View namespaces and harden compiler/cache behavior --- README.md | 2 +- autoload.php | 2 +- examples/index.php | 2 +- src/Core/View/Abstract/AbstractDirective.php | 2 +- src/Core/View/Abstract/AbstractFilter.php | 2 +- src/Core/View/Abstract/AbstractMiddleware.php | 2 +- src/Core/View/Abstract/AbstractNode.php | 6 +-- src/Core/View/Cache/CacheInterface.php | 2 +- src/Core/View/Cache/CacheKey.php | 2 +- src/Core/View/Cache/CacheManager.php | 2 +- src/Core/View/Cache/FileCacheAdapter.php | 27 +++++++++++-- src/Core/View/Cache/FileWatcher.php | 2 +- src/Core/View/Compiler.php | 34 ++++++++++------ .../View/Components/ComponentRegistry.php | 4 +- src/Core/View/Debug/ErrorFormatter.php | 2 +- src/Core/View/Debug/RuntimeContext.php | 2 +- src/Core/View/Debug/SourceMap.php | 2 +- src/Core/View/Debug/TemplateDebugger.php | 2 +- src/Core/View/Directives/BlockDirective.php | 4 +- .../View/Directives/DirectiveRegistry.php | 4 +- src/Core/View/Directives/ForeachDirective.php | 4 +- src/Core/View/Directives/IfDirective.php | 4 +- src/Core/View/Directives/IncludeDirective.php | 4 +- src/Core/View/Directives/SetDirective.php | 4 +- src/Core/View/Engine.php | 40 +++++++++---------- src/Core/View/Environment.php | 2 +- src/Core/View/Escape/Escaper.php | 2 +- src/Core/View/Escape/HtmlEscaper.php | 2 +- src/Core/View/Escape/JavaScriptEscaper.php | 2 +- src/Core/View/Escape/UriEscaper.php | 2 +- .../Exceptions/CircularReferenceException.php | 2 +- src/Core/View/Exceptions/CompileException.php | 2 +- .../View/Exceptions/CompilerException.php | 2 +- src/Core/View/Exceptions/ParserException.php | 2 +- src/Core/View/Exceptions/RuntimeException.php | 2 +- src/Core/View/Exceptions/SyntaxException.php | 2 +- src/Core/View/Exceptions/ViewException.php | 2 +- src/Core/View/Filters/ArrayFilters.php | 2 +- src/Core/View/Filters/DateFilters.php | 2 +- src/Core/View/Filters/FilterRegistry.php | 4 +- src/Core/View/Filters/NumberFilters.php | 2 +- src/Core/View/Filters/StringFilters.php | 2 +- src/Core/View/Layout/BlockStack.php | 2 +- src/Core/View/Layout/LayoutManager.php | 4 +- src/Core/View/Layout/LayoutResolver.php | 2 +- src/Core/View/Lexer.php | 4 +- src/Core/View/Middleware/CacheMiddleware.php | 4 +- .../View/Middleware/MiddlewarePipeline.php | 4 +- .../View/Middleware/ProfilingMiddleware.php | 4 +- .../View/Middleware/SecurityMiddleware.php | 4 +- src/Core/View/Nodes/BlockNode.php | 6 +-- src/Core/View/Nodes/ComponentNode.php | 6 +-- src/Core/View/Nodes/ExpressionNode.php | 6 +-- src/Core/View/Nodes/ForeachNode.php | 6 +-- src/Core/View/Nodes/IfNode.php | 6 +-- src/Core/View/Nodes/IncludeNode.php | 6 +-- src/Core/View/Nodes/NodeInterface.php | 4 +- src/Core/View/Nodes/RawNode.php | 6 +-- src/Core/View/Nodes/SetNode.php | 6 +-- src/Core/View/Nodes/TextNode.php | 6 +-- src/Core/View/Parser.php | 38 +++++++++--------- src/Core/View/Renderer.php | 6 +-- src/Core/View/Scope/Scope.php | 2 +- src/Core/View/Scope/ScopeStack.php | 2 +- src/Core/View/Scope/Variable.php | 2 +- src/Core/View/TemplateResolver.php | 4 +- src/Core/View/Validation/SyntaxValidator.php | 4 +- .../View/Validation/TemplateValidator.php | 2 +- 68 files changed, 187 insertions(+), 158 deletions(-) diff --git a/README.md b/README.md index 3135a2e..8ebcd3e 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ __DIR__ . '/templates', diff --git a/autoload.php b/autoload.php index 7f0c689..dc788e7 100644 --- a/autoload.php +++ b/autoload.php @@ -6,7 +6,7 @@ */ spl_autoload_register(function ($class) { - $prefix = 'Beobles\\Core\\View\\'; + $prefix = 'Core\\View\\'; $baseDir = __DIR__ . '/src/Core/View/'; if (strpos($class, $prefix) !== 0) { diff --git a/examples/index.php b/examples/index.php index 39253a0..9392a5e 100644 --- a/examples/index.php +++ b/examples/index.php @@ -2,7 +2,7 @@ require_once __DIR__ . '/../autoload.php'; -use Beobles\Core\View\Engine; +use Core\View\Engine; // Criar engine $engine = new Engine([ diff --git a/src/Core/View/Abstract/AbstractDirective.php b/src/Core/View/Abstract/AbstractDirective.php index 6bde27f..529c943 100644 --- a/src/Core/View/Abstract/AbstractDirective.php +++ b/src/Core/View/Abstract/AbstractDirective.php @@ -1,6 +1,6 @@ false]); + if (!is_array($payload) || !array_key_exists('value', $payload) || !array_key_exists('expires_at', $payload)) { + return $content; + } + + $expiresAt = $payload['expires_at']; + if (is_int($expiresAt) && $expiresAt > 0 && $expiresAt < time()) { + $this->delete($key); + return null; + } + + return $payload['value']; } public function set(string $key, $value, int $ttl = 3600): void { $file = $this->getFilePath($key); - file_put_contents($file, $value); + $expiresAt = $ttl > 0 ? time() + $ttl : null; + $payload = serialize([ + 'value' => $value, + 'expires_at' => $expiresAt, + ]); + file_put_contents($file, $payload); } public function delete(string $key): void diff --git a/src/Core/View/Cache/FileWatcher.php b/src/Core/View/Cache/FileWatcher.php index a343ce4..1708ecf 100644 --- a/src/Core/View/Cache/FileWatcher.php +++ b/src/Core/View/Cache/FileWatcher.php @@ -1,6 +1,6 @@ $nodes */ public function compile(array $nodes): string { @@ -41,7 +45,11 @@ public function compileTextNode(TextNode $node): string public function compileExpressionNode(ExpressionNode $node): string { $expression = $this->compileExpression($node->value); - return 'echo $__engine->escape(' . $expression . ", 'html');\n"; + if ($this->autoEscape) { + return 'echo $__engine->escape(' . $expression . ", 'html');\n"; + } + + return 'echo ' . $expression . ";\n"; } public function compileRawNode(RawNode $node): string diff --git a/src/Core/View/Components/ComponentRegistry.php b/src/Core/View/Components/ComponentRegistry.php index f7a1e70..30b8135 100644 --- a/src/Core/View/Components/ComponentRegistry.php +++ b/src/Core/View/Components/ComponentRegistry.php @@ -1,8 +1,8 @@ lexer = new Lexer(); $this->parser = new Parser($directiveRegistry); - $this->compiler = new Compiler(); + $this->compiler = new Compiler((bool) $this->environment->getConfig('auto_escape', true)); $this->renderer = new Renderer($this->environment->getConfig('compiled_templates_dir', $this->cacheDir)); $this->middlewarePipeline->add(new SecurityMiddleware()); diff --git a/src/Core/View/Environment.php b/src/Core/View/Environment.php index dc5736a..d0ce098 100644 --- a/src/Core/View/Environment.php +++ b/src/Core/View/Environment.php @@ -1,6 +1,6 @@