agent-relay 5.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist/index.cjs +599 -197
  2. package/dist/packages/sdk/src/provisioner/local-jwks.d.ts +25 -0
  3. package/dist/packages/sdk/src/provisioner/local-jwks.d.ts.map +1 -0
  4. package/dist/packages/sdk/src/provisioner/local-jwks.js +70 -0
  5. package/dist/packages/sdk/src/provisioner/local-jwks.js.map +1 -0
  6. package/dist/packages/sdk/src/provisioner/token.d.ts +6 -3
  7. package/dist/packages/sdk/src/provisioner/token.d.ts.map +1 -1
  8. package/dist/packages/sdk/src/provisioner/token.js +11 -8
  9. package/dist/packages/sdk/src/provisioner/token.js.map +1 -1
  10. package/dist/src/cli/commands/on/provision.d.ts +2 -1
  11. package/dist/src/cli/commands/on/provision.d.ts.map +1 -1
  12. package/dist/src/cli/commands/on/provision.js +5 -4
  13. package/dist/src/cli/commands/on/provision.js.map +1 -1
  14. package/dist/src/cli/commands/on/services.d.ts +1 -0
  15. package/dist/src/cli/commands/on/services.d.ts.map +1 -1
  16. package/dist/src/cli/commands/on/services.js +9 -0
  17. package/dist/src/cli/commands/on/services.js.map +1 -1
  18. package/dist/src/cli/commands/on/start.d.ts +6 -3
  19. package/dist/src/cli/commands/on/start.d.ts.map +1 -1
  20. package/dist/src/cli/commands/on/start.js +310 -297
  21. package/dist/src/cli/commands/on/start.js.map +1 -1
  22. package/dist/src/cli/commands/on/token.d.ts +3 -1
  23. package/dist/src/cli/commands/on/token.d.ts.map +1 -1
  24. package/dist/src/cli/commands/on/token.js +3 -3
  25. package/dist/src/cli/commands/on/token.js.map +1 -1
  26. package/node_modules/@agent-relay/broker-darwin-arm64/README.md +11 -0
  27. package/node_modules/@agent-relay/broker-darwin-arm64/package.json +17 -0
  28. package/node_modules/@agent-relay/broker-darwin-x64/README.md +11 -0
  29. package/node_modules/@agent-relay/broker-darwin-x64/bin/.gitkeep +0 -0
  30. package/node_modules/@agent-relay/broker-darwin-x64/package.json +17 -0
  31. package/node_modules/@agent-relay/broker-linux-arm64/README.md +12 -0
  32. package/node_modules/@agent-relay/broker-linux-arm64/bin/.gitkeep +0 -0
  33. package/node_modules/@agent-relay/broker-linux-arm64/package.json +17 -0
  34. package/node_modules/@agent-relay/broker-linux-x64/README.md +12 -0
  35. package/node_modules/@agent-relay/broker-linux-x64/bin/.gitkeep +0 -0
  36. package/node_modules/@agent-relay/broker-linux-x64/package.json +17 -0
  37. package/node_modules/@agent-relay/broker-win32-x64/README.md +11 -0
  38. package/node_modules/@agent-relay/broker-win32-x64/bin/.gitkeep +0 -0
  39. package/node_modules/@agent-relay/broker-win32-x64/package.json +17 -0
  40. package/node_modules/@agent-relay/cloud/package.json +2 -2
  41. package/node_modules/@agent-relay/config/dist/cli-registry.generated.d.ts +353 -157
  42. package/node_modules/@agent-relay/config/dist/cli-registry.generated.d.ts.map +1 -1
  43. package/node_modules/@agent-relay/config/dist/cli-registry.generated.js +356 -160
  44. package/node_modules/@agent-relay/config/dist/cli-registry.generated.js.map +1 -1
  45. package/node_modules/@agent-relay/config/package.json +1 -1
  46. package/node_modules/@agent-relay/hooks/package.json +4 -4
  47. package/node_modules/@agent-relay/sdk/dist/broker-path.d.ts +18 -7
  48. package/node_modules/@agent-relay/sdk/dist/broker-path.d.ts.map +1 -1
  49. package/node_modules/@agent-relay/sdk/dist/broker-path.js +92 -20
  50. package/node_modules/@agent-relay/sdk/dist/broker-path.js.map +1 -1
  51. package/node_modules/@agent-relay/sdk/dist/client.d.ts.map +1 -1
  52. package/node_modules/@agent-relay/sdk/dist/client.js +9 -2
  53. package/node_modules/@agent-relay/sdk/dist/client.js.map +1 -1
  54. package/node_modules/@agent-relay/sdk/dist/provisioner/__tests__/audit.test.js +2 -2
  55. package/node_modules/@agent-relay/sdk/dist/provisioner/__tests__/audit.test.js.map +1 -1
  56. package/node_modules/@agent-relay/sdk/dist/provisioner/__tests__/token-factory.test.js +29 -17
  57. package/node_modules/@agent-relay/sdk/dist/provisioner/__tests__/token-factory.test.js.map +1 -1
  58. package/node_modules/@agent-relay/sdk/dist/provisioner/__tests__/token.test.js +8 -3
  59. package/node_modules/@agent-relay/sdk/dist/provisioner/__tests__/token.test.js.map +1 -1
  60. package/node_modules/@agent-relay/sdk/dist/provisioner/index.d.ts +1 -0
  61. package/node_modules/@agent-relay/sdk/dist/provisioner/index.d.ts.map +1 -1
  62. package/node_modules/@agent-relay/sdk/dist/provisioner/index.js +5 -2
  63. package/node_modules/@agent-relay/sdk/dist/provisioner/index.js.map +1 -1
  64. package/node_modules/@agent-relay/sdk/dist/provisioner/local-jwks.d.ts +25 -0
  65. package/node_modules/@agent-relay/sdk/dist/provisioner/local-jwks.d.ts.map +1 -0
  66. package/node_modules/@agent-relay/sdk/dist/provisioner/local-jwks.js +70 -0
  67. package/node_modules/@agent-relay/sdk/dist/provisioner/local-jwks.js.map +1 -0
  68. package/node_modules/@agent-relay/sdk/dist/provisioner/token.d.ts +6 -3
  69. package/node_modules/@agent-relay/sdk/dist/provisioner/token.d.ts.map +1 -1
  70. package/node_modules/@agent-relay/sdk/dist/provisioner/token.js +11 -8
  71. package/node_modules/@agent-relay/sdk/dist/provisioner/token.js.map +1 -1
  72. package/node_modules/@agent-relay/sdk/dist/provisioner/types.d.ts +3 -2
  73. package/node_modules/@agent-relay/sdk/dist/provisioner/types.d.ts.map +1 -1
  74. package/node_modules/@agent-relay/sdk/dist/workflows/__tests__/sibling-links.test.d.ts +2 -0
  75. package/node_modules/@agent-relay/sdk/dist/workflows/__tests__/sibling-links.test.d.ts.map +1 -0
  76. package/node_modules/@agent-relay/sdk/dist/workflows/__tests__/sibling-links.test.js +166 -0
  77. package/node_modules/@agent-relay/sdk/dist/workflows/__tests__/sibling-links.test.js.map +1 -0
  78. package/node_modules/@agent-relay/sdk/dist/workflows/index.d.ts +2 -0
  79. package/node_modules/@agent-relay/sdk/dist/workflows/index.d.ts.map +1 -1
  80. package/node_modules/@agent-relay/sdk/dist/workflows/index.js +1 -0
  81. package/node_modules/@agent-relay/sdk/dist/workflows/index.js.map +1 -1
  82. package/node_modules/@agent-relay/sdk/dist/workflows/runner.d.ts.map +1 -1
  83. package/node_modules/@agent-relay/sdk/dist/workflows/runner.js +18 -1
  84. package/node_modules/@agent-relay/sdk/dist/workflows/runner.js.map +1 -1
  85. package/node_modules/@agent-relay/sdk/dist/workflows/sibling-links.d.ts +100 -0
  86. package/node_modules/@agent-relay/sdk/dist/workflows/sibling-links.d.ts.map +1 -0
  87. package/node_modules/@agent-relay/sdk/dist/workflows/sibling-links.js +205 -0
  88. package/node_modules/@agent-relay/sdk/dist/workflows/sibling-links.js.map +1 -0
  89. package/node_modules/@agent-relay/sdk/package.json +10 -3
  90. package/node_modules/@agent-relay/telemetry/package.json +1 -1
  91. package/node_modules/@agent-relay/trajectory/package.json +2 -2
  92. package/node_modules/@agent-relay/user-directory/package.json +2 -2
  93. package/node_modules/@agent-relay/utils/package.json +2 -2
  94. package/node_modules/@aws-sdk/core/package.json +5 -5
  95. package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
  96. package/node_modules/@aws-sdk/credential-provider-http/package.json +5 -5
  97. package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
  98. package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
  99. package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
  100. package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
  101. package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
  102. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
  103. package/node_modules/@aws-sdk/middleware-flexible-checksums/package.json +4 -4
  104. package/node_modules/@aws-sdk/middleware-sdk-s3/package.json +5 -5
  105. package/node_modules/@aws-sdk/middleware-user-agent/package.json +4 -4
  106. package/node_modules/@aws-sdk/nested-clients/package.json +14 -14
  107. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +2 -2
  108. package/node_modules/@aws-sdk/token-providers/package.json +3 -3
  109. package/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
  110. package/node_modules/@aws-sdk/xml-builder/dist-cjs/xml-parser.js +0 -2
  111. package/node_modules/@aws-sdk/xml-builder/dist-es/xml-parser.js +0 -2
  112. package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
  113. package/node_modules/@nodable/entities/README.md +41 -0
  114. package/node_modules/@nodable/entities/package.json +54 -0
  115. package/node_modules/@nodable/entities/src/EntityDecoder.js +543 -0
  116. package/node_modules/@nodable/entities/src/EntityEncoder.js +194 -0
  117. package/node_modules/@nodable/entities/src/entities.js +1177 -0
  118. package/node_modules/@nodable/entities/src/entityTries.js +49 -0
  119. package/node_modules/@nodable/entities/src/index.d.ts +264 -0
  120. package/node_modules/@nodable/entities/src/index.js +29 -0
  121. package/node_modules/@smithy/core/package.json +2 -2
  122. package/node_modules/@smithy/middleware-endpoint/package.json +3 -3
  123. package/node_modules/@smithy/middleware-retry/package.json +4 -4
  124. package/node_modules/@smithy/middleware-serde/package.json +2 -2
  125. package/node_modules/@smithy/node-http-handler/dist-cjs/index.js +27 -16
  126. package/node_modules/@smithy/node-http-handler/dist-es/http2/ClientHttp2SessionRef.js +5 -0
  127. package/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +22 -16
  128. package/node_modules/@smithy/node-http-handler/dist-types/http2/ClientHttp2SessionRef.d.ts +4 -0
  129. package/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +2 -4
  130. package/node_modules/@smithy/node-http-handler/package.json +1 -1
  131. package/node_modules/@smithy/smithy-client/package.json +4 -4
  132. package/node_modules/@smithy/util-defaults-mode-browser/package.json +2 -2
  133. package/node_modules/@smithy/util-defaults-mode-node/package.json +2 -2
  134. package/node_modules/@smithy/util-retry/dist-cjs/index.js +20 -10
  135. package/node_modules/@smithy/util-retry/dist-es/StandardRetryStrategy.js +20 -10
  136. package/node_modules/@smithy/util-retry/dist-types/StandardRetryStrategy.d.ts +12 -4
  137. package/node_modules/@smithy/util-retry/package.json +1 -1
  138. package/node_modules/@smithy/util-stream/package.json +2 -2
  139. package/node_modules/fast-xml-parser/CHANGELOG.md +53 -0
  140. package/node_modules/fast-xml-parser/README.md +8 -28
  141. package/node_modules/fast-xml-parser/lib/fxbuilder.min.js +1 -1
  142. package/node_modules/fast-xml-parser/lib/fxbuilder.min.js.map +1 -1
  143. package/node_modules/fast-xml-parser/lib/fxp.cjs +1 -1
  144. package/node_modules/fast-xml-parser/lib/fxp.d.cts +172 -6
  145. package/node_modules/fast-xml-parser/lib/fxp.min.js +1 -1
  146. package/node_modules/fast-xml-parser/lib/fxp.min.js.map +1 -1
  147. package/node_modules/fast-xml-parser/lib/fxparser.min.js +1 -1
  148. package/node_modules/fast-xml-parser/lib/fxparser.min.js.map +1 -1
  149. package/node_modules/fast-xml-parser/package.json +5 -4
  150. package/node_modules/fast-xml-parser/src/fxp.d.ts +162 -3
  151. package/node_modules/fast-xml-parser/src/xmlparser/DocTypeReader.js +2 -5
  152. package/node_modules/fast-xml-parser/src/xmlparser/OptionsBuilder.js +15 -11
  153. package/node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js +168 -244
  154. package/node_modules/fast-xml-parser/src/xmlparser/XMLParser.js +1 -1
  155. package/package.json +9 -10
  156. package/packages/cloud/package.json +2 -2
  157. package/packages/config/dist/cli-registry.generated.d.ts +353 -157
  158. package/packages/config/dist/cli-registry.generated.d.ts.map +1 -1
  159. package/packages/config/dist/cli-registry.generated.js +356 -160
  160. package/packages/config/dist/cli-registry.generated.js.map +1 -1
  161. package/packages/config/package.json +1 -1
  162. package/packages/hooks/package.json +4 -4
  163. package/packages/sdk/dist/broker-path.d.ts +18 -7
  164. package/packages/sdk/dist/broker-path.d.ts.map +1 -1
  165. package/packages/sdk/dist/broker-path.js +92 -20
  166. package/packages/sdk/dist/broker-path.js.map +1 -1
  167. package/packages/sdk/dist/client.d.ts.map +1 -1
  168. package/packages/sdk/dist/client.js +9 -2
  169. package/packages/sdk/dist/client.js.map +1 -1
  170. package/packages/sdk/dist/provisioner/__tests__/audit.test.js +2 -2
  171. package/packages/sdk/dist/provisioner/__tests__/audit.test.js.map +1 -1
  172. package/packages/sdk/dist/provisioner/__tests__/token-factory.test.js +29 -17
  173. package/packages/sdk/dist/provisioner/__tests__/token-factory.test.js.map +1 -1
  174. package/packages/sdk/dist/provisioner/__tests__/token.test.js +8 -3
  175. package/packages/sdk/dist/provisioner/__tests__/token.test.js.map +1 -1
  176. package/packages/sdk/dist/provisioner/index.d.ts +1 -0
  177. package/packages/sdk/dist/provisioner/index.d.ts.map +1 -1
  178. package/packages/sdk/dist/provisioner/index.js +5 -2
  179. package/packages/sdk/dist/provisioner/index.js.map +1 -1
  180. package/packages/sdk/dist/provisioner/local-jwks.d.ts +25 -0
  181. package/packages/sdk/dist/provisioner/local-jwks.d.ts.map +1 -0
  182. package/packages/sdk/dist/provisioner/local-jwks.js +70 -0
  183. package/packages/sdk/dist/provisioner/local-jwks.js.map +1 -0
  184. package/packages/sdk/dist/provisioner/token.d.ts +6 -3
  185. package/packages/sdk/dist/provisioner/token.d.ts.map +1 -1
  186. package/packages/sdk/dist/provisioner/token.js +11 -8
  187. package/packages/sdk/dist/provisioner/token.js.map +1 -1
  188. package/packages/sdk/dist/provisioner/types.d.ts +3 -2
  189. package/packages/sdk/dist/provisioner/types.d.ts.map +1 -1
  190. package/packages/sdk/dist/workflows/__tests__/sibling-links.test.d.ts +2 -0
  191. package/packages/sdk/dist/workflows/__tests__/sibling-links.test.d.ts.map +1 -0
  192. package/packages/sdk/dist/workflows/__tests__/sibling-links.test.js +166 -0
  193. package/packages/sdk/dist/workflows/__tests__/sibling-links.test.js.map +1 -0
  194. package/packages/sdk/dist/workflows/index.d.ts +2 -0
  195. package/packages/sdk/dist/workflows/index.d.ts.map +1 -1
  196. package/packages/sdk/dist/workflows/index.js +1 -0
  197. package/packages/sdk/dist/workflows/index.js.map +1 -1
  198. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
  199. package/packages/sdk/dist/workflows/runner.js +18 -1
  200. package/packages/sdk/dist/workflows/runner.js.map +1 -1
  201. package/packages/sdk/dist/workflows/sibling-links.d.ts +100 -0
  202. package/packages/sdk/dist/workflows/sibling-links.d.ts.map +1 -0
  203. package/packages/sdk/dist/workflows/sibling-links.js +205 -0
  204. package/packages/sdk/dist/workflows/sibling-links.js.map +1 -0
  205. package/packages/sdk/package.json +10 -3
  206. package/packages/telemetry/package.json +1 -1
  207. package/packages/trajectory/package.json +2 -2
  208. package/packages/user-directory/package.json +2 -2
  209. package/packages/utils/package.json +2 -2
  210. package/scripts/postinstall.js +9 -146
  211. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  212. package/bin/agent-relay-broker-darwin-x64 +0 -0
  213. package/bin/agent-relay-broker-linux-arm64 +0 -0
  214. package/bin/agent-relay-broker-linux-x64 +0 -0
  215. package/node_modules/fast-xml-parser/lib/pem.d.cts +0 -148
  216. package/node_modules/fast-xml-parser/src/pem.d.ts +0 -135
  217. /package/{bin → node_modules/@agent-relay/broker-darwin-arm64/bin}/.gitkeep +0 -0
@@ -0,0 +1,194 @@
1
+ // EntityDecoder.js
2
+ import { trie1, trie2, trie3 } from './entityTries.js';
3
+
4
+ // Replacement strings indexed by char code — direct array access, no hashing
5
+ const XML_UNSAFE_REPLACEMENT = new Array(128);
6
+ XML_UNSAFE_REPLACEMENT[38] = '&'; // &
7
+ XML_UNSAFE_REPLACEMENT[60] = '&lt;'; // <
8
+ XML_UNSAFE_REPLACEMENT[62] = '&gt;'; // >
9
+ XML_UNSAFE_REPLACEMENT[34] = '&quot;'; // "
10
+ XML_UNSAFE_REPLACEMENT[39] = '&apos;'; // '
11
+
12
+ // Typed bitmask for O(1) "is this ASCII code XML-unsafe?" check
13
+ const IS_XML_UNSAFE = new Uint8Array(128);
14
+ IS_XML_UNSAFE[38] = 1;
15
+ IS_XML_UNSAFE[60] = 1;
16
+ IS_XML_UNSAFE[62] = 1;
17
+ IS_XML_UNSAFE[34] = 1;
18
+ IS_XML_UNSAFE[39] = 1;
19
+
20
+ // Fast pre-scan: bail out immediately if nothing needs encoding
21
+ const NEEDS_PROCESSING = /[&<>"'\u0080-\uFFFF]/;
22
+
23
+ export default class EntityEncoder {
24
+ constructor(options = {}) {
25
+ this.encodeXmlSafe = options.encodeXmlSafe !== false;
26
+ this.encodeAllNamed = options.encodeAllNamed !== false;
27
+ this.maxReplacements = options.maxReplacements || 0;
28
+ this.replacementsCount = 0;
29
+ }
30
+
31
+ encode(str) {
32
+ if (typeof str !== 'string' || str.length === 0) return str;
33
+ if (!NEEDS_PROCESSING.test(str)) return str;
34
+
35
+ const maxRep = this.maxReplacements;
36
+ if (maxRep > 0 && this.replacementsCount >= maxRep) return str;
37
+
38
+ // Hoist to locals — avoids `this` property lookup inside the hot loop
39
+ const encodeXmlSafe = this.encodeXmlSafe;
40
+ const encodeAllNamed = this.encodeAllNamed;
41
+
42
+ const len = str.length;
43
+
44
+ let result = '';
45
+ let last = 0;
46
+ let i = 0;
47
+ let limitReached = false;
48
+
49
+ // ── Main loop: runs to len-2 so trie3 never needs a bounds check ────────
50
+ // The last 2 characters are handled by the tail block below.
51
+ const mainEnd = len - 2; // i <= mainEnd guarantees i+1 and i+2 are valid
52
+
53
+ while (i <= mainEnd && !limitReached) {
54
+ const c0 = str.charCodeAt(i);
55
+
56
+ // ── ASCII branch ───────────────────────────────────────────────────
57
+ if (c0 < 128) {
58
+ if (encodeXmlSafe && IS_XML_UNSAFE[c0] === 1) {
59
+ result += str.substring(last, i) + XML_UNSAFE_REPLACEMENT[c0];
60
+ last = ++i;
61
+ if (maxRep > 0) {
62
+ this.replacementsCount++;
63
+ if (this.replacementsCount >= maxRep) {
64
+ limitReached = true;
65
+ break;
66
+ }
67
+ }
68
+ } else {
69
+ // Bulk-skip: advance to the next interesting position without
70
+ // touching the outer loop overhead on every safe character
71
+ i++;
72
+ while (i <= mainEnd && !limitReached) {
73
+ const c = str.charCodeAt(i);
74
+ if (c >= 128 || (encodeXmlSafe && IS_XML_UNSAFE[c] === 1)) break;
75
+ i++;
76
+ }
77
+ }
78
+ continue;
79
+ }
80
+
81
+ // ── Non-ASCII: integer-keyed trie lookup ───────────────────────────
82
+ // No bounds checks needed for c1/c2 because i <= mainEnd guarantees
83
+ // i+1 and i+2 are both within the string.
84
+ let matchedEntity = null;
85
+ let advance = 1;
86
+
87
+ // Try 3-char match first (longest wins)
88
+ const mid3 = trie3.get(c0);
89
+ if (mid3 !== undefined) {
90
+ const c1 = str.charCodeAt(i + 1);
91
+ const inner3 = mid3.get(c1);
92
+ if (inner3 !== undefined) {
93
+ const c2 = str.charCodeAt(i + 2);
94
+ const candidate = inner3.get(c2);
95
+ if (candidate !== undefined) { matchedEntity = candidate; advance = 3; }
96
+ }
97
+ }
98
+
99
+ // Try 2-char match
100
+ if (matchedEntity === null) {
101
+ const inner2 = trie2.get(c0);
102
+ if (inner2 !== undefined) {
103
+ const c1 = str.charCodeAt(i + 1);
104
+ const candidate = inner2.get(c1);
105
+ if (candidate !== undefined) { matchedEntity = candidate; advance = 2; }
106
+ }
107
+ }
108
+
109
+ // Try 1-char match
110
+ if (matchedEntity === null && encodeAllNamed) {
111
+ const candidate = trie1.get(c0);
112
+ if (candidate !== undefined) { matchedEntity = candidate; }
113
+ }
114
+
115
+ if (matchedEntity !== null) {
116
+ result += str.substring(last, i) + matchedEntity;
117
+ i += advance;
118
+ last = i;
119
+ if (maxRep > 0) {
120
+ this.replacementsCount++;
121
+ if (this.replacementsCount >= maxRep) {
122
+ limitReached = true;
123
+ break;
124
+ }
125
+ }
126
+ } else {
127
+ i++;
128
+ }
129
+ }
130
+
131
+ // ── Tail: handle the last 1-2 characters (no 3-char match possible) ────
132
+ while (i < len && !limitReached) {
133
+ const c0 = str.charCodeAt(i);
134
+
135
+ if (c0 < 128) {
136
+ if (encodeXmlSafe && IS_XML_UNSAFE[c0] === 1) {
137
+ result += str.substring(last, i) + XML_UNSAFE_REPLACEMENT[c0];
138
+ last = ++i;
139
+ if (maxRep > 0) {
140
+ this.replacementsCount++;
141
+ if (this.replacementsCount >= maxRep) {
142
+ limitReached = true;
143
+ break;
144
+ }
145
+ }
146
+ } else {
147
+ i++;
148
+ }
149
+ continue;
150
+ }
151
+
152
+ // Non-ASCII tail — only 2-char and 1-char matches are possible here
153
+ let matchedEntity = null;
154
+ let advance = 1;
155
+
156
+ if (i + 1 < len) {
157
+ const inner2 = trie2.get(c0);
158
+ if (inner2 !== undefined) {
159
+ const c1 = str.charCodeAt(i + 1);
160
+ const candidate = inner2.get(c1);
161
+ if (candidate !== undefined) { matchedEntity = candidate; advance = 2; }
162
+ }
163
+ }
164
+
165
+ if (matchedEntity === null && encodeAllNamed) {
166
+ const candidate = trie1.get(c0);
167
+ if (candidate !== undefined) { matchedEntity = candidate; }
168
+ }
169
+
170
+ if (matchedEntity !== null) {
171
+ result += str.substring(last, i) + matchedEntity;
172
+ i += advance;
173
+ last = i;
174
+ if (maxRep > 0) {
175
+ this.replacementsCount++;
176
+ if (this.replacementsCount >= maxRep) {
177
+ limitReached = true;
178
+ break;
179
+ }
180
+ }
181
+ } else {
182
+ i++;
183
+ }
184
+ }
185
+
186
+ // ── Flush any remaining literal suffix ────────────────────────────────
187
+ if (last < len) result += str.substring(last);
188
+ return result;
189
+ }
190
+
191
+ reset() {
192
+ this.replacementsCount = 0;
193
+ }
194
+ }