jsf.js_next_gen 4.1.0-beta.11 → 4.1.0-beta.13

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 (32) hide show
  1. package/AI_CONTRIBUTIONS.md +66 -0
  2. package/README.md +40 -1
  3. package/dist/docs/functions/faces.push.init.html +5 -5
  4. package/dist/docs/index.html +30 -0
  5. package/dist/window/faces-development.js +146 -154
  6. package/dist/window/faces-development.js.map +1 -1
  7. package/dist/window/faces.js +1 -1
  8. package/dist/window/faces.js.map +1 -1
  9. package/dist/window/jsf-development.js +146 -154
  10. package/dist/window/jsf-development.js.map +1 -1
  11. package/dist/window/jsf.js +1 -1
  12. package/dist/window/jsf.js.map +1 -1
  13. package/package.json +1 -1
  14. package/src/main/typescript/@types/definitions/modules.d.ts +1 -0
  15. package/src/main/typescript/api/_api.ts +4 -4
  16. package/src/main/typescript/impl/PushImpl.ts +118 -87
  17. package/src/main/typescript/impl/util/ExtDomQuery.ts +0 -4
  18. package/src/main/typescript/impl/util/FileUtils.ts +3 -3
  19. package/src/main/typescript/impl/util/HiddenInputBuilder.ts +34 -34
  20. package/src/main/typescript/impl/util/Lang.ts +12 -15
  21. package/src/main/typescript/impl/util/XhrQueueController.ts +7 -1
  22. package/src/main/typescript/impl/xhrCore/ResponseDataResolver.ts +0 -38
  23. package/src/main/typescript/test/api/JsfPushShimTest.spec.ts +62 -2
  24. package/src/main/typescript/test/api/PushTypeCompatibility.ts +10 -0
  25. package/src/main/typescript/test/impl/AssertionsTest.spec.ts +168 -0
  26. package/src/main/typescript/test/impl/FileUtilsTest.spec.ts +126 -0
  27. package/src/main/typescript/test/impl/ResponseDataResolverTest.spec.ts +62 -0
  28. package/src/main/typescript/test/impl/util/ExtDomQueryTest.spec.ts +60 -1
  29. package/src/main/typescript/test/impl/util/ExtLangTest.spec.ts +105 -0
  30. package/src/main/typescript/test/impl/util/HiddenInputBuilderTest.spec.ts +74 -0
  31. package/src/main/typescript/test/queue/AsynchronousQueueTest.spec.ts +143 -2
  32. package/src/main/typescript/test/xhrCore/WebsocketTest.spec.ts +19 -0
@@ -0,0 +1,66 @@
1
+ # AI Contributions Disclosure
2
+
3
+ In accordance with the [Apache Software Foundation policy on generative AI tooling](https://www.apache.org/legal/generative-tooling.html), this file discloses that portions of this project were created or substantially modified with assistance from generative AI tools.
4
+
5
+ ## Tool used
6
+
7
+ **Claude** (Anthropic) — conversational AI coding assistant
8
+
9
+ ## Scope
10
+
11
+ All new source files and substantial modifications introduced from the TypeScript 6 migration onwards (starting with commit `d609321` in http://github.com/werpu/jsf_js_ts) were produced with AI assistance. This covers both production source code and test code.
12
+
13
+ ### Newly created files (AI-generated)
14
+
15
+ - `src/main/typescript/@types/definitions/modules.d.ts`
16
+ - `src/main/typescript/test/api/JsfPushShimTest.spec.ts`
17
+ - `src/main/typescript/test/api/PushTypeCompatibility.ts`
18
+ - `src/main/typescript/test/impl/AssertionsTest.spec.ts`
19
+ - `src/main/typescript/test/impl/FileUtilsTest.spec.ts`
20
+ - `src/main/typescript/test/impl/ResponseDataResolverTest.spec.ts`
21
+ - `src/main/typescript/test/impl/util/ExtLangTest.spec.ts`
22
+ - `src/main/typescript/test/impl/util/HiddenInputBuilderTest.spec.ts`
23
+ - `src/main/typescript/test/xhrCore/WebsocketTest.spec.ts`
24
+
25
+ ### Substantially modified files (AI-assisted)
26
+
27
+ - `src/main/typescript/api/_api.ts`
28
+ - `src/main/typescript/api/faces.ts`
29
+ - `src/main/typescript/api/jsf.ts`
30
+ - `src/main/typescript/impl/AjaxImpl.ts`
31
+ - `src/main/typescript/impl/PushImpl.ts`
32
+ - `src/main/typescript/impl/util/Assertions.ts`
33
+ - `src/main/typescript/impl/util/AsyncRunnable.ts`
34
+ - `src/main/typescript/impl/util/ExtDomQuery.ts`
35
+ - `src/main/typescript/impl/util/FileUtils.ts`
36
+ - `src/main/typescript/impl/util/HiddenInputBuilder.ts`
37
+ - `src/main/typescript/impl/util/Lang.ts`
38
+ - `src/main/typescript/impl/util/XhrQueueController.ts`
39
+ - `src/main/typescript/impl/xhrCore/ErrorData.ts`
40
+ - `src/main/typescript/impl/xhrCore/EventData.ts`
41
+ - `src/main/typescript/impl/xhrCore/IResponseProcessor.ts`
42
+ - `src/main/typescript/impl/xhrCore/RequestDataResolver.ts`
43
+ - `src/main/typescript/impl/xhrCore/Response.ts`
44
+ - `src/main/typescript/impl/xhrCore/ResponseDataResolver.ts`
45
+ - `src/main/typescript/impl/xhrCore/ResponseProcessor.ts`
46
+ - `src/main/typescript/impl/xhrCore/XhrFormData.ts`
47
+ - `src/main/typescript/impl/xhrCore/XhrRequest.ts`
48
+ - `src/main/typescript/myfaces/OamSubmit.ts`
49
+ - `src/main/typescript/test/frameworkBase/_ext/monadish/DomQueryTest.spec.ts`
50
+ - `src/main/typescript/test/frameworkBase/_ext/shared/StandardInits.ts`
51
+ - `src/main/typescript/test/impl/util/ExtDomQueryTest.spec.ts`
52
+ - `src/main/typescript/test/myfaces/OamSubmit.spec.ts`
53
+ - `src/main/typescript/test/queue/AsynchronousQueueTest.spec.ts`
54
+ - `src/main/typescript/test/xhrCore/ErrorChainTest.spec.ts`
55
+ - `src/main/typescript/test/xhrCore/FakeWebsocket.ts`
56
+ - `src/main/typescript/test/xhrCore/RequestTest.spec.ts`
57
+ - `src/main/typescript/test/xhrCore/ResponseTest.spec.ts`
58
+ - `src/main/typescript/test/xhrCore/TobagoFileUploadTest.spec.ts`
59
+ - `src/main/typescript/test/xhrCore/XhrFormDataTest.spec.ts`
60
+ - `src/main/typescript/@types/definitions/index.d.ts`
61
+
62
+ ## Nature of AI assistance
63
+
64
+ The AI assistant was used interactively: the human author directed the work, reviewed all output, made corrections,
65
+ and approved each change before it was applied.
66
+ The AI did not commit code autonomously. All contributions remain under the Apache License 2.0.
package/README.md CHANGED
@@ -250,4 +250,43 @@ faces.ajax.request(document.getElementById("cmd_eval"), null,
250
250
  * Added tests that reconnect attempts reset after a successful reconnect.
251
251
  * Added tests that max reconnect exhaustion calls `onclose`.
252
252
  * Added tests that close code `1008` is terminal and does not reconnect.
253
- * Added tests that explicit `open()` after a terminal close fires `onopen` again as a fresh connection.
253
+ * Added tests that explicit `open()` after a terminal close fires `onopen` again as a fresh connection.
254
+ * JSF 2.3 jsf.push.init compatibility test added
255
+
256
+ 4.1.0-beta.12
257
+
258
+ Bug Fixes
259
+
260
+ - WebSocket push spec alignment (PushImpl.ts): Full compliance with the Jakarta Faces push specification on 2,2 and 2.3 level
261
+ - hasEverConnected flag is now set before firing onopen callbacks (prevents re-entrant terminal-close edge case)
262
+ - Code 1000 (normal closure) is now always treated as terminal regardless of reason, per spec
263
+ - reconnectAttempts and hasEverConnected are reset after a terminal close, allowing faces.push.open() to re-establish a connection and fire onopen again
264
+ - XhrQueueController debounce race condition: Each XhrQueueController instance now uses a unique debounce key — previously all instances shared one key, causing
265
+ enqueues on separate instances to cancel each other's debounce window
266
+ - Code cleanup: Removed dead exports from ResponseDataResolver.ts; minor cleanup in _api.ts and PushImpl.ts
267
+
268
+ Improvements
269
+
270
+ - PushImpl.ts readability: Lifecycle code refactored for clarity
271
+ - FileUtils.ts: Minor code improvements (stricter equality, cleaner split)
272
+
273
+ Tests
274
+
275
+ - Added tests for WebSocket re-open after terminal close
276
+ - Added XhrQueueController two-instance debounce isolation test
277
+ - Added direct unit tests for FileUtils (encodeFormData, decodeEncodedValues, fixEmptyParameters)
278
+ - Added tests for Assertions.ts — branch coverage up to ~88%
279
+ - Added tests for ResponseDataResolver.resolveContexts
280
+ - Added tests for ExtDomQuery (nonce DOM fallback, runHeadInserts text-node path) and ExtConfig (append, appendIf, deepCopy)
281
+ - Added tests for HiddenInputBuilder, Lang, and async queue
282
+
283
+
284
+ ## 4.1.0-beta.13
285
+
286
+ - Added AI disclaimers to fulfill the ASF criteria for code being integrated into the Apache MyFaces codebase
287
+
288
+ Note as of Version 4.0 the code has been improved with the help of
289
+ generative AI Tooling, as per https://www.apache.org/legal/generative-tooling.html
290
+ disclosures now are added!
291
+ See AI_CONTRIBUTIONS.md for full disclosure
292
+
@@ -1,10 +1,10 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>init | jsf.js_next_gen</title><meta name="description" content="Documentation for jsf.js_next_gen"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">jsf.js_next_gen</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/faces.html">faces</a></li><li><a href="../modules/faces.push.html">push</a></li><li><a href="" aria-current="page">init</a></li></ul><h1>Function init</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="init"><span class="tsd-kind-call-signature">init</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">socketClientId</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">url</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">channel</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">onopen</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Function</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">onmessage</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Function</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">onerror</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Function</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">onclose</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Function</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">behaviors</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">autoConnect</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">void</span><a href="#init" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">socketClientId</span>: <span class="tsd-signature-type">string</span></span><div class="tsd-comment tsd-typography"><p>the sockets client identifier</p>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>init | jsf.js_next_gen</title><meta name="description" content="Documentation for jsf.js_next_gen"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">jsf.js_next_gen</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../modules/faces.html">faces</a></li><li><a href="../modules/faces.push.html">push</a></li><li><a href="" aria-current="page">init</a></li></ul><h1>Function init</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link" id="init"><span class="tsd-kind-call-signature">init</span><span class="tsd-signature-symbol">(</span><br/>    <span class="tsd-kind-parameter">socketClientId</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">url</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">channel</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">onopen</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">OpenCallback</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">onmessage</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">MessageCallback</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">onerror</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">ErrorCallback</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">onclose</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">CloseCallback</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">behaviors</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">any</span><span class="tsd-signature-symbol">,</span><br/>    <span class="tsd-kind-parameter">autoConnect</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">void</span><a href="#init" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">socketClientId</span>: <span class="tsd-signature-type">string</span></span><div class="tsd-comment tsd-typography"><p>the sockets client identifier</p>
2
2
  </div></li><li><span><span class="tsd-kind-parameter">url</span>: <span class="tsd-signature-type">string</span></span><div class="tsd-comment tsd-typography"><p>the uri to reach the socket</p>
3
3
  </div></li><li><span><span class="tsd-kind-parameter">channel</span>: <span class="tsd-signature-type">string</span></span><div class="tsd-comment tsd-typography"><p>the channel name/id</p>
4
- </div></li><li><span><span class="tsd-kind-parameter">onopen</span>: <span class="tsd-signature-type">Function</span></span><div class="tsd-comment tsd-typography"><p>The function to be invoked when the web socket is opened.</p>
5
- </div></li><li><span><span class="tsd-kind-parameter">onmessage</span>: <span class="tsd-signature-type">Function</span></span><div class="tsd-comment tsd-typography"><p>The function to be invoked when a message is received.</p>
6
- </div></li><li><span><span class="tsd-kind-parameter">onerror</span>: <span class="tsd-signature-type">Function</span></span><div class="tsd-comment tsd-typography"><p>The function to be invoked when an error occurs.</p>
7
- </div></li><li><span><span class="tsd-kind-parameter">onclose</span>: <span class="tsd-signature-type">Function</span></span><div class="tsd-comment tsd-typography"><p>The function to be invoked when the web socket is closed.</p>
4
+ </div></li><li><span><span class="tsd-kind-parameter">onopen</span>: <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">OpenCallback</span></span><div class="tsd-comment tsd-typography"><p>The function to be invoked when the web socket is opened.</p>
5
+ </div></li><li><span><span class="tsd-kind-parameter">onmessage</span>: <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">MessageCallback</span></span><div class="tsd-comment tsd-typography"><p>The function to be invoked when a message is received.</p>
6
+ </div></li><li><span><span class="tsd-kind-parameter">onerror</span>: <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">ErrorCallback</span></span><div class="tsd-comment tsd-typography"><p>The function to be invoked when an error occurs.</p>
7
+ </div></li><li><span><span class="tsd-kind-parameter">onclose</span>: <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">CloseCallback</span></span><div class="tsd-comment tsd-typography"><p>The function to be invoked when the web socket is closed.</p>
8
8
  </div></li><li><span><span class="tsd-kind-parameter">behaviors</span>: <span class="tsd-signature-type">any</span></span><div class="tsd-comment tsd-typography"><p>functions which are invoked whenever a message is received</p>
9
9
  </div></li><li><span><span class="tsd-kind-parameter">autoConnect</span>: <span class="tsd-signature-type">boolean</span></span><div class="tsd-comment tsd-typography"><p>Whether or not to automatically open the socket. Defaults to <code>false</code>.</p>
10
10
  </div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></div></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">jsf.js_next_gen</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
@@ -216,7 +216,37 @@ and adjusts the references in the resource according to the request patterns.</p
216
216
  <li>Added tests that max reconnect exhaustion calls <code>onclose</code>.</li>
217
217
  <li>Added tests that close code <code>1008</code> is terminal and does not reconnect.</li>
218
218
  <li>Added tests that explicit <code>open()</code> after a terminal close fires <code>onopen</code> again as a fresh connection.</li>
219
+ <li>JSF 2.3 jsf.push.init compatibility test added</li>
219
220
  </ul>
220
221
  </li>
221
222
  </ul>
223
+ <p>4.1.0-beta.12</p>
224
+ <p>Bug Fixes</p>
225
+ <ul>
226
+ <li>WebSocket push spec alignment (PushImpl.ts): Full compliance with the Jakarta Faces push specification
227
+ <ul>
228
+ <li>hasEverConnected flag is now set before firing onopen callbacks (prevents re-entrant terminal-close edge case)</li>
229
+ <li>Code 1000 (normal closure) is now always treated as terminal regardless of reason, per spec</li>
230
+ <li>reconnectAttempts and hasEverConnected are reset after a terminal close, allowing faces.push.open() to re-establish a connection and fire onopen again</li>
231
+ </ul>
232
+ </li>
233
+ <li>XhrQueueController debounce race condition: Each XhrQueueController instance now uses a unique debounce key — previously all instances shared one key, causing<br>
234
+ enqueues on separate instances to cancel each other's debounce window</li>
235
+ <li>Code cleanup: Removed dead exports from ResponseDataResolver.ts; minor cleanup in _api.ts and PushImpl.ts</li>
236
+ </ul>
237
+ <p>Improvements</p>
238
+ <ul>
239
+ <li>PushImpl.ts readability: Lifecycle code refactored for clarity</li>
240
+ <li>FileUtils.ts: Minor code improvements (stricter equality, cleaner split)</li>
241
+ </ul>
242
+ <p>Tests</p>
243
+ <ul>
244
+ <li>Added tests for WebSocket re-open after terminal close</li>
245
+ <li>Added XhrQueueController two-instance debounce isolation test</li>
246
+ <li>Added direct unit tests for FileUtils (encodeFormData, decodeEncodedValues, fixEmptyParameters)</li>
247
+ <li>Added tests for Assertions.ts — branch coverage up to ~88%</li>
248
+ <li>Added tests for ResponseDataResolver.resolveContexts</li>
249
+ <li>Added tests for ExtDomQuery (nonce DOM fallback, runHeadInserts text-node path) and ExtConfig (append, appendIf, deepCopy)</li>
250
+ <li>Added tests for HiddenInputBuilder, Lang, and async queue</li>
251
+ </ul>
222
252
  </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#🚀-scratchpad-for-the-typescript-based-reimplementation-of-jsfjs"><span>🚀 <wbr/>Scratchpad for the <wbr/>Type<wbr/>Script-<wbr/>based reimplementation of jsf.js</span></a><ul><li><a href="#what-is-this"><span>What is this?</span></a></li><li><a href="#status"><span>Status</span></a></li><li><ul><li><a href="#special-info"><span>Special <wbr/>Info</span></a></li><li><a href="#general-build"><span>General <wbr/>Build</span></a></li><li><ul><li><a href="#on-windows"><span>On <wbr/>Windows</span></a></li></ul></li><li><a href="#tests"><span>Tests</span></a></li><li><a href="#test-coverage"><span>Test <wbr/>Coverage</span></a></li><li><a href="#changelist-compared-to-the-original-implementation"><span>Changelist compared to the original implementation</span></a></li></ul></li><li><a href="#upload-support"><span>Upload <wbr/>Support</span></a></li><li><a href="#changes-since-40"><span>Changes since 4.0</span></a></li><li><a href="#changes-since-410-beta-10"><span>Changes since 4.1.0-<wbr/>beta-<wbr/>10</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html">jsf.js_next_gen</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>