PageSourceSearch

https://boajs.dev/assets/js/23c9ca53.23fee715.js

js boajs.dev collected 2026-10-02 03:06:50 UTC 28,238 bytes, 495 lines download raw bytes

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.