@vituum/vite-plugin-latte 2.0.0-next.4 → 2.0.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.
Files changed (234) hide show
  1. package/README.md +1 -1
  2. package/index.js +4 -2
  3. package/package.json +11 -9
  4. package/types/index.d.ts +1 -1
  5. package/vendor/autoload.php +1 -4
  6. package/vendor/composer/InstalledVersions.php +36 -2
  7. package/vendor/composer/autoload_classmap.php +14 -15
  8. package/vendor/composer/autoload_psr4.php +2 -0
  9. package/vendor/composer/autoload_static.php +38 -15
  10. package/vendor/composer/installed.json +32 -22
  11. package/vendor/composer/installed.php +12 -12
  12. package/vendor/composer/platform_check.php +4 -5
  13. package/vendor/latte/latte/bin/latte-lint +10 -3
  14. package/vendor/latte/latte/composer.json +16 -6
  15. package/vendor/latte/latte/src/Bridges/Tracy/BlueScreenPanel.php +13 -38
  16. package/vendor/latte/latte/src/Bridges/Tracy/LattePanel.php +9 -7
  17. package/vendor/latte/latte/src/Bridges/Tracy/TracyExtension.php +2 -4
  18. package/vendor/latte/latte/src/Bridges/Tracy/dist/panel.phtml +94 -0
  19. package/vendor/latte/latte/src/Bridges/Tracy/dist/tab.phtml +10 -0
  20. package/vendor/latte/latte/src/Latte/Compiler/Block.php +4 -6
  21. package/vendor/latte/latte/src/Latte/Compiler/Escaper.php +67 -86
  22. package/vendor/latte/latte/src/Latte/Compiler/Node.php +6 -3
  23. package/vendor/latte/latte/src/Latte/Compiler/NodeHelpers.php +16 -6
  24. package/vendor/latte/latte/src/Latte/Compiler/NodeTraverser.php +25 -12
  25. package/vendor/latte/latte/src/Latte/Compiler/Nodes/AreaNode.php +7 -3
  26. package/vendor/latte/latte/src/Latte/Compiler/Nodes/AuxiliaryNode.php +5 -4
  27. package/vendor/latte/latte/src/Latte/Compiler/Nodes/FragmentNode.php +8 -4
  28. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/AttributeNode.php +7 -15
  29. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/BogusTagNode.php +4 -6
  30. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/CommentNode.php +4 -3
  31. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/ElementNode.php +37 -67
  32. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/ExpressionAttributeNode.php +60 -0
  33. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/TagNode.php +70 -0
  34. package/vendor/latte/latte/src/Latte/Compiler/Nodes/NopNode.php +4 -3
  35. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ArgumentNode.php +4 -3
  36. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ArrayItemNode.php +4 -15
  37. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ClosureUseNode.php +4 -3
  38. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ComplexTypeNode.php +4 -3
  39. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ArrayAccessNode.php +4 -3
  40. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ArrayNode.php +6 -22
  41. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/AssignNode.php +18 -5
  42. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/AssignOpNode.php +18 -7
  43. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/AuxiliaryNode.php +5 -4
  44. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/BinaryOpNode.php +38 -9
  45. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/CastNode.php +14 -6
  46. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ClassConstantFetchNode.php +4 -3
  47. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/CloneNode.php +12 -4
  48. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ClosureNode.php +10 -6
  49. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ConstantFetchNode.php +7 -6
  50. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/EmptyNode.php +4 -3
  51. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/FilterCallNode.php +10 -4
  52. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/FunctionCallNode.php +14 -5
  53. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/InNode.php +4 -3
  54. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/InstanceofNode.php +14 -5
  55. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/IssetNode.php +6 -3
  56. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/MatchNode.php +6 -3
  57. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/MethodCallNode.php +18 -5
  58. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/NewNode.php +14 -4
  59. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/PostOpNode.php +14 -6
  60. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/PreOpNode.php +14 -6
  61. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/PropertyFetchNode.php +4 -3
  62. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/StaticMethodCallNode.php +14 -15
  63. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/StaticPropertyFetchNode.php +4 -3
  64. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/TemporaryNode.php +7 -6
  65. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/TernaryNode.php +16 -11
  66. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/UnaryOpNode.php +19 -9
  67. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/VariableNode.php +4 -3
  68. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ExpressionNode.php +4 -3
  69. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/FilterNode.php +33 -8
  70. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/IdentifierNode.php +4 -3
  71. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/InterpolatedStringPartNode.php +4 -3
  72. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/IntersectionTypeNode.php +6 -3
  73. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ListItemNode.php +4 -3
  74. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ListNode.php +4 -3
  75. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/MatchArmNode.php +6 -3
  76. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ModifierNode.php +29 -41
  77. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/NameNode.php +9 -4
  78. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/NullableTypeNode.php +4 -3
  79. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/OperatorNode.php +27 -0
  80. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ParameterNode.php +4 -3
  81. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/BooleanNode.php +4 -3
  82. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/FloatNode.php +9 -6
  83. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/IntegerNode.php +8 -6
  84. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/InterpolatedStringNode.php +9 -5
  85. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/NullNode.php +4 -3
  86. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/StringNode.php +6 -4
  87. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ScalarNode.php +4 -3
  88. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/SuperiorTypeNode.php +4 -3
  89. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/UnionTypeNode.php +6 -3
  90. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/VarLikeIdentifierNode.php +4 -3
  91. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/{Expression/NotNode.php → VariadicPlaceholderNode.php} +9 -9
  92. package/vendor/latte/latte/src/Latte/{Essential → Compiler}/Nodes/PrintNode.php +9 -15
  93. package/vendor/latte/latte/src/Latte/Compiler/Nodes/StatementNode.php +7 -3
  94. package/vendor/latte/latte/src/Latte/Compiler/Nodes/TemplateNode.php +4 -3
  95. package/vendor/latte/latte/src/Latte/Compiler/Nodes/TextNode.php +6 -4
  96. package/vendor/latte/latte/src/Latte/Compiler/PhpHelpers.php +32 -18
  97. package/vendor/latte/latte/src/Latte/Compiler/Position.php +7 -7
  98. package/vendor/latte/latte/src/Latte/Compiler/PrintContext.php +72 -104
  99. package/vendor/latte/latte/src/Latte/Compiler/Tag.php +17 -16
  100. package/vendor/latte/latte/src/Latte/Compiler/TagLexer.php +11 -8
  101. package/vendor/latte/latte/src/Latte/Compiler/TagParser.php +28 -23
  102. package/vendor/latte/latte/src/Latte/Compiler/TagParserData.php +360 -336
  103. package/vendor/latte/latte/src/Latte/Compiler/TemplateGenerator.php +49 -38
  104. package/vendor/latte/latte/src/Latte/Compiler/TemplateLexer.php +37 -12
  105. package/vendor/latte/latte/src/Latte/Compiler/TemplateParser.php +35 -21
  106. package/vendor/latte/latte/src/Latte/Compiler/TemplateParserHtml.php +121 -71
  107. package/vendor/latte/latte/src/Latte/Compiler/Token.php +79 -70
  108. package/vendor/latte/latte/src/Latte/Compiler/TokenStream.php +21 -14
  109. package/vendor/latte/latte/src/Latte/ContentType.php +4 -3
  110. package/vendor/latte/latte/src/Latte/Engine.php +147 -188
  111. package/vendor/latte/latte/src/Latte/Essential/AuxiliaryIterator.php +5 -7
  112. package/vendor/latte/latte/src/Latte/Essential/Blueprint.php +5 -5
  113. package/vendor/latte/latte/src/Latte/Essential/CachingIterator.php +5 -4
  114. package/vendor/latte/latte/src/Latte/Essential/CoreExtension.php +155 -127
  115. package/vendor/latte/latte/src/Latte/Essential/Filters.php +99 -44
  116. package/vendor/latte/latte/src/Latte/Essential/Nodes/BlockNode.php +14 -13
  117. package/vendor/latte/latte/src/Latte/Essential/Nodes/CaptureNode.php +5 -6
  118. package/vendor/latte/latte/src/Latte/Essential/Nodes/ContentTypeNode.php +3 -4
  119. package/vendor/latte/latte/src/Latte/Essential/Nodes/CustomFunctionCallNode.php +46 -0
  120. package/vendor/latte/latte/src/Latte/Essential/Nodes/DebugbreakNode.php +2 -3
  121. package/vendor/latte/latte/src/Latte/Essential/Nodes/DefineNode.php +10 -7
  122. package/vendor/latte/latte/src/Latte/Essential/Nodes/DoNode.php +3 -4
  123. package/vendor/latte/latte/src/Latte/Essential/Nodes/DumpNode.php +2 -3
  124. package/vendor/latte/latte/src/Latte/Essential/Nodes/EmbedNode.php +8 -9
  125. package/vendor/latte/latte/src/Latte/Essential/Nodes/ExtendsNode.php +3 -5
  126. package/vendor/latte/latte/src/Latte/Essential/Nodes/FirstLastSepNode.php +4 -7
  127. package/vendor/latte/latte/src/Latte/Essential/Nodes/ForNode.php +6 -5
  128. package/vendor/latte/latte/src/Latte/Essential/Nodes/ForeachNode.php +7 -7
  129. package/vendor/latte/latte/src/Latte/Essential/Nodes/IfChangedNode.php +4 -5
  130. package/vendor/latte/latte/src/Latte/Essential/Nodes/IfContentNode.php +7 -6
  131. package/vendor/latte/latte/src/Latte/Essential/Nodes/IfNode.php +11 -11
  132. package/vendor/latte/latte/src/Latte/Essential/Nodes/ImportNode.php +5 -6
  133. package/vendor/latte/latte/src/Latte/Essential/Nodes/IncludeBlockNode.php +26 -27
  134. package/vendor/latte/latte/src/Latte/Essential/Nodes/IncludeFileNode.php +7 -10
  135. package/vendor/latte/latte/src/Latte/Essential/Nodes/IterateWhileNode.php +6 -6
  136. package/vendor/latte/latte/src/Latte/Essential/Nodes/JumpNode.php +4 -8
  137. package/vendor/latte/latte/src/Latte/Essential/Nodes/NAttrNode.php +35 -47
  138. package/vendor/latte/latte/src/Latte/Essential/Nodes/NClassNode.php +4 -5
  139. package/vendor/latte/latte/src/Latte/Essential/Nodes/NElseNode.php +69 -34
  140. package/vendor/latte/latte/src/Latte/Essential/Nodes/NTagNode.php +9 -33
  141. package/vendor/latte/latte/src/Latte/Essential/Nodes/ParametersNode.php +7 -4
  142. package/vendor/latte/latte/src/Latte/Essential/Nodes/RawPhpNode.php +3 -4
  143. package/vendor/latte/latte/src/Latte/Essential/Nodes/RollbackNode.php +2 -3
  144. package/vendor/latte/latte/src/Latte/Essential/Nodes/SpacelessNode.php +4 -5
  145. package/vendor/latte/latte/src/Latte/Essential/Nodes/SwitchNode.php +9 -7
  146. package/vendor/latte/latte/src/Latte/Essential/Nodes/TemplatePrintNode.php +4 -4
  147. package/vendor/latte/latte/src/Latte/Essential/Nodes/TemplateTypeNode.php +3 -4
  148. package/vendor/latte/latte/src/Latte/Essential/Nodes/TraceNode.php +2 -3
  149. package/vendor/latte/latte/src/Latte/Essential/Nodes/TranslateNode.php +5 -5
  150. package/vendor/latte/latte/src/Latte/Essential/Nodes/TryNode.php +4 -5
  151. package/vendor/latte/latte/src/Latte/Essential/Nodes/VarNode.php +10 -6
  152. package/vendor/latte/latte/src/Latte/Essential/Nodes/VarPrintNode.php +2 -3
  153. package/vendor/latte/latte/src/Latte/Essential/Nodes/VarTypeNode.php +3 -4
  154. package/vendor/latte/latte/src/Latte/Essential/Nodes/WhileNode.php +5 -5
  155. package/vendor/latte/latte/src/Latte/Essential/Passes.php +82 -21
  156. package/vendor/latte/latte/src/Latte/Essential/RawPhpExtension.php +2 -4
  157. package/vendor/latte/latte/src/Latte/Essential/RollbackException.php +1 -3
  158. package/vendor/latte/latte/src/Latte/Essential/Tracer.php +24 -28
  159. package/vendor/latte/latte/src/Latte/Essential/TranslatorExtension.php +14 -14
  160. package/vendor/latte/latte/src/Latte/Extension.php +12 -6
  161. package/vendor/latte/latte/src/Latte/Feature.php +24 -0
  162. package/vendor/latte/latte/src/Latte/Helpers.php +65 -15
  163. package/vendor/latte/latte/src/Latte/Loader.php +1 -9
  164. package/vendor/latte/latte/src/Latte/Loaders/FileLoader.php +11 -17
  165. package/vendor/latte/latte/src/Latte/Loaders/StringLoader.php +7 -21
  166. package/vendor/latte/latte/src/Latte/Policy.php +4 -3
  167. package/vendor/latte/latte/src/Latte/Runtime/Block.php +2 -4
  168. package/vendor/latte/latte/src/Latte/Runtime/Cache.php +143 -0
  169. package/vendor/latte/latte/src/Latte/Runtime/FilterExecutor.php +5 -6
  170. package/vendor/latte/latte/src/Latte/Runtime/FilterInfo.php +11 -11
  171. package/vendor/latte/latte/src/Latte/Runtime/FunctionExecutor.php +5 -6
  172. package/vendor/latte/latte/src/Latte/Runtime/Helpers.php +91 -0
  173. package/vendor/latte/latte/src/Latte/Runtime/Html.php +3 -5
  174. package/vendor/latte/latte/src/Latte/Runtime/HtmlHelpers.php +374 -0
  175. package/vendor/latte/latte/src/Latte/Runtime/HtmlStringable.php +1 -3
  176. package/vendor/latte/latte/src/Latte/Runtime/Template.php +162 -182
  177. package/vendor/latte/latte/src/Latte/Runtime/XmlHelpers.php +108 -0
  178. package/vendor/latte/latte/src/Latte/Sandbox/Nodes/FunctionCallNode.php +12 -4
  179. package/vendor/latte/latte/src/Latte/Sandbox/Nodes/MethodCallNode.php +15 -5
  180. package/vendor/latte/latte/src/Latte/Sandbox/Nodes/PropertyFetchNode.php +4 -3
  181. package/vendor/latte/latte/src/Latte/Sandbox/Nodes/SandboxNode.php +5 -6
  182. package/vendor/latte/latte/src/Latte/Sandbox/Nodes/StaticMethodCallNode.php +14 -4
  183. package/vendor/latte/latte/src/Latte/Sandbox/Nodes/StaticPropertyFetchNode.php +4 -3
  184. package/vendor/latte/latte/src/Latte/Sandbox/RuntimeChecker.php +8 -6
  185. package/vendor/latte/latte/src/Latte/Sandbox/SandboxExtension.php +16 -12
  186. package/vendor/latte/latte/src/Latte/Sandbox/SecurityPolicy.php +18 -16
  187. package/vendor/latte/latte/src/Latte/attributes.php +7 -3
  188. package/vendor/latte/latte/src/Latte/exceptions.php +52 -6
  189. package/vendor/latte/latte/src/Tools/Linter.php +74 -28
  190. package/vendor/latte/latte/src/Tools/LinterExtension.php +176 -0
  191. package/vendor/nette/utils/composer.json +15 -5
  192. package/vendor/nette/utils/readme.md +1 -1
  193. package/vendor/nette/utils/src/HtmlStringable.php +4 -1
  194. package/vendor/nette/utils/src/Iterators/CachingIterator.php +10 -25
  195. package/vendor/nette/utils/src/Iterators/Mapper.php +2 -3
  196. package/vendor/nette/utils/src/SmartObject.php +3 -0
  197. package/vendor/nette/utils/src/StaticClass.php +1 -11
  198. package/vendor/nette/utils/src/Translator.php +1 -1
  199. package/vendor/nette/utils/src/Utils/ArrayHash.php +6 -10
  200. package/vendor/nette/utils/src/Utils/ArrayList.php +8 -12
  201. package/vendor/nette/utils/src/Utils/Arrays.php +38 -18
  202. package/vendor/nette/utils/src/Utils/Callback.php +13 -8
  203. package/vendor/nette/utils/src/Utils/DateTime.php +95 -26
  204. package/vendor/nette/utils/src/Utils/FileInfo.php +6 -7
  205. package/vendor/nette/utils/src/Utils/FileSystem.php +10 -5
  206. package/vendor/nette/utils/src/Utils/Finder.php +31 -12
  207. package/vendor/nette/utils/src/Utils/Floats.php +1 -0
  208. package/vendor/nette/utils/src/Utils/Helpers.php +22 -2
  209. package/vendor/nette/utils/src/Utils/Html.php +130 -127
  210. package/vendor/nette/utils/src/Utils/Image.php +80 -60
  211. package/vendor/nette/utils/src/Utils/ImageColor.php +5 -0
  212. package/vendor/nette/utils/src/Utils/ImageType.php +2 -0
  213. package/vendor/nette/utils/src/Utils/Iterables.php +41 -7
  214. package/vendor/nette/utils/src/Utils/Json.php +2 -0
  215. package/vendor/nette/utils/src/Utils/ObjectHelpers.php +2 -0
  216. package/vendor/nette/utils/src/Utils/Paginator.php +10 -43
  217. package/vendor/nette/utils/src/Utils/Random.php +2 -0
  218. package/vendor/nette/utils/src/Utils/Reflection.php +22 -15
  219. package/vendor/nette/utils/src/Utils/ReflectionMethod.php +6 -1
  220. package/vendor/nette/utils/src/Utils/Strings.php +62 -57
  221. package/vendor/nette/utils/src/Utils/Type.php +91 -42
  222. package/vendor/nette/utils/src/Utils/Validators.php +9 -7
  223. package/vendor/latte/latte/src/Bridges/Tracy/templates/LattePanel.panel.phtml +0 -101
  224. package/vendor/latte/latte/src/Bridges/Tracy/templates/LattePanel.tab.phtml +0 -15
  225. package/vendor/latte/latte/src/Latte/Compiler/ExpressionBuilder.php +0 -129
  226. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ErrorSuppressNode.php +0 -36
  227. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/FunctionCallableNode.php +0 -39
  228. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/MethodCallableNode.php +0 -42
  229. package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/StaticMethodCallableNode.php +0 -57
  230. package/vendor/latte/latte/src/Latte/PositionAwareException.php +0 -47
  231. package/vendor/latte/latte/src/Latte/Runtime/Filters.php +0 -283
  232. package/vendor/latte/latte/src/Latte/Sandbox/Nodes/FunctionCallableNode.php +0 -29
  233. package/vendor/latte/latte/src/Latte/Sandbox/Nodes/MethodCallableNode.php +0 -30
  234. package/vendor/latte/latte/src/Latte/Sandbox/Nodes/StaticMethodCallableNode.php +0 -30
@@ -1,15 +1,14 @@
1
- <?php
1
+ <?php declare(strict_types=1);
2
2
 
3
3
  /**
4
4
  * This file is part of the Nette Framework (https://nette.org)
5
5
  * Copyright (c) 2004 David Grudl (https://davidgrudl.com)
6
6
  */
7
7
 
8
- declare(strict_types=1);
9
-
10
8
  namespace Latte\Essential;
11
9
 
12
10
  use Nette\PhpGenerator as Php;
11
+ use const DIRECTORY_SEPARATOR;
13
12
 
14
13
 
15
14
  /**
@@ -18,6 +17,7 @@ use Nette\PhpGenerator as Php;
18
17
  */
19
18
  final class Blueprint
20
19
  {
20
+ /** @param array<string, mixed> $params */
21
21
  public function generateTemplateClass(
22
22
  array $params,
23
23
  ?string $name = 'Template',
@@ -139,7 +139,7 @@ final class Blueprint
139
139
  . ($param->isReference() ? '&' : '')
140
140
  . ($variadic ? '...' : '')
141
141
  . '$' . $param->getName()
142
- . ($param->hasDefaultValue() && !$variadic ? ' = ' . var_export($param->getDefaultValue(), true) : '');
142
+ . ($param->hasDefaultValue() && !$variadic ? ' = ' . var_export($param->getDefaultValue(), return: true) : '');
143
143
  }
144
144
 
145
145
  return '(' . implode(', ', $params) . ')';
@@ -176,7 +176,7 @@ final class Blueprint
176
176
  }
177
177
 
178
178
 
179
- private function getType($value): string
179
+ private function getType(mixed $value): string
180
180
  {
181
181
  return $value === null ? 'mixed' : get_debug_type($value);
182
182
  }
@@ -1,14 +1,14 @@
1
- <?php
1
+ <?php declare(strict_types=1);
2
2
 
3
3
  /**
4
4
  * This file is part of the Latte (https://latte.nette.org)
5
5
  * Copyright (c) 2008 David Grudl (https://davidgrudl.com)
6
6
  */
7
7
 
8
- declare(strict_types=1);
9
-
10
8
  namespace Latte\Essential;
11
9
 
10
+ use function get_debug_type, is_array, max, method_exists, sprintf;
11
+
12
12
 
13
13
  /**
14
14
  * Smarter caching iterator.
@@ -23,6 +23,7 @@ namespace Latte\Essential;
23
23
  * @property-read mixed $nextKey
24
24
  * @property-read mixed $nextValue
25
25
  * @property-read ?self $parent
26
+ * @extends \CachingIterator<mixed, mixed, \Iterator<mixed, mixed>>
26
27
  * @internal
27
28
  */
28
29
  class CachingIterator extends \CachingIterator implements \Countable
@@ -34,7 +35,7 @@ class CachingIterator extends \CachingIterator implements \Countable
34
35
  public function __construct(mixed $iterator, ?self $parent = null)
35
36
  {
36
37
  if (is_array($iterator) || $iterator instanceof \stdClass) {
37
- $iterator = new \ArrayIterator($iterator);
38
+ $iterator = new \ArrayIterator((array) $iterator);
38
39
 
39
40
  } elseif ($iterator instanceof \IteratorAggregate) {
40
41
  do {
@@ -1,12 +1,10 @@
1
- <?php
1
+ <?php declare(strict_types=1);
2
2
 
3
3
  /**
4
4
  * This file is part of the Latte (https://latte.nette.org)
5
5
  * Copyright (c) 2008 David Grudl (https://davidgrudl.com)
6
6
  */
7
7
 
8
- declare(strict_types=1);
9
-
10
8
  namespace Latte\Essential;
11
9
 
12
10
  use Latte;
@@ -17,6 +15,7 @@ use Latte\Compiler\TemplateParser;
17
15
  use Latte\Runtime;
18
16
  use Latte\RuntimeException;
19
17
  use Nette;
18
+ use function array_keys, class_exists, extension_loaded, preg_match;
20
19
 
21
20
 
22
21
  /**
@@ -42,69 +41,71 @@ final class CoreExtension extends Latte\Extension
42
41
 
43
42
  public function beforeRender(Runtime\Template $template): void
44
43
  {
45
- $this->filters->locale = $template->getEngine()->getLocale();
44
+ $this->engine = $template->getEngine();
45
+ $this->filters->locale = $this->engine->getLocale();
46
46
  }
47
47
 
48
48
 
49
49
  public function getTags(): array
50
50
  {
51
51
  return [
52
- 'embed' => [Nodes\EmbedNode::class, 'create'],
53
- 'define' => [Nodes\DefineNode::class, 'create'],
54
- 'block' => [Nodes\BlockNode::class, 'create'],
55
- 'layout' => [Nodes\ExtendsNode::class, 'create'],
56
- 'extends' => [Nodes\ExtendsNode::class, 'create'],
57
- 'import' => [Nodes\ImportNode::class, 'create'],
58
- 'include' => \Closure::fromCallable([$this, 'includeSplitter']),
59
-
60
- 'n:attr' => [Nodes\NAttrNode::class, 'create'],
61
- 'n:class' => [Nodes\NClassNode::class, 'create'],
62
- 'n:tag' => [Nodes\NTagNode::class, 'create'],
63
-
64
- 'parameters' => [Nodes\ParametersNode::class, 'create'],
65
- 'varType' => [Nodes\VarTypeNode::class, 'create'],
66
- 'varPrint' => [Nodes\VarPrintNode::class, 'create'],
67
- 'templateType' => [Nodes\TemplateTypeNode::class, 'create'],
68
- 'templatePrint' => [Nodes\TemplatePrintNode::class, 'create'],
69
-
70
- '=' => [Nodes\PrintNode::class, 'create'],
71
- 'do' => [Nodes\DoNode::class, 'create'],
72
- 'php' => [Nodes\DoNode::class, 'create'], // obsolete
73
- 'contentType' => [Nodes\ContentTypeNode::class, 'create'],
74
- 'spaceless' => [Nodes\SpacelessNode::class, 'create'],
75
- 'capture' => [Nodes\CaptureNode::class, 'create'],
52
+ 'embed' => Nodes\EmbedNode::create(...),
53
+ 'define' => Nodes\DefineNode::create(...),
54
+ 'block' => Nodes\BlockNode::create(...),
55
+ 'layout' => Nodes\ExtendsNode::create(...),
56
+ 'extends' => Nodes\ExtendsNode::create(...),
57
+ 'import' => Nodes\ImportNode::create(...),
58
+ 'include' => $this->includeSplitter(...),
59
+
60
+ 'n:attr' => Nodes\NAttrNode::create(...),
61
+ 'n:class' => Nodes\NClassNode::create(...),
62
+ 'n:tag' => Nodes\NTagNode::create(...),
63
+
64
+ 'parameters' => Nodes\ParametersNode::create(...),
65
+ 'varType' => Nodes\VarTypeNode::create(...),
66
+ 'varPrint' => Nodes\VarPrintNode::create(...),
67
+ 'templateType' => Nodes\TemplateTypeNode::create(...),
68
+ 'templatePrint' => Nodes\TemplatePrintNode::create(...),
69
+
70
+ '=' => Latte\Compiler\Nodes\PrintNode::create(...),
71
+ 'do' => Nodes\DoNode::create(...),
72
+ 'php' => Nodes\DoNode::create(...), // obsolete
73
+ 'contentType' => Nodes\ContentTypeNode::create(...),
74
+ 'spaceless' => Nodes\SpacelessNode::create(...),
75
+ 'capture' => Nodes\CaptureNode::create(...),
76
76
  'l' => fn(Tag $tag) => new TextNode('{', $tag->position),
77
77
  'r' => fn(Tag $tag) => new TextNode('}', $tag->position),
78
- 'syntax' => \Closure::fromCallable([$this, 'parseSyntax']),
79
-
80
- 'dump' => [Nodes\DumpNode::class, 'create'],
81
- 'debugbreak' => [Nodes\DebugbreakNode::class, 'create'],
82
- 'trace' => [Nodes\TraceNode::class, 'create'],
83
-
84
- 'var' => [Nodes\VarNode::class, 'create'],
85
- 'default' => [Nodes\VarNode::class, 'create'],
86
-
87
- 'try' => [Nodes\TryNode::class, 'create'],
88
- 'rollback' => [Nodes\RollbackNode::class, 'create'],
89
-
90
- 'foreach' => [Nodes\ForeachNode::class, 'create'],
91
- 'for' => [Nodes\ForNode::class, 'create'],
92
- 'while' => [Nodes\WhileNode::class, 'create'],
93
- 'iterateWhile' => [Nodes\IterateWhileNode::class, 'create'],
94
- 'sep' => [Nodes\FirstLastSepNode::class, 'create'],
95
- 'last' => [Nodes\FirstLastSepNode::class, 'create'],
96
- 'first' => [Nodes\FirstLastSepNode::class, 'create'],
97
- 'skipIf' => [Nodes\JumpNode::class, 'create'],
98
- 'breakIf' => [Nodes\JumpNode::class, 'create'],
99
- 'exitIf' => [Nodes\JumpNode::class, 'create'],
100
- 'continueIf' => [Nodes\JumpNode::class, 'create'],
101
-
102
- 'if' => [Nodes\IfNode::class, 'create'],
103
- 'ifset' => [Nodes\IfNode::class, 'create'],
104
- 'ifchanged' => [Nodes\IfChangedNode::class, 'create'],
105
- 'n:ifcontent' => [Nodes\IfContentNode::class, 'create'],
106
- 'n:else' => [Nodes\NElseNode::class, 'create'],
107
- 'switch' => [Nodes\SwitchNode::class, 'create'],
78
+ 'syntax' => $this->parseSyntax(...),
79
+
80
+ 'dump' => Nodes\DumpNode::create(...),
81
+ 'debugbreak' => Nodes\DebugbreakNode::create(...),
82
+ 'trace' => Nodes\TraceNode::create(...),
83
+
84
+ 'var' => Nodes\VarNode::create(...),
85
+ 'default' => Nodes\VarNode::create(...),
86
+
87
+ 'try' => Nodes\TryNode::create(...),
88
+ 'rollback' => Nodes\RollbackNode::create(...),
89
+
90
+ 'foreach' => Nodes\ForeachNode::create(...),
91
+ 'for' => Nodes\ForNode::create(...),
92
+ 'while' => Nodes\WhileNode::create(...),
93
+ 'iterateWhile' => Nodes\IterateWhileNode::create(...),
94
+ 'sep' => Nodes\FirstLastSepNode::create(...),
95
+ 'last' => Nodes\FirstLastSepNode::create(...),
96
+ 'first' => Nodes\FirstLastSepNode::create(...),
97
+ 'skipIf' => Nodes\JumpNode::create(...),
98
+ 'breakIf' => Nodes\JumpNode::create(...),
99
+ 'exitIf' => Nodes\JumpNode::create(...),
100
+ 'continueIf' => Nodes\JumpNode::create(...),
101
+
102
+ 'if' => Nodes\IfNode::create(...),
103
+ 'ifset' => Nodes\IfNode::create(...),
104
+ 'ifchanged' => Nodes\IfChangedNode::create(...),
105
+ 'n:ifcontent' => Nodes\IfContentNode::create(...),
106
+ 'n:else' => Nodes\NElseNode::create(...),
107
+ 'n:elseif' => Nodes\NElseNode::create(...),
108
+ 'switch' => Nodes\SwitchNode::create(...),
108
109
  ];
109
110
  }
110
111
 
@@ -112,72 +113,75 @@ final class CoreExtension extends Latte\Extension
112
113
  public function getFilters(): array
113
114
  {
114
115
  return [
115
- 'batch' => [$this->filters, 'batch'],
116
- 'breakLines' => [$this->filters, 'breaklines'],
117
- 'breaklines' => [$this->filters, 'breaklines'],
118
- 'bytes' => [$this->filters, 'bytes'],
116
+ 'batch' => $this->filters->batch(...),
117
+ 'breakLines' => $this->filters->breaklines(...),
118
+ 'breaklines' => $this->filters->breaklines(...),
119
+ 'bytes' => $this->filters->bytes(...),
119
120
  'capitalize' => extension_loaded('mbstring')
120
- ? [$this->filters, 'capitalize']
121
+ ? $this->filters->capitalize(...)
121
122
  : fn() => throw new RuntimeException('Filter |capitalize requires mbstring extension.'),
122
- 'ceil' => [$this->filters, 'ceil'],
123
- 'checkUrl' => [Latte\Runtime\Filters::class, 'safeUrl'],
124
- 'clamp' => [$this->filters, 'clamp'],
125
- 'dataStream' => [$this->filters, 'dataStream'],
126
- 'datastream' => [$this->filters, 'dataStream'],
127
- 'date' => [$this->filters, 'date'],
128
- 'escape' => [Latte\Runtime\Filters::class, 'nop'],
129
- 'escapeCss' => [Latte\Runtime\Filters::class, 'escapeCss'],
130
- 'escapeHtml' => [Latte\Runtime\Filters::class, 'escapeHtml'],
131
- 'escapeHtmlComment' => [Latte\Runtime\Filters::class, 'escapeHtmlComment'],
132
- 'escapeICal' => [Latte\Runtime\Filters::class, 'escapeICal'],
133
- 'escapeJs' => [Latte\Runtime\Filters::class, 'escapeJs'],
123
+ 'ceil' => $this->filters->ceil(...),
124
+ 'checkUrl' => $this->filters->checkUrl(...),
125
+ 'clamp' => $this->filters->clamp(...),
126
+ 'dataStream' => $this->filters->dataStream(...),
127
+ 'datastream' => $this->filters->dataStream(...),
128
+ 'date' => $this->filters->date(...),
129
+ 'escape' => Latte\Runtime\Helpers::nop(...),
130
+ 'escapeCss' => Latte\Runtime\Helpers::escapeCss(...),
131
+ 'escapeHtml' => Latte\Runtime\HtmlHelpers::escapeText(...),
132
+ 'escapeHtmlComment' => Latte\Runtime\HtmlHelpers::escapeComment(...),
133
+ 'escapeICal' => Latte\Runtime\Helpers::escapeICal(...),
134
+ 'escapeJs' => Latte\Runtime\Helpers::escapeJs(...),
134
135
  'escapeUrl' => 'rawurlencode',
135
- 'escapeXml' => [Latte\Runtime\Filters::class, 'escapeXml'],
136
- 'explode' => [$this->filters, 'explode'],
137
- 'filter' => [$this->filters, 'filter'],
138
- 'first' => [$this->filters, 'first'],
136
+ 'escapeXml' => Latte\Runtime\XmlHelpers::escapeText(...),
137
+ 'explode' => $this->filters->explode(...),
138
+ 'filter' => $this->filters->filter(...),
139
+ 'first' => $this->filters->first(...),
140
+ 'firstLower' => extension_loaded('mbstring')
141
+ ? $this->filters->firstLower(...)
142
+ : fn() => throw new RuntimeException('Filter |firstLower requires mbstring extension.'),
139
143
  'firstUpper' => extension_loaded('mbstring')
140
- ? [$this->filters, 'firstUpper']
144
+ ? $this->filters->firstUpper(...)
141
145
  : fn() => throw new RuntimeException('Filter |firstUpper requires mbstring extension.'),
142
- 'floor' => [$this->filters, 'floor'],
143
- 'group' => [$this->filters, 'group'],
144
- 'implode' => [$this->filters, 'implode'],
145
- 'indent' => [$this->filters, 'indent'],
146
- 'join' => [$this->filters, 'implode'],
147
- 'last' => [$this->filters, 'last'],
148
- 'length' => [$this->filters, 'length'],
149
- 'localDate' => [$this->filters, 'localDate'],
146
+ 'floor' => $this->filters->floor(...),
147
+ 'group' => $this->filters->group(...),
148
+ 'implode' => $this->filters->implode(...),
149
+ 'indent' => $this->filters->indent(...),
150
+ 'join' => $this->filters->implode(...),
151
+ 'last' => $this->filters->last(...),
152
+ 'length' => $this->filters->length(...),
153
+ 'localDate' => $this->filters->localDate(...),
150
154
  'lower' => extension_loaded('mbstring')
151
- ? [$this->filters, 'lower']
155
+ ? $this->filters->lower(...)
152
156
  : fn() => throw new RuntimeException('Filter |lower requires mbstring extension.'),
153
- 'number' => [$this->filters, 'number'],
154
- 'padLeft' => [$this->filters, 'padLeft'],
155
- 'padRight' => [$this->filters, 'padRight'],
156
- 'query' => [$this->filters, 'query'],
157
- 'random' => [$this->filters, 'random'],
158
- 'repeat' => [$this->filters, 'repeat'],
159
- 'replace' => [$this->filters, 'replace'],
160
- 'replaceRe' => [$this->filters, 'replaceRe'],
161
- 'replaceRE' => [$this->filters, 'replaceRe'],
162
- 'reverse' => [$this->filters, 'reverse'],
163
- 'round' => [$this->filters, 'round'],
164
- 'slice' => [$this->filters, 'slice'],
165
- 'sort' => [$this->filters, 'sort'],
166
- 'spaceless' => [$this->filters, 'strip'],
167
- 'split' => [$this->filters, 'explode'],
168
- 'strip' => [$this->filters, 'strip'], // obsolete
169
- 'stripHtml' => [$this->filters, 'stripHtml'],
170
- 'striphtml' => [$this->filters, 'stripHtml'],
171
- 'stripTags' => [$this->filters, 'stripTags'],
172
- 'striptags' => [$this->filters, 'stripTags'],
173
- 'substr' => [$this->filters, 'substring'],
174
- 'trim' => [$this->filters, 'trim'],
175
- 'truncate' => [$this->filters, 'truncate'],
157
+ 'number' => $this->filters->number(...),
158
+ 'padLeft' => $this->filters->padLeft(...),
159
+ 'padRight' => $this->filters->padRight(...),
160
+ 'query' => $this->filters->query(...),
161
+ 'random' => $this->filters->random(...),
162
+ 'repeat' => $this->filters->repeat(...),
163
+ 'replace' => $this->filters->replace(...),
164
+ 'replaceRe' => $this->filters->replaceRe(...),
165
+ 'replaceRE' => $this->filters->replaceRe(...),
166
+ 'reverse' => $this->filters->reverse(...),
167
+ 'round' => $this->filters->round(...),
168
+ 'slice' => $this->filters->slice(...),
169
+ 'sort' => $this->filters->sort(...),
170
+ 'spaceless' => $this->filters->strip(...),
171
+ 'split' => $this->filters->explode(...),
172
+ 'strip' => $this->filters->strip(...), // obsolete
173
+ 'stripHtml' => $this->filters->stripHtml(...),
174
+ 'striphtml' => $this->filters->stripHtml(...),
175
+ 'stripTags' => $this->filters->stripTags(...),
176
+ 'striptags' => $this->filters->stripTags(...),
177
+ 'substr' => $this->filters->substring(...),
178
+ 'trim' => $this->filters->trim(...),
179
+ 'truncate' => $this->filters->truncate(...),
176
180
  'upper' => extension_loaded('mbstring')
177
- ? [$this->filters, 'upper']
181
+ ? $this->filters->upper(...)
178
182
  : fn() => throw new RuntimeException('Filter |upper requires mbstring extension.'),
179
183
  'webalize' => class_exists(Nette\Utils\Strings::class)
180
- ? [Nette\Utils\Strings::class, 'webalize']
184
+ ? Nette\Utils\Strings::webalize(...)
181
185
  : fn() => throw new RuntimeException('Filter |webalize requires nette/utils package.'),
182
186
  ];
183
187
  }
@@ -186,15 +190,16 @@ final class CoreExtension extends Latte\Extension
186
190
  public function getFunctions(): array
187
191
  {
188
192
  return [
189
- 'clamp' => [$this->filters, 'clamp'],
190
- 'divisibleBy' => [$this->filters, 'divisibleBy'],
191
- 'even' => [$this->filters, 'even'],
192
- 'first' => [$this->filters, 'first'],
193
- 'group' => [$this->filters, 'group'],
194
- 'last' => [$this->filters, 'last'],
195
- 'odd' => [$this->filters, 'odd'],
196
- 'slice' => [$this->filters, 'slice'],
193
+ 'clamp' => $this->filters->clamp(...),
194
+ 'divisibleBy' => $this->filters->divisibleBy(...),
195
+ 'even' => $this->filters->even(...),
196
+ 'first' => $this->filters->first(...),
197
+ 'group' => $this->filters->group(...),
198
+ 'last' => $this->filters->last(...),
199
+ 'odd' => $this->filters->odd(...),
200
+ 'slice' => $this->filters->slice(...),
197
201
  'hasBlock' => fn(Runtime\Template $template, string $name): bool => $template->hasBlock($name),
202
+ 'hasTemplate' => fn(Runtime\Template $template, string $name): bool => $this->hasTemplate($name, $template->getName()),
198
203
  ];
199
204
  }
200
205
 
@@ -203,15 +208,23 @@ final class CoreExtension extends Latte\Extension
203
208
  {
204
209
  $passes = new Passes($this->engine);
205
210
  return [
206
- 'internalVariables' => [$passes, 'forbiddenVariablesPass'],
207
- 'overwrittenVariables' => [Nodes\ForeachNode::class, 'overwrittenVariablesPass'],
208
- 'customFunctions' => [$passes, 'customFunctionsPass'],
209
- 'moveTemplatePrintToHead' => [Nodes\TemplatePrintNode::class, 'moveToHeadPass'],
210
- 'nElse' => [Nodes\NElseNode::class, 'processPass'],
211
+ 'internalVariables' => $passes->forbiddenVariablesPass(...),
212
+ 'checkUrls' => $passes->checkUrlsPass(...),
213
+ 'overwrittenVariables' => Nodes\ForeachNode::overwrittenVariablesPass(...),
214
+ 'customFunctions' => $passes->customFunctionsPass(...),
215
+ 'moveTemplatePrintToHead' => Nodes\TemplatePrintNode::moveToHeadPass(...),
216
+ 'nElse' => Nodes\NElseNode::processPass(...),
217
+ 'scriptTagQuotes' => $passes->scriptTagQuotesPass(...),
211
218
  ];
212
219
  }
213
220
 
214
221
 
222
+ public function getCacheKey(Latte\Engine $engine): mixed
223
+ {
224
+ return array_keys($engine->getFunctions());
225
+ }
226
+
227
+
215
228
  /**
216
229
  * {include [file] "file" [with blocks] [,] [params]}
217
230
  * {include [block] name [,] [params]}
@@ -254,4 +267,19 @@ final class CoreExtension extends Latte\Extension
254
267
  }
255
268
  return $inner;
256
269
  }
270
+
271
+
272
+ /**
273
+ * Checks if template exists.
274
+ */
275
+ private function hasTemplate(string $name, string $referringName): bool
276
+ {
277
+ try {
278
+ $name = $this->engine->getLoader()->getReferredName($name, $referringName);
279
+ $this->engine->createTemplate($name, [], clearCache: false);
280
+ return true;
281
+ } catch (Latte\TemplateNotFoundException) {
282
+ return false;
283
+ }
284
+ }
257
285
  }