1"use strict"; 2(globalThis["webpackChunkboajs_dev"] ||= []).push([[3510],{ 3 4/***/ 6210 5(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 6 7__webpack_require__.r(__webpack_exports__); 8/* harmony export */ __webpack_require__.d(__webpack_exports__, { 9/* harmony export */ "default": () => (/* binding */ MDXContent), 10/* harmony export */ metadata: () => (/* reexport default export from named module */ _site_docusaurus_docusaurus_plugin_content_blog_default_site_blog_2022_03_15_boa_release_14_md_23c_json__WEBPACK_IMPORTED_MODULE_0__) 11/* harmony export */ }); 12/* harmony import */ var _site_docusaurus_docusaurus_plugin_content_blog_default_site_blog_2022_03_15_boa_release_14_md_23c_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7819); 13/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4848); 14/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8453); 15 16 17const frontMatter = { 18 layout: 'post', 19 tags: [ 20 'post' 21 ], 22 title: 'Boa release v0.14', 23 authors: 'boa-dev' 24}; 25const contentTitle = undefined; 26 27const assets = { 28"authorsImageUrls": [undefined], 29}; 30 31 32 33const toc = [{ 34 "value": "Summary", 35 "id": "summary", 36 "level": 2 37}, { 38 "value": "Boa has moved", 39 "id": "boa-has-moved", 40 "level": 2 41}, { 42 "value": "New ECMAScript features", 43 "id": "new-ecmascript-features", 44 "level": 2 45}, { 46 "value": "Virtual Machine", 47 "id": "virtual-machine", 48 "level": 2 49}, { 50 "value": "Boa opens financial contributions", 51 "id": "boa-opens-financial-contributions", 52 "level": 2 53}, { 54 "value": "What does this mean for Boa?", 55 "id": "what-does-this-mean-for-boa", 56 "level": 3 57}, { 58 "value": "Can I contribute differently?", 59 "id": "can-i-contribute-differently", 60 "level": 3 61}, { 62 "value": "Thank You", 63 "id": "thank-you", 64 "level": 3 65}, { 66 "value": "Thank you New Contributors", 67 "id": "thank-you-new-contributors", 68 "level": 4 69}]; 70function _createMdxContent(props) { 71 const _components = { 72 a: "a", 73 code: "code", 74 h2: "h2", 75 h3: "h3", 76 h4: "h4", 77 li: "li", 78 p: "p", 79 strong: "strong", 80 ul: "ul", 81 ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), 82 ...props.components 83 }; 84 return (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { 85 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { 86 id: "summary", 87 children: "Summary" 88 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 89 children: ["Boa v0.14 is here! After almost 6 months of development, we are very happy to present you the newest release of the Boa\nJavaScript engine. Boa makes it easy to embed a JS engine in your projects, and you can even use it from webassembly. See\nthe ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 90 href: "/about", 91 children: "about" 92 }), " page for more info. Together with this release, we present you: A new way to contribute to Boa, a virtual machine, usable examples and much more."] 93 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 94 children: ["Boa currently supports part of the JavaScript language. In this release, our conformance has grown from 41.01% to 49.74%\nin the official ECMAScript Test Suite (Test262). The engine now passes 43,986 tests, coming from 33,192 in Boa 0.13\n(32.5% increase), and we have closed 40 issues and merged 137 pull requests. You can check the full list of changes\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 95 href: "https://github.com/boa-dev/boa/blob/v0.14/CHANGELOG.md", 96 children: "here" 97 }), ", and the full information on conformance\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 98 href: "/conformance", 99 children: "here" 100 }), "."] 101 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { 102 id: "boa-has-moved", 103 children: "Boa has moved" 104 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 105 children: ["First off, some breaking changes!\nBoa is now ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 106 href: "https://crates.io/crates/boa_engine", 107 children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.c
107ode, { 108 children: "boa_engine" 109 }) 110 }), " on crates.io. This should bring it in line with our other packages, and allows us to resolve the ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 111 href: "https://github.com/boa-dev/boa/issues/230", 112 children: "casing issue" 113 }), " we had with Boa previously. It should just be a case of changing your dependencies in cargo.toml to the new destination. The old ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 114 href: "https://crates.io/crates/boa", 115 children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 116 children: "Boa" 117 }) 118 }), " crate will no longer receive any updates."] 119 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { 120 id: "new-ecmascript-features", 121 children: "New ECMAScript features" 122 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 123 children: ["Boa v0.14 ships with support for ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 124 children: "Object.getOwnPropertyNames" 125 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 126 children: "Object.getOwnPropertySymbols" 127 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 128 children: "Object.prototype.hasOwnProperty" 129 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 130 children: "Array.from" 131 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 132 children: "AggregateError" 133 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 134 children: "Typed Arrays" 135 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 136 children: "Proxy" 137 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 138 children: "toLocaleString()" 139 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 140 children: "Symbol.prototype.valueOf" 141 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 142 children: "Array.prototype.at()" 143 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 144 children: "String.fromCharCode" 145 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 146 children: "Object.hasOwn" 147 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 148 children: "Object.fromEntries" 149 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 150 children: "Proxy" 151 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 152 children: "Array.prototype.findLast" 153 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 154 children: "Array.prototype.findLastIndex" 155 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 156 children: "console.trace" 157 }), ", ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { 158 children: "String.raw( template, ...substitutions )" 159 }), ", and ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 160 href: "https://github.com/boa-dev/boa/blob/v0.14/CHANGELOG.md", 161 children: "more" 162 }), ". There's also been several bug fixes and internal improvements, such as ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 163 href: "https://github.com/boa-dev/boa/pull/1684", 164 children: "switching to Bors" 165 }), " for our CI management."] 166 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { 167 id: "virtual-machine", 168 children: "Virtual Machine" 169 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 170 children: ["The biggest change in this release has definitely been the switch of the main implementation to a Virtual Machine. The\nJavaScript code first gets parsed into AST, then compiled into op-codes, and finally executed in the VM. This adds some\nextra
170steps, which, for now, have reduced the performance of the engine. We hope to fix some of these degradations over the course of the next few releases so hang tight. The new VM opens the door for many great features in the future (we're looking at you, async/await), and allows some nicer optimizations in the parsing and compilation phases in which we have already started working (such as ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 171 href: "https://github.com/boa-dev/boa/pull/1829", 172 children: "#1829" 173 }), " and\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 174 href: "https://github.com/boa-dev/boa/pull/1849", 175 children: "#1849" 176 }), ")."] 177 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 178 children: ["This move towards a VM has also brought one great new feature, generator execution (", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 179 href: "https://github.com/boa-dev/boa/pull/1790", 180 children: "#1790" 181 }), ").\nYou can find out more about how to use the VM ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 182 href: "https://github.com/boa-dev/boa/blob/main/docs/vm.md", 183 children: "here" 184 }), "."] 185 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("img", { 186 class: "light", 187 src: "/images/2022-03-15/boa_architecture_light.svg" 188 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("img", { 189 class: "dark", 190 src: "/images/2022-03-15/boa_architecture_dark.svg" 191 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("br", {}), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { 192 id: "boa-opens-financial-contributions", 193 children: "Boa opens financial contributions" 194 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 195 children: ["In the past months, due to the big and steady progress on Boa, we have received multiple requests to contribute to Boa\nfinancially. From now on, anyone can contribute with either a recurring donation, or a one-time contribution in our\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 196 href: "https://opencollective.com/boa", 197 children: "OpenCollective page" 198 }), "."] 199 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { 200 id: "what-does-this-mean-for-boa", 201 children: "What does this mean for Boa?" 202 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { 203 children: "Being able to receive financial contributions won't directly show a change in Boa development, but depending on how much\nfunding we get, we are already planning next steps. Having more motivated contributors would be the first step. We all\nwant to spend more of our free time in boa, and receiving a financial compensation for it is definitely making the team\nmembers eager to continue contributing." 204 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { 205 children: "But that is not our only idea. We would like to create a reproducible benchmarking platform. Currently, we just use GitHub\nactions for benchmarking, which is useful to get some general ideas on how some changes affect the performance of the\nengine. However, they have a high variability (up to 10%), meaning that we can definitely see changes if they are big, but it's\nimpossible to see differences if changes are minimal (1-2%, for example). Having the infrastructure to do proper performance\ntesting would require using dedicated CPUs, for example, which could be financed using the Boa Open Collective." 206 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.p, { 207 children: "On the development side, there are some very big projects that require deep involvement from the team. Priorities include (not neccesarily in order):" 208 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { 209 children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 210 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 211 href: "https://github.com/boa-dev/boa/projects/3", 212 children: "Async/Await support" 213 }), "."] 214 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 215 children: ["Better ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 216 href: "https://github.com/boa-dev/boa/projects/5", 217 children: "completion records" 218 }), " implementation"] 219 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { 220 children: "Performance improvement across the board." 221 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { 222 children: "Future implementation of Shapes/Hidden Classes." 223 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { 224 children: "Being able to measure against other engines." 225 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.li, { 226 children: "Improved conformance of the EcmaScript specification." 227 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 228 children: ["Integration with ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 229 href: "https://github.com/unicode-org/icu4x", 230 children: "ICU4X" 231 }), " for Intl and future Temporal implementation."] 232 }), "\n"] 233 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 234 children: ["Implementing a ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 235 href: "https://github.com/boa-dev/boa/discussions/1531", 236 children: "proper API" 237 }), " for Rust crates that want to embed Boa as they\nlike, or a ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 238 href: "https://github.com/boa-dev/boa/issues/332", 239 children: "C API" 240 }), " so that other software, not written in Rust, can use Boa,\nare also a priority, and implementing all the new built-in objects to achieve 100% conformance with the ECMAScript\nspecification is also a must. All this takes time, and we will need to finance developers working on these big issues."] 241 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { 242 id: "can-i-contribute-differently", 243 children: "Can I contribute differently?" 244 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 245 children: ["If financial contribution is not your strength, you can contribute by asking to be assigned to one of our\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 246 href: "https://github.com/boa-dev/boa/issues?q=is%3Aopen+is%3Aissue+no%3Aassignee", 247 children: "open issues" 248 }), ", and asking for mentoring if you\ndon't know your way around the engine. Our ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 249 href: "https://github.com/boa-dev/boa/blob/main/CONTRIBUTING.md", 250 children: "contribution guide" 251 }), "\nshould help you here. If you are more used to working with JavaScript or frontend web development, we also\nwelcome help to improve our web presence, either in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 252 href: "https://github.com/boa-dev/boa-dev.github.io", 253 children: "our website" 254 }), ", or in\nour ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 255 href: "https://github.com/boa-dev/boa/issues/820", 256 children: "testing representation" 257 }), " page or benchmarks page. You can also contribute to\nour Criterion benchmark comparison GitHub ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 258 href: "https://github.com/boa-dev/criterion-compare-action", 259 children: "action" 260 }), "."] 261 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 262 children: ["We are also looking to improve the documentation of the engine, both for developers of the engine itself and for users of the\nengine. Feel free to contact us in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 263 href: "https://discord.gg/tUFFk9Y", 264 children: "Discord" 265 }), "."] 266 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h3, { 267 id: "thank-you", 268 children: "Thank You" 269 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.p, { 270 children: ["Last but certainly not least, a big ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { 271 children: "Thank You" 272 }), " to all the contributors of Boa.\nIt's not often we list them but we would like to say thank you to the new contributors who joined for the last release."] 273 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h4, { 274 id: "thank-you-new-contributors", 275 children: "Thank you New Contributors" 276 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { 277 children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 278 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 279 href: "https://github.com/abhishekc-sharma", 280 children: "@abhishekc-sharma" 281 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 282 href: "https://github.com/boa-dev/boa/pull/1612", 283 children: "#1612" 284 })] 285 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 286 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 287 href: "https://github.com/kevinputera", 288 children: "@kevinputera" 289 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 290 href: "https://github.com/boa-dev/boa/pull/1606", 291 children: "#1606" 292 })] 293 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 294 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 295 href: "https://github.com/nrabulinski", 296 children: "@nrabulinski" 297 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 298 href: "https://github.com/boa-dev/boa/pull/1614", 299 children: "#1614" 300 })] 301 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 302 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 303 href: "https://github.com/hle0", 304 children: "@hle0" 305 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 306 href: "https://github.com/boa-dev/boa/pull/1618", 307 children: "#1618" 308 })] 309 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 310 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 311 href: "https://github.com/nekevss", 312 children: "@nekevss" 313 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 314 href: "https://github.com/boa-dev/boa/pull/1613", 315 children: "#1613" 316 })] 317 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 318 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 319 href: "https://github.com/lowr", 320 children: "@lowr" 321 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 322 href: "https://github.com/boa-dev/boa/pull/1628", 323 children: "#1628" 324 })] 325 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 326 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 327 href: "https://github.com/Nimpruda", 328 children: "@Nimpruda" 329 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 330 href: "https://github.com/boa-dev/boa/pull/1634", 331 children: "#1634" 332 })] 333 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 334 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 335 href: "https://github.com/atouchet", 336 children: "@atouchet" 337 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 338 href: "https://github.com/boa-dev/boa/pull/1638", 339 children: "#1638" 340 })] 341 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 342 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 343 href: "https://github.com/praveenbakkal", 344 children: "@praveenbakkal" 345 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 346 href: "https://github.com/boa-dev/boa/pull/1680", 347 children: "#1680" 348 })] 349 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 350 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 351 href: "https://github.com/bsinky", 352 children: "@bsinky" 353 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 354 href: "https://github.com/boa-dev/boa/pull/1665", 355 children: "#1665" 356 })] 357 }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { 358 children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 359 href: "https://github.com/TheDoctor314", 360 children: "@TheDoctor314" 361 }), " who made their first contribution in ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.a, { 362 href: "https://github.com/boa-dev/boa/pull/1691", 363 children: "#1691"
364 })] 365 }), "\n"] 366 })] 367 }); 368} 369function MDXContent(props = {}) { 370 const {wrapper: MDXLayout} = { 371 ...(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_2__/* .useMDXComponents */ .R)(), 372 ...props.components 373 }; 374 return MDXLayout ? (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(MDXLayout, { 375 ...props, 376 children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_createMdxContent, { 377 ...props 378 }) 379 }) : _createMdxContent(props); 380} 381 382 383/* harmony export */ __webpack_require__.d(__webpack_exports__, [ 384/* harmony export */ "assets", 0, /* binding */ assets, 385/* harmony export */ "contentTitle", 0, /* binding */ contentTitle, 386/* harmony export */ "frontMatter", 0, /* binding */ frontMatter, 387/* harmony export */ "toc", 0, /* binding */ toc 388/* harmony export */ ]); 389 390 391/***/ }, 392 393/***/ 8453 394(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 395 396/* harmony export */ __webpack_require__.d(__webpack_exports__, { 397/* harmony export */ R: () => (/* binding */ useMDXComponents), 398/* harmony export */ x: () => (/* binding */ MDXProvider) 399/* harmony export */ }); 400/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540); 401/** 402 * @import {MDXComponents} from 'mdx/types.js' 403 * @import {Component, ReactElement, ReactNode} from 'react' 404 */ 405 406/** 407 * @callback MergeComponents 408 * Custom merge function. 409 * @param {Readonly<MDXComponents>} currentComponents 410 * Current components from the context. 411 * @returns {MDXComponents} 412 * Additional components. 413 * 414 * @typedef Props 415 * Configuration for `MDXProvider`. 416 * @property {ReactNode | null | undefined} [children] 417 * Children (optional). 418 * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components] 419 * Additional components to use or a function that creates them (optional). 420 * @property {boolean | null | undefined} [disableParentContext=false] 421 * Turn off outer component context (default: `false`). 422 */ 423 424 425 426/** @type {Readonly<MDXComponents>} */ 427const emptyComponents = {} 428 429const MDXContext = react__WEBPACK_IMPORTED_MODULE_0__.createContext(emptyComponents) 430 431/** 432 * Get current components from the MDX Context. 433 * 434 * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components] 435 * Additional components to use or a function that creates them (optional). 436 * @returns {MDXComponents} 437 * Current components. 438 */ 439function useMDXComponents(components) { 440 const contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext) 441 442 // Memoize to avoid unnecessary top-level context changes 443 return react__WEBPACK_IMPORTED_MODULE_0__.useMemo( 444 function () { 445 // Custom merge via a function prop 446 if (typeof components === 'function') { 447 return components(contextComponents) 448 } 449 450 return {...contextComponents, ...components} 451 }, 452 [contextComponents, components] 453 ) 454} 455 456/** 457 * Provider for MDX context. 458 * 459 * @param {Readonly<Props>} properties 460 * Properties. 461 * @returns {ReactElement} 462 * Element. 463 * @satisfies {Component} 464 */ 465function MDXProvider(properties) { 466 /** @type {Readonly<MDXComponents>} */ 467 let allComponents 468 469 if (properties.disableParentContext) { 470 allComponents = 471 typeof properties.components === 'function' 472 ? properties.components(emptyComponents) 473 : properties.components || emptyComponents 474 } else { 475 allComponents = useMDXComponents(properties.components) 476 } 477 478 return react__WEBPACK_IMPORTED_MODULE_0__.createElement( 479 MDXContext.Provider, 480 {value: allComponents}, 481 properties.children 482 ) 483} 484 485 486/***/ }, 487 488/***/ 7819 489(module) { 490 491module.exports = /*#__PURE__*/JSON.parse('{"permalink":"/blog/2022/03/15/boa-release-14","source":"@site/blog/2022-03-15-boa-release-14.md","title":"Boa release v0.14","description":"Summary","date":"2022-03-15T00:00:00.000Z","tags":[{"inline":true,"label":"post","permalink":"/blog/tags/post"}],"readingTime":6.44,"hasTruncateMarker":true,"authors":[{"name":"Boa Developers","url":"https://github.com/boa-dev","key":"boa-dev","page":null}],"frontMatter":{"layout":"post","tags":["post"],"title":"Boa release v0.14","authors":"boa-dev"},"unlisted":false,"prevItem":{"title":"Boa release v0.15","permalink":"/blog/2022/06/10/boa-release-15"},"nextItem":{"title":"Boa release v0.13","permalink":"/blog/2021/09/30/boa-release-13"}}'); 492 493/***/ } 494 495}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.