@swf2es/runtime 0.0.0-stage → 0.1.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 (815) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE.third-party +422 -0
  3. package/README.md +29 -2
  4. package/dist/avm1/activation.d.ts +108 -0
  5. package/dist/avm1/activation.d.ts.map +1 -0
  6. package/dist/avm1/activation.js +90 -0
  7. package/dist/avm1/activation.js.map +1 -0
  8. package/dist/avm1/case.d.ts +3 -0
  9. package/dist/avm1/case.d.ts.map +1 -0
  10. package/dist/avm1/case.js +250 -0
  11. package/dist/avm1/case.js.map +1 -0
  12. package/dist/avm1/clips.d.ts +68 -0
  13. package/dist/avm1/clips.d.ts.map +1 -0
  14. package/dist/avm1/clips.js +335 -0
  15. package/dist/avm1/clips.js.map +1 -0
  16. package/dist/avm1/control.d.ts +54 -0
  17. package/dist/avm1/control.d.ts.map +1 -0
  18. package/dist/avm1/control.js +281 -0
  19. package/dist/avm1/control.js.map +1 -0
  20. package/dist/avm1/errors.d.ts +49 -0
  21. package/dist/avm1/errors.d.ts.map +1 -0
  22. package/dist/avm1/errors.js +51 -0
  23. package/dist/avm1/errors.js.map +1 -0
  24. package/dist/avm1/functions.d.ts +94 -0
  25. package/dist/avm1/functions.d.ts.map +1 -0
  26. package/dist/avm1/functions.js +250 -0
  27. package/dist/avm1/functions.js.map +1 -0
  28. package/dist/avm1/globals/array.d.ts +8 -0
  29. package/dist/avm1/globals/array.d.ts.map +1 -0
  30. package/dist/avm1/globals/array.js +550 -0
  31. package/dist/avm1/globals/array.js.map +1 -0
  32. package/dist/avm1/globals/broadcaster.d.ts +22 -0
  33. package/dist/avm1/globals/broadcaster.d.ts.map +1 -0
  34. package/dist/avm1/globals/broadcaster.js +132 -0
  35. package/dist/avm1/globals/broadcaster.js.map +1 -0
  36. package/dist/avm1/globals/date.d.ts +10 -0
  37. package/dist/avm1/globals/date.d.ts.map +1 -0
  38. package/dist/avm1/globals/date.js +437 -0
  39. package/dist/avm1/globals/date.js.map +1 -0
  40. package/dist/avm1/globals/global.d.ts +23 -0
  41. package/dist/avm1/globals/global.d.ts.map +1 -0
  42. package/dist/avm1/globals/global.js +345 -0
  43. package/dist/avm1/globals/global.js.map +1 -0
  44. package/dist/avm1/globals/math.d.ts +7 -0
  45. package/dist/avm1/globals/math.d.ts.map +1 -0
  46. package/dist/avm1/globals/math.js +140 -0
  47. package/dist/avm1/globals/math.js.map +1 -0
  48. package/dist/avm1/globals/number.d.ts +11 -0
  49. package/dist/avm1/globals/number.d.ts.map +1 -0
  50. package/dist/avm1/globals/number.js +94 -0
  51. package/dist/avm1/globals/number.js.map +1 -0
  52. package/dist/avm1/globals/string.d.ts +8 -0
  53. package/dist/avm1/globals/string.d.ts.map +1 -0
  54. package/dist/avm1/globals/string.js +202 -0
  55. package/dist/avm1/globals/string.js.map +1 -0
  56. package/dist/avm1/globals/timers.d.ts +49 -0
  57. package/dist/avm1/globals/timers.d.ts.map +1 -0
  58. package/dist/avm1/globals/timers.js +130 -0
  59. package/dist/avm1/globals/timers.js.map +1 -0
  60. package/dist/avm1/host.d.ts +146 -0
  61. package/dist/avm1/host.d.ts.map +1 -0
  62. package/dist/avm1/host.js +6 -0
  63. package/dist/avm1/host.js.map +1 -0
  64. package/dist/avm1/index.d.ts +15 -0
  65. package/dist/avm1/index.d.ts.map +1 -0
  66. package/dist/avm1/index.js +15 -0
  67. package/dist/avm1/index.js.map +1 -0
  68. package/dist/avm1/inheritance.d.ts +25 -0
  69. package/dist/avm1/inheritance.d.ts.map +1 -0
  70. package/dist/avm1/inheritance.js +133 -0
  71. package/dist/avm1/inheritance.js.map +1 -0
  72. package/dist/avm1/numbers.d.ts +21 -0
  73. package/dist/avm1/numbers.d.ts.map +1 -0
  74. package/dist/avm1/numbers.js +299 -0
  75. package/dist/avm1/numbers.js.map +1 -0
  76. package/dist/avm1/objects.d.ts +245 -0
  77. package/dist/avm1/objects.d.ts.map +1 -0
  78. package/dist/avm1/objects.js +897 -0
  79. package/dist/avm1/objects.js.map +1 -0
  80. package/dist/avm1/operators.d.ts +45 -0
  81. package/dist/avm1/operators.d.ts.map +1 -0
  82. package/dist/avm1/operators.js +171 -0
  83. package/dist/avm1/operators.js.map +1 -0
  84. package/dist/avm1/realm.d.ts +126 -0
  85. package/dist/avm1/realm.d.ts.map +1 -0
  86. package/dist/avm1/realm.js +530 -0
  87. package/dist/avm1/realm.js.map +1 -0
  88. package/dist/avm1/runtime.d.ts +294 -0
  89. package/dist/avm1/runtime.d.ts.map +1 -0
  90. package/dist/avm1/runtime.js +883 -0
  91. package/dist/avm1/runtime.js.map +1 -0
  92. package/dist/avm1/scope.d.ts +77 -0
  93. package/dist/avm1/scope.d.ts.map +1 -0
  94. package/dist/avm1/scope.js +386 -0
  95. package/dist/avm1/scope.js.map +1 -0
  96. package/dist/avm1/urls.d.ts +25 -0
  97. package/dist/avm1/urls.d.ts.map +1 -0
  98. package/dist/avm1/urls.js +181 -0
  99. package/dist/avm1/urls.js.map +1 -0
  100. package/dist/avm1/values.d.ts +52 -0
  101. package/dist/avm1/values.d.ts.map +1 -0
  102. package/dist/avm1/values.js +98 -0
  103. package/dist/avm1/values.js.map +1 -0
  104. package/dist/avm2/amf-classes.d.ts +28 -0
  105. package/dist/avm2/amf-classes.d.ts.map +1 -0
  106. package/dist/avm2/amf-classes.js +67 -0
  107. package/dist/avm2/amf-classes.js.map +1 -0
  108. package/dist/avm2/amf.d.ts +96 -0
  109. package/dist/avm2/amf.d.ts.map +1 -0
  110. package/dist/avm2/amf.js +802 -0
  111. package/dist/avm2/amf.js.map +1 -0
  112. package/dist/avm2/array-conversion.d.ts +31 -0
  113. package/dist/avm2/array-conversion.d.ts.map +1 -0
  114. package/dist/avm2/array-conversion.js +101 -0
  115. package/dist/avm2/array-conversion.js.map +1 -0
  116. package/dist/avm2/builtin/ArgumentError.decl.d.ts +18 -0
  117. package/dist/avm2/builtin/ArgumentError.decl.d.ts.map +1 -0
  118. package/dist/avm2/builtin/ArgumentError.decl.js +15 -0
  119. package/dist/avm2/builtin/ArgumentError.decl.js.map +1 -0
  120. package/dist/avm2/builtin/Array.d.ts +2 -0
  121. package/dist/avm2/builtin/Array.d.ts.map +1 -0
  122. package/dist/avm2/builtin/Array.decl.d.ts +241 -0
  123. package/dist/avm2/builtin/Array.decl.d.ts.map +1 -0
  124. package/dist/avm2/builtin/Array.decl.js +167 -0
  125. package/dist/avm2/builtin/Array.decl.js.map +1 -0
  126. package/dist/avm2/builtin/Array.js +497 -0
  127. package/dist/avm2/builtin/Array.js.map +1 -0
  128. package/dist/avm2/builtin/Boolean.d.ts +2 -0
  129. package/dist/avm2/builtin/Boolean.d.ts.map +1 -0
  130. package/dist/avm2/builtin/Boolean.decl.d.ts +28 -0
  131. package/dist/avm2/builtin/Boolean.decl.d.ts.map +1 -0
  132. package/dist/avm2/builtin/Boolean.decl.js +14 -0
  133. package/dist/avm2/builtin/Boolean.decl.js.map +1 -0
  134. package/dist/avm2/builtin/Boolean.js +17 -0
  135. package/dist/avm2/builtin/Boolean.js.map +1 -0
  136. package/dist/avm2/builtin/Class.d.ts +2 -0
  137. package/dist/avm2/builtin/Class.d.ts.map +1 -0
  138. package/dist/avm2/builtin/Class.decl.d.ts +21 -0
  139. package/dist/avm2/builtin/Class.decl.d.ts.map +1 -0
  140. package/dist/avm2/builtin/Class.decl.js +9 -0
  141. package/dist/avm2/builtin/Class.decl.js.map +1 -0
  142. package/dist/avm2/builtin/Class.js +11 -0
  143. package/dist/avm2/builtin/Class.js.map +1 -0
  144. package/dist/avm2/builtin/Date.d.ts +2 -0
  145. package/dist/avm2/builtin/Date.d.ts.map +1 -0
  146. package/dist/avm2/builtin/Date.decl.d.ts +441 -0
  147. package/dist/avm2/builtin/Date.decl.d.ts.map +1 -0
  148. package/dist/avm2/builtin/Date.decl.js +258 -0
  149. package/dist/avm2/builtin/Date.decl.js.map +1 -0
  150. package/dist/avm2/builtin/Date.js +808 -0
  151. package/dist/avm2/builtin/Date.js.map +1 -0
  152. package/dist/avm2/builtin/DefinitionError.decl.d.ts +18 -0
  153. package/dist/avm2/builtin/DefinitionError.decl.d.ts.map +1 -0
  154. package/dist/avm2/builtin/DefinitionError.decl.js +15 -0
  155. package/dist/avm2/builtin/DefinitionError.decl.js.map +1 -0
  156. package/dist/avm2/builtin/Error.d.ts +4 -0
  157. package/dist/avm2/builtin/Error.d.ts.map +1 -0
  158. package/dist/avm2/builtin/Error.decl.d.ts +45 -0
  159. package/dist/avm2/builtin/Error.decl.d.ts.map +1 -0
  160. package/dist/avm2/builtin/Error.decl.js +25 -0
  161. package/dist/avm2/builtin/Error.decl.js.map +1 -0
  162. package/dist/avm2/builtin/Error.js +193 -0
  163. package/dist/avm2/builtin/Error.js.map +1 -0
  164. package/dist/avm2/builtin/EvalError.decl.d.ts +18 -0
  165. package/dist/avm2/builtin/EvalError.decl.d.ts.map +1 -0
  166. package/dist/avm2/builtin/EvalError.decl.js +15 -0
  167. package/dist/avm2/builtin/EvalError.decl.js.map +1 -0
  168. package/dist/avm2/builtin/Function.d.ts +2 -0
  169. package/dist/avm2/builtin/Function.d.ts.map +1 -0
  170. package/dist/avm2/builtin/Function.decl.d.ts +44 -0
  171. package/dist/avm2/builtin/Function.decl.d.ts.map +1 -0
  172. package/dist/avm2/builtin/Function.decl.js +35 -0
  173. package/dist/avm2/builtin/Function.decl.js.map +1 -0
  174. package/dist/avm2/builtin/Function.js +73 -0
  175. package/dist/avm2/builtin/Function.js.map +1 -0
  176. package/dist/avm2/builtin/JSON.decl.d.ts +50 -0
  177. package/dist/avm2/builtin/JSON.decl.d.ts.map +1 -0
  178. package/dist/avm2/builtin/JSON.decl.js +53 -0
  179. package/dist/avm2/builtin/JSON.decl.js.map +1 -0
  180. package/dist/avm2/builtin/Math.d.ts +28 -0
  181. package/dist/avm2/builtin/Math.d.ts.map +1 -0
  182. package/dist/avm2/builtin/Math.decl.d.ts +172 -0
  183. package/dist/avm2/builtin/Math.decl.d.ts.map +1 -0
  184. package/dist/avm2/builtin/Math.decl.js +73 -0
  185. package/dist/avm2/builtin/Math.decl.js.map +1 -0
  186. package/dist/avm2/builtin/Math.js +89 -0
  187. package/dist/avm2/builtin/Math.js.map +1 -0
  188. package/dist/avm2/builtin/MethodClosure.decl.d.ts +25 -0
  189. package/dist/avm2/builtin/MethodClosure.decl.d.ts.map +1 -0
  190. package/dist/avm2/builtin/MethodClosure.decl.js +15 -0
  191. package/dist/avm2/builtin/MethodClosure.decl.js.map +1 -0
  192. package/dist/avm2/builtin/Namespace.d.ts +2 -0
  193. package/dist/avm2/builtin/Namespace.d.ts.map +1 -0
  194. package/dist/avm2/builtin/Namespace.decl.d.ts +34 -0
  195. package/dist/avm2/builtin/Namespace.decl.d.ts.map +1 -0
  196. package/dist/avm2/builtin/Namespace.decl.js +22 -0
  197. package/dist/avm2/builtin/Namespace.decl.js.map +1 -0
  198. package/dist/avm2/builtin/Namespace.js +29 -0
  199. package/dist/avm2/builtin/Namespace.js.map +1 -0
  200. package/dist/avm2/builtin/Number.d.ts +19 -0
  201. package/dist/avm2/builtin/Number.d.ts.map +1 -0
  202. package/dist/avm2/builtin/Number.decl.d.ts +285 -0
  203. package/dist/avm2/builtin/Number.decl.d.ts.map +1 -0
  204. package/dist/avm2/builtin/Number.decl.js +267 -0
  205. package/dist/avm2/builtin/Number.decl.js.map +1 -0
  206. package/dist/avm2/builtin/Number.js +178 -0
  207. package/dist/avm2/builtin/Number.js.map +1 -0
  208. package/dist/avm2/builtin/Object.d.ts +5 -0
  209. package/dist/avm2/builtin/Object.d.ts.map +1 -0
  210. package/dist/avm2/builtin/Object.decl.d.ts +77 -0
  211. package/dist/avm2/builtin/Object.decl.d.ts.map +1 -0
  212. package/dist/avm2/builtin/Object.decl.js +67 -0
  213. package/dist/avm2/builtin/Object.decl.js.map +1 -0
  214. package/dist/avm2/builtin/Object.js +120 -0
  215. package/dist/avm2/builtin/Object.js.map +1 -0
  216. package/dist/avm2/builtin/QName.d.ts +2 -0
  217. package/dist/avm2/builtin/QName.d.ts.map +1 -0
  218. package/dist/avm2/builtin/QName.decl.d.ts +34 -0
  219. package/dist/avm2/builtin/QName.decl.d.ts.map +1 -0
  220. package/dist/avm2/builtin/QName.decl.js +22 -0
  221. package/dist/avm2/builtin/QName.decl.js.map +1 -0
  222. package/dist/avm2/builtin/QName.js +72 -0
  223. package/dist/avm2/builtin/QName.js.map +1 -0
  224. package/dist/avm2/builtin/RangeError.decl.d.ts +18 -0
  225. package/dist/avm2/builtin/RangeError.decl.d.ts.map +1 -0
  226. package/dist/avm2/builtin/RangeError.decl.js +15 -0
  227. package/dist/avm2/builtin/RangeError.decl.js.map +1 -0
  228. package/dist/avm2/builtin/ReferenceError.decl.d.ts +18 -0
  229. package/dist/avm2/builtin/ReferenceError.decl.d.ts.map +1 -0
  230. package/dist/avm2/builtin/ReferenceError.decl.js +15 -0
  231. package/dist/avm2/builtin/ReferenceError.decl.js.map +1 -0
  232. package/dist/avm2/builtin/RegExp.d.ts +2 -0
  233. package/dist/avm2/builtin/RegExp.d.ts.map +1 -0
  234. package/dist/avm2/builtin/RegExp.decl.d.ts +59 -0
  235. package/dist/avm2/builtin/RegExp.decl.d.ts.map +1 -0
  236. package/dist/avm2/builtin/RegExp.decl.js +31 -0
  237. package/dist/avm2/builtin/RegExp.decl.js.map +1 -0
  238. package/dist/avm2/builtin/RegExp.js +57 -0
  239. package/dist/avm2/builtin/RegExp.js.map +1 -0
  240. package/dist/avm2/builtin/SecurityError.decl.d.ts +18 -0
  241. package/dist/avm2/builtin/SecurityError.decl.d.ts.map +1 -0
  242. package/dist/avm2/builtin/SecurityError.decl.js +15 -0
  243. package/dist/avm2/builtin/SecurityError.decl.js.map +1 -0
  244. package/dist/avm2/builtin/String.d.ts +2 -0
  245. package/dist/avm2/builtin/String.d.ts.map +1 -0
  246. package/dist/avm2/builtin/String.decl.d.ts +168 -0
  247. package/dist/avm2/builtin/String.decl.d.ts.map +1 -0
  248. package/dist/avm2/builtin/String.decl.js +168 -0
  249. package/dist/avm2/builtin/String.decl.js.map +1 -0
  250. package/dist/avm2/builtin/String.js +176 -0
  251. package/dist/avm2/builtin/String.js.map +1 -0
  252. package/dist/avm2/builtin/SyntaxError.decl.d.ts +18 -0
  253. package/dist/avm2/builtin/SyntaxError.decl.d.ts.map +1 -0
  254. package/dist/avm2/builtin/SyntaxError.decl.js +15 -0
  255. package/dist/avm2/builtin/SyntaxError.decl.js.map +1 -0
  256. package/dist/avm2/builtin/TypeError.decl.d.ts +18 -0
  257. package/dist/avm2/builtin/TypeError.decl.d.ts.map +1 -0
  258. package/dist/avm2/builtin/TypeError.decl.js +15 -0
  259. package/dist/avm2/builtin/TypeError.decl.js.map +1 -0
  260. package/dist/avm2/builtin/URIError.decl.d.ts +18 -0
  261. package/dist/avm2/builtin/URIError.decl.d.ts.map +1 -0
  262. package/dist/avm2/builtin/URIError.decl.js +15 -0
  263. package/dist/avm2/builtin/URIError.decl.js.map +1 -0
  264. package/dist/avm2/builtin/UninitializedError.decl.d.ts +18 -0
  265. package/dist/avm2/builtin/UninitializedError.decl.d.ts.map +1 -0
  266. package/dist/avm2/builtin/UninitializedError.decl.js +15 -0
  267. package/dist/avm2/builtin/UninitializedError.decl.js.map +1 -0
  268. package/dist/avm2/builtin/VerifyError.decl.d.ts +18 -0
  269. package/dist/avm2/builtin/VerifyError.decl.d.ts.map +1 -0
  270. package/dist/avm2/builtin/VerifyError.decl.js +15 -0
  271. package/dist/avm2/builtin/VerifyError.decl.js.map +1 -0
  272. package/dist/avm2/builtin/Walker.decl.d.ts +23 -0
  273. package/dist/avm2/builtin/Walker.decl.d.ts.map +1 -0
  274. package/dist/avm2/builtin/Walker.decl.js +14 -0
  275. package/dist/avm2/builtin/Walker.decl.js.map +1 -0
  276. package/dist/avm2/builtin/XML.d.ts +2 -0
  277. package/dist/avm2/builtin/XML.d.ts.map +1 -0
  278. package/dist/avm2/builtin/XML.decl.d.ts +275 -0
  279. package/dist/avm2/builtin/XML.decl.d.ts.map +1 -0
  280. package/dist/avm2/builtin/XML.decl.js +97 -0
  281. package/dist/avm2/builtin/XML.decl.js.map +1 -0
  282. package/dist/avm2/builtin/XML.js +283 -0
  283. package/dist/avm2/builtin/XML.js.map +1 -0
  284. package/dist/avm2/builtin/XMLList.d.ts +2 -0
  285. package/dist/avm2/builtin/XMLList.d.ts.map +1 -0
  286. package/dist/avm2/builtin/XMLList.decl.d.ts +201 -0
  287. package/dist/avm2/builtin/XMLList.decl.d.ts.map +1 -0
  288. package/dist/avm2/builtin/XMLList.decl.js +74 -0
  289. package/dist/avm2/builtin/XMLList.decl.js.map +1 -0
  290. package/dist/avm2/builtin/XMLList.js +253 -0
  291. package/dist/avm2/builtin/XMLList.js.map +1 -0
  292. package/dist/avm2/builtin/__AS3__/vec/Vector$double.decl.d.ts +200 -0
  293. package/dist/avm2/builtin/__AS3__/vec/Vector$double.decl.d.ts.map +1 -0
  294. package/dist/avm2/builtin/__AS3__/vec/Vector$double.decl.js +168 -0
  295. package/dist/avm2/builtin/__AS3__/vec/Vector$double.decl.js.map +1 -0
  296. package/dist/avm2/builtin/__AS3__/vec/Vector$int.decl.d.ts +200 -0
  297. package/dist/avm2/builtin/__AS3__/vec/Vector$int.decl.d.ts.map +1 -0
  298. package/dist/avm2/builtin/__AS3__/vec/Vector$int.decl.js +164 -0
  299. package/dist/avm2/builtin/__AS3__/vec/Vector$int.decl.js.map +1 -0
  300. package/dist/avm2/builtin/__AS3__/vec/Vector$object.decl.d.ts +198 -0
  301. package/dist/avm2/builtin/__AS3__/vec/Vector$object.decl.d.ts.map +1 -0
  302. package/dist/avm2/builtin/__AS3__/vec/Vector$object.decl.js +168 -0
  303. package/dist/avm2/builtin/__AS3__/vec/Vector$object.decl.js.map +1 -0
  304. package/dist/avm2/builtin/__AS3__/vec/Vector$uint.decl.d.ts +200 -0
  305. package/dist/avm2/builtin/__AS3__/vec/Vector$uint.decl.d.ts.map +1 -0
  306. package/dist/avm2/builtin/__AS3__/vec/Vector$uint.decl.js +168 -0
  307. package/dist/avm2/builtin/__AS3__/vec/Vector$uint.decl.js.map +1 -0
  308. package/dist/avm2/builtin/__AS3__/vec/Vector.decl.d.ts +14 -0
  309. package/dist/avm2/builtin/__AS3__/vec/Vector.decl.d.ts.map +1 -0
  310. package/dist/avm2/builtin/__AS3__/vec/Vector.decl.js +10 -0
  311. package/dist/avm2/builtin/__AS3__/vec/Vector.decl.js.map +1 -0
  312. package/dist/avm2/builtin/bind.d.ts +44 -0
  313. package/dist/avm2/builtin/bind.d.ts.map +1 -0
  314. package/dist/avm2/builtin/bind.js +173 -0
  315. package/dist/avm2/builtin/bind.js.map +1 -0
  316. package/dist/avm2/builtin/declare.d.ts +137 -0
  317. package/dist/avm2/builtin/declare.d.ts.map +1 -0
  318. package/dist/avm2/builtin/declare.js +14 -0
  319. package/dist/avm2/builtin/declare.js.map +1 -0
  320. package/dist/avm2/builtin/flash/concurrent/Condition.decl.d.ts +44 -0
  321. package/dist/avm2/builtin/flash/concurrent/Condition.decl.d.ts.map +1 -0
  322. package/dist/avm2/builtin/flash/concurrent/Condition.decl.js +18 -0
  323. package/dist/avm2/builtin/flash/concurrent/Condition.decl.js.map +1 -0
  324. package/dist/avm2/builtin/flash/concurrent/Mutex.decl.d.ts +37 -0
  325. package/dist/avm2/builtin/flash/concurrent/Mutex.decl.d.ts.map +1 -0
  326. package/dist/avm2/builtin/flash/concurrent/Mutex.decl.js +17 -0
  327. package/dist/avm2/builtin/flash/concurrent/Mutex.decl.js.map +1 -0
  328. package/dist/avm2/builtin/flash/errors/EOFError.decl.d.ts +14 -0
  329. package/dist/avm2/builtin/flash/errors/EOFError.decl.d.ts.map +1 -0
  330. package/dist/avm2/builtin/flash/errors/EOFError.decl.js +15 -0
  331. package/dist/avm2/builtin/flash/errors/EOFError.decl.js.map +1 -0
  332. package/dist/avm2/builtin/flash/errors/IOError.decl.d.ts +14 -0
  333. package/dist/avm2/builtin/flash/errors/IOError.decl.d.ts.map +1 -0
  334. package/dist/avm2/builtin/flash/errors/IOError.decl.js +15 -0
  335. package/dist/avm2/builtin/flash/errors/IOError.decl.js.map +1 -0
  336. package/dist/avm2/builtin/flash/errors/IllegalOperationError.decl.d.ts +14 -0
  337. package/dist/avm2/builtin/flash/errors/IllegalOperationError.decl.d.ts.map +1 -0
  338. package/dist/avm2/builtin/flash/errors/IllegalOperationError.decl.js +15 -0
  339. package/dist/avm2/builtin/flash/errors/IllegalOperationError.decl.js.map +1 -0
  340. package/dist/avm2/builtin/flash/errors/MemoryError.decl.d.ts +14 -0
  341. package/dist/avm2/builtin/flash/errors/MemoryError.decl.d.ts.map +1 -0
  342. package/dist/avm2/builtin/flash/errors/MemoryError.decl.js +15 -0
  343. package/dist/avm2/builtin/flash/errors/MemoryError.decl.js.map +1 -0
  344. package/dist/avm2/builtin/flash/net/DynamicPropertyOutput.decl.d.ts +20 -0
  345. package/dist/avm2/builtin/flash/net/DynamicPropertyOutput.decl.d.ts.map +1 -0
  346. package/dist/avm2/builtin/flash/net/DynamicPropertyOutput.decl.js +13 -0
  347. package/dist/avm2/builtin/flash/net/DynamicPropertyOutput.decl.js.map +1 -0
  348. package/dist/avm2/builtin/flash/net/IDynamicPropertyOutput.decl.d.ts +16 -0
  349. package/dist/avm2/builtin/flash/net/IDynamicPropertyOutput.decl.d.ts.map +1 -0
  350. package/dist/avm2/builtin/flash/net/IDynamicPropertyOutput.decl.js +16 -0
  351. package/dist/avm2/builtin/flash/net/IDynamicPropertyOutput.decl.js.map +1 -0
  352. package/dist/avm2/builtin/flash/net/IDynamicPropertyWriter.decl.d.ts +16 -0
  353. package/dist/avm2/builtin/flash/net/IDynamicPropertyWriter.decl.d.ts.map +1 -0
  354. package/dist/avm2/builtin/flash/net/IDynamicPropertyWriter.decl.js +16 -0
  355. package/dist/avm2/builtin/flash/net/IDynamicPropertyWriter.decl.js.map +1 -0
  356. package/dist/avm2/builtin/flash/net/ObjectEncoding.decl.d.ts +38 -0
  357. package/dist/avm2/builtin/flash/net/ObjectEncoding.decl.d.ts.map +1 -0
  358. package/dist/avm2/builtin/flash/net/ObjectEncoding.decl.js +28 -0
  359. package/dist/avm2/builtin/flash/net/ObjectEncoding.decl.js.map +1 -0
  360. package/dist/avm2/builtin/flash/utils/ByteArray.d.ts +151 -0
  361. package/dist/avm2/builtin/flash/utils/ByteArray.d.ts.map +1 -0
  362. package/dist/avm2/builtin/flash/utils/ByteArray.decl.d.ts +260 -0
  363. package/dist/avm2/builtin/flash/utils/ByteArray.decl.d.ts.map +1 -0
  364. package/dist/avm2/builtin/flash/utils/ByteArray.decl.js +105 -0
  365. package/dist/avm2/builtin/flash/utils/ByteArray.decl.js.map +1 -0
  366. package/dist/avm2/builtin/flash/utils/ByteArray.js +1009 -0
  367. package/dist/avm2/builtin/flash/utils/ByteArray.js.map +1 -0
  368. package/dist/avm2/builtin/flash/utils/CompressionAlgorithm.decl.d.ts +27 -0
  369. package/dist/avm2/builtin/flash/utils/CompressionAlgorithm.decl.d.ts.map +1 -0
  370. package/dist/avm2/builtin/flash/utils/CompressionAlgorithm.decl.js +15 -0
  371. package/dist/avm2/builtin/flash/utils/CompressionAlgorithm.decl.js.map +1 -0
  372. package/dist/avm2/builtin/flash/utils/Dictionary.d.ts +2 -0
  373. package/dist/avm2/builtin/flash/utils/Dictionary.d.ts.map +1 -0
  374. package/dist/avm2/builtin/flash/utils/Dictionary.decl.d.ts +19 -0
  375. package/dist/avm2/builtin/flash/utils/Dictionary.decl.d.ts.map +1 -0
  376. package/dist/avm2/builtin/flash/utils/Dictionary.decl.js +9 -0
  377. package/dist/avm2/builtin/flash/utils/Dictionary.decl.js.map +1 -0
  378. package/dist/avm2/builtin/flash/utils/Dictionary.js +21 -0
  379. package/dist/avm2/builtin/flash/utils/Dictionary.js.map +1 -0
  380. package/dist/avm2/builtin/flash/utils/IDataInput.decl.d.ts +92 -0
  381. package/dist/avm2/builtin/flash/utils/IDataInput.decl.d.ts.map +1 -0
  382. package/dist/avm2/builtin/flash/utils/IDataInput.decl.js +71 -0
  383. package/dist/avm2/builtin/flash/utils/IDataInput.decl.js.map +1 -0
  384. package/dist/avm2/builtin/flash/utils/IDataInput2.decl.d.ts +13 -0
  385. package/dist/avm2/builtin/flash/utils/IDataInput2.decl.d.ts.map +1 -0
  386. package/dist/avm2/builtin/flash/utils/IDataInput2.decl.js +11 -0
  387. package/dist/avm2/builtin/flash/utils/IDataInput2.decl.js.map +1 -0
  388. package/dist/avm2/builtin/flash/utils/IDataOutput.decl.d.ts +74 -0
  389. package/dist/avm2/builtin/flash/utils/IDataOutput.decl.d.ts.map +1 -0
  390. package/dist/avm2/builtin/flash/utils/IDataOutput.decl.js +35 -0
  391. package/dist/avm2/builtin/flash/utils/IDataOutput.decl.js.map +1 -0
  392. package/dist/avm2/builtin/flash/utils/IDataOutput2.decl.d.ts +13 -0
  393. package/dist/avm2/builtin/flash/utils/IDataOutput2.decl.d.ts.map +1 -0
  394. package/dist/avm2/builtin/flash/utils/IDataOutput2.decl.js +11 -0
  395. package/dist/avm2/builtin/flash/utils/IDataOutput2.decl.js.map +1 -0
  396. package/dist/avm2/builtin/flash/utils/IExternalizable.decl.d.ts +20 -0
  397. package/dist/avm2/builtin/flash/utils/IExternalizable.decl.d.ts.map +1 -0
  398. package/dist/avm2/builtin/flash/utils/IExternalizable.decl.js +21 -0
  399. package/dist/avm2/builtin/flash/utils/IExternalizable.decl.js.map +1 -0
  400. package/dist/avm2/builtin/flash/utils/ObjectInput.decl.d.ts +95 -0
  401. package/dist/avm2/builtin/flash/utils/ObjectInput.decl.d.ts.map +1 -0
  402. package/dist/avm2/builtin/flash/utils/ObjectInput.decl.js +36 -0
  403. package/dist/avm2/builtin/flash/utils/ObjectInput.decl.js.map +1 -0
  404. package/dist/avm2/builtin/flash/utils/ObjectOutput.decl.d.ts +93 -0
  405. package/dist/avm2/builtin/flash/utils/ObjectOutput.decl.d.ts.map +1 -0
  406. package/dist/avm2/builtin/flash/utils/ObjectOutput.decl.js +33 -0
  407. package/dist/avm2/builtin/flash/utils/ObjectOutput.decl.js.map +1 -0
  408. package/dist/avm2/builtin/flash/utils/Proxy.d.ts +2 -0
  409. package/dist/avm2/builtin/flash/utils/Proxy.d.ts.map +1 -0
  410. package/dist/avm2/builtin/flash/utils/Proxy.decl.d.ts +61 -0
  411. package/dist/avm2/builtin/flash/utils/Proxy.decl.d.ts.map +1 -0
  412. package/dist/avm2/builtin/flash/utils/Proxy.decl.js +21 -0
  413. package/dist/avm2/builtin/flash/utils/Proxy.decl.js.map +1 -0
  414. package/dist/avm2/builtin/flash/utils/Proxy.js +112 -0
  415. package/dist/avm2/builtin/flash/utils/Proxy.js.map +1 -0
  416. package/dist/avm2/builtin/index.d.ts +5 -0
  417. package/dist/avm2/builtin/index.d.ts.map +1 -0
  418. package/dist/avm2/builtin/index.js +48 -0
  419. package/dist/avm2/builtin/index.js.map +1 -0
  420. package/dist/avm2/builtin/int.d.ts +2 -0
  421. package/dist/avm2/builtin/int.d.ts.map +1 -0
  422. package/dist/avm2/builtin/int.decl.d.ts +52 -0
  423. package/dist/avm2/builtin/int.decl.d.ts.map +1 -0
  424. package/dist/avm2/builtin/int.decl.js +21 -0
  425. package/dist/avm2/builtin/int.decl.js.map +1 -0
  426. package/dist/avm2/builtin/int.js +27 -0
  427. package/dist/avm2/builtin/int.js.map +1 -0
  428. package/dist/avm2/builtin/regexp/compile.d.ts +22 -0
  429. package/dist/avm2/builtin/regexp/compile.d.ts.map +1 -0
  430. package/dist/avm2/builtin/regexp/compile.js +435 -0
  431. package/dist/avm2/builtin/regexp/compile.js.map +1 -0
  432. package/dist/avm2/builtin/scripts.d.ts +3 -0
  433. package/dist/avm2/builtin/scripts.d.ts.map +1 -0
  434. package/dist/avm2/builtin/scripts.js +1001 -0
  435. package/dist/avm2/builtin/scripts.js.map +1 -0
  436. package/dist/avm2/builtin/thunks.d.ts +4 -0
  437. package/dist/avm2/builtin/thunks.d.ts.map +1 -0
  438. package/dist/avm2/builtin/thunks.js +1322 -0
  439. package/dist/avm2/builtin/thunks.js.map +1 -0
  440. package/dist/avm2/builtin/uint.d.ts +2 -0
  441. package/dist/avm2/builtin/uint.d.ts.map +1 -0
  442. package/dist/avm2/builtin/uint.decl.d.ts +52 -0
  443. package/dist/avm2/builtin/uint.decl.d.ts.map +1 -0
  444. package/dist/avm2/builtin/uint.decl.js +21 -0
  445. package/dist/avm2/builtin/uint.decl.js.map +1 -0
  446. package/dist/avm2/builtin/uint.js +27 -0
  447. package/dist/avm2/builtin/uint.js.map +1 -0
  448. package/dist/avm2/builtin/xml/chars.d.ts +9 -0
  449. package/dist/avm2/builtin/xml/chars.d.ts.map +1 -0
  450. package/dist/avm2/builtin/xml/chars.js +113 -0
  451. package/dist/avm2/builtin/xml/chars.js.map +1 -0
  452. package/dist/avm2/builtin/xml/escape.d.ts +5 -0
  453. package/dist/avm2/builtin/xml/escape.d.ts.map +1 -0
  454. package/dist/avm2/builtin/xml/escape.js +39 -0
  455. package/dist/avm2/builtin/xml/escape.js.map +1 -0
  456. package/dist/avm2/builtin/xml/node.d.ts +94 -0
  457. package/dist/avm2/builtin/xml/node.d.ts.map +1 -0
  458. package/dist/avm2/builtin/xml/node.js +273 -0
  459. package/dist/avm2/builtin/xml/node.js.map +1 -0
  460. package/dist/avm2/builtin/xml/parser.d.ts +51 -0
  461. package/dist/avm2/builtin/xml/parser.d.ts.map +1 -0
  462. package/dist/avm2/builtin/xml/parser.js +357 -0
  463. package/dist/avm2/builtin/xml/parser.js.map +1 -0
  464. package/dist/avm2/builtin/xml/xml.d.ts +106 -0
  465. package/dist/avm2/builtin/xml/xml.d.ts.map +1 -0
  466. package/dist/avm2/builtin/xml/xml.js +1856 -0
  467. package/dist/avm2/builtin/xml/xml.js.map +1 -0
  468. package/dist/avm2/builtin-library.d.ts +2 -0
  469. package/dist/avm2/builtin-library.d.ts.map +1 -0
  470. package/dist/avm2/builtin-library.js +22 -0
  471. package/dist/avm2/builtin-library.js.map +1 -0
  472. package/dist/avm2/cache-fill.d.ts +14 -0
  473. package/dist/avm2/cache-fill.d.ts.map +1 -0
  474. package/dist/avm2/cache-fill.js +87 -0
  475. package/dist/avm2/cache-fill.js.map +1 -0
  476. package/dist/avm2/classes.d.ts +17 -0
  477. package/dist/avm2/classes.d.ts.map +1 -0
  478. package/dist/avm2/classes.js +212 -0
  479. package/dist/avm2/classes.js.map +1 -0
  480. package/dist/avm2/definitions.d.ts +28 -0
  481. package/dist/avm2/definitions.d.ts.map +1 -0
  482. package/dist/avm2/definitions.js +70 -0
  483. package/dist/avm2/definitions.js.map +1 -0
  484. package/dist/avm2/descriptors.d.ts +118 -0
  485. package/dist/avm2/descriptors.d.ts.map +1 -0
  486. package/dist/avm2/descriptors.js +6 -0
  487. package/dist/avm2/descriptors.js.map +1 -0
  488. package/dist/avm2/dictionary-keys.d.ts +73 -0
  489. package/dist/avm2/dictionary-keys.d.ts.map +1 -0
  490. package/dist/avm2/dictionary-keys.js +296 -0
  491. package/dist/avm2/dictionary-keys.js.map +1 -0
  492. package/dist/avm2/domain-memory.d.ts +23 -0
  493. package/dist/avm2/domain-memory.d.ts.map +1 -0
  494. package/dist/avm2/domain-memory.js +76 -0
  495. package/dist/avm2/domain-memory.js.map +1 -0
  496. package/dist/avm2/domain.d.ts +108 -0
  497. package/dist/avm2/domain.d.ts.map +1 -0
  498. package/dist/avm2/domain.js +281 -0
  499. package/dist/avm2/domain.js.map +1 -0
  500. package/dist/avm2/dynamic-properties.d.ts +62 -0
  501. package/dist/avm2/dynamic-properties.d.ts.map +1 -0
  502. package/dist/avm2/dynamic-properties.js +183 -0
  503. package/dist/avm2/dynamic-properties.js.map +1 -0
  504. package/dist/avm2/enumeration.d.ts +75 -0
  505. package/dist/avm2/enumeration.d.ts.map +1 -0
  506. package/dist/avm2/enumeration.js +394 -0
  507. package/dist/avm2/enumeration.js.map +1 -0
  508. package/dist/avm2/errors.d.ts +20 -0
  509. package/dist/avm2/errors.d.ts.map +1 -0
  510. package/dist/avm2/errors.js +46 -0
  511. package/dist/avm2/errors.js.map +1 -0
  512. package/dist/avm2/float-library.d.ts +2 -0
  513. package/dist/avm2/float-library.d.ts.map +1 -0
  514. package/dist/avm2/float-library.js +67 -0
  515. package/dist/avm2/float-library.js.map +1 -0
  516. package/dist/avm2/float.d.ts +9 -0
  517. package/dist/avm2/float.d.ts.map +1 -0
  518. package/dist/avm2/float.js +27 -0
  519. package/dist/avm2/float.js.map +1 -0
  520. package/dist/avm2/hooks.d.ts +77 -0
  521. package/dist/avm2/hooks.d.ts.map +1 -0
  522. package/dist/avm2/hooks.js +20 -0
  523. package/dist/avm2/hooks.js.map +1 -0
  524. package/dist/avm2/index.d.ts +32 -0
  525. package/dist/avm2/index.d.ts.map +1 -0
  526. package/dist/avm2/index.js +39 -0
  527. package/dist/avm2/index.js.map +1 -0
  528. package/dist/avm2/messages.d.ts +2 -0
  529. package/dist/avm2/messages.d.ts.map +1 -0
  530. package/dist/avm2/messages.js +178 -0
  531. package/dist/avm2/messages.js.map +1 -0
  532. package/dist/avm2/method-factories.d.ts +35 -0
  533. package/dist/avm2/method-factories.d.ts.map +1 -0
  534. package/dist/avm2/method-factories.js +96 -0
  535. package/dist/avm2/method-factories.js.map +1 -0
  536. package/dist/avm2/modules.d.ts +40 -0
  537. package/dist/avm2/modules.d.ts.map +1 -0
  538. package/dist/avm2/modules.js +106 -0
  539. package/dist/avm2/modules.js.map +1 -0
  540. package/dist/avm2/names.d.ts +143 -0
  541. package/dist/avm2/names.d.ts.map +1 -0
  542. package/dist/avm2/names.js +249 -0
  543. package/dist/avm2/names.js.map +1 -0
  544. package/dist/avm2/natives/aliases.d.ts +3 -0
  545. package/dist/avm2/natives/aliases.d.ts.map +1 -0
  546. package/dist/avm2/natives/aliases.js +48 -0
  547. package/dist/avm2/natives/aliases.js.map +1 -0
  548. package/dist/avm2/natives/array.d.ts +5 -0
  549. package/dist/avm2/natives/array.d.ts.map +1 -0
  550. package/dist/avm2/natives/array.js +391 -0
  551. package/dist/avm2/natives/array.js.map +1 -0
  552. package/dist/avm2/natives/bytearray.d.ts +180 -0
  553. package/dist/avm2/natives/bytearray.d.ts.map +1 -0
  554. package/dist/avm2/natives/bytearray.js +1228 -0
  555. package/dist/avm2/natives/bytearray.js.map +1 -0
  556. package/dist/avm2/natives/case.d.ts +5 -0
  557. package/dist/avm2/natives/case.d.ts.map +1 -0
  558. package/dist/avm2/natives/case.js +89 -0
  559. package/dist/avm2/natives/case.js.map +1 -0
  560. package/dist/avm2/natives/concurrent.d.ts +24 -0
  561. package/dist/avm2/natives/concurrent.d.ts.map +1 -0
  562. package/dist/avm2/natives/concurrent.js +200 -0
  563. package/dist/avm2/natives/concurrent.js.map +1 -0
  564. package/dist/avm2/natives/date.d.ts +5 -0
  565. package/dist/avm2/natives/date.d.ts.map +1 -0
  566. package/dist/avm2/natives/date.js +582 -0
  567. package/dist/avm2/natives/date.js.map +1 -0
  568. package/dist/avm2/natives/define.d.ts +58 -0
  569. package/dist/avm2/natives/define.d.ts.map +1 -0
  570. package/dist/avm2/natives/define.js +131 -0
  571. package/dist/avm2/natives/define.js.map +1 -0
  572. package/dist/avm2/natives/describe.d.ts +3 -0
  573. package/dist/avm2/natives/describe.d.ts.map +1 -0
  574. package/dist/avm2/natives/describe.js +352 -0
  575. package/dist/avm2/natives/describe.js.map +1 -0
  576. package/dist/avm2/natives/dictionary.d.ts +3 -0
  577. package/dist/avm2/natives/dictionary.d.ts.map +1 -0
  578. package/dist/avm2/natives/dictionary.js +13 -0
  579. package/dist/avm2/natives/dictionary.js.map +1 -0
  580. package/dist/avm2/natives/float-vector.d.ts +20 -0
  581. package/dist/avm2/natives/float-vector.d.ts.map +1 -0
  582. package/dist/avm2/natives/float-vector.js +82 -0
  583. package/dist/avm2/natives/float-vector.js.map +1 -0
  584. package/dist/avm2/natives/float.d.ts +5 -0
  585. package/dist/avm2/natives/float.d.ts.map +1 -0
  586. package/dist/avm2/natives/float.js +97 -0
  587. package/dist/avm2/natives/float.js.map +1 -0
  588. package/dist/avm2/natives/index.d.ts +7 -0
  589. package/dist/avm2/natives/index.d.ts.map +1 -0
  590. package/dist/avm2/natives/index.js +65 -0
  591. package/dist/avm2/natives/index.js.map +1 -0
  592. package/dist/avm2/natives/json.d.ts +3 -0
  593. package/dist/avm2/natives/json.d.ts.map +1 -0
  594. package/dist/avm2/natives/json.js +515 -0
  595. package/dist/avm2/natives/json.js.map +1 -0
  596. package/dist/avm2/natives/number.d.ts +15 -0
  597. package/dist/avm2/natives/number.d.ts.map +1 -0
  598. package/dist/avm2/natives/number.js +163 -0
  599. package/dist/avm2/natives/number.js.map +1 -0
  600. package/dist/avm2/natives/object.d.ts +8 -0
  601. package/dist/avm2/natives/object.d.ts.map +1 -0
  602. package/dist/avm2/natives/object.js +238 -0
  603. package/dist/avm2/natives/object.js.map +1 -0
  604. package/dist/avm2/natives/proxy.d.ts +5 -0
  605. package/dist/avm2/natives/proxy.d.ts.map +1 -0
  606. package/dist/avm2/natives/proxy.js +76 -0
  607. package/dist/avm2/natives/proxy.js.map +1 -0
  608. package/dist/avm2/natives/regexp.d.ts +21 -0
  609. package/dist/avm2/natives/regexp.d.ts.map +1 -0
  610. package/dist/avm2/natives/regexp.js +486 -0
  611. package/dist/avm2/natives/regexp.js.map +1 -0
  612. package/dist/avm2/natives/shell-workers.d.ts +140 -0
  613. package/dist/avm2/natives/shell-workers.d.ts.map +1 -0
  614. package/dist/avm2/natives/shell-workers.js +405 -0
  615. package/dist/avm2/natives/shell-workers.js.map +1 -0
  616. package/dist/avm2/natives/shell.d.ts +12 -0
  617. package/dist/avm2/natives/shell.d.ts.map +1 -0
  618. package/dist/avm2/natives/shell.js +558 -0
  619. package/dist/avm2/natives/shell.js.map +1 -0
  620. package/dist/avm2/natives/sort.d.ts +7 -0
  621. package/dist/avm2/natives/sort.d.ts.map +1 -0
  622. package/dist/avm2/natives/sort.js +378 -0
  623. package/dist/avm2/natives/sort.js.map +1 -0
  624. package/dist/avm2/natives/string.d.ts +5 -0
  625. package/dist/avm2/natives/string.d.ts.map +1 -0
  626. package/dist/avm2/natives/string.js +133 -0
  627. package/dist/avm2/natives/string.js.map +1 -0
  628. package/dist/avm2/natives/sync.d.ts +215 -0
  629. package/dist/avm2/natives/sync.d.ts.map +1 -0
  630. package/dist/avm2/natives/sync.js +822 -0
  631. package/dist/avm2/natives/sync.js.map +1 -0
  632. package/dist/avm2/natives/toplevel.d.ts +5 -0
  633. package/dist/avm2/natives/toplevel.d.ts.map +1 -0
  634. package/dist/avm2/natives/toplevel.js +140 -0
  635. package/dist/avm2/natives/toplevel.js.map +1 -0
  636. package/dist/avm2/natives/vector-elements.d.ts +10 -0
  637. package/dist/avm2/natives/vector-elements.d.ts.map +1 -0
  638. package/dist/avm2/natives/vector-elements.js +47 -0
  639. package/dist/avm2/natives/vector-elements.js.map +1 -0
  640. package/dist/avm2/natives/vector.d.ts +5 -0
  641. package/dist/avm2/natives/vector.d.ts.map +1 -0
  642. package/dist/avm2/natives/vector.js +407 -0
  643. package/dist/avm2/natives/vector.js.map +1 -0
  644. package/dist/avm2/natives/xml/access.d.ts +34 -0
  645. package/dist/avm2/natives/xml/access.d.ts.map +1 -0
  646. package/dist/avm2/natives/xml/access.js +634 -0
  647. package/dist/avm2/natives/xml/access.js.map +1 -0
  648. package/dist/avm2/natives/xml/build.d.ts +11 -0
  649. package/dist/avm2/natives/xml/build.d.ts.map +1 -0
  650. package/dist/avm2/natives/xml/build.js +292 -0
  651. package/dist/avm2/natives/xml/build.js.map +1 -0
  652. package/dist/avm2/natives/xml/chars.d.ts +9 -0
  653. package/dist/avm2/natives/xml/chars.d.ts.map +1 -0
  654. package/dist/avm2/natives/xml/chars.js +113 -0
  655. package/dist/avm2/natives/xml/chars.js.map +1 -0
  656. package/dist/avm2/natives/xml/escape.d.ts +5 -0
  657. package/dist/avm2/natives/xml/escape.d.ts.map +1 -0
  658. package/dist/avm2/natives/xml/escape.js +39 -0
  659. package/dist/avm2/natives/xml/escape.js.map +1 -0
  660. package/dist/avm2/natives/xml/names.d.ts +46 -0
  661. package/dist/avm2/natives/xml/names.d.ts.map +1 -0
  662. package/dist/avm2/natives/xml/names.js +205 -0
  663. package/dist/avm2/natives/xml/names.js.map +1 -0
  664. package/dist/avm2/natives/xml/node.d.ts +94 -0
  665. package/dist/avm2/natives/xml/node.d.ts.map +1 -0
  666. package/dist/avm2/natives/xml/node.js +273 -0
  667. package/dist/avm2/natives/xml/node.js.map +1 -0
  668. package/dist/avm2/natives/xml/operators.d.ts +7 -0
  669. package/dist/avm2/natives/xml/operators.d.ts.map +1 -0
  670. package/dist/avm2/natives/xml/operators.js +70 -0
  671. package/dist/avm2/natives/xml/operators.js.map +1 -0
  672. package/dist/avm2/natives/xml/parser.d.ts +51 -0
  673. package/dist/avm2/natives/xml/parser.d.ts.map +1 -0
  674. package/dist/avm2/natives/xml/parser.js +357 -0
  675. package/dist/avm2/natives/xml/parser.js.map +1 -0
  676. package/dist/avm2/natives/xml/strings.d.ts +10 -0
  677. package/dist/avm2/natives/xml/strings.d.ts.map +1 -0
  678. package/dist/avm2/natives/xml/strings.js +192 -0
  679. package/dist/avm2/natives/xml/strings.js.map +1 -0
  680. package/dist/avm2/natives/xml/values.d.ts +48 -0
  681. package/dist/avm2/natives/xml/values.d.ts.map +1 -0
  682. package/dist/avm2/natives/xml/values.js +123 -0
  683. package/dist/avm2/natives/xml/values.js.map +1 -0
  684. package/dist/avm2/natives/xml/xml.d.ts +5 -0
  685. package/dist/avm2/natives/xml/xml.d.ts.map +1 -0
  686. package/dist/avm2/natives/xml/xml.js +646 -0
  687. package/dist/avm2/natives/xml/xml.js.map +1 -0
  688. package/dist/avm2/number-strings.d.ts +28 -0
  689. package/dist/avm2/number-strings.d.ts.map +1 -0
  690. package/dist/avm2/number-strings.js +111 -0
  691. package/dist/avm2/number-strings.js.map +1 -0
  692. package/dist/avm2/numbers.d.ts +12 -0
  693. package/dist/avm2/numbers.d.ts.map +1 -0
  694. package/dist/avm2/numbers.js +559 -0
  695. package/dist/avm2/numbers.js.map +1 -0
  696. package/dist/avm2/options.d.ts +105 -0
  697. package/dist/avm2/options.d.ts.map +1 -0
  698. package/dist/avm2/options.js +17 -0
  699. package/dist/avm2/options.js.map +1 -0
  700. package/dist/avm2/player-messages.d.ts +3 -0
  701. package/dist/avm2/player-messages.d.ts.map +1 -0
  702. package/dist/avm2/player-messages.js +551 -0
  703. package/dist/avm2/player-messages.js.map +1 -0
  704. package/dist/avm2/property-cache.d.ts +61 -0
  705. package/dist/avm2/property-cache.d.ts.map +1 -0
  706. package/dist/avm2/property-cache.js +136 -0
  707. package/dist/avm2/property-cache.js.map +1 -0
  708. package/dist/avm2/runtime.d.ts +588 -0
  709. package/dist/avm2/runtime.d.ts.map +1 -0
  710. package/dist/avm2/runtime.js +2645 -0
  711. package/dist/avm2/runtime.js.map +1 -0
  712. package/dist/avm2/traits.d.ts +233 -0
  713. package/dist/avm2/traits.d.ts.map +1 -0
  714. package/dist/avm2/traits.js +510 -0
  715. package/dist/avm2/traits.js.map +1 -0
  716. package/dist/avm2/weak-keys.d.ts +25 -0
  717. package/dist/avm2/weak-keys.d.ts.map +1 -0
  718. package/dist/avm2/weak-keys.js +81 -0
  719. package/dist/avm2/weak-keys.js.map +1 -0
  720. package/dist/index.d.ts +8 -0
  721. package/dist/index.d.ts.map +1 -0
  722. package/dist/index.js +8 -0
  723. package/dist/index.js.map +1 -0
  724. package/package.json +43 -3
  725. package/src/avm1/activation.ts +114 -0
  726. package/src/avm1/case.ts +257 -0
  727. package/src/avm1/clips.ts +440 -0
  728. package/src/avm1/control.ts +339 -0
  729. package/src/avm1/errors.ts +60 -0
  730. package/src/avm1/functions.ts +271 -0
  731. package/src/avm1/globals/array.ts +676 -0
  732. package/src/avm1/globals/broadcaster.ts +185 -0
  733. package/src/avm1/globals/date.ts +548 -0
  734. package/src/avm1/globals/global.ts +420 -0
  735. package/src/avm1/globals/math.ts +152 -0
  736. package/src/avm1/globals/number.ts +122 -0
  737. package/src/avm1/globals/string.ts +254 -0
  738. package/src/avm1/globals/timers.ts +144 -0
  739. package/src/avm1/host.ts +155 -0
  740. package/src/avm1/index.ts +69 -0
  741. package/src/avm1/inheritance.ts +159 -0
  742. package/src/avm1/numbers.ts +348 -0
  743. package/src/avm1/objects.ts +1080 -0
  744. package/src/avm1/operators.ts +229 -0
  745. package/src/avm1/realm.ts +704 -0
  746. package/src/avm1/runtime.ts +1291 -0
  747. package/src/avm1/scope.ts +482 -0
  748. package/src/avm1/urls.ts +226 -0
  749. package/src/avm1/values.ts +145 -0
  750. package/src/avm2/amf-classes.ts +80 -0
  751. package/src/avm2/amf.ts +913 -0
  752. package/src/avm2/array-conversion.ts +117 -0
  753. package/src/avm2/builtin-library.ts +28 -0
  754. package/src/avm2/cache-fill.ts +124 -0
  755. package/src/avm2/classes.ts +235 -0
  756. package/src/avm2/definitions.ts +93 -0
  757. package/src/avm2/descriptors.ts +137 -0
  758. package/src/avm2/dictionary-keys.ts +345 -0
  759. package/src/avm2/domain-memory.ts +95 -0
  760. package/src/avm2/domain.ts +335 -0
  761. package/src/avm2/dynamic-properties.ts +209 -0
  762. package/src/avm2/enumeration.ts +506 -0
  763. package/src/avm2/errors.ts +54 -0
  764. package/src/avm2/float-library.ts +66 -0
  765. package/src/avm2/float.ts +31 -0
  766. package/src/avm2/hooks.ts +97 -0
  767. package/src/avm2/index.ts +84 -0
  768. package/src/avm2/messages.ts +178 -0
  769. package/src/avm2/method-factories.ts +130 -0
  770. package/src/avm2/modules.ts +120 -0
  771. package/src/avm2/names.ts +292 -0
  772. package/src/avm2/natives/aliases.ts +59 -0
  773. package/src/avm2/natives/array.ts +482 -0
  774. package/src/avm2/natives/bytearray.ts +1474 -0
  775. package/src/avm2/natives/case.ts +98 -0
  776. package/src/avm2/natives/concurrent.ts +268 -0
  777. package/src/avm2/natives/date.ts +678 -0
  778. package/src/avm2/natives/define.ts +176 -0
  779. package/src/avm2/natives/describe.ts +426 -0
  780. package/src/avm2/natives/dictionary.ts +18 -0
  781. package/src/avm2/natives/float-vector.ts +99 -0
  782. package/src/avm2/natives/float.ts +116 -0
  783. package/src/avm2/natives/index.ts +70 -0
  784. package/src/avm2/natives/json.ts +600 -0
  785. package/src/avm2/natives/number.ts +194 -0
  786. package/src/avm2/natives/object.ts +272 -0
  787. package/src/avm2/natives/proxy.ts +98 -0
  788. package/src/avm2/natives/regexp.ts +580 -0
  789. package/src/avm2/natives/shell-workers.ts +474 -0
  790. package/src/avm2/natives/shell.ts +707 -0
  791. package/src/avm2/natives/sort.ts +438 -0
  792. package/src/avm2/natives/string.ts +158 -0
  793. package/src/avm2/natives/sync.ts +964 -0
  794. package/src/avm2/natives/toplevel.ts +163 -0
  795. package/src/avm2/natives/vector-elements.ts +61 -0
  796. package/src/avm2/natives/vector.ts +511 -0
  797. package/src/avm2/natives/xml/access.ts +767 -0
  798. package/src/avm2/natives/xml/build.ts +381 -0
  799. package/src/avm2/natives/xml/chars.ts +127 -0
  800. package/src/avm2/natives/xml/escape.ts +46 -0
  801. package/src/avm2/natives/xml/names.ts +256 -0
  802. package/src/avm2/natives/xml/node.ts +339 -0
  803. package/src/avm2/natives/xml/operators.ts +90 -0
  804. package/src/avm2/natives/xml/parser.ts +414 -0
  805. package/src/avm2/natives/xml/strings.ts +241 -0
  806. package/src/avm2/natives/xml/values.ts +162 -0
  807. package/src/avm2/natives/xml/xml.ts +829 -0
  808. package/src/avm2/number-strings.ts +127 -0
  809. package/src/avm2/numbers.ts +605 -0
  810. package/src/avm2/options.ts +125 -0
  811. package/src/avm2/player-messages.ts +552 -0
  812. package/src/avm2/property-cache.ts +160 -0
  813. package/src/avm2/runtime.ts +3274 -0
  814. package/src/avm2/traits.ts +584 -0
  815. package/src/index.ts +8 -0
@@ -0,0 +1,1856 @@
1
+ // E4X: XML and XMLList, as avmplus has them. An XML value stands for one
2
+ // node of the tree (node.ts), and is the same object each time, so that XML
3
+ // values compare by the node they are; an XMLList holds nodes, and the
4
+ // object and name it was got from, which assignments to it write back to.
5
+ // Names are looked up by PropertyHook in place of dynamic properties.
6
+ //
7
+ // Translated from avmplus' core/XMLObject.cpp, XMLListObject.cpp,
8
+ // XMLClass.cpp, XMLListClass.cpp and E4X's parts of Toplevel.cpp and
9
+ // AvmCore.cpp, this file is subject to the Mozilla Public License, v. 2.0:
10
+ // http://mozilla.org/MPL/2.0/.
11
+ import { CONSTANT_Qname, CONSTANT_QnameA, Namespace, NS_Public, namespace, prefixedNamespace, prefixOf, publicNs, } from "../../names.js";
12
+ import { isSpace, isXMLName } from "./chars.js";
13
+ import { escapeAttributeValue, escapeElementValue } from "./escape.js";
14
+ import { ATTRIBUTE, CDATA, COMMENT, ELEMENT, matches, PROCESSING_INSTRUCTION, TEXT, XMLNode, } from "./node.js";
15
+ import * as P from "./parser.js";
16
+ // Error numbers, as avmplus' kXML* errors.
17
+ const PREFIX_NOT_BOUND = 1083;
18
+ const BAD_QNAME = 1084;
19
+ const UNTERMINATED_ELEMENT_TAG = 1085;
20
+ export const ONLY_ONE_ITEM_LISTS = 1086;
21
+ const ASSIGNMENT_TO_INDEXED_XML = 1087;
22
+ const MARKUP_MUST_BE_WELL_FORMED = 1088;
23
+ const ASSIGNMENT_ONE_ITEM_LISTS = 1089;
24
+ const NAMESPACE_WITH_PREFIX_AND_NO_URI = 1098;
25
+ const DUPLICATE_ATTRIBUTE = 1104;
26
+ const INVALID_NAME = 1117;
27
+ const ILLEGAL_CYCLICAL_LOOP = 1118;
28
+ /** What each of the parser's errors throws. */
29
+ const PARSE_ERRORS = {
30
+ [P.MALFORMED_ELEMENT]: 1090,
31
+ [P.UNTERMINATED_CDATA]: 1091,
32
+ [P.UNTERMINATED_XML_DECLARATION]: 1092,
33
+ [P.UNTERMINATED_DOCTYPE]: 1093,
34
+ [P.UNTERMINATED_COMMENT]: 1094,
35
+ [P.UNTERMINATED_ATTRIBUTE_VALUE]: 1095,
36
+ [P.UNTERMINATED_PROCESSING_INSTRUCTION]: 1097,
37
+ };
38
+ const XML_1998 = "http://www.w3.org/XML/1998/namespace";
39
+ /** Any name in any namespace: an XMLList's target property when it has none. */
40
+ const ANY = { local: null, namespaces: null, attribute: false, qualified: false };
41
+ const states = new WeakMap();
42
+ export function e4x(rt) {
43
+ let state = states.get(rt);
44
+ if (!state) {
45
+ state = {
46
+ ignoreComments: true,
47
+ ignoreProcessingInstructions: true,
48
+ ignoreWhitespace: true,
49
+ prettyPrinting: true,
50
+ prettyIndent: 2,
51
+ xml: rt.builtinClass("XML").$it,
52
+ list: rt.builtinClass("XMLList").$it,
53
+ qname: rt.builtinClass("QName").$it,
54
+ };
55
+ states.set(rt, state);
56
+ }
57
+ return state;
58
+ }
59
+ const okToPrettyPrint = (e) => e.prettyPrinting && e.prettyIndent >= 0;
60
+ // XML and XMLList values.
61
+ export const isXML = (v) => typeof v === "object" && v !== null && v.$node !== undefined;
62
+ const isList = (v) => typeof v === "object" && v !== null && v.$nodes !== undefined;
63
+ /** The XML object that stands for `node`, the same each time. */
64
+ export function xmlOf(rt, node) {
65
+ let o = node.object;
66
+ if (!o) {
67
+ o = e4x(rt).xml.instance();
68
+ o.$node = node;
69
+ node.object = o;
70
+ }
71
+ return o;
72
+ }
73
+ /** A new XMLList, got from `target` by `property`. */
74
+ export function newList(rt, target = null, property = ANY) {
75
+ const o = e4x(rt).list.instance();
76
+ o.$nodes = [];
77
+ o.$target = target;
78
+ o.$targetProperty = property;
79
+ o.$appended = false;
80
+ return o;
81
+ }
82
+ /** As _appendNode. */
83
+ function appendNode(list, node) {
84
+ list.$nodes.push(node);
85
+ list.$appended = true;
86
+ }
87
+ /** As XMLListObject::_append: an XMLList's nodes, and its target, or an XML value's node. */
88
+ export function append(list, v) {
89
+ if (isList(v)) {
90
+ list.$target = v.$target;
91
+ list.$targetProperty = v.$targetProperty;
92
+ list.$appended = false;
93
+ list.$nodes.push(...v.$nodes);
94
+ }
95
+ else if (isXML(v)) {
96
+ list.$appended = true;
97
+ list.$nodes.push(v.$node);
98
+ }
99
+ }
100
+ /**
101
+ * As fixTargetObject: once nodes were appended, the list's target is the
102
+ * last one's parent, and its target property the last one's name.
103
+ */
104
+ function fixTarget(rt, list) {
105
+ const nodes = list.$nodes;
106
+ if (!list.$appended || !nodes.length) {
107
+ return;
108
+ }
109
+ const v = nodes[nodes.length - 1];
110
+ if (v.parent) {
111
+ const target = list.$target;
112
+ if (isXML(target) && target.$node !== v.parent) {
113
+ list.$target = xmlOf(rt, v.parent);
114
+ }
115
+ }
116
+ else {
117
+ list.$target = null;
118
+ }
119
+ if (v.kind !== PROCESSING_INSTRUCTION) {
120
+ const name = v.xname();
121
+ if (name) {
122
+ list.$targetProperty = name;
123
+ }
124
+ }
125
+ list.$appended = false;
126
+ }
127
+ // Names.
128
+ /** As String::parseIndex: a name's index, or -1. */
129
+ function parseIndex(name) {
130
+ const c = name.charCodeAt(0);
131
+ if (!(c >= 0x30 && c <= 0x39)) {
132
+ return -1;
133
+ }
134
+ const i = Number(name);
135
+ return i >>> 0 === i && i !== 0xffffffff && String(i) === name ? i : -1;
136
+ }
137
+ /** An index name: not any name, nor an attribute's. */
138
+ const indexOf = (n) => (n.attribute || n.local === null ? -1 : parseIndex(n.local));
139
+ /** Whether `ns` is `other`, prefix, URI and kind, as CoerceE4XMultiname compares them. */
140
+ const sameNamespace = (ns, other) => ns !== null && ns.uri === other.uri && ns.kind === other.kind && prefixOf(ns) === prefixOf(other);
141
+ /**
142
+ * As CoerceE4XMultiname: an unqualified name in the default XML namespace
143
+ * too, and a name of "*" or starting with "@" as any name or an
144
+ * attribute's.
145
+ */
146
+ export function coerce(rt, n) {
147
+ let namespaces = n.namespaces;
148
+ if (!n.qualified && namespaces !== null) {
149
+ const dxns = rt.defaultXmlNamespace;
150
+ if (!namespaces.some((ns) => sameNamespace(ns, dxns))) {
151
+ namespaces = [...namespaces, dxns];
152
+ }
153
+ }
154
+ let local = n.local;
155
+ let attribute = n.attribute;
156
+ if (local === "*") {
157
+ local = null;
158
+ }
159
+ else if (local !== null && local.charCodeAt(0) === 0x40 && !attribute) {
160
+ local = local === "@*" ? null : local.slice(1);
161
+ attribute = true;
162
+ }
163
+ if (namespaces === n.namespaces && local === n.local && attribute === n.attribute) {
164
+ return n;
165
+ }
166
+ return { local, namespaces, attribute, qualified: n.qualified };
167
+ }
168
+ /** A property's multiname as E4X names: a Qname is qualified, its namespace null for any. */
169
+ function fromMultiname(mn) {
170
+ const qualified = mn.kind === CONSTANT_Qname || mn.kind === CONSTANT_QnameA;
171
+ const all = mn.namespaces;
172
+ let namespaces;
173
+ if (qualified) {
174
+ namespaces = all[0] ? [all[0]] : null;
175
+ }
176
+ else {
177
+ namespaces = all.some((ns) => ns === null) ? null : all;
178
+ }
179
+ return { local: mn.name, namespaces, attribute: mn.attribute, qualified };
180
+ }
181
+ /**
182
+ * As ToXMLName: a name for a method's argument, as XML's child() takes
183
+ * one. A QName is its local name, in a namespace of its URI; anything else
184
+ * is its string, in the public namespace: "@name" an attribute's, "*" any.
185
+ */
186
+ export function toXMLName(rt, p) {
187
+ if (p === null || p === undefined) {
188
+ throw rt.error("TypeError", 1010);
189
+ }
190
+ let s;
191
+ if (p instanceof Namespace) {
192
+ s = p.uri ?? "";
193
+ }
194
+ else if (p.$local !== undefined) {
195
+ // avmplus makes the namespace of the URI's string: "null" for any.
196
+ return {
197
+ local: p.$local,
198
+ namespaces: [namespace(NS_Public, p.$ns ? p.$ns.uri : "null")],
199
+ attribute: p.$attr === true,
200
+ qualified: false,
201
+ };
202
+ }
203
+ else {
204
+ s = rt.toString(p);
205
+ }
206
+ let local = s;
207
+ let attribute = false;
208
+ if (s.charCodeAt(0) === 0x40) {
209
+ local = s.slice(1);
210
+ attribute = true;
211
+ }
212
+ if (local === "*") {
213
+ local = null;
214
+ }
215
+ return { local, namespaces: [publicNs], attribute, qualified: false };
216
+ }
217
+ /** As ToAttributeName and then ToXMLName: an attribute's name for XML's attribute(). */
218
+ export function toAttributeName(rt, v) {
219
+ if (v === null || v === undefined || typeof v === "number" || typeof v === "boolean") {
220
+ throw rt.error("TypeError", 1010);
221
+ }
222
+ if (typeof v === "object" && !(v instanceof Namespace) && v.$local !== undefined) {
223
+ return { ...toXMLName(rt, v), attribute: true };
224
+ }
225
+ const s = v instanceof Namespace ? (v.uri ?? "") : rt.toString(v);
226
+ const uri = s === "*" ? "null" : rt.defaultXmlNamespace.uri;
227
+ return {
228
+ local: s === "*" ? null : s,
229
+ namespaces: [namespace(NS_Public, uri)],
230
+ attribute: true,
231
+ qualified: false,
232
+ };
233
+ }
234
+ /** Whether `n` names child `child`: only an element has a name to match. */
235
+ const matchesChild = (n, child) => matches(n, child.kind === ELEMENT ? child : null);
236
+ // Namespaces and QNames.
237
+ /** As AvmCore::newNamespace(uri): a Namespace's own, a QName's URI's, or of a string. */
238
+ export function newNamespace(rt, uri) {
239
+ if (uri instanceof Namespace) {
240
+ return uri;
241
+ }
242
+ if (typeof uri === "object" && uri !== null && uri.$local !== undefined && uri.$ns) {
243
+ return namespace(NS_Public, uri.$ns.uri);
244
+ }
245
+ return namespace(NS_Public, rt.toString(uri));
246
+ }
247
+ /**
248
+ * As AvmCore::newNamespace(prefix, uri): a namespace with a prefix, none
249
+ * if it is not an XML name, or null for a prefix of the empty URI.
250
+ */
251
+ function newPrefixedNamespace(rt, prefix, uri) {
252
+ const u = typeof uri === "object" && uri !== null && uri.$local !== undefined && uri.$ns
253
+ ? uri.$ns.uri
254
+ : rt.toString(uri);
255
+ if (u === "") {
256
+ return prefix === undefined || rt.toString(prefix) === "" ? publicNs : null;
257
+ }
258
+ if (prefix === undefined) {
259
+ return namespace(NS_Public, u);
260
+ }
261
+ const p = rt.toString(prefix);
262
+ if (p !== "" && !isXMLName(p)) {
263
+ return namespace(NS_Public, u);
264
+ }
265
+ return prefixedNamespace(p, u);
266
+ }
267
+ /** As NamespaceClass::construct: Namespace(), Namespace(uri) or Namespace(prefix, uri). */
268
+ export function constructNamespace(rt, args) {
269
+ if (args.length === 0) {
270
+ return publicNs;
271
+ }
272
+ if (args.length === 1) {
273
+ return newNamespace(rt, args[0]);
274
+ }
275
+ const p = rt.toString(args[0]);
276
+ if (p.length && !rt.toString(args[1]).length) {
277
+ throw rt.error("TypeError", NAMESPACE_WITH_PREFIX_AND_NO_URI, p);
278
+ }
279
+ return newPrefixedNamespace(rt, args[0], args[1]) ?? publicNs;
280
+ }
281
+ /** A QName object of a node's name, as XML's name() gives it. */
282
+ export function qnameOf(rt, node) {
283
+ const q = e4x(rt).qname.instance();
284
+ q.$ns = node.ns;
285
+ q.$local = node.name;
286
+ q.$attr = node.kind === ATTRIBUTE;
287
+ return q;
288
+ }
289
+ /**
290
+ * As QNameObject(name), with no namespace: a QName's name, else any name
291
+ * in any namespace for "*", or the name in the default XML namespace.
292
+ */
293
+ function qnameName(rt, name) {
294
+ if (typeof name === "object" && name !== null && name.$local !== undefined) {
295
+ return {
296
+ local: name.$local,
297
+ namespaces: name.$ns ? [name.$ns] : null,
298
+ attribute: name.$attr === true,
299
+ qualified: name.$ns !== null,
300
+ };
301
+ }
302
+ const s = name === undefined ? "" : rt.toString(name);
303
+ if (s === "*") {
304
+ return ANY;
305
+ }
306
+ return { local: s, namespaces: [rt.defaultXmlNamespace], attribute: false, qualified: true };
307
+ }
308
+ /** As GetNamespace: the namespace of `ns`'s URI among `list`, else one of its URI. */
309
+ function getNamespace(ns, list) {
310
+ for (const ns2 of list) {
311
+ if (ns2.uri === ns.uri) {
312
+ return ns2;
313
+ }
314
+ }
315
+ return namespace(NS_Public, ns.uri);
316
+ }
317
+ const hasPrefix = (ns) => {
318
+ const p = prefixOf(ns);
319
+ return p !== undefined && p !== "";
320
+ };
321
+ // Parsing.
322
+ /**
323
+ * As the XMLObject constructor: `text` parsed, as the children of an
324
+ * element for `defaultNs`, as E4X parses <parent xmlns=uri>text</parent>.
325
+ */
326
+ function parse(rt, text, defaultNs) {
327
+ const e = e4x(rt);
328
+ const parser = new P.XMLParser(text);
329
+ parser.parse(e.ignoreWhitespace);
330
+ parser.setCondenseWhite(true);
331
+ const root = new XMLNode(ELEMENT);
332
+ const ns = prefixedNamespace("", defaultNs.uri ?? "");
333
+ root.addInScopeNamespace(ns);
334
+ root.setName("parent", ns);
335
+ let p = root;
336
+ const tag = new P.XMLTag();
337
+ for (;;) {
338
+ const status = parser.getNext(tag);
339
+ if (status === P.END) {
340
+ break;
341
+ }
342
+ if (status !== P.OK) {
343
+ throw rt.error("TypeError", PARSE_ERRORS[status]);
344
+ }
345
+ let node = null;
346
+ switch (tag.type) {
347
+ case P.TAG_ELEMENT:
348
+ if (tag.text.charCodeAt(0) === 0x2f) {
349
+ // A closing tag: its element's, else not well formed.
350
+ const parentName = p.name;
351
+ const pns = p.ns;
352
+ const name = tag.text.slice(1);
353
+ if (!nodeNameEquals(name, parentName, pns) &&
354
+ !(parentName === name && pns.uri === rt.defaultXmlNamespace.uri)) {
355
+ if (p === root) {
356
+ throw rt.error("TypeError", MARKUP_MUST_BE_WELL_FORMED);
357
+ }
358
+ throw rt.error("TypeError", UNTERMINATED_ELEMENT_TAG, parentName, parentName);
359
+ }
360
+ if (p === root) {
361
+ throw rt.error("TypeError", MARKUP_MUST_BE_WELL_FORMED);
362
+ }
363
+ p = p.parent;
364
+ }
365
+ else {
366
+ const element = new XMLNode(ELEMENT);
367
+ p.append(element);
368
+ if (!tag.empty) {
369
+ p = element;
370
+ }
371
+ copyAttributesAndNamespaces(rt, element, tag);
372
+ const [ns, local] = findNamespace(rt, element, tag.text, false);
373
+ element.setName(local, ns ?? publicNs);
374
+ }
375
+ break;
376
+ case P.TAG_COMMENT:
377
+ if (!e.ignoreComments) {
378
+ node = new XMLNode(COMMENT, tag.text);
379
+ }
380
+ break;
381
+ case P.TAG_CDATA:
382
+ node = new XMLNode(CDATA, tag.text);
383
+ break;
384
+ case P.TAG_TEXT:
385
+ node = new XMLNode(TEXT, tag.text);
386
+ break;
387
+ case P.TAG_PROCESSING_INSTRUCTION:
388
+ if (!e.ignoreProcessingInstructions) {
389
+ const s = tag.text;
390
+ let space = s.indexOf(" ");
391
+ let name = s;
392
+ let value = "";
393
+ if (space >= 0) {
394
+ name = s.slice(0, space);
395
+ while (isSpace(s.charCodeAt(++space))) { }
396
+ value = s.slice(space);
397
+ }
398
+ node = new XMLNode(PROCESSING_INSTRUCTION, value);
399
+ node.setName(name, publicNs);
400
+ }
401
+ break;
402
+ }
403
+ if (node) {
404
+ p.append(node);
405
+ }
406
+ }
407
+ if (p !== root) {
408
+ throw rt.error("TypeError", UNTERMINATED_ELEMENT_TAG, p.name, p.name);
409
+ }
410
+ return root;
411
+ }
412
+ /** As NodeNameEquals: whether a closing tag's name is its element's, with the prefix it has. */
413
+ function nodeNameEquals(name, parentName, ns) {
414
+ if (hasPrefix(ns)) {
415
+ return name === `${prefixOf(ns)}:${parentName}`;
416
+ }
417
+ return name === parentName;
418
+ }
419
+ /**
420
+ * As FindNamespace: a tag's name's namespace, by its prefix among those in
421
+ * scope, and its local name. An attribute without a prefix has none.
422
+ */
423
+ function findNamespace(rt, node, tagName, attribute) {
424
+ const pos = tagName.indexOf(":");
425
+ if (pos === 0) {
426
+ throw rt.error("TypeError", BAD_QNAME, tagName);
427
+ }
428
+ let prefix = "";
429
+ let local = tagName;
430
+ if (pos > 0) {
431
+ prefix = tagName.slice(0, pos);
432
+ local = tagName.slice(pos + 1);
433
+ }
434
+ if (attribute && prefix === "") {
435
+ return [null, local];
436
+ }
437
+ for (let y = node; y; y = y.parent) {
438
+ for (const ns of y.namespaces) {
439
+ if ((prefix === "" && !hasPrefix(ns)) || prefixOf(ns) === prefix) {
440
+ return [ns, local];
441
+ }
442
+ }
443
+ }
444
+ if (prefix === "xml") {
445
+ return [prefixedNamespace("", XML_1998), local];
446
+ }
447
+ if (prefix !== "") {
448
+ throw rt.error("TypeError", PREFIX_NOT_BOUND, prefix, local);
449
+ }
450
+ return [null, local];
451
+ }
452
+ /** Whether an attribute's name is xmlns, or starts with xmlns: (either case). */
453
+ function isXmlns(name) {
454
+ return (name.length >= 5 &&
455
+ name.slice(0, 5).toLowerCase() === "xmlns" &&
456
+ (name.length === 5 || name[5] === ":"));
457
+ }
458
+ /**
459
+ * As CopyAttributesAndNamespaces: a tag's namespace declarations first,
460
+ * as an attribute can be in a namespace declared after it, then its
461
+ * attributes; a second of one name is TypeError 1104.
462
+ */
463
+ function copyAttributesAndNamespaces(rt, element, tag) {
464
+ const attributes = tag.attributes;
465
+ let count = 0;
466
+ for (let i = 0; i < attributes.length; i += 2) {
467
+ const name = attributes[i];
468
+ let ns = null;
469
+ if (isXmlns(name)) {
470
+ if (name.length > 5) {
471
+ if (name.length === 6) {
472
+ throw rt.error("TypeError", BAD_QNAME, name);
473
+ }
474
+ ns = newPrefixedNamespace(rt, name.slice(6), attributes[i + 1]);
475
+ }
476
+ else {
477
+ ns = newPrefixedNamespace(rt, "", attributes[i + 1]);
478
+ }
479
+ if (ns) {
480
+ element.addInScopeNamespace(ns);
481
+ }
482
+ }
483
+ if (!ns) {
484
+ count++;
485
+ }
486
+ }
487
+ if (!count) {
488
+ return;
489
+ }
490
+ for (let i = 0; i < attributes.length; i += 2) {
491
+ if (isXmlns(attributes[i])) {
492
+ continue;
493
+ }
494
+ const attribute = new XMLNode(ATTRIBUTE, attributes[i + 1]);
495
+ attribute.parent = element;
496
+ const [ns, local] = findNamespace(rt, element, attributes[i], true);
497
+ attribute.setName(local, ns ?? publicNs);
498
+ for (const other of element.attributes) {
499
+ if (matches(other.xname(), attribute)) {
500
+ throw rt.error("TypeError", DUPLICATE_ATTRIBUTE, local, tag.text, tag.text.length);
501
+ }
502
+ }
503
+ element.attributes.push(attribute);
504
+ }
505
+ }
506
+ // Conversions.
507
+ /** As ToXML: XML itself, a one-item XMLList's, or text parsed as one node. */
508
+ export function toXML(rt, v) {
509
+ if (v === null || v === undefined) {
510
+ throw rt.error("TypeError", v === undefined ? 1010 : 1009);
511
+ }
512
+ if (isXML(v)) {
513
+ return v;
514
+ }
515
+ if (isList(v)) {
516
+ if (v.$nodes.length === 1) {
517
+ return xmlOf(rt, v.$nodes[0]);
518
+ }
519
+ throw rt.error("TypeError", MARKUP_MUST_BE_WELL_FORMED);
520
+ }
521
+ const root = parse(rt, rt.toString(v), rt.defaultXmlNamespace);
522
+ const children = root.children;
523
+ let node;
524
+ if (!children.length) {
525
+ node = new XMLNode(TEXT, "");
526
+ }
527
+ else if (children.length === 1) {
528
+ node = children[0];
529
+ }
530
+ else {
531
+ // One element, with comments, processing instructions and whitespace around it.
532
+ let element = null;
533
+ for (const n of children) {
534
+ if (n.kind === ELEMENT) {
535
+ if (element) {
536
+ throw rt.error("TypeError", MARKUP_MUST_BE_WELL_FORMED);
537
+ }
538
+ element = n;
539
+ }
540
+ else if (n.kind === TEXT && !isWhitespace(n.value)) {
541
+ throw rt.error("TypeError", MARKUP_MUST_BE_WELL_FORMED);
542
+ }
543
+ }
544
+ if (!element) {
545
+ throw rt.error("TypeError", MARKUP_MUST_BE_WELL_FORMED);
546
+ }
547
+ node = element;
548
+ }
549
+ node.parent = null;
550
+ return xmlOf(rt, node);
551
+ }
552
+ /** As ToXMLList: an XMLList itself, XML as a list of it, or text parsed as nodes. */
553
+ export function toXMLList(rt, v) {
554
+ if (v === null || v === undefined) {
555
+ throw rt.error("TypeError", v === undefined ? 1010 : 1009);
556
+ }
557
+ if (isList(v)) {
558
+ return v;
559
+ }
560
+ if (isXML(v)) {
561
+ const node = v.$node;
562
+ const list = newList(rt, node.parent ? xmlOf(rt, node.parent) : null, node.xname() ?? ANY);
563
+ append(list, v);
564
+ return list;
565
+ }
566
+ let s = rt.toString(v);
567
+ if (s.startsWith("<>") && s.endsWith("</>")) {
568
+ s = s.slice(2, s.length - 3);
569
+ }
570
+ const dxns = rt.defaultXmlNamespace;
571
+ const root = parse(rt, s, dxns);
572
+ const list = newList(rt);
573
+ for (const c of root.children) {
574
+ c.parent = null;
575
+ c.addInScopeNamespace(dxns);
576
+ appendNode(list, c);
577
+ }
578
+ return list;
579
+ }
580
+ function isWhitespace(s) {
581
+ for (let i = 0; i < s.length; i++) {
582
+ if (!isSpace(s.charCodeAt(i))) {
583
+ return false;
584
+ }
585
+ }
586
+ return true;
587
+ }
588
+ export function deepCopy(rt, node) {
589
+ const e = e4x(rt);
590
+ return node.deepCopy(e.ignoreComments, e.ignoreProcessingInstructions);
591
+ }
592
+ export function listDeepCopy(rt, list) {
593
+ fixTarget(rt, list);
594
+ const copy = newList(rt, list.$target, list.$targetProperty);
595
+ for (const node of list.$nodes) {
596
+ copy.$nodes.push(deepCopy(rt, node));
597
+ }
598
+ return copy;
599
+ }
600
+ // Notifications, as setNotification sets a function to call on changes.
601
+ function notifyNeeded(node) {
602
+ for (let n = node; n; n = n.parent) {
603
+ if (n.notification) {
604
+ return true;
605
+ }
606
+ }
607
+ return false;
608
+ }
609
+ function issueNotifications(rt, initial, target, type, value, detail) {
610
+ for (let n = initial; n; n = n.parent) {
611
+ if (n.notification) {
612
+ rt.callValue(n.notification, null, [xmlOf(rt, n), type, target, value, detail], null);
613
+ }
614
+ }
615
+ }
616
+ export function childChanges(rt, node, type, value, prior = null) {
617
+ if (notifyNeeded(node) && (isXML(value) || isList(value))) {
618
+ const detail = prior ? xmlOf(rt, prior) : undefined;
619
+ issueNotifications(rt, node, xmlOf(rt, node), type, value, detail);
620
+ }
621
+ }
622
+ function nonChildChanges(rt, node, type, value, detail = undefined) {
623
+ if (notifyNeeded(node)) {
624
+ issueNotifications(rt, node, xmlOf(rt, node), type, value, detail);
625
+ }
626
+ }
627
+ // The tree changed by values, as ElementE4XNode's _insert and _replace.
628
+ function checkCycle(rt, x, node) {
629
+ for (let n = x; n; n = n.parent) {
630
+ if (n === node) {
631
+ throw rt.error("TypeError", ILLEGAL_CYCLICAL_LOOP);
632
+ }
633
+ }
634
+ }
635
+ /** As _insert: `value` (an XMLList's nodes, else a node as _replace makes it) at `entry`. */
636
+ export function insertAt(rt, x, entry, value) {
637
+ if (x.kind !== ELEMENT) {
638
+ return;
639
+ }
640
+ if (isList(value)) {
641
+ const nodes = value.$nodes;
642
+ for (let j = 0; j < nodes.length; j++) {
643
+ const child = nodes[j];
644
+ checkCycle(rt, x, child);
645
+ child.parent = x;
646
+ x.children.splice(entry + j, 0, child);
647
+ }
648
+ return;
649
+ }
650
+ if (isXML(value)) {
651
+ checkCycle(rt, x, value.$node);
652
+ }
653
+ x.children.splice(entry, 0, null);
654
+ replaceAt(rt, x, entry, value);
655
+ }
656
+ /**
657
+ * As _replace: child `i` (or a new last one) replaced by `v`: an XML
658
+ * node itself, an XMLList's nodes, or a text node of anything else's
659
+ * string. Gives the child it replaced.
660
+ */
661
+ function replaceAt(rt, x, index, v, pastValue = undefined) {
662
+ if (x.kind !== ELEMENT) {
663
+ return null;
664
+ }
665
+ let i = index;
666
+ if (i >= x.children.length) {
667
+ i = x.children.length;
668
+ x.children.push(null);
669
+ }
670
+ const prior = x.children[i];
671
+ if (isXML(v) && v.$node.kind & (ELEMENT | COMMENT | PROCESSING_INSTRUCTION | TEXT | CDATA)) {
672
+ const node = v.$node;
673
+ if (node.kind === ELEMENT) {
674
+ checkCycle(rt, x, node);
675
+ }
676
+ node.parent = x;
677
+ if (prior) {
678
+ prior.parent = null;
679
+ }
680
+ x.children[i] = node;
681
+ }
682
+ else if (isList(v)) {
683
+ x.deleteByIndex(i);
684
+ insertAt(rt, x, i, v);
685
+ }
686
+ else {
687
+ const text = new XMLNode(TEXT, rt.toString(v));
688
+ text.parent = x;
689
+ if (prior) {
690
+ prior.parent = null;
691
+ }
692
+ x.children[i] = text;
693
+ if (notifyNeeded(text)) {
694
+ const detail = prior && prior.kind !== ELEMENT ? prior.value : pastValue;
695
+ nonChildChanges(rt, text, "textSet", text.value, detail);
696
+ }
697
+ }
698
+ return prior;
699
+ }
700
+ // XML's internal methods, E4X 9.1.1, on a node, with a name not yet coerced.
701
+ /** [[Get]]: the attributes or children the name names, or the node itself as index 0. */
702
+ export function getXML(rt, o, name) {
703
+ const n = coerce(rt, name);
704
+ const index = indexOf(n);
705
+ if (index >= 0) {
706
+ return index === 0 ? o : undefined;
707
+ }
708
+ const node = o.$node;
709
+ const list = newList(rt, o, n);
710
+ if (n.attribute) {
711
+ for (const a of node.attributes) {
712
+ if (matches(n, a)) {
713
+ appendNode(list, a);
714
+ }
715
+ }
716
+ }
717
+ else {
718
+ for (const child of node.children) {
719
+ if (matchesChild(n, child)) {
720
+ appendNode(list, child);
721
+ }
722
+ }
723
+ }
724
+ return list;
725
+ }
726
+ /** [[Put]]. */
727
+ export function setXML(rt, o, name, value) {
728
+ const n = coerce(rt, name);
729
+ if (indexOf(n) >= 0) {
730
+ throw rt.error("TypeError", ASSIGNMENT_TO_INDEXED_XML);
731
+ }
732
+ const node = o.$node;
733
+ if (node.kind & (TEXT | CDATA | COMMENT | PROCESSING_INSTRUCTION | ATTRIBUTE)) {
734
+ return;
735
+ }
736
+ let c;
737
+ if (isList(value)) {
738
+ const nodes = value.$nodes;
739
+ c =
740
+ nodes.length === 1 && nodes[0].kind & (TEXT | ATTRIBUTE)
741
+ ? rt.toString(value)
742
+ : listDeepCopy(rt, value);
743
+ }
744
+ else if (isXML(value)) {
745
+ c =
746
+ value.$node.kind & (TEXT | ATTRIBUTE)
747
+ ? rt.toString(value)
748
+ : xmlOf(rt, deepCopy(rt, value.$node));
749
+ }
750
+ else {
751
+ c = rt.toString(value);
752
+ }
753
+ if (n.attribute) {
754
+ let sc;
755
+ if (isList(c)) {
756
+ sc = c.$nodes.map((x) => rt.toString(xmlOf(rt, x))).join(" ");
757
+ }
758
+ else {
759
+ sc = rt.toString(c);
760
+ }
761
+ let a = -1;
762
+ for (let j = 0; j < node.attributes.length; j++) {
763
+ const x = node.attributes[j];
764
+ if (matches(n, x)) {
765
+ if (a === -1) {
766
+ a = j;
767
+ }
768
+ else {
769
+ deleteXML(rt, o, x.xname());
770
+ }
771
+ }
772
+ }
773
+ if (a === -1) {
774
+ const e = new XMLNode(ATTRIBUTE, sc);
775
+ e.parent = node;
776
+ e.setName(n.local, n.namespaces?.length === 1 ? n.namespaces[0] : null);
777
+ node.attributes.push(e);
778
+ nonChildChanges(rt, node, "attributeAdded", n.local, sc);
779
+ }
780
+ else {
781
+ const x = node.attributes[a];
782
+ const prior = x.value;
783
+ x.value = sc;
784
+ nonChildChanges(rt, node, "attributeChanged", n.local, prior);
785
+ }
786
+ return;
787
+ }
788
+ if (n.local !== null && !isXMLName(n.local)) {
789
+ return;
790
+ }
791
+ let i = -1;
792
+ const primitiveAssign = !isXML(c) && !isList(c) && n.local !== null;
793
+ const notify = notifyNeeded(node);
794
+ for (let k = node.children.length - 1; k >= 0; k--) {
795
+ if (matchesChild(n, node.children[k])) {
796
+ // All but the first of those it names are removed.
797
+ if (i !== -1) {
798
+ const was = node.children[i];
799
+ node.deleteByIndex(i);
800
+ if (notify && was.kind === ELEMENT) {
801
+ childChanges(rt, node, "nodeRemoved", xmlOf(rt, was));
802
+ }
803
+ }
804
+ i = k;
805
+ }
806
+ }
807
+ if (i === -1) {
808
+ i = node.children.length;
809
+ if (primitiveAssign) {
810
+ const e = new XMLNode(ELEMENT);
811
+ e.parent = node;
812
+ const ns = n.namespaces === null
813
+ ? null
814
+ : n.namespaces.length === 1
815
+ ? n.namespaces[0]
816
+ : rt.defaultXmlNamespace;
817
+ e.setName(n.local, ns);
818
+ replaceAt(rt, node, i, xmlOf(rt, e));
819
+ e.addInScopeNamespace(ns);
820
+ }
821
+ }
822
+ if (primitiveAssign) {
823
+ const xi = node.children[i];
824
+ let prior;
825
+ if (notifyNeeded(xi)) {
826
+ for (const child of xi.children) {
827
+ if (child.kind === ELEMENT) {
828
+ childChanges(rt, xi, "nodeRemoved", xmlOf(rt, child));
829
+ }
830
+ }
831
+ if (xi.children.length) {
832
+ prior = xmlOf(rt, xi.children[0]);
833
+ }
834
+ }
835
+ xi.children.length = 0;
836
+ const s = rt.toString(c);
837
+ if (s.length) {
838
+ replaceAt(rt, xi, 0, c, prior);
839
+ }
840
+ }
841
+ else {
842
+ const prior = replaceAt(rt, node, i, c);
843
+ if (notifyNeeded(node) && node.children.length > i) {
844
+ childChanges(rt, node, prior ? "nodeChanged" : "nodeAdded", xmlOf(rt, node.children[i]), prior);
845
+ }
846
+ }
847
+ }
848
+ /** [[Delete]]. */
849
+ function deleteXML(rt, o, name) {
850
+ const n = coerce(rt, name);
851
+ if (indexOf(n) >= 0) {
852
+ return true;
853
+ }
854
+ const node = o.$node;
855
+ if (n.attribute) {
856
+ let j = 0;
857
+ while (j < node.attributes.length) {
858
+ const x = node.attributes[j];
859
+ if (matches(n, x)) {
860
+ x.parent = null;
861
+ node.attributes.splice(j, 1);
862
+ nonChildChanges(rt, node, "attributeRemoved", x.name ?? undefined, x.value);
863
+ }
864
+ else {
865
+ j++;
866
+ }
867
+ }
868
+ return true;
869
+ }
870
+ const notify = notifyNeeded(node);
871
+ let q = 0;
872
+ while (q < node.children.length) {
873
+ const x = node.children[q];
874
+ if (matchesChild(n, x)) {
875
+ x.parent = null;
876
+ node.deleteByIndex(q);
877
+ if (notify && x.kind === ELEMENT) {
878
+ childChanges(rt, node, "nodeRemoved", xmlOf(rt, x));
879
+ }
880
+ }
881
+ else {
882
+ q++;
883
+ }
884
+ }
885
+ return true;
886
+ }
887
+ /** [[HasProperty]]. */
888
+ export function hasXML(rt, o, name) {
889
+ const n = coerce(rt, name);
890
+ const index = indexOf(n);
891
+ if (index >= 0) {
892
+ return index === 0;
893
+ }
894
+ const node = o.$node;
895
+ if (n.attribute) {
896
+ return node.attributes.some((a) => matches(n, a));
897
+ }
898
+ return node.children.some((c) => matchesChild(n, c));
899
+ }
900
+ /** [[Descendants]]: the attributes or elements the name names, in each child, depth first. */
901
+ export function descendantsOf(rt, node, name) {
902
+ const n = coerce(rt, name);
903
+ const list = newList(rt);
904
+ if (n.attribute) {
905
+ for (const a of node.attributes) {
906
+ if (matches(n, a)) {
907
+ appendNode(list, a);
908
+ }
909
+ }
910
+ }
911
+ for (const child of node.children) {
912
+ if (!n.attribute && matchesChild(n, child)) {
913
+ appendNode(list, child);
914
+ }
915
+ const dq = descendantsOf(rt, child, n);
916
+ if (dq.$nodes.length) {
917
+ append(list, dq);
918
+ }
919
+ }
920
+ return list;
921
+ }
922
+ // XMLList's internal methods, E4X 9.2.1.
923
+ export function getList(rt, o, n) {
924
+ const nodes = o.$nodes;
925
+ const index = indexOf(n);
926
+ if (index >= 0) {
927
+ return index < nodes.length ? xmlOf(rt, nodes[index]) : undefined;
928
+ }
929
+ const list = newList(rt, o, n);
930
+ for (const node of nodes) {
931
+ if (node.kind === ELEMENT) {
932
+ const gq = getXML(rt, xmlOf(rt, node), n);
933
+ if (gq.$nodes.length) {
934
+ append(list, gq);
935
+ }
936
+ }
937
+ }
938
+ return list;
939
+ }
940
+ function setList(rt, o, n, value) {
941
+ const index = indexOf(n);
942
+ if (index >= 0) {
943
+ setIndex(rt, o, index, value);
944
+ return;
945
+ }
946
+ const nodes = o.$nodes;
947
+ if (nodes.length > 1) {
948
+ throw rt.error("TypeError", ASSIGNMENT_ONE_ITEM_LISTS);
949
+ }
950
+ if (nodes.length === 0) {
951
+ const r = resolveValue(rt, o);
952
+ if (r === null) {
953
+ return;
954
+ }
955
+ // As avmplus: an XML value's own length is its children's.
956
+ if (isXML(r) && r.$node.children.length !== 1) {
957
+ return;
958
+ }
959
+ if (isList(r) && r.$nodes.length !== 1) {
960
+ return;
961
+ }
962
+ append(o, r);
963
+ }
964
+ setXML(rt, xmlOf(rt, nodes[0]), n, value);
965
+ }
966
+ function deleteList(rt, o, n) {
967
+ const index = indexOf(n);
968
+ if (index >= 0) {
969
+ return deleteIndex(rt, o, index);
970
+ }
971
+ for (const node of o.$nodes) {
972
+ if (node.kind === ELEMENT) {
973
+ deleteXML(rt, xmlOf(rt, node), n);
974
+ }
975
+ }
976
+ return true;
977
+ }
978
+ export function hasList(rt, o, n) {
979
+ const nodes = o.$nodes;
980
+ const index = indexOf(n);
981
+ if (index >= 0) {
982
+ return index < nodes.length;
983
+ }
984
+ return nodes.some((node) => node.kind === ELEMENT && hasXML(rt, xmlOf(rt, node), n));
985
+ }
986
+ export function descendantsOfList(rt, o, n) {
987
+ const list = newList(rt);
988
+ for (const node of o.$nodes) {
989
+ if (node.kind === ELEMENT) {
990
+ const dq = descendantsOf(rt, node, n);
991
+ if (dq.$nodes.length) {
992
+ append(list, dq);
993
+ }
994
+ }
995
+ }
996
+ return list;
997
+ }
998
+ /**
999
+ * As _resolveValue: a list with nodes; an empty one, the property of its
1000
+ * target it was got from, which is made, empty, if there is none, so that
1001
+ * assigning to x.a.b makes <a>.
1002
+ */
1003
+ function resolveValue(rt, v) {
1004
+ if (isXML(v)) {
1005
+ return v;
1006
+ }
1007
+ if (v.$nodes.length > 0) {
1008
+ return v;
1009
+ }
1010
+ fixTarget(rt, v);
1011
+ const property = v.$targetProperty;
1012
+ if (v.$target === null || property.attribute || property.local === null) {
1013
+ return null;
1014
+ }
1015
+ const base = resolveValue(rt, v.$target);
1016
+ if (base === null) {
1017
+ return null;
1018
+ }
1019
+ const get = (b) => isXML(b) ? getXML(rt, b, property) : getList(rt, b, coerce(rt, property));
1020
+ const target = get(base);
1021
+ if (!isList(target)) {
1022
+ return null;
1023
+ }
1024
+ if (!target.$nodes.length) {
1025
+ if (isList(base) && base.$nodes.length > 1) {
1026
+ throw rt.error("TypeError", ASSIGNMENT_ONE_ITEM_LISTS);
1027
+ }
1028
+ if (isXML(base)) {
1029
+ setXML(rt, base, property, "");
1030
+ }
1031
+ else {
1032
+ setList(rt, base, coerce(rt, property), "");
1033
+ }
1034
+ return get(base);
1035
+ }
1036
+ return target;
1037
+ }
1038
+ /** As XMLListObject::setUintProperty: item i, or a new last one, set to `value`. */
1039
+ function setIndex(rt, o, index, value) {
1040
+ const nodes = o.$nodes;
1041
+ let i = index;
1042
+ let v = value;
1043
+ let r = null;
1044
+ fixTarget(rt, o);
1045
+ if (o.$target !== null) {
1046
+ r = resolveValue(rt, o.$target);
1047
+ if (r === null) {
1048
+ return;
1049
+ }
1050
+ }
1051
+ if (i >= nodes.length) {
1052
+ if (isList(r)) {
1053
+ if (r.$nodes.length !== 1) {
1054
+ return;
1055
+ }
1056
+ r = xmlOf(rt, r.$nodes[0]);
1057
+ }
1058
+ const rx = isXML(r) ? r.$node : null;
1059
+ if (rx && rx.kind !== ELEMENT) {
1060
+ return;
1061
+ }
1062
+ const property = o.$targetProperty;
1063
+ let y;
1064
+ if (property.attribute) {
1065
+ if (!rx) {
1066
+ return;
1067
+ }
1068
+ const exists = getXML(rt, r, property);
1069
+ if (isList(exists) && exists.$nodes.length > 0) {
1070
+ return;
1071
+ }
1072
+ y = new XMLNode(ATTRIBUTE);
1073
+ y.parent = rx;
1074
+ y.setName(property.local, property.namespaces?.[0] ?? null);
1075
+ nonChildChanges(rt, rx, "attributeAdded", property.local);
1076
+ }
1077
+ else if (property.local === null ||
1078
+ (isXML(v) && (v.$node.kind === ATTRIBUTE || v.$node.kind === TEXT))) {
1079
+ y = new XMLNode(TEXT);
1080
+ y.parent = rx;
1081
+ }
1082
+ else {
1083
+ y = new XMLNode(ELEMENT);
1084
+ y.parent = rx;
1085
+ y.setName(property.local, property.namespaces?.[0] ?? null);
1086
+ }
1087
+ i = nodes.length;
1088
+ if (y.kind !== ATTRIBUTE) {
1089
+ const parent = y.parent;
1090
+ if (parent) {
1091
+ // After the list's last node among the parent's children, else last.
1092
+ let j;
1093
+ if (i > 0) {
1094
+ j = 0;
1095
+ while (j < parent.children.length - 1 && parent.children[j] !== nodes[i - 1]) {
1096
+ j++;
1097
+ }
1098
+ j++;
1099
+ }
1100
+ else {
1101
+ j = parent.children.length;
1102
+ }
1103
+ parent.children.splice(j, 0, y);
1104
+ }
1105
+ if (isXML(v)) {
1106
+ const node = v.$node;
1107
+ if (node.name !== null) {
1108
+ y.setName(node.name, node.ns);
1109
+ }
1110
+ }
1111
+ else if (isList(v)) {
1112
+ const p = v.$targetProperty;
1113
+ if (p.local !== null) {
1114
+ y.setName(p.local, p.namespaces?.[0] ?? null);
1115
+ }
1116
+ }
1117
+ }
1118
+ appendNode(o, y);
1119
+ }
1120
+ if (isList(v)) {
1121
+ const src = v.$nodes;
1122
+ if (src.length === 1 && src[0].kind & (TEXT | ATTRIBUTE)) {
1123
+ v = rt.toString(v);
1124
+ }
1125
+ }
1126
+ else if (isXML(v)) {
1127
+ if (v.$node.kind & (TEXT | ATTRIBUTE)) {
1128
+ v = rt.toString(v);
1129
+ }
1130
+ }
1131
+ else {
1132
+ v = rt.toString(v);
1133
+ }
1134
+ const xi = nodes[i];
1135
+ if (xi.kind === ATTRIBUTE) {
1136
+ if (!xi.parent) {
1137
+ return;
1138
+ }
1139
+ const parent = xmlOf(rt, xi.parent);
1140
+ const name = xi.xname();
1141
+ setXML(rt, parent, name, v);
1142
+ const attr = getXML(rt, parent, name);
1143
+ nodes[i] = attr.$nodes[0];
1144
+ }
1145
+ else if (isList(v)) {
1146
+ const c = newList(rt);
1147
+ c.$nodes.push(...v.$nodes);
1148
+ const parent = xi.parent;
1149
+ if (parent) {
1150
+ const q = parent.children.indexOf(xi);
1151
+ if (q >= 0) {
1152
+ replaceAt(rt, parent, q, c);
1153
+ for (let j = 0; j < c.$nodes.length; j++) {
1154
+ c.$nodes[j] = parent.children[q + j];
1155
+ }
1156
+ }
1157
+ }
1158
+ const notify = parent !== null && notifyNeeded(parent);
1159
+ const prior = xi;
1160
+ nodes.splice(i, 1, ...c.$nodes);
1161
+ if (notify && parent) {
1162
+ for (let i2 = 0; i2 < c.$nodes.length; i2++) {
1163
+ const node = c.$nodes[i2];
1164
+ if (parent === node.parent) {
1165
+ if (i2 === 0) {
1166
+ if (node !== prior) {
1167
+ childChanges(rt, parent, "nodeChanged", xmlOf(rt, node), prior);
1168
+ }
1169
+ }
1170
+ else {
1171
+ childChanges(rt, parent, "nodeAdded", xmlOf(rt, node));
1172
+ }
1173
+ }
1174
+ }
1175
+ }
1176
+ }
1177
+ else if (isXML(v) || xi.kind & (TEXT | CDATA | COMMENT | PROCESSING_INSTRUCTION)) {
1178
+ const parent = xi.parent;
1179
+ if (parent) {
1180
+ const q = parent.children.indexOf(xi);
1181
+ if (q >= 0) {
1182
+ replaceAt(rt, parent, q, v);
1183
+ v = xmlOf(rt, parent.children[q]);
1184
+ if (notifyNeeded(parent)) {
1185
+ childChanges(rt, parent, "nodeAdded", v);
1186
+ }
1187
+ }
1188
+ }
1189
+ nodes[i] = (isXML(v) ? v : toXML(rt, v)).$node;
1190
+ }
1191
+ else {
1192
+ setXML(rt, xmlOf(rt, xi), toXMLName(rt, "*"), v);
1193
+ }
1194
+ }
1195
+ /** As XMLListObject::delUintProperty: item `index` out of the list, and out of its parent. */
1196
+ export function deleteIndex(rt, o, index) {
1197
+ const nodes = o.$nodes;
1198
+ if (index >= nodes.length) {
1199
+ return true;
1200
+ }
1201
+ const xi = nodes[index];
1202
+ const px = xi.parent;
1203
+ if (px) {
1204
+ if (xi.kind === ATTRIBUTE) {
1205
+ deleteXML(rt, xmlOf(rt, px), xi.xname());
1206
+ }
1207
+ else {
1208
+ const q = xi.childIndex();
1209
+ const x = px.children[q];
1210
+ px.deleteByIndex(q);
1211
+ if (x && notifyNeeded(px) && x.kind === ELEMENT) {
1212
+ childChanges(rt, px, "nodeRemoved", xmlOf(rt, x));
1213
+ }
1214
+ }
1215
+ }
1216
+ if (index < nodes.length) {
1217
+ nodes.splice(index, 1);
1218
+ }
1219
+ return true;
1220
+ }
1221
+ // Strings.
1222
+ /** As GenerateUniquePrefix: "" if no namespace has it, else the first of aaa to zzz none has. */
1223
+ function uniquePrefix(ns, namespaces) {
1224
+ if (!namespaces.some((n) => prefixOf(n) === "")) {
1225
+ return prefixedNamespace("", ns.uri ?? "");
1226
+ }
1227
+ const a = 0x61;
1228
+ for (let x1 = 0; x1 < 26; x1++) {
1229
+ for (let x2 = 0; x2 < 26; x2++) {
1230
+ for (let x3 = 0; x3 < 26; x3++) {
1231
+ const p = String.fromCharCode(a + x1, a + x2, a + x3);
1232
+ if (!namespaces.some((n) => prefixOf(n) === p)) {
1233
+ return prefixedNamespace(p, ns.uri ?? "");
1234
+ }
1235
+ }
1236
+ }
1237
+ }
1238
+ return ns;
1239
+ }
1240
+ /** As XMLObject::__toXMLString, E4X 10.2.1: `node` as XML text, into `out`. */
1241
+ function toXMLStringOf(rt, node, ancestors, indentLevel, out) {
1242
+ const e = e4x(rt);
1243
+ const pretty = okToPrettyPrint(e);
1244
+ if (pretty && indentLevel > 0) {
1245
+ out.push(" ".repeat(indentLevel));
1246
+ }
1247
+ switch (node.kind) {
1248
+ case TEXT:
1249
+ out.push(escapeElementValue(node.value, pretty));
1250
+ return;
1251
+ case CDATA:
1252
+ out.push(`<![CDATA[${node.value}]]>`);
1253
+ return;
1254
+ case ATTRIBUTE:
1255
+ out.push(escapeAttributeValue(node.value));
1256
+ return;
1257
+ case COMMENT:
1258
+ out.push(`<!--${node.value}-->`);
1259
+ return;
1260
+ case PROCESSING_INSTRUCTION:
1261
+ out.push(`<?${node.name} ${node.value}?>`);
1262
+ return;
1263
+ }
1264
+ // The namespaces in scope not already among the ancestors'.
1265
+ const origLength = ancestors.length;
1266
+ for (const ns of node.inScopeNamespaces()) {
1267
+ if (!ancestors.some((ns2) => ns.uri === ns2.uri && prefixOf(ns) === prefixOf(ns2))) {
1268
+ ancestors.push(ns);
1269
+ }
1270
+ }
1271
+ // This node's namespace, and its attributes', each with a prefix.
1272
+ let own = getNamespace(node.ns, ancestors);
1273
+ if (prefixOf(own) === undefined) {
1274
+ own = uniquePrefix(own, ancestors);
1275
+ ancestors.push(own);
1276
+ }
1277
+ for (const a of node.attributes) {
1278
+ if (a.name !== null) {
1279
+ const ns = getNamespace(a.ns, ancestors);
1280
+ if (prefixOf(ns) === undefined) {
1281
+ ancestors.push(uniquePrefix(ns, ancestors));
1282
+ }
1283
+ }
1284
+ }
1285
+ const prefix = prefixOf(own);
1286
+ const qualified = prefix !== "" ? `${prefix}:${node.name}` : node.name;
1287
+ out.push("<", qualified);
1288
+ for (const a of node.attributes) {
1289
+ if (a.name !== null) {
1290
+ out.push(" ");
1291
+ const ns = getNamespace(a.ns, ancestors);
1292
+ if (hasPrefix(ns)) {
1293
+ out.push(prefixOf(ns), ":");
1294
+ }
1295
+ out.push(a.name, '="', escapeAttributeValue(a.value), '"');
1296
+ }
1297
+ }
1298
+ for (let i = origLength; i < ancestors.length; i++) {
1299
+ const ns = ancestors[i];
1300
+ if (ns.uri !== "") {
1301
+ const p = prefixOf(ns);
1302
+ out.push(p !== "" ? ` xmlns:${p}="` : ' xmlns="', ns.uri ?? "", '"');
1303
+ }
1304
+ }
1305
+ const children = node.children;
1306
+ if (!children.length) {
1307
+ out.push("/>");
1308
+ return;
1309
+ }
1310
+ out.push(">");
1311
+ const indentChildren = children.length > 1 || (children[0].kind & ~(TEXT | CDATA)) !== 0;
1312
+ const nextIndentLevel = e.prettyPrinting && indentChildren ? indentLevel + e.prettyIndent : 0;
1313
+ // The ancestors' namespaces less those whose prefix one here declares
1314
+ // again, so that each is declared where it is shadowed.
1315
+ const scope = [];
1316
+ for (let i = 0; i < ancestors.length; i++) {
1317
+ const first = ancestors[i];
1318
+ if (i < origLength) {
1319
+ let j = origLength;
1320
+ while (j < ancestors.length && prefixOf(ancestors[j]) !== prefixOf(first)) {
1321
+ j++;
1322
+ }
1323
+ if (j === ancestors.length) {
1324
+ scope.push(first);
1325
+ }
1326
+ }
1327
+ else {
1328
+ scope.push(first);
1329
+ }
1330
+ }
1331
+ const scopeLength = scope.length;
1332
+ for (const child of children) {
1333
+ if (pretty && indentChildren) {
1334
+ out.push("\n");
1335
+ }
1336
+ toXMLStringOf(rt, child, scope, nextIndentLevel, out);
1337
+ scope.length = scopeLength;
1338
+ }
1339
+ if (pretty && indentChildren) {
1340
+ out.push("\n");
1341
+ if (indentLevel > 0) {
1342
+ out.push(" ".repeat(indentLevel));
1343
+ }
1344
+ }
1345
+ out.push("</", qualified, ">");
1346
+ }
1347
+ export function xmlToXMLString(rt, node) {
1348
+ const out = [];
1349
+ toXMLStringOf(rt, node, [], 0, out);
1350
+ return out.join("");
1351
+ }
1352
+ export function listToXMLString(rt, list) {
1353
+ const out = [];
1354
+ const nodes = list.$nodes;
1355
+ for (let i = 0; i < nodes.length; i++) {
1356
+ if (i) {
1357
+ out.push("\n");
1358
+ }
1359
+ toXMLStringOf(rt, nodes[i], [], 0, out);
1360
+ }
1361
+ return out.join("");
1362
+ }
1363
+ /** As XMLObject::toString, E4X 10.1.1: a simple node's text, else its XML. */
1364
+ export function xmlToString(rt, node) {
1365
+ if (node.kind & (TEXT | CDATA | ATTRIBUTE)) {
1366
+ return node.value;
1367
+ }
1368
+ if (node.hasSimpleContent()) {
1369
+ let s = "";
1370
+ for (const child of node.children) {
1371
+ if (child.kind !== COMMENT && child.kind !== PROCESSING_INSTRUCTION) {
1372
+ s += xmlToString(rt, child);
1373
+ }
1374
+ }
1375
+ return s;
1376
+ }
1377
+ return xmlToXMLString(rt, node);
1378
+ }
1379
+ export function listHasSimpleContent(nodes) {
1380
+ if (nodes.length === 0) {
1381
+ return true;
1382
+ }
1383
+ if (nodes.length === 1) {
1384
+ return nodes[0].hasSimpleContent();
1385
+ }
1386
+ return !nodes.some((n) => n.kind === ELEMENT);
1387
+ }
1388
+ export function listToString(rt, list) {
1389
+ const nodes = list.$nodes;
1390
+ if (listHasSimpleContent(nodes)) {
1391
+ let s = "";
1392
+ for (const node of nodes) {
1393
+ if (node.kind !== COMMENT && node.kind !== PROCESSING_INSTRUCTION) {
1394
+ s += xmlToString(rt, node);
1395
+ }
1396
+ }
1397
+ return s;
1398
+ }
1399
+ return listToXMLString(rt, list);
1400
+ }
1401
+ // Equality and +.
1402
+ /** As XMLListObject::_equals. */
1403
+ function listEquals(rt, list, v) {
1404
+ const nodes = list.$nodes;
1405
+ if (v === undefined && nodes.length === 0) {
1406
+ return true;
1407
+ }
1408
+ if (isList(v)) {
1409
+ const other = v.$nodes;
1410
+ if (nodes.length !== other.length) {
1411
+ return false;
1412
+ }
1413
+ for (let i = 0; i < nodes.length; i++) {
1414
+ if (nodes[i] !== other[i] && !rt.equals(xmlOf(rt, nodes[i]), xmlOf(rt, other[i]))) {
1415
+ return false;
1416
+ }
1417
+ }
1418
+ return true;
1419
+ }
1420
+ if (nodes.length === 1) {
1421
+ return rt.equals(xmlOf(rt, nodes[0]), v);
1422
+ }
1423
+ return false;
1424
+ }
1425
+ /** E4X's == (11.5.1) where either side is XML or an XMLList, else undefined. */
1426
+ function equals(rt, a, b) {
1427
+ if (isList(a)) {
1428
+ return listEquals(rt, a, b);
1429
+ }
1430
+ if (isList(b)) {
1431
+ return listEquals(rt, b, a);
1432
+ }
1433
+ if (isXML(a) && isXML(b)) {
1434
+ const x = a.$node;
1435
+ const y = b.$node;
1436
+ if ((x.kind & (TEXT | CDATA | ATTRIBUTE) && y.hasSimpleContent()) ||
1437
+ (y.kind & (TEXT | CDATA | ATTRIBUTE) && x.hasSimpleContent())) {
1438
+ return xmlToString(rt, x) === xmlToString(rt, y);
1439
+ }
1440
+ return x.equals(y);
1441
+ }
1442
+ const xml = isXML(a) ? a : b;
1443
+ const other = xml === a ? b : a;
1444
+ if (other === null || other === undefined) {
1445
+ return false;
1446
+ }
1447
+ if (xml.$node.hasSimpleContent() && !(typeof other === "object" && other.$traits?.properties)) {
1448
+ return xmlToString(rt, xml.$node) === rt.toString(other);
1449
+ }
1450
+ return undefined;
1451
+ }
1452
+ /** E4X's + (11.4.1): XML and XMLLists into one XMLList. */
1453
+ function add(rt, a, b) {
1454
+ if ((isXML(a) || isList(a)) && (isXML(b) || isList(b))) {
1455
+ const list = newList(rt);
1456
+ append(list, a);
1457
+ append(list, b);
1458
+ return list;
1459
+ }
1460
+ return undefined;
1461
+ }
1462
+ // Calls, as XMLObject::callProperty and XMLListObject::callProperty.
1463
+ /** A dynamic property of the prototype chain, or undefined. */
1464
+ function prototypeProperty(rt, o, mn) {
1465
+ const name = mn.dynamicName();
1466
+ if (name === null) {
1467
+ return undefined;
1468
+ }
1469
+ for (let p = rt.protoOf(o); p; p = p.$p) {
1470
+ const v = p.$d?.get(name);
1471
+ if (v !== undefined) {
1472
+ return v;
1473
+ }
1474
+ }
1475
+ return undefined;
1476
+ }
1477
+ /** A function that calls `mn` on `receiver`, for a call E4X passes on. */
1478
+ const forward = (rt, receiver, mn) => rt.newFunctionObject((...args) => rt.callProperty(receiver, mn, ...args), null);
1479
+ // The hooks.
1480
+ export const xmlProperties = {
1481
+ hidesMethods: true,
1482
+ get: (rt, o, mn) => getXML(rt, o, fromMultiname(mn)),
1483
+ set: (rt, o, mn, v) => setXML(rt, o, fromMultiname(mn), v),
1484
+ delete: (rt, o, mn) => deleteXML(rt, o, fromMultiname(mn)),
1485
+ has: (rt, o, mn) => hasXML(rt, o, fromMultiname(mn)),
1486
+ callee(rt, o, mn) {
1487
+ const f = prototypeProperty(rt, o, mn);
1488
+ if (f !== undefined) {
1489
+ return f;
1490
+ }
1491
+ const v = getXML(rt, o, fromMultiname(mn));
1492
+ // A simple node with no such child is its string, as 11.2.2.1 has it.
1493
+ if (isList(v) && !v.$nodes.length && o.$node.hasSimpleContent()) {
1494
+ return forward(rt, xmlToString(rt, o.$node), mn);
1495
+ }
1496
+ return v;
1497
+ },
1498
+ descendants: (rt, o, mn) => descendantsOf(rt, o.$node, fromMultiname(mn)),
1499
+ nextIndex: (_rt, _o, index) => (index === 0 ? 1 : 0),
1500
+ nextName: (_rt, _o, index) => (index === 1 ? "0" : null),
1501
+ nextValue: (_rt, o, index) => (index === 1 ? o : undefined),
1502
+ equals,
1503
+ add,
1504
+ toString: (rt, o) => xmlToString(rt, o.$node),
1505
+ toXMLString: (rt, o) => xmlToXMLString(rt, o.$node),
1506
+ };
1507
+ export const listProperties = {
1508
+ hidesMethods: true,
1509
+ get: (rt, o, mn) => getList(rt, o, coerce(rt, fromMultiname(mn))),
1510
+ set: (rt, o, mn, v) => setList(rt, o, coerce(rt, fromMultiname(mn)), v),
1511
+ delete: (rt, o, mn) => deleteList(rt, o, coerce(rt, fromMultiname(mn))),
1512
+ has: (rt, o, mn) => hasList(rt, o, coerce(rt, fromMultiname(mn))),
1513
+ callee(rt, o, mn) {
1514
+ const f = prototypeProperty(rt, o, mn);
1515
+ if (f !== undefined) {
1516
+ return f;
1517
+ }
1518
+ const v = getList(rt, o, coerce(rt, fromMultiname(mn)));
1519
+ // A list of one with no such child passes the call on to its item.
1520
+ if (isList(v) && !v.$nodes.length && o.$nodes.length === 1) {
1521
+ return forward(rt, xmlOf(rt, o.$nodes[0]), mn);
1522
+ }
1523
+ return v;
1524
+ },
1525
+ descendants: (rt, o, mn) => descendantsOfList(rt, o, coerce(rt, fromMultiname(mn))),
1526
+ nextIndex: (_rt, o, index) => (index < o.$nodes.length ? index + 1 : 0),
1527
+ nextName: (_rt, o, index) => (index <= o.$nodes.length ? String(index - 1) : null),
1528
+ nextValue: (rt, o, index) => index <= o.$nodes.length ? xmlOf(rt, o.$nodes[index - 1]) : undefined,
1529
+ equals,
1530
+ add,
1531
+ toString: (rt, o) => listToString(rt, o),
1532
+ toXMLString: (rt, o) => listToXMLString(rt, o),
1533
+ };
1534
+ export function constructXML(rt, _cls, args) {
1535
+ const v = args[0];
1536
+ if (v === null || v === undefined) {
1537
+ return toXML(rt, "");
1538
+ }
1539
+ const x = toXML(rt, v);
1540
+ if (isXML(v) || isList(v)) {
1541
+ return xmlOf(rt, deepCopy(rt, x.$node));
1542
+ }
1543
+ return x;
1544
+ }
1545
+ export function constructXMLList(rt, _cls, args) {
1546
+ const v = args[0];
1547
+ if (v === null || v === undefined) {
1548
+ return toXMLList(rt, "");
1549
+ }
1550
+ if (isList(v)) {
1551
+ const list = newList(rt);
1552
+ append(list, v);
1553
+ return list;
1554
+ }
1555
+ return toXMLList(rt, v);
1556
+ }
1557
+ // The natives.
1558
+ /**
1559
+ * As maybeEscapeChild, with the fixes of avmshell's SWF version: a child
1560
+ * is added as it is, a string as text, and XML already in a tree is first
1561
+ * taken out of it.
1562
+ */
1563
+ export function adopt(v) {
1564
+ if (isXML(v)) {
1565
+ const node = v.$node;
1566
+ const i = node.childIndex();
1567
+ if (node.parent && i !== -1) {
1568
+ node.parent.deleteByIndex(i);
1569
+ }
1570
+ }
1571
+ return v;
1572
+ }
1573
+ const NOT_ELEMENT = TEXT | COMMENT | PROCESSING_INSTRUCTION | ATTRIBUTE | CDATA;
1574
+ export function addNamespace(rt, o, node, v) {
1575
+ const ns = newNamespace(rt, v);
1576
+ node.addInScopeNamespace(ns);
1577
+ nonChildChanges(rt, node, "namespaceAdded", ns);
1578
+ return o;
1579
+ }
1580
+ export function appendChild(rt, o, node, child) {
1581
+ const c = adopt(child);
1582
+ const children = getXML(rt, o, toXMLName(rt, "*"));
1583
+ setIndex(rt, children, node.children.length, c);
1584
+ return o;
1585
+ }
1586
+ export function insertChild(rt, o, node, child1, child2, after) {
1587
+ if (node.kind & NOT_ELEMENT) {
1588
+ return undefined;
1589
+ }
1590
+ const c2 = adopt(child2);
1591
+ if (child1 === null) {
1592
+ insertAt(rt, node, after ? 0 : node.children.length, c2);
1593
+ childChanges(rt, node, "nodeAdded", c2);
1594
+ return o;
1595
+ }
1596
+ let c1 = isXML(child1) ? child1.$node : null;
1597
+ if (!c1 && isList(child1) && child1.$nodes.length === 1) {
1598
+ c1 = child1.$nodes[0];
1599
+ }
1600
+ if (c1) {
1601
+ const i = node.children.indexOf(c1);
1602
+ if (i >= 0) {
1603
+ insertAt(rt, node, after ? i + 1 : i, c2);
1604
+ childChanges(rt, node, "nodeAdded", c2);
1605
+ return o;
1606
+ }
1607
+ }
1608
+ return undefined;
1609
+ }
1610
+ export function namespaceOf(rt, node, argc, prefix) {
1611
+ const inScope = node.inScopeNamespaces();
1612
+ if (!argc) {
1613
+ if (node.kind & (TEXT | COMMENT | CDATA | PROCESSING_INSTRUCTION)) {
1614
+ return null;
1615
+ }
1616
+ return getNamespace(node.ns, inScope);
1617
+ }
1618
+ const p = rt.toString(prefix);
1619
+ return inScope.find((ns) => prefixOf(ns) === p) ?? undefined;
1620
+ }
1621
+ export function namespaceDeclarations(rt, node) {
1622
+ const result = [];
1623
+ if (!(node.kind & NOT_ELEMENT)) {
1624
+ const ancestors = node.parent ? node.parent.inScopeNamespaces() : [];
1625
+ for (const ns of node.namespaces) {
1626
+ if (!hasPrefix(ns)) {
1627
+ if (ns.uri !== "" && !ancestors.some((ns2) => ns.uri === ns2.uri)) {
1628
+ result.push(ns);
1629
+ }
1630
+ }
1631
+ else if (!ancestors.some((ns2) => prefixOf(ns) === prefixOf(ns2) && ns.uri === ns2.uri)) {
1632
+ result.push(ns);
1633
+ }
1634
+ }
1635
+ }
1636
+ return rt.newArray(result);
1637
+ }
1638
+ export function normalize(rt, node) {
1639
+ const notify = notifyNeeded(node);
1640
+ let i = 0;
1641
+ while (i < node.children.length) {
1642
+ const x = node.children[i];
1643
+ if (x.kind === ELEMENT) {
1644
+ normalize(rt, x);
1645
+ i++;
1646
+ }
1647
+ else if (x.kind & (TEXT | CDATA)) {
1648
+ const prior = x.value;
1649
+ while (i + 1 < node.children.length && node.children[i + 1].kind & (TEXT | CDATA)) {
1650
+ const x2 = node.children[i + 1];
1651
+ x.value += x2.value;
1652
+ node.deleteByIndex(i + 1);
1653
+ if (notify) {
1654
+ childChanges(rt, node, "nodeRemoved", xmlOf(rt, x2));
1655
+ }
1656
+ }
1657
+ if (isWhitespace(x.value)) {
1658
+ node.deleteByIndex(i);
1659
+ if (notify) {
1660
+ childChanges(rt, node, "nodeRemoved", xmlOf(rt, x));
1661
+ }
1662
+ }
1663
+ else {
1664
+ i++;
1665
+ }
1666
+ if (x.value !== prior && notify) {
1667
+ nonChildChanges(rt, x, "textSet", x.value, prior);
1668
+ }
1669
+ }
1670
+ else {
1671
+ i++;
1672
+ }
1673
+ }
1674
+ }
1675
+ export function removeNamespace(rt, node, v) {
1676
+ if (node.kind & NOT_ELEMENT) {
1677
+ return;
1678
+ }
1679
+ const ns = newNamespace(rt, v);
1680
+ if (getNamespace(node.ns, node.namespaces) === ns) {
1681
+ return;
1682
+ }
1683
+ for (const a of node.attributes) {
1684
+ if (getNamespace(a.ns, node.namespaces) === ns) {
1685
+ return;
1686
+ }
1687
+ }
1688
+ const i = node.findMatchingNamespace(ns);
1689
+ if (i !== -1) {
1690
+ node.namespaces.splice(i, 1);
1691
+ }
1692
+ for (const child of node.children) {
1693
+ if (child.kind === ELEMENT) {
1694
+ removeNamespace(rt, child, ns);
1695
+ }
1696
+ }
1697
+ nonChildChanges(rt, node, "namespaceRemoved", ns);
1698
+ }
1699
+ export function replace(rt, o, node, name, value) {
1700
+ if (node.kind & NOT_ELEMENT) {
1701
+ return o;
1702
+ }
1703
+ let c;
1704
+ if (isXML(value)) {
1705
+ c = xmlOf(rt, deepCopy(rt, value.$node));
1706
+ }
1707
+ else if (isList(value)) {
1708
+ c = listDeepCopy(rt, value);
1709
+ }
1710
+ else {
1711
+ c = rt.toString(value);
1712
+ }
1713
+ const index = parseIndex(rt.toString(name));
1714
+ if (index >= 0) {
1715
+ const prior = replaceAt(rt, node, index, c);
1716
+ childChanges(rt, node, "nodeChanged", c, prior);
1717
+ return o;
1718
+ }
1719
+ const n = qnameName(rt, name);
1720
+ const notify = notifyNeeded(node);
1721
+ let i = -1;
1722
+ for (let k = node.children.length - 1; k >= 0; k--) {
1723
+ if (matchesChild(n, node.children[k])) {
1724
+ if (i !== -1) {
1725
+ const was = node.children[i];
1726
+ node.deleteByIndex(i);
1727
+ if (notify && was.kind === ELEMENT) {
1728
+ childChanges(rt, node, "nodeRemoved", xmlOf(rt, was));
1729
+ }
1730
+ }
1731
+ i = k;
1732
+ }
1733
+ }
1734
+ if (i === -1) {
1735
+ return o;
1736
+ }
1737
+ const prior = replaceAt(rt, node, i, c);
1738
+ childChanges(rt, node, prior ? "nodeChanged" : "nodeAdded", c, prior);
1739
+ return o;
1740
+ }
1741
+ export function setLocalName(rt, node, name) {
1742
+ if (node.kind & (TEXT | COMMENT | CDATA)) {
1743
+ return;
1744
+ }
1745
+ const newName = typeof name === "object" && name !== null && name.$local !== undefined
1746
+ ? (name.$local ?? "*")
1747
+ : rt.toString(name);
1748
+ if (!isXMLName(newName)) {
1749
+ throw rt.error("TypeError", INVALID_NAME, newName);
1750
+ }
1751
+ if (node.name !== null) {
1752
+ const prior = node.name;
1753
+ node.setName(newName, node.ns);
1754
+ nonChildChanges(rt, node, "nameSet", newName, prior);
1755
+ }
1756
+ }
1757
+ export function setName(rt, node, value) {
1758
+ if (node.kind & (TEXT | COMMENT | CDATA)) {
1759
+ return;
1760
+ }
1761
+ let name = value;
1762
+ if (typeof name === "object" && name !== null && name.$local !== undefined && !name.$ns) {
1763
+ name = name.$local ?? "*";
1764
+ }
1765
+ const n = qnameName(rt, name);
1766
+ const local = n.local ?? "*";
1767
+ if (!isXMLName(local)) {
1768
+ throw rt.error("TypeError", INVALID_NAME, local);
1769
+ }
1770
+ if (node.name === null) {
1771
+ return;
1772
+ }
1773
+ if (node.kind === PROCESSING_INSTRUCTION) {
1774
+ node.setName(local, publicNs);
1775
+ }
1776
+ else {
1777
+ const ns = n.namespaces?.[0] ?? null;
1778
+ node.setName(local, ns);
1779
+ if (ns && ns.uri !== "") {
1780
+ if (node.kind === ATTRIBUTE && node.parent) {
1781
+ node.parent.addInScopeNamespace(node.ns);
1782
+ }
1783
+ else if (node.kind === ELEMENT) {
1784
+ node.addInScopeNamespace(node.ns);
1785
+ }
1786
+ }
1787
+ }
1788
+ nonChildChanges(rt, node, "nameSet", name, node.name);
1789
+ }
1790
+ export function setNamespace(rt, node, v) {
1791
+ if (node.kind & (TEXT | COMMENT | PROCESSING_INSTRUCTION | CDATA)) {
1792
+ return;
1793
+ }
1794
+ const ns = newNamespace(rt, v);
1795
+ if (node.name !== null) {
1796
+ node.setName(node.name, ns);
1797
+ }
1798
+ if (node.kind === ATTRIBUTE && node.parent) {
1799
+ node.parent.addInScopeNamespace(ns);
1800
+ }
1801
+ else if (node.kind === ELEMENT) {
1802
+ node.addInScopeNamespace(ns);
1803
+ }
1804
+ nonChildChanges(rt, node, "namespaceSet", ns);
1805
+ }
1806
+ /** A list of `node`'s children of `kinds`, got from `o`. */
1807
+ export function childrenOf(rt, o, node, kinds) {
1808
+ const list = newList(rt, o);
1809
+ for (const child of node.children) {
1810
+ if (child.kind & kinds) {
1811
+ appendNode(list, child);
1812
+ }
1813
+ }
1814
+ return list;
1815
+ }
1816
+ export function elements(rt, o, node, name) {
1817
+ const n = toXMLName(rt, name);
1818
+ const list = newList(rt, o, n);
1819
+ for (const child of node.children) {
1820
+ if (child.kind === ELEMENT && matches(n, child)) {
1821
+ appendNode(list, child);
1822
+ }
1823
+ }
1824
+ return list;
1825
+ }
1826
+ export function processingInstructions(rt, o, node, name) {
1827
+ const n = toXMLName(rt, name);
1828
+ const list = newList(rt, o);
1829
+ if (n.attribute) {
1830
+ return list;
1831
+ }
1832
+ for (const child of node.children) {
1833
+ if (child.kind === PROCESSING_INSTRUCTION && matches(n, child)) {
1834
+ appendNode(list, child);
1835
+ }
1836
+ }
1837
+ return list;
1838
+ }
1839
+ export function child(rt, o, node, name) {
1840
+ const index = parseIndex(rt.toString(name));
1841
+ if (index >= 0) {
1842
+ const list = newList(rt);
1843
+ if (index < node.children.length) {
1844
+ appendNode(list, node.children[index]);
1845
+ }
1846
+ return list;
1847
+ }
1848
+ return getXML(rt, o, toXMLName(rt, name));
1849
+ }
1850
+ /** A name given, or "*" for none. */
1851
+ export const star = (v) => (v === undefined ? "*" : v);
1852
+ /** The global isXMLName, the E4X native that is not a class's. */
1853
+ export const xmlNatives = {
1854
+ isXMLName: (rt) => (v) => v !== null && v !== undefined && isXMLName(rt.toString(v)),
1855
+ };
1856
+ //# sourceMappingURL=xml.js.map