github.com/MontFerret/ferret@v0.18.0/CHANGELOG.md (about) 1 ## Changelog 2 3 ### 0.16.6 4 5 ### Fixed 6 - Invalid XPath evaluation in HTTP driver [#725](https://github.com/MontFerret/ferret/pull/725) 7 - Go routines leakage [#726](https://github.com/MontFerret/ferret/pull/726) 8 9 ### Updated 10 - Small tweak in FQL Parser for FQL Formatter [#723](https://github.com/MontFerret/ferret/pull/723) 11 12 ### 0.16.5 13 14 ### Fixed 15 - Query fails if an element is not found (regression) [#722](https://github.com/MontFerret/ferret/pull/722) 16 17 ### Updated 18 - Small tweak in FQL Parser for FQL Formatter [#723](https://github.com/MontFerret/ferret/pull/723) 19 20 ### 0.16.4 21 22 ### Fixed 23 - Fixed inability to parse custom date formats with DATE function [#720](https://github.com/MontFerret/ferret/pull/720) 24 25 ### 0.16.3 26 27 ### Fixed 28 - Panic during XPath execution by HTTP driver [#715](https://github.com/MontFerret/ferret/pull/715) 29 30 ### 0.16.2 31 32 ### Fixed 33 - Unable to use dynamic values in LIMIT clause [#706](https://github.com/MontFerret/ferret/pull/706) 34 - HTTP driver does not allow to override header values [#707](https://github.com/MontFerret/ferret/pull/707), [#709](https://github.com/MontFerret/ferret/pull/709) 35 - Cleaned up deps [#710](https://github.com/MontFerret/ferret/pull/710), [#711](https://github.com/MontFerret/ferret/pull/711) 36 37 ### 0.16.1 38 39 ### Fixed 40 - Logical precedence in ternary operator condition [#704](https://github.com/MontFerret/ferret/pull/704) 41 42 ### 0.16.0 43 44 ### Added 45 - New ``WAITFOR EVENT`` syntax [#590](https://github.com/MontFerret/ferret/pull/590) 46 - Support of optional chaining [#634](https://github.com/MontFerret/ferret/pull/634) 47 - Tracing to CDP driver [#648](https://github.com/MontFerret/ferret/pull/648) 48 - Support of errors suppression in function calls [#652](https://github.com/MontFerret/ferret/pull/652) 49 - Support of error suppression in inline expressions [#671](https://github.com/MontFerret/ferret/pull/671) 50 - Support of XPath selectors throughout drivers API [#657](https://github.com/MontFerret/ferret/pull/657) 51 - Zero-allocation in ``FOR`` loops returning ``NONE`` [#673](https://github.com/MontFerret/ferret/pull/673) 52 - Ignorable ``_`` variable [#673](https://github.com/MontFerret/ferret/pull/673) 53 54 ### Changed 55 - Updated Root API [#622](https://github.com/MontFerret/ferret/pull/622) 56 - Increased websocket maximum buffer size in CDP driver [#648](https://github.com/MontFerret/ferret/pull/648) 57 58 ### Fixed 59 - ``values.Parse`` does not parse int64 [#621](https://github.com/MontFerret/ferret/pull/621) 60 - CPU leakage [#635](https://github.com/MontFerret/ferret/pull/635), [90792bc](https://github.com/MontFerret/ferret/pull/648/commits/90792bcf3cd0b95075988aafe5d1c5072f2985bc) 61 - Nil pointer exception [#636](https://github.com/MontFerret/ferret/pull/636) 62 - Use of deprecated CDP API methods [#637](https://github.com/MontFerret/ferret/pull/637) 63 - HTTP driver makes multiple requests [#642](https://github.com/MontFerret/ferret/pull/642) 64 - Log level is ignored [aeb1247](https://github.com/MontFerret/ferret/commit/aeb1247ab34c3107b66ef76cfedde0c747904889) 65 66 #### Dependencies 67 - Upgraded github.com/mafredri/cdp 68 - Upgraded github.com/antchfx/xpath 69 - Upgraded github.com/PuerkitoBio/goquery 70 - Upgraded github.com/rs/zerolog 71 72 #### Other 73 - Dropped support of Go 1.13 [0cb7623](https://github.com/MontFerret/ferret/commit/0cb7623a7fca00cc044ba3b62822b78557d96f2f) 74 - New Eval API in CDP driver [#651](https://github.com/MontFerret/ferret/pull/651), [#658](https://github.com/MontFerret/ferret/pull/658) 75 76 ### 0.15.0 77 #### Added 78 - Support of document charset in HTTP driver [#609](https://github.com/MontFerret/ferret/pull/609) 79 - ``Walk`` method to FQL Parser [80c278e](https://github.com/MontFerret/ferret/commit/80c278ec6c783e29a8df12865da8208d1c148c65) 80 - Possibility to send keyboard events like 'Enter' or 'Shift' [#618](https://github.com/MontFerret/ferret/pull/618) 81 82 #### Changed 83 - Moved CLI to a separate repository [#608](https://github.com/MontFerret/ferret/pull/608) 84 85 #### Fixed 86 - Passing headers and cookies to HTTP driver [#614](https://github.com/MontFerret/ferret/pull/614) 87 - Reading property of anyonymous object [#616](https://github.com/MontFerret/ferret/pull/616) 88 - Clearing input text containing special characteers [#619](https://github.com/MontFerret/ferret/pull/619) 89 90 ### 0.14.1 91 #### Fixed 92 - Parsing HTTP headers and cookies [#598](https://github.com/MontFerret/ferret/pull/598) 93 - Parsing cookie expiration datetime [#602](https://github.com/MontFerret/ferret/pull/602) 94 95 ### 0.14.0 96 #### Added 97 - Support of History API [#584](https://github.com/MontFerret/ferret/pull/584) 98 - Support of custom http transport in HTTP driver [#586](https://github.com/MontFerret/ferret/pull/586) 99 - ``LIKE`` operator [#591](https://github.com/MontFerret/ferret/pull/591) 100 - Support of ignoring page resources [#592](https://github.com/MontFerret/ferret/pull/592) 101 - Support of handling non-200 status codes in HTTP driver [#593](https://github.com/MontFerret/ferret/pull/593) 102 - ``DOCUMENT_EXISTS`` function [#594](https://github.com/MontFerret/ferret/pull/594) 103 104 #### Fixed 105 - ``RAND(0,100)`` always same result [#579](https://github.com/MontFerret/ferret/pull/579) 106 - Element.children always returns empty array [#580](https://github.com/MontFerret/ferret/pull/580) 107 - Passing parameters with a nested nil structure leads to panic [#587](https://github.com/MontFerret/ferret/pull/587) 108 109 ### 0.13.0 110 #### Added 111 - ``WHILE`` loop and ``ATTR_QUERY`` function [#567](https://github.com/MontFerret/ferret/pull/567) 112 - Support of Element.nextElementSibling and Element.previousElement [#569](https://github.com/MontFerret/ferret/pull/569) 113 - Support of Element.getParentElement [#571](https://github.com/MontFerret/ferret/pull/571) 114 - Support of computed styles [#570](https://github.com/MontFerret/ferret/pull/570) 115 116 #### Fixed 117 - HTML escaping [#573](https://github.com/MontFerret/ferret/pull/573) 118 119 #### Updated 120 - Upgraded CDP client [#536](https://github.com/MontFerret/ferret/pull/563) 121 - Upgraded GoQuery [#562](https://github.com/MontFerret/ferret/pull/562) 122 - Upgraded XPath [#572](https://github.com/MontFerret/ferret/pull/572) 123 124 ### 0.12.1 125 #### Fixed 126 - Missing regexp FILTER operator [#558](https://github.com/MontFerret/ferret/pull/558) 127 - Open tabs on page load error [#564](https://github.com/MontFerret/ferret/pull/564) 128 - Docs for WAIT_NAVIGATION [#557](https://github.com/MontFerret/ferret/pull/557) 129 130 ### 0.12.0 131 #### Added 132 - iFrame navigation handling [#535](https://github.com/MontFerret/ferret/pull/535) 133 - ``FRAMES`` function for fast frame lookup [#535](https://github.com/MontFerret/ferret/pull/535) 134 - Assertion library [#526](https://github.com/MontFerret/ferret/pull/526) 135 136 #### Changed 137 - Removed property caching and tracking [#531](https://github.com/MontFerret/ferret/pull/531) 138 - Updated dependencies [#528](https://github.com/MontFerret/ferret/pull/528), [#525](https://github.com/MontFerret/ferret/pull/525) 139 - ``IO::FS::WRITE`` accepts any type as a file content [#544](https://github.com/MontFerret/ferret/pull/544) 140 - Print errors on stderr [#539](https://github.com/MontFerret/ferret/pull/539) 141 142 #### Fixed 143 - ``WAIT`` does not respect cancellation signal [#524](https://github.com/MontFerret/ferret/pull/524) 144 - Missed ``DATE_COMPARE`` [#537](https://github.com/MontFerret/ferret/pull/537) 145 - Spelling [#534](https://github.com/MontFerret/ferret/pull/534) 146 - ``SCREENSHOT`` param type check [#545](https://github.com/MontFerret/ferret/pull/545) 147 - Wrong base for int formatter [e283722](https://github.com/MontFerret/ferret/commit/e283722d37f392f755ace2a42232c0d4b37d1838) 148 149 ### 0.11.1 150 #### Fixed 151 - Fixed use of unquoted scroll options [#521](https://github.com/MontFerret/ferret/pull/521) 152 - Upgraded ANTLR version [#517](https://github.com/MontFerret/ferret/pull/517) 153 154 155 ### 0.11.0 156 #### Added 157 - USE statement. [#470](https://github.com/MontFerret/ferret/pull/470) 158 - Scroll options. [#471](https://github.com/MontFerret/ferret/pull/471) 159 - Functions for working with file paths. [#505](https://github.com/MontFerret/ferret/pull/505) 160 - Fuzzer. [#501](https://github.com/MontFerret/ferret/pull/501) 161 162 ## Updated 163 - ``DECODED_URI_COMPONENT`` decodes unicode symbols now. [#499](https://github.com/MontFerret/ferret/pull/499) 164 - Dependencies. [87265cf](https://github.com/MontFerret/ferret/commit/87265cf470c4b614d144706020729dd453620a0c) 165 166 # Fixed 167 - ``RAND`` always returns same result . [#484](https://github.com/MontFerret/ferret/pull/484) 168 - ``RAND`` does not work on Windows. [#497](https://github.com/MontFerret/ferret/pull/497) 169 - ``IO::FS::WRITE`` does not add read permissions. [#494](https://github.com/MontFerret/ferret/pull/494) 170 - Unable to use keywords in namespaces. [#481](https://github.com/MontFerret/ferret/pull/481) 171 172 ### 0.10.2 173 #### Updated 174 - Updated dependencies. [#466](https://github.com/MontFerret/ferret/pull/466) [#467](https://github.com/MontFerret/ferret/pull/467) 175 176 ### 0.10.1 177 #### Fixed 178 - Added string functions with correct names. [#461](https://github.com/MontFerret/ferret/pull/461) 179 - Added missed datetime library. [#462](https://github.com/MontFerret/ferret/pull/462) 180 181 ### 0.10.0 182 #### Added 183 - Response information to drivers. [#391](https://github.com/MontFerret/ferret/pull/391), [#450](https://github.com/MontFerret/ferret/pull/450) 184 - Compilation check whether parameter values are provided. [#396](https://github.com/MontFerret/ferret/pull/396) 185 - Allowed HTTP response codes to HTTP driver. [#398](https://github.com/MontFerret/ferret/pull/398) 186 - IO functions to standard library. [#403](https://github.com/MontFerret/ferret/pull/403), [#405](https://github.com/MontFerret/ferret/pull/405), [#452](https://github.com/MontFerret/ferret/pull/452) 187 - Compilation check whether a variable name is unique. [#416](https://github.com/MontFerret/ferret/pull/416) 188 - Loading HTML page into memory. Supported by all drivers. [#413](https://github.com/MontFerret/ferret/pull/434) 189 190 #### Fixed 191 - Fixes in HTTP driver. [#390](https://github.com/MontFerret/ferret/pull/390) 192 - Inability to handle redirects correctly. [#432](https://github.com/MontFerret/ferret/pull/432) 193 - XPath selector gives faulty output. [#435](https://github.com/MontFerret/ferret/pull/435) 194 - Typos in README and comments. [#446](https://github.com/MontFerret/ferret/pull/446) 195 - ``PAGINATION`` fails during redirects. [#448](https://github.com/MontFerret/ferret/pull/448) 196 197 #### Changed 198 - Made FQL keywords case insensitive. [#393](https://github.com/MontFerret/ferret/pull/393) 199 - Performance boost in EventBroker. [#402](https://github.com/MontFerret/ferret/pull/402), [#407](https://github.com/MontFerret/ferret/pull/407), [#408](https://github.com/MontFerret/ferret/pull/408) 200 - Updated dependencies. 201 202 203 ### 0.9.0 204 #### Added 205 - ``INPUT_CLEAR`` function to clear input's value. [#366](https://github.com/MontFerret/ferret/pull/366) 206 - Support of tick for string literals. [#367](https://github.com/MontFerret/ferret/pull/367) 207 - Support of default headers and cookies. [#372](https://github.com/MontFerret/ferret/pull/372) 208 - Support of use of params in dot notation. [#378](https://github.com/MontFerret/ferret/pull/378) 209 - Optional count param to ``CLICK`` function. [#377](https://github.com/MontFerret/ferret/pull/377) 210 - ``BLUR`` function. [#379](https://github.com/MontFerret/ferret/pull/379) 211 212 #### Fixed 213 - Tabs don't get closed on page load error. [#359](https://github.com/MontFerret/ferret/pull/359) 214 - ``CLICK`` function does not allow to use element with a selector. [#355](https://github.com/MontFerret/ferret/pull/355) 215 - Unable to use member expression right after a function call. [#368](https://github.com/MontFerret/ferret/pull/368) 216 217 #### Changed 218 - Updated zerolog. [#352](https://github.com/MontFerret/ferret/pull/352) 219 - Runtime ``Object`` and ``Array`` values implement ``core.Getter`` interface. [#353](https://github.com/MontFerret/ferret/pull/353) 220 - Externalized default timeout values. [#371](https://github.com/MontFerret/ferret/pull/371) 221 - Refactored ``drivers.HTMLDocument`` and ``drivers.HTMLElement`` interfaces. [#376](https://github.com/MontFerret/ferret/pull/376), [#375](https://github.com/MontFerret/ferret/pull/375) 222 223 ### 0.8.3 224 #### Fixed 225 - Unable to click by selector using an element. 226 227 ### 0.8.2 228 #### Fixed 229 - Scrolling position is not centered. [#343](https://github.com/MontFerret/ferret/pull/343) 230 - Unable to set custom logger fields. [#346](https://github.com/MontFerret/ferret/pull/346) 231 - Fixed ``INNER_HTML``, ``INNER_TEXT``, ``INNER_HTML_SET``, ``INNER_TEXT_SET`` functions. [#347](https://github.com/MontFerret/ferret/pull/347) 232 - Unable to set custom headers. [#348](https://github.com/MontFerret/ferret/pull/348) 233 234 ### 0.8.1 235 #### Fixed 236 - Added existence check to ``CLICK`` and ``CLICK_ALL`` functions. [#341](https://github.com/MontFerret/ferret/pull/341) 237 - Added a check whether an element is in the viewport before scrolling. [#342](https://github.com/MontFerret/ferret/pull/342) 238 239 ### 0.8.0 240 #### Added 241 - Delay randomization for inputs. [#283](https://github.com/MontFerret/ferret/pull/283) 242 - Namespace support. [#269](https://github.com/MontFerret/ferret/pull/296) 243 - iframe support. [#315](https://github.com/MontFerret/ferret/pull/315) 244 - Better emulation of user interaction. [#316](https://github.com/MontFerret/ferret/pull/316), [#331](https://github.com/MontFerret/ferret/pull/331) 245 - ``ESCAPE_HTML``, ``UNESCAPE_HTML`` and ``DECODE_URI_COMPONENT`` functions. [#318](https://github.com/MontFerret/ferret/pull/318) 246 - XPath support. [#322](https://github.com/MontFerret/ferret/pull/322) 247 - Regular expression operator. [#326](https://github.com/MontFerret/ferret/pull/326) 248 - ``INNER_HTML_SET`` and ``INNER_TEXT_SET`` functions. [#329](https://github.com/MontFerret/ferret/pull/329) 249 - Possibility to set viewport size. [#334](https://github.com/MontFerret/ferret/pull/334) 250 - ``FOCUS`` function. [#340](https://github.com/MontFerret/ferret/pull/340) 251 252 #### Changed 253 - ``RAND`` accepts optional upper and lower limits. [#271](https://github.com/MontFerret/ferret/pull/271) 254 - Updated CDP definitions. [#328](https://github.com/MontFerret/ferret/pull/328) 255 - Logic of iterator termination. [#330](https://github.com/MontFerret/ferret/pull/330) 256 257 #### Fixed 258 - Order of arguments in ``SCROLL`` function. [#269](https://github.com/MontFerret/ferret/pull/269) 259 - The command line parameter "--param" does not support colon. [#282](https://github.com/MontFerret/ferret/pull/282) 260 - Race condition during ``WAIT_NAVIGATION`` call. [#281](https://github.com/MontFerret/ferret/pull/281) 261 - Arithmetic operators. [#298](https://github.com/MontFerret/ferret/pull/298) 262 - Missed UA setting for HTTP driver. [#318](https://github.com/MontFerret/ferret/pull/318) 263 - Improper math operator used in calculating page load timeout. [#319](https://github.com/MontFerret/ferret/pull/319) 264 - Wrong function names in README. [#321](https://github.com/MontFerret/ferret/pull/321) 265 - JSON serialization for HTTPHeader type. [#323](https://github.com/MontFerret/ferret/pull/323) 266 267 ### 0.7.0 268 #### Added 269 - Autocomplete to CLI [#219](https://github.com/MontFerret/ferret/pull/219). 270 - New mouse functions - ``MOUSE(x, y)`` and ``SCROLL(x, y)`` [#237](https://github.com/MontFerret/ferret/pull/237). 271 - ``WAIT_NO_ELEMENT``, ``WAIT_NO_CLASS`` and ``WAIT_NO_CLASS_ALL`` functions [#249](https://github.com/MontFerret/ferret/pull/249). 272 - Computed ``HTMLElement.style`` property [#255](https://github.com/MontFerret/ferret/pull/255). 273 - ``ATTR_GET``, ``ATTR_SET``, ``ATTR_REMOVE``, ``STYLE_GET``, ``STYLE_SET`` and ``STYLE_REMOVE`` functions [#255](https://github.com/MontFerret/ferret/pull/255). 274 - ``WAIT_STYLE``, ``WAIT_NO_STYLE``, ``WAIT_STYLE_ALL`` and ``WAIT_NO_STYLE_ALL`` functions [#256](https://github.com/MontFerret/ferret/pull/260). 275 - Cookies support. Now a document can be loaded with preset cookies. Also, HTMLDocument has ``.cookies`` property. 276 In order to manipulate with cookies, ``COOKIE_DEL``, ``COOKIE_SET`` AND ``COOKIE_GET`` functions were added [#242](https://github.com/MontFerret/ferret/pull/242). 277 278 ``` 279 LET doc = DOCUMENT(url, { 280 driver: "cdp", 281 cookies: [{ 282 name: "x-e2e", 283 value: "test" 284 }, { 285 name: "x-e2e-2", 286 value: "test2" 287 }] 288 }) 289 ``` 290 291 #### Changed 292 - Renamed ParseTYPEP to MustParseTYPE [#231](https://github.com/MontFerret/ferret/pull/231). 293 - Added context to all HTML object [#235](https://github.com/MontFerret/ferret/pull/235). 294 295 #### Fixed 296 - Click events are not cancellable [#222](https://github.com/MontFerret/ferret/pull/222). 297 - Name collision [#223](https://github.com/MontFerret/ferret/pull/223). 298 - Invalid return in FQL Compiler constructor [#227](https://github.com/MontFerret/ferret/pull/227). 299 - Incorrect string length computation [#238](https://github.com/MontFerret/ferret/pull/238). 300 - Access to HTML object properties via dot notation [#239](https://github.com/MontFerret/ferret/pull/239). 301 - Graceful process termination [#240](https://github.com/MontFerret/ferret/pull/240). 302 - Browser launcher for macOS [#246](https://github.com/MontFerret/ferret/pull/246). 303 304 #### Breaking changes 305 - New runtime type system [#232](https://github.com/MontFerret/ferret/pull/232). 306 - Moved and renamed ``collections.IterableCollection`` and ```collections.CollectionIterator``` interfaces. 307 Now they are in ``core`` package and called ``Iterable`` and ``Iterator`` [1af8b37](https://github.com/MontFerret/ferret/commit/f8e061cc8034fd4cfa4ce2a094276d50137a4b98). 308 - Renamed ``collections.Collection`` interface to ``collections.Measurable`` [1af8b37](https://github.com/MontFerret/ferret/commit/f8e061cc8034fd4cfa4ce2a094276d50137a4b98). 309 - Moved html interfaces from ``runtime/values`` package into ``drivers`` package [#234](https://github.com/MontFerret/ferret/pull/234). 310 - Changed drivers initialization. Replaced old ``drivers.WithDynamic`` and ``drivers.WithStatic`` methods with a new ``drivers.WithContext`` method with optional parameter ``drivers.AsDefault()`` [#234](https://github.com/MontFerret/ferret/pull/234). 311 - New document load params [#234](https://github.com/MontFerret/ferret/pull/234). 312 ``` 313 LET doc = DOCUMENT(url, { 314 driver: "cdp" 315 }) 316 ``` 317 318 319 ### 0.6.0 320 #### Added 321 - Added support for ```context.Done()``` to interrupt an execution [#201](https://github.com/MontFerret/ferret/pull/201). 322 - Added support for custom HTML drivers [#209](https://github.com/MontFerret/ferret/pull/209). 323 - Added support for dot notation access and assignments for custom types [#214](https://github.com/MontFerret/ferret/pull/214/commits/0ea36e511540e569ef53b8748301512b6d8a046b) 324 - Added ```ELEMENT_EXISTS(doc, selector) -> Boolean``` function [#210](https://github.com/MontFerret/ferret/pull/210). 325 ``` 326 LET exists = ELEMENT_EXISTS(doc, ".nav") 327 ``` 328 - Added ```PageLoadParams``` to ```DOCUMENT``` function [#214](https://github.com/MontFerret/ferret/pull/214/commits/3434323cd08ca3186e90cb5ab1faa26e28a28709). 329 ``` 330 LET doc = DOCUMENT("https://www.google.com/", { 331 dynamic: true, 332 timeout: 10000 333 }) 334 ``` 335 336 #### Fixed 337 - Math operators precedence [#202](https://github.com/MontFerret/ferret/pull/202). 338 - Memory leak in ```DOWNLOAD``` function [#213](https://github.com/MontFerret/ferret/pull/213). 339 340 #### Breaking change 341 - **(Embedded)** Removed builtin drivers initialization in Program [#198](https://github.com/MontFerret/ferret/pull/198). 342 The initialization must be done via context manually. 343 344 ### 0.5.2 345 #### Fixed 346 - Does not close browser tab when fails to load a page [#193](https://github.com/MontFerret/ferret/pull/193). 347 - ```HTMLElement.value``` does not return actual value [#195](https://github.com/MontFerret/ferret/pull/195) 348 - Compiles a query with duplicate variable in FOR statement [#196](https://github.com/MontFerret/ferret/pull/196) 349 - Default CDP address [#197](https://github.com/MontFerret/ferret/pull/197). 350 351 ### 0.5.1 352 #### Fixed 353 - Unable to change a page load timeout [#186](https://github.com/MontFerret/ferret/pull/186). 354 - ``RETURN doc`` returns an empty string [#187](https://github.com/MontFerret/ferret/pull/187). 355 - Unable to pass an HTML Node without a selector to ``INNER_TEXT`` and ``INNER_HTML`` [#187](https://github.com/MontFerret/ferret/pull/187). 356 - ``doc.innerText`` returns an error [#187](https://github.com/MontFerret/ferret/pull/187). 357 - Panics when ``WAIT_CLASS`` does not receive all required arguments [#192](https://github.com/MontFerret/ferret/pull/192). 358 359 ### 0.5.0 360 #### Added 361 - ``FMT`` function [#151](https://github.com/MontFerret/ferret/pull/151). 362 - DateTime functions [#152](https://github.com/MontFerret/ferret/pull/152), [#153](https://github.com/MontFerret/ferret/pull/153), [#154](https://github.com/MontFerret/ferret/pull/154), [#156](https://github.com/MontFerret/ferret/pull/156), [#157](https://github.com/MontFerret/ferret/pull/157), [#165](https://github.com/MontFerret/ferret/pull/165), [#175](https://github.com/MontFerret/ferret/pull/175), [#182](https://github.com/MontFerret/ferret/pull/182). 363 - ``PAGINATION`` function [#173](https://github.com/MontFerret/ferret/pull/173). 364 - ``SCROLL_TOP``, ``SCROLL_BOTTOM`` and ``SCROLL_ELEMENT`` functions [#174](https://github.com/MontFerret/ferret/pull/174). 365 - ``HOVER`` function [#178](https://github.com/MontFerret/ferret/pull/178). 366 - Panic recovery mechanism [#158](https://github.com/MontFerret/ferret/pull/158). 367 368 #### Fixed 369 - Unable to define variables and make function calls before FILTER, SORT and etc statements [#148](https://github.com/MontFerret/ferret/pull/148). 370 - Unable to use params in LIMIT clause [#173](https://github.com/MontFerret/ferret/pull/173). 371 - ```RIGHT``` should return substr counting from right rather than left [#164](https://github.com/MontFerret/ferret/pull/164). 372 - ``INNER_HTML`` returns outer HTML instead for dynamic elements [#170](https://github.com/MontFerret/ferret/pull/170). 373 - ``INNER_TEXT`` returns HTML instead from dynamic elements [#170](https://github.com/MontFerret/ferret/pull/170). 374 375 #### Breaking change: 376 - Name collision between ```math``` and ```utils``` packages in standard library. Renamed ```LOG``` to ```PRINT``` [#162](https://github.com/MontFerret/ferret/pull/162). 377 378 ### 0.4.0 379 #### Added 380 - ``COLLECT`` keyword [#141](https://github.com/MontFerret/ferret/pull/141) 381 - ``VALUES`` function [#128](https://github.com/MontFerret/ferret/pull/128) 382 - ``MERGE_RECURSIVE`` function [#140](https://github.com/MontFerret/ferret/pull/140) 383 384 #### Fixed 385 - Unable to use string literals as object properties [commit](https://github.com/MontFerret/ferret/commit/685c5872aaed42852ce32e7ab8b69b1a269185be) 386 387 ### 0.3.0 388 389 #### Added 390 - ``FROM_BASE64`` function [commit](https://github.com/MontFerret/ferret/commit/5db8df55db46336927ca32ab096569fa09df58d3) 391 - Support for multi line strings [commit](https://github.com/MontFerret/ferret/commit/cf70088fd84fa0e02887c0f34298793b98f96073) 392 - ``DOWNLOAD`` function [commit](https://github.com/MontFerret/ferret/commit/dd13878f80f340c4727d3ad5a6a70859dd958b92) 393 - Binary expressions [commit](https://github.com/MontFerret/ferret/commit/e5ca63bcdb83418b40792bc65bf83f58a0cb1b4e) 394 395 #### Fixed 396 - ``KEEP`` function does not perform deep cloning [commit](https://github.com/MontFerret/ferret/commit/0f3128e8428cd3dc5377a2ead3134c1ae14cc9a0) 397 - WaitForNavigation callback can get called more than once [commit](https://github.com/MontFerret/ferret/commit/1d6a23fa967643a737cd052234d480052d3ec2d9) 398 - Concurrent map iteration and map write [commit](https://github.com/MontFerret/ferret/commit/1d6a23fa967643a737cd052234d480052d3ec2d9) 399 400 #### Breaking changes 401 - Renamed ``.innerHtml`` to ``.innerHTML`` [commit](https://github.com/MontFerret/ferret/commit/393980029976405d9e432faadd407e964c995fd4) 402 403 ### 0.2.0 404 405 #### Added 406 - Numeric functions [commit](https://github.com/MontFerret/ferret/commit/5f94b77a39709846a922a3bf421f81e78c2b0c7e) 407 - ``PDF`` function [commit](https://github.com/MontFerret/ferret/commit/2417be3f9da6db49dcee5ac6f061cc66142fbef5) 408 - ``ZIP`` function [commit](https://github.com/MontFerret/ferret/commit/5d0d9ec5374d42b0e882436955666c737d9dab0c) 409 - ``MERGE`` function [commit](https://github.com/MontFerret/ferret/commit/446ce3ead5812fe105726bae16196fb7ce4a7185)