@swf2es/runtime 0.0.0-stage → 0.1.1

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 (459) 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-library.d.ts +2 -0
  117. package/dist/avm2/builtin-library.d.ts.map +1 -0
  118. package/dist/avm2/builtin-library.js +22 -0
  119. package/dist/avm2/builtin-library.js.map +1 -0
  120. package/dist/avm2/cache-fill.d.ts +14 -0
  121. package/dist/avm2/cache-fill.d.ts.map +1 -0
  122. package/dist/avm2/cache-fill.js +87 -0
  123. package/dist/avm2/cache-fill.js.map +1 -0
  124. package/dist/avm2/classes.d.ts +17 -0
  125. package/dist/avm2/classes.d.ts.map +1 -0
  126. package/dist/avm2/classes.js +212 -0
  127. package/dist/avm2/classes.js.map +1 -0
  128. package/dist/avm2/definitions.d.ts +28 -0
  129. package/dist/avm2/definitions.d.ts.map +1 -0
  130. package/dist/avm2/definitions.js +70 -0
  131. package/dist/avm2/definitions.js.map +1 -0
  132. package/dist/avm2/descriptors.d.ts +118 -0
  133. package/dist/avm2/descriptors.d.ts.map +1 -0
  134. package/dist/avm2/descriptors.js +6 -0
  135. package/dist/avm2/descriptors.js.map +1 -0
  136. package/dist/avm2/dictionary-keys.d.ts +73 -0
  137. package/dist/avm2/dictionary-keys.d.ts.map +1 -0
  138. package/dist/avm2/dictionary-keys.js +296 -0
  139. package/dist/avm2/dictionary-keys.js.map +1 -0
  140. package/dist/avm2/domain-memory.d.ts +23 -0
  141. package/dist/avm2/domain-memory.d.ts.map +1 -0
  142. package/dist/avm2/domain-memory.js +76 -0
  143. package/dist/avm2/domain-memory.js.map +1 -0
  144. package/dist/avm2/domain.d.ts +108 -0
  145. package/dist/avm2/domain.d.ts.map +1 -0
  146. package/dist/avm2/domain.js +281 -0
  147. package/dist/avm2/domain.js.map +1 -0
  148. package/dist/avm2/dynamic-properties.d.ts +62 -0
  149. package/dist/avm2/dynamic-properties.d.ts.map +1 -0
  150. package/dist/avm2/dynamic-properties.js +183 -0
  151. package/dist/avm2/dynamic-properties.js.map +1 -0
  152. package/dist/avm2/enumeration.d.ts +75 -0
  153. package/dist/avm2/enumeration.d.ts.map +1 -0
  154. package/dist/avm2/enumeration.js +394 -0
  155. package/dist/avm2/enumeration.js.map +1 -0
  156. package/dist/avm2/errors.d.ts +20 -0
  157. package/dist/avm2/errors.d.ts.map +1 -0
  158. package/dist/avm2/errors.js +46 -0
  159. package/dist/avm2/errors.js.map +1 -0
  160. package/dist/avm2/float-library.d.ts +2 -0
  161. package/dist/avm2/float-library.d.ts.map +1 -0
  162. package/dist/avm2/float-library.js +67 -0
  163. package/dist/avm2/float-library.js.map +1 -0
  164. package/dist/avm2/float.d.ts +9 -0
  165. package/dist/avm2/float.d.ts.map +1 -0
  166. package/dist/avm2/float.js +27 -0
  167. package/dist/avm2/float.js.map +1 -0
  168. package/dist/avm2/hooks.d.ts +77 -0
  169. package/dist/avm2/hooks.d.ts.map +1 -0
  170. package/dist/avm2/hooks.js +20 -0
  171. package/dist/avm2/hooks.js.map +1 -0
  172. package/dist/avm2/index.d.ts +32 -0
  173. package/dist/avm2/index.d.ts.map +1 -0
  174. package/dist/avm2/index.js +39 -0
  175. package/dist/avm2/index.js.map +1 -0
  176. package/dist/avm2/messages.d.ts +2 -0
  177. package/dist/avm2/messages.d.ts.map +1 -0
  178. package/dist/avm2/messages.js +178 -0
  179. package/dist/avm2/messages.js.map +1 -0
  180. package/dist/avm2/method-factories.d.ts +35 -0
  181. package/dist/avm2/method-factories.d.ts.map +1 -0
  182. package/dist/avm2/method-factories.js +96 -0
  183. package/dist/avm2/method-factories.js.map +1 -0
  184. package/dist/avm2/modules.d.ts +40 -0
  185. package/dist/avm2/modules.d.ts.map +1 -0
  186. package/dist/avm2/modules.js +106 -0
  187. package/dist/avm2/modules.js.map +1 -0
  188. package/dist/avm2/names.d.ts +143 -0
  189. package/dist/avm2/names.d.ts.map +1 -0
  190. package/dist/avm2/names.js +249 -0
  191. package/dist/avm2/names.js.map +1 -0
  192. package/dist/avm2/natives/aliases.d.ts +3 -0
  193. package/dist/avm2/natives/aliases.d.ts.map +1 -0
  194. package/dist/avm2/natives/aliases.js +48 -0
  195. package/dist/avm2/natives/aliases.js.map +1 -0
  196. package/dist/avm2/natives/array.d.ts +5 -0
  197. package/dist/avm2/natives/array.d.ts.map +1 -0
  198. package/dist/avm2/natives/array.js +391 -0
  199. package/dist/avm2/natives/array.js.map +1 -0
  200. package/dist/avm2/natives/bytearray.d.ts +180 -0
  201. package/dist/avm2/natives/bytearray.d.ts.map +1 -0
  202. package/dist/avm2/natives/bytearray.js +1228 -0
  203. package/dist/avm2/natives/bytearray.js.map +1 -0
  204. package/dist/avm2/natives/case.d.ts +5 -0
  205. package/dist/avm2/natives/case.d.ts.map +1 -0
  206. package/dist/avm2/natives/case.js +89 -0
  207. package/dist/avm2/natives/case.js.map +1 -0
  208. package/dist/avm2/natives/concurrent.d.ts +24 -0
  209. package/dist/avm2/natives/concurrent.d.ts.map +1 -0
  210. package/dist/avm2/natives/concurrent.js +200 -0
  211. package/dist/avm2/natives/concurrent.js.map +1 -0
  212. package/dist/avm2/natives/date.d.ts +5 -0
  213. package/dist/avm2/natives/date.d.ts.map +1 -0
  214. package/dist/avm2/natives/date.js +582 -0
  215. package/dist/avm2/natives/date.js.map +1 -0
  216. package/dist/avm2/natives/define.d.ts +58 -0
  217. package/dist/avm2/natives/define.d.ts.map +1 -0
  218. package/dist/avm2/natives/define.js +131 -0
  219. package/dist/avm2/natives/define.js.map +1 -0
  220. package/dist/avm2/natives/describe.d.ts +3 -0
  221. package/dist/avm2/natives/describe.d.ts.map +1 -0
  222. package/dist/avm2/natives/describe.js +352 -0
  223. package/dist/avm2/natives/describe.js.map +1 -0
  224. package/dist/avm2/natives/dictionary.d.ts +3 -0
  225. package/dist/avm2/natives/dictionary.d.ts.map +1 -0
  226. package/dist/avm2/natives/dictionary.js +13 -0
  227. package/dist/avm2/natives/dictionary.js.map +1 -0
  228. package/dist/avm2/natives/float-vector.d.ts +20 -0
  229. package/dist/avm2/natives/float-vector.d.ts.map +1 -0
  230. package/dist/avm2/natives/float-vector.js +82 -0
  231. package/dist/avm2/natives/float-vector.js.map +1 -0
  232. package/dist/avm2/natives/float.d.ts +5 -0
  233. package/dist/avm2/natives/float.d.ts.map +1 -0
  234. package/dist/avm2/natives/float.js +97 -0
  235. package/dist/avm2/natives/float.js.map +1 -0
  236. package/dist/avm2/natives/index.d.ts +7 -0
  237. package/dist/avm2/natives/index.d.ts.map +1 -0
  238. package/dist/avm2/natives/index.js +65 -0
  239. package/dist/avm2/natives/index.js.map +1 -0
  240. package/dist/avm2/natives/json.d.ts +3 -0
  241. package/dist/avm2/natives/json.d.ts.map +1 -0
  242. package/dist/avm2/natives/json.js +515 -0
  243. package/dist/avm2/natives/json.js.map +1 -0
  244. package/dist/avm2/natives/number.d.ts +15 -0
  245. package/dist/avm2/natives/number.d.ts.map +1 -0
  246. package/dist/avm2/natives/number.js +163 -0
  247. package/dist/avm2/natives/number.js.map +1 -0
  248. package/dist/avm2/natives/object.d.ts +8 -0
  249. package/dist/avm2/natives/object.d.ts.map +1 -0
  250. package/dist/avm2/natives/object.js +238 -0
  251. package/dist/avm2/natives/object.js.map +1 -0
  252. package/dist/avm2/natives/proxy.d.ts +5 -0
  253. package/dist/avm2/natives/proxy.d.ts.map +1 -0
  254. package/dist/avm2/natives/proxy.js +76 -0
  255. package/dist/avm2/natives/proxy.js.map +1 -0
  256. package/dist/avm2/natives/regexp.d.ts +21 -0
  257. package/dist/avm2/natives/regexp.d.ts.map +1 -0
  258. package/dist/avm2/natives/regexp.js +486 -0
  259. package/dist/avm2/natives/regexp.js.map +1 -0
  260. package/dist/avm2/natives/shell-workers.d.ts +140 -0
  261. package/dist/avm2/natives/shell-workers.d.ts.map +1 -0
  262. package/dist/avm2/natives/shell-workers.js +405 -0
  263. package/dist/avm2/natives/shell-workers.js.map +1 -0
  264. package/dist/avm2/natives/shell.d.ts +12 -0
  265. package/dist/avm2/natives/shell.d.ts.map +1 -0
  266. package/dist/avm2/natives/shell.js +558 -0
  267. package/dist/avm2/natives/shell.js.map +1 -0
  268. package/dist/avm2/natives/sort.d.ts +7 -0
  269. package/dist/avm2/natives/sort.d.ts.map +1 -0
  270. package/dist/avm2/natives/sort.js +378 -0
  271. package/dist/avm2/natives/sort.js.map +1 -0
  272. package/dist/avm2/natives/string.d.ts +5 -0
  273. package/dist/avm2/natives/string.d.ts.map +1 -0
  274. package/dist/avm2/natives/string.js +133 -0
  275. package/dist/avm2/natives/string.js.map +1 -0
  276. package/dist/avm2/natives/sync.d.ts +215 -0
  277. package/dist/avm2/natives/sync.d.ts.map +1 -0
  278. package/dist/avm2/natives/sync.js +822 -0
  279. package/dist/avm2/natives/sync.js.map +1 -0
  280. package/dist/avm2/natives/toplevel.d.ts +5 -0
  281. package/dist/avm2/natives/toplevel.d.ts.map +1 -0
  282. package/dist/avm2/natives/toplevel.js +140 -0
  283. package/dist/avm2/natives/toplevel.js.map +1 -0
  284. package/dist/avm2/natives/vector-elements.d.ts +10 -0
  285. package/dist/avm2/natives/vector-elements.d.ts.map +1 -0
  286. package/dist/avm2/natives/vector-elements.js +47 -0
  287. package/dist/avm2/natives/vector-elements.js.map +1 -0
  288. package/dist/avm2/natives/vector.d.ts +5 -0
  289. package/dist/avm2/natives/vector.d.ts.map +1 -0
  290. package/dist/avm2/natives/vector.js +407 -0
  291. package/dist/avm2/natives/vector.js.map +1 -0
  292. package/dist/avm2/natives/xml/access.d.ts +34 -0
  293. package/dist/avm2/natives/xml/access.d.ts.map +1 -0
  294. package/dist/avm2/natives/xml/access.js +634 -0
  295. package/dist/avm2/natives/xml/access.js.map +1 -0
  296. package/dist/avm2/natives/xml/build.d.ts +11 -0
  297. package/dist/avm2/natives/xml/build.d.ts.map +1 -0
  298. package/dist/avm2/natives/xml/build.js +292 -0
  299. package/dist/avm2/natives/xml/build.js.map +1 -0
  300. package/dist/avm2/natives/xml/chars.d.ts +9 -0
  301. package/dist/avm2/natives/xml/chars.d.ts.map +1 -0
  302. package/dist/avm2/natives/xml/chars.js +113 -0
  303. package/dist/avm2/natives/xml/chars.js.map +1 -0
  304. package/dist/avm2/natives/xml/escape.d.ts +5 -0
  305. package/dist/avm2/natives/xml/escape.d.ts.map +1 -0
  306. package/dist/avm2/natives/xml/escape.js +39 -0
  307. package/dist/avm2/natives/xml/escape.js.map +1 -0
  308. package/dist/avm2/natives/xml/names.d.ts +46 -0
  309. package/dist/avm2/natives/xml/names.d.ts.map +1 -0
  310. package/dist/avm2/natives/xml/names.js +205 -0
  311. package/dist/avm2/natives/xml/names.js.map +1 -0
  312. package/dist/avm2/natives/xml/node.d.ts +94 -0
  313. package/dist/avm2/natives/xml/node.d.ts.map +1 -0
  314. package/dist/avm2/natives/xml/node.js +273 -0
  315. package/dist/avm2/natives/xml/node.js.map +1 -0
  316. package/dist/avm2/natives/xml/operators.d.ts +7 -0
  317. package/dist/avm2/natives/xml/operators.d.ts.map +1 -0
  318. package/dist/avm2/natives/xml/operators.js +70 -0
  319. package/dist/avm2/natives/xml/operators.js.map +1 -0
  320. package/dist/avm2/natives/xml/parser.d.ts +51 -0
  321. package/dist/avm2/natives/xml/parser.d.ts.map +1 -0
  322. package/dist/avm2/natives/xml/parser.js +357 -0
  323. package/dist/avm2/natives/xml/parser.js.map +1 -0
  324. package/dist/avm2/natives/xml/strings.d.ts +10 -0
  325. package/dist/avm2/natives/xml/strings.d.ts.map +1 -0
  326. package/dist/avm2/natives/xml/strings.js +192 -0
  327. package/dist/avm2/natives/xml/strings.js.map +1 -0
  328. package/dist/avm2/natives/xml/values.d.ts +48 -0
  329. package/dist/avm2/natives/xml/values.d.ts.map +1 -0
  330. package/dist/avm2/natives/xml/values.js +123 -0
  331. package/dist/avm2/natives/xml/values.js.map +1 -0
  332. package/dist/avm2/natives/xml/xml.d.ts +5 -0
  333. package/dist/avm2/natives/xml/xml.d.ts.map +1 -0
  334. package/dist/avm2/natives/xml/xml.js +646 -0
  335. package/dist/avm2/natives/xml/xml.js.map +1 -0
  336. package/dist/avm2/number-strings.d.ts +28 -0
  337. package/dist/avm2/number-strings.d.ts.map +1 -0
  338. package/dist/avm2/number-strings.js +111 -0
  339. package/dist/avm2/number-strings.js.map +1 -0
  340. package/dist/avm2/numbers.d.ts +12 -0
  341. package/dist/avm2/numbers.d.ts.map +1 -0
  342. package/dist/avm2/numbers.js +559 -0
  343. package/dist/avm2/numbers.js.map +1 -0
  344. package/dist/avm2/options.d.ts +105 -0
  345. package/dist/avm2/options.d.ts.map +1 -0
  346. package/dist/avm2/options.js +17 -0
  347. package/dist/avm2/options.js.map +1 -0
  348. package/dist/avm2/player-messages.d.ts +3 -0
  349. package/dist/avm2/player-messages.d.ts.map +1 -0
  350. package/dist/avm2/player-messages.js +551 -0
  351. package/dist/avm2/player-messages.js.map +1 -0
  352. package/dist/avm2/property-cache.d.ts +61 -0
  353. package/dist/avm2/property-cache.d.ts.map +1 -0
  354. package/dist/avm2/property-cache.js +136 -0
  355. package/dist/avm2/property-cache.js.map +1 -0
  356. package/dist/avm2/runtime.d.ts +588 -0
  357. package/dist/avm2/runtime.d.ts.map +1 -0
  358. package/dist/avm2/runtime.js +2645 -0
  359. package/dist/avm2/runtime.js.map +1 -0
  360. package/dist/avm2/traits.d.ts +233 -0
  361. package/dist/avm2/traits.d.ts.map +1 -0
  362. package/dist/avm2/traits.js +510 -0
  363. package/dist/avm2/traits.js.map +1 -0
  364. package/dist/index.d.ts +8 -0
  365. package/dist/index.d.ts.map +1 -0
  366. package/dist/index.js +8 -0
  367. package/dist/index.js.map +1 -0
  368. package/package.json +43 -3
  369. package/src/avm1/activation.ts +114 -0
  370. package/src/avm1/case.ts +257 -0
  371. package/src/avm1/clips.ts +440 -0
  372. package/src/avm1/control.ts +339 -0
  373. package/src/avm1/errors.ts +60 -0
  374. package/src/avm1/functions.ts +271 -0
  375. package/src/avm1/globals/array.ts +676 -0
  376. package/src/avm1/globals/broadcaster.ts +185 -0
  377. package/src/avm1/globals/date.ts +548 -0
  378. package/src/avm1/globals/global.ts +420 -0
  379. package/src/avm1/globals/math.ts +152 -0
  380. package/src/avm1/globals/number.ts +122 -0
  381. package/src/avm1/globals/string.ts +254 -0
  382. package/src/avm1/globals/timers.ts +144 -0
  383. package/src/avm1/host.ts +155 -0
  384. package/src/avm1/index.ts +69 -0
  385. package/src/avm1/inheritance.ts +159 -0
  386. package/src/avm1/numbers.ts +348 -0
  387. package/src/avm1/objects.ts +1080 -0
  388. package/src/avm1/operators.ts +229 -0
  389. package/src/avm1/realm.ts +704 -0
  390. package/src/avm1/runtime.ts +1291 -0
  391. package/src/avm1/scope.ts +482 -0
  392. package/src/avm1/urls.ts +226 -0
  393. package/src/avm1/values.ts +145 -0
  394. package/src/avm2/amf-classes.ts +80 -0
  395. package/src/avm2/amf.ts +913 -0
  396. package/src/avm2/array-conversion.ts +117 -0
  397. package/src/avm2/builtin-library.ts +28 -0
  398. package/src/avm2/cache-fill.ts +124 -0
  399. package/src/avm2/classes.ts +235 -0
  400. package/src/avm2/definitions.ts +93 -0
  401. package/src/avm2/descriptors.ts +137 -0
  402. package/src/avm2/dictionary-keys.ts +345 -0
  403. package/src/avm2/domain-memory.ts +95 -0
  404. package/src/avm2/domain.ts +335 -0
  405. package/src/avm2/dynamic-properties.ts +209 -0
  406. package/src/avm2/enumeration.ts +506 -0
  407. package/src/avm2/errors.ts +54 -0
  408. package/src/avm2/float-library.ts +66 -0
  409. package/src/avm2/float.ts +31 -0
  410. package/src/avm2/hooks.ts +97 -0
  411. package/src/avm2/index.ts +84 -0
  412. package/src/avm2/messages.ts +178 -0
  413. package/src/avm2/method-factories.ts +130 -0
  414. package/src/avm2/modules.ts +120 -0
  415. package/src/avm2/names.ts +292 -0
  416. package/src/avm2/natives/aliases.ts +59 -0
  417. package/src/avm2/natives/array.ts +482 -0
  418. package/src/avm2/natives/bytearray.ts +1474 -0
  419. package/src/avm2/natives/case.ts +98 -0
  420. package/src/avm2/natives/concurrent.ts +268 -0
  421. package/src/avm2/natives/date.ts +678 -0
  422. package/src/avm2/natives/define.ts +176 -0
  423. package/src/avm2/natives/describe.ts +426 -0
  424. package/src/avm2/natives/dictionary.ts +18 -0
  425. package/src/avm2/natives/float-vector.ts +99 -0
  426. package/src/avm2/natives/float.ts +116 -0
  427. package/src/avm2/natives/index.ts +70 -0
  428. package/src/avm2/natives/json.ts +600 -0
  429. package/src/avm2/natives/number.ts +194 -0
  430. package/src/avm2/natives/object.ts +272 -0
  431. package/src/avm2/natives/proxy.ts +98 -0
  432. package/src/avm2/natives/regexp.ts +580 -0
  433. package/src/avm2/natives/shell-workers.ts +474 -0
  434. package/src/avm2/natives/shell.ts +707 -0
  435. package/src/avm2/natives/sort.ts +438 -0
  436. package/src/avm2/natives/string.ts +158 -0
  437. package/src/avm2/natives/sync.ts +964 -0
  438. package/src/avm2/natives/toplevel.ts +163 -0
  439. package/src/avm2/natives/vector-elements.ts +61 -0
  440. package/src/avm2/natives/vector.ts +511 -0
  441. package/src/avm2/natives/xml/access.ts +767 -0
  442. package/src/avm2/natives/xml/build.ts +381 -0
  443. package/src/avm2/natives/xml/chars.ts +127 -0
  444. package/src/avm2/natives/xml/escape.ts +46 -0
  445. package/src/avm2/natives/xml/names.ts +256 -0
  446. package/src/avm2/natives/xml/node.ts +339 -0
  447. package/src/avm2/natives/xml/operators.ts +90 -0
  448. package/src/avm2/natives/xml/parser.ts +414 -0
  449. package/src/avm2/natives/xml/strings.ts +241 -0
  450. package/src/avm2/natives/xml/values.ts +162 -0
  451. package/src/avm2/natives/xml/xml.ts +829 -0
  452. package/src/avm2/number-strings.ts +127 -0
  453. package/src/avm2/numbers.ts +605 -0
  454. package/src/avm2/options.ts +125 -0
  455. package/src/avm2/player-messages.ts +552 -0
  456. package/src/avm2/property-cache.ts +160 -0
  457. package/src/avm2/runtime.ts +3274 -0
  458. package/src/avm2/traits.ts +584 -0
  459. package/src/index.ts +8 -0
@@ -0,0 +1,345 @@
1
+ // A Dictionary's object keys, and the slots a for-in goes through them by.
2
+ // As DictionaryObject's hashtable, the store itself holds each key's slot,
3
+ // so that a for-in reads a slot for its name and value, with no list of
4
+ // names built at its start and no lookup at each step. Weak keys (new
5
+ // Dictionary(true)) keep no key alive, as Flash's do not: their entries are
6
+ // held strongly only by a WeakMap keyed by the key, and their slots hold
7
+ // them weakly, so neither a for-in left off nor a value that refers to its
8
+ // key keeps the key.
9
+
10
+ import type { AsObject, Value } from "./descriptors.js";
11
+
12
+ /** The value of an entry not there: deleted, or kept spare. No ActionScript value is a symbol. */
13
+ const GONE = Symbol("gone");
14
+
15
+ /** What valueAt gives where a dynamic property's name is, whose value is the property's. */
16
+ export const NAMED = Symbol("named");
17
+
18
+ /**
19
+ * A key and its value. Once deleted and its slot freed, it is kept to hold
20
+ * a key added later, with the WeakRef a weak one has: V8 keeps each
21
+ * WeakRef's target alive until the current job ends, so a new one for each
22
+ * key added would keep every entry made in a long frame.
23
+ */
24
+ class Entry {
25
+ /** Null once deleted from a slot. */
26
+ key: object | null = null;
27
+ /** GONE while not there: its slot is passed over, and free when a for-in next starts. */
28
+ value: Value = GONE;
29
+ /** Its slot, -1 until a for-in starts and gives it one. */
30
+ slot = -1;
31
+ }
32
+
33
+ class WeakEntry extends Entry {
34
+ /** How the slots hold it. */
35
+ readonly ref = new WeakRef<Entry>(this);
36
+ }
37
+
38
+ type Held = Entry | WeakRef<Entry>;
39
+
40
+ /**
41
+ * As avmplus' hashtable, a name keeps its slot while it is there, so that a
42
+ * for-in started inside another never moves the outer one's names. One
43
+ * deleted stays in its slot, which a for-in passes over, until a for-in next
44
+ * starts: then its slot is free, and the names added since take the free
45
+ * slots, the Dictionary's dynamic properties first, then its keys in the
46
+ * order they were added; only with none free does the list grow. So a for-in
47
+ * goes through neither a name added during it nor one deleted before it gets
48
+ * there, and goes through each other once.
49
+ */
50
+ export class DictionaryKeys {
51
+ readonly weak: boolean;
52
+ /**
53
+ * Each key's entry. One deleted before it had a slot stays, GONE, so that
54
+ * the key set again takes it back: deleting and setting a key over and
55
+ * over between for-ins makes nothing. A strong key deleted so stays alive
56
+ * until a for-in starts or `added` is settled, which keeps that bounded by
57
+ * twice the keys there, and 64.
58
+ */
59
+ private readonly map: Map<object, Entry> | WeakMap<object, Entry>;
60
+ /** Each slot: a key's entry, a dynamic property's name, or null where free. */
61
+ private readonly slots: (Held | string | null)[] = [];
62
+ /** The entries added since a for-in last started, which take slots when one next does. */
63
+ private added: Held[] = [];
64
+ /** The count of those at which the ones deleted or collected are dropped, so none pile up. */
65
+ private addedLimit = 64;
66
+ /** The entries with slots deleted since a for-in last started, freed when one next does. */
67
+ private readonly deleted: Entry[] = [];
68
+ /** The slots of keys collected that a for-in has come across since one last started. */
69
+ private readonly collected: number[] = [];
70
+ /** Entries no longer used, to hold keys added later; trimmed when a for-in starts. */
71
+ private readonly spare: Entry[] = [];
72
+ /** The slot of each dynamic property's name. */
73
+ private named: Map<string, number> | null = null;
74
+
75
+ constructor(weak: boolean) {
76
+ this.weak = weak;
77
+ this.map = weak ? new WeakMap() : new Map();
78
+ }
79
+
80
+ get(key: object): Value {
81
+ const value = this.map.get(key)?.value;
82
+ return value === GONE ? undefined : value;
83
+ }
84
+
85
+ has(key: object): boolean {
86
+ const entry = this.map.get(key);
87
+ return entry !== undefined && entry.value !== GONE;
88
+ }
89
+
90
+ set(key: object, value: Value): this {
91
+ if (!this.replace(key, value)) {
92
+ this.add(key, value);
93
+ }
94
+
95
+ return this;
96
+ }
97
+
98
+ /**
99
+ * Sets the value of a key that has an entry, there or deleted, and says
100
+ * whether it had one; set's first half, so that a caller can look at a
101
+ * key before it is added.
102
+ */
103
+ replace(key: object, value: Value): boolean {
104
+ const known = this.map.get(key);
105
+ if (known === undefined) {
106
+ return false;
107
+ }
108
+
109
+ known.value = value;
110
+ return true;
111
+ }
112
+
113
+ /** Adds a key that has no entry (replace said so). */
114
+ add(key: object, value: Value): void {
115
+ const entry = this.spare.pop() ?? (this.weak ? new WeakEntry() : new Entry());
116
+ entry.key = key;
117
+ entry.value = value;
118
+ this.map.set(key, entry);
119
+ this.added.push(this.hold(entry));
120
+ if (this.added.length >= this.addedLimit) {
121
+ this.added = this.settle(this.added);
122
+ this.addedLimit = Math.max(64, this.added.length * 2);
123
+ }
124
+ }
125
+
126
+ delete(key: object): boolean {
127
+ const entry = this.map.get(key);
128
+ if (entry === undefined || entry.value === GONE) {
129
+ return false;
130
+ }
131
+
132
+ entry.value = GONE;
133
+ if (entry.slot >= 0) {
134
+ this.map.delete(key);
135
+ entry.key = null;
136
+ this.deleted.push(entry);
137
+ }
138
+
139
+ return true;
140
+ }
141
+
142
+ /** The keys there now: those with slots, in their slots' order, then those added since. */
143
+ *keys(): IterableIterator<object> {
144
+ for (const entry of this.entries()) {
145
+ yield entry.key as object;
146
+ }
147
+ }
148
+
149
+ *[Symbol.iterator](): IterableIterator<[object, Value]> {
150
+ for (const entry of this.entries()) {
151
+ yield [entry.key as object, entry.value];
152
+ }
153
+ }
154
+
155
+ get size(): number {
156
+ let n = 0;
157
+ for (const _ of this.entries()) {
158
+ n++;
159
+ }
160
+
161
+ return n;
162
+ }
163
+
164
+ /**
165
+ * The index after `index` of a name of Dictionary `o` there now, or 0. A
166
+ * for-in's start (index 0) first frees the slots of names gone and gives
167
+ * those added theirs.
168
+ */
169
+ next(o: AsObject, index: number): number {
170
+ if (index === 0) {
171
+ this.start(o);
172
+ }
173
+
174
+ const slots = this.slots;
175
+ for (let i = index; i < slots.length; i++) {
176
+ const held = slots[i];
177
+ if (held === null) {
178
+ continue;
179
+ }
180
+
181
+ if (typeof held === "string") {
182
+ if (o.$d?.has(held) && !o.$dontEnum?.has(held)) {
183
+ return i + 1;
184
+ }
185
+
186
+ continue;
187
+ }
188
+
189
+ const entry = this.open(held);
190
+ if (entry === undefined) {
191
+ slots[i] = null;
192
+ this.collected.push(i);
193
+ } else if (entry.value !== GONE) {
194
+ return i + 1;
195
+ }
196
+ }
197
+
198
+ return 0;
199
+ }
200
+
201
+ /** The name at a for-in's index: a key, a dynamic property's name, or "" once a key is gone. */
202
+ nameAt(index: number): object | string {
203
+ const held = this.slots[index - 1];
204
+ if (held === null || held === undefined) {
205
+ return "";
206
+ }
207
+
208
+ return typeof held === "string" ? held : (this.open(held)?.key ?? "");
209
+ }
210
+
211
+ /** The value at a for-in's index: a key's, undefined once it is gone, or NAMED. */
212
+ valueAt(index: number): Value {
213
+ const held = this.slots[index - 1];
214
+ if (held === null || held === undefined) {
215
+ return undefined;
216
+ }
217
+
218
+ if (typeof held === "string") {
219
+ return NAMED;
220
+ }
221
+
222
+ const value = this.open(held)?.value;
223
+ return value === GONE ? undefined : value;
224
+ }
225
+
226
+ /** The entry a slot or `added` holds, or undefined once its key is collected. */
227
+ private open(held: Held): Entry | undefined {
228
+ return this.weak ? (held as WeakRef<Entry>).deref() : (held as Entry);
229
+ }
230
+
231
+ private hold(entry: Entry): Held {
232
+ return this.weak ? (entry as WeakEntry).ref : entry;
233
+ }
234
+
235
+ private *entries(): IterableIterator<Entry> {
236
+ for (let i = 0; i < this.slots.length; i++) {
237
+ const held = this.slots[i];
238
+ const entry = held === null || typeof held === "string" ? undefined : this.open(held);
239
+ if (entry !== undefined && entry.value !== GONE) {
240
+ yield entry;
241
+ }
242
+ }
243
+
244
+ for (let i = 0; i < this.added.length; i++) {
245
+ const entry = this.open(this.added[i]);
246
+ if (entry !== undefined && entry.value !== GONE) {
247
+ yield entry;
248
+ }
249
+ }
250
+ }
251
+
252
+ /** Those of `added` still there; the others are let go, their keys with them. */
253
+ private settle(added: Held[]): Held[] {
254
+ let kept = 0;
255
+ for (let i = 0; i < added.length; i++) {
256
+ const held = added[i];
257
+ const entry = this.open(held);
258
+ if (entry === undefined) {
259
+ continue;
260
+ }
261
+
262
+ if (entry.value !== GONE) {
263
+ added[kept++] = held;
264
+ } else {
265
+ this.map.delete(entry.key as object);
266
+ entry.key = null;
267
+ this.spare.push(entry);
268
+ }
269
+ }
270
+
271
+ added.length = kept;
272
+ return added;
273
+ }
274
+
275
+ private start(o: AsObject): void {
276
+ const d: Map<string, unknown> | undefined = o.$d;
277
+ const deleted = this.deleted;
278
+ if (
279
+ this.added.length === 0 &&
280
+ deleted.length === 0 &&
281
+ this.collected.length === 0 &&
282
+ !d?.size &&
283
+ !this.named?.size
284
+ ) {
285
+ return;
286
+ }
287
+
288
+ const slots = this.slots;
289
+ const free: number[] = [];
290
+ for (let i = 0; i < deleted.length; i++) {
291
+ const entry = deleted[i];
292
+ slots[entry.slot] = null;
293
+ free.push(entry.slot);
294
+ entry.slot = -1;
295
+ this.spare.push(entry);
296
+ }
297
+
298
+ deleted.length = 0;
299
+ for (let i = 0; i < this.collected.length; i++) {
300
+ free.push(this.collected[i]);
301
+ }
302
+
303
+ this.collected.length = 0;
304
+ if (this.named !== null) {
305
+ for (const [name, i] of this.named) {
306
+ if (!d?.has(name)) {
307
+ this.named.delete(name);
308
+ slots[i] = null;
309
+ free.push(i);
310
+ }
311
+ }
312
+ }
313
+
314
+ // Lowest first, so that the names added fill the earliest gaps.
315
+ free.sort((a, b) => a - b);
316
+ let next = 0;
317
+ // Freed, `named` holds only names still there: as many as there are, and none is new.
318
+ if (d?.size && d.size !== (this.named?.size ?? 0)) {
319
+ this.named ??= new Map();
320
+ for (const name of d.keys()) {
321
+ if (!this.named.has(name)) {
322
+ const i = next < free.length ? free[next++] : slots.length;
323
+ slots[i] = name;
324
+ this.named.set(name, i);
325
+ }
326
+ }
327
+ }
328
+
329
+ const added = this.settle(this.added);
330
+ for (let n = 0; n < added.length; n++) {
331
+ const i = next < free.length ? free[next++] : slots.length;
332
+ slots[i] = added[n];
333
+ (this.open(added[n]) as Entry).slot = i;
334
+ }
335
+
336
+ // Kept for as many keys as were added since the last start, as the next
337
+ // may add as many again; an emptied Dictionary keeps almost none.
338
+ if (this.spare.length > added.length + 64) {
339
+ this.spare.length = added.length + 64;
340
+ }
341
+
342
+ this.added = [];
343
+ this.addedLimit = 64;
344
+ }
345
+ }
@@ -0,0 +1,95 @@
1
+ // What generated code loads and stores domain memory in place through, at
2
+ // an int or uint address: a DataView, whose own range check rejects the
3
+ // addresses avmplus' MOPS reject, with a RangeError of its own. The method
4
+ // that made the access turns it into avmplus' RangeError 1506
5
+ // (Runtime.memoryError), before any caller or handler sees it.
6
+ import type { Runtime } from "./runtime.js";
7
+
8
+ /**
9
+ * The messages of the RangeErrors a DataView throws for an offset out of
10
+ * its range, as this engine words them: below 0, past the end, and with
11
+ * too few bytes left, for a load and a store.
12
+ */
13
+ const viewRangeMessages: ReadonlySet<string> = (() => {
14
+ const messages = new Set<string>();
15
+ const view = new DataView(new ArrayBuffer(4));
16
+ const probes = [
17
+ () => view.getUint8(-1),
18
+ () => view.getUint8(4),
19
+ () => view.getInt32(1, true),
20
+ () => view.getFloat64(0, true),
21
+ () => view.setUint8(-1, 0),
22
+ () => view.setUint16(3, 0, true),
23
+ () => view.setFloat64(0, 0, true),
24
+ () => view.getUint8(0xffffffff),
25
+ ];
26
+ for (let i = 0; i < probes.length; i++) {
27
+ try {
28
+ probes[i]();
29
+ } catch (e) {
30
+ if (e instanceof RangeError) {
31
+ messages.add(e.message);
32
+ }
33
+ }
34
+ }
35
+
36
+ return messages;
37
+ })();
38
+
39
+ /** Whether `e` is the RangeError a DataView throws for an offset out of its range. */
40
+ export function isViewRangeError(e: unknown): boolean {
41
+ return e instanceof RangeError && viewRangeMessages.has(e.message);
42
+ }
43
+
44
+ /**
45
+ * Domain memory another worker shares, as generated code reaches it: each
46
+ * access through the runtime's li8 and the others, which read the length
47
+ * again, as that worker may have grown it, before they reject an address.
48
+ */
49
+ export class SharedMemoryView {
50
+ private readonly rt: Runtime;
51
+
52
+ constructor(rt: Runtime) {
53
+ this.rt = rt;
54
+ }
55
+
56
+ getUint8(at: number): number {
57
+ return this.rt.li8(at);
58
+ }
59
+
60
+ getUint16(at: number, _littleEndian: boolean): number {
61
+ return this.rt.li16(at);
62
+ }
63
+
64
+ getInt32(at: number, _littleEndian: boolean): number {
65
+ return this.rt.li32(at);
66
+ }
67
+
68
+ getFloat32(at: number, _littleEndian: boolean): number {
69
+ return this.rt.lf32(at);
70
+ }
71
+
72
+ getFloat64(at: number, _littleEndian: boolean): number {
73
+ return this.rt.lf64(at);
74
+ }
75
+
76
+ setUint8(at: number, value: number): void {
77
+ this.rt.si8(value, at);
78
+ }
79
+
80
+ setUint16(at: number, value: number, _littleEndian: boolean): void {
81
+ this.rt.si16(value, at);
82
+ }
83
+
84
+ setInt32(at: number, value: number, _littleEndian: boolean): void {
85
+ this.rt.si32(value, at);
86
+ }
87
+
88
+ setFloat32(at: number, value: number, _littleEndian: boolean): void {
89
+ this.rt.sf32(value, at);
90
+ }
91
+
92
+ setFloat64(at: number, value: number, _littleEndian: boolean): void {
93
+ this.rt.sf64(value, at);
94
+ }
95
+ }