@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,600 @@
1
+ import { FloatValue } from "../float.js";
2
+ import { FloatVector } from "./float-vector.js";
3
+ // JSON's natives, as avmplus' JSONParser and JSONSerializer: the parser's
4
+ // tokens and SyntaxError 1132, and stringify's toJSON (public only: see
5
+ // toJSONOf), replacers, gaps, numbers as the host writes them, and a
6
+ // class instance's public variables and readable accessors before its
7
+ // dynamic properties, leaving out [Transient] ones.
8
+ //
9
+ // Translated from avmplus' core/JSONClass.cpp, this file is subject to the
10
+ // Mozilla Public License, v. 2.0: http://mozilla.org/MPL/2.0/.
11
+
12
+ import type { AsObject, Value } from "../descriptors.js";
13
+ import { NS_Public, publicQname } from "../names.js";
14
+ import type { Runtime } from "../runtime.js";
15
+ import type { Traits } from "../traits.js";
16
+ import type { Natives } from "./define.js";
17
+
18
+ /** Whether each traits binds a public toJSON, found once. */
19
+ const boundToJSON = new WeakMap<Traits, boolean>();
20
+
21
+ /**
22
+ * As JSONParser, through the host's JSON.parse, then its values made AS3's
23
+ * in place. The text the host rejects goes to parse(): avmplus reads some
24
+ * of it (numbers with leading zeros, as 01), and fails the rest as
25
+ * SyntaxError 1132.
26
+ */
27
+ function parseText(rt: Runtime, text: string): Value {
28
+ let tree: unknown;
29
+ try {
30
+ tree = JSON.parse(text);
31
+ } catch {
32
+ return parse(rt, text);
33
+ }
34
+
35
+ return fromHost(rt, tree);
36
+ }
37
+
38
+ /** How deep fromHost recurses before it continues with a stack of its own. */
39
+ const RECURSION_DEPTH = 500;
40
+ const LITERALS = ["null", "true", "false"];
41
+
42
+ /**
43
+ * A value of the host's JSON.parse as AS3's: an array as an Array holding
44
+ * it, its elements made AS3's in place, and an object as an Object with its
45
+ * keys, each where a public name of a plain Object is set (JSON's
46
+ * `__proto__` is a key of the object's own). Deeper than RECURSION_DEPTH,
47
+ * as deepFromHost does, as avmplus reads any depth.
48
+ */
49
+ function fromHost(rt: Runtime, v: unknown, depth = 0): Value {
50
+ if (typeof v !== "object" || v === null) {
51
+ return v;
52
+ }
53
+
54
+ if (depth > RECURSION_DEPTH) {
55
+ return deepFromHost(rt, v);
56
+ }
57
+
58
+ if (Array.isArray(v)) {
59
+ for (let i = 0; i < v.length; i++) {
60
+ v[i] = fromHost(rt, v[i], depth + 1);
61
+ }
62
+
63
+ return rt.array(v);
64
+ }
65
+
66
+ const o = rt.newObject([]);
67
+ const d: Map<string, Value> = o.$d;
68
+ const from = v as Record<string, unknown>;
69
+ for (const key in from) {
70
+ d.set(key, fromHost(rt, from[key], depth + 1));
71
+ }
72
+
73
+ return o;
74
+ }
75
+
76
+ /** As fromHost, with a stack of its own, not the host's: slower, and at any depth. */
77
+ function deepFromHost(rt: Runtime, root: object): Value {
78
+ const pending: [unknown, AsObject][] = [];
79
+ const wrap = (v: unknown): Value => {
80
+ if (typeof v !== "object" || v === null) {
81
+ return v;
82
+ }
83
+
84
+ const o = Array.isArray(v) ? rt.array(v) : rt.newObject([]);
85
+ pending.push([v, o]);
86
+ return o;
87
+ };
88
+
89
+ const result = wrap(root);
90
+ for (let next = pending.pop(); next; next = pending.pop()) {
91
+ const [host, o] = next;
92
+ if (Array.isArray(host)) {
93
+ for (let i = 0; i < host.length; i++) {
94
+ host[i] = wrap(host[i]);
95
+ }
96
+ } else {
97
+ const d: Map<string, Value> = o.$d;
98
+ const from = host as Record<string, unknown>;
99
+ for (const key in from) {
100
+ d.set(key, wrap(from[key]));
101
+ }
102
+ }
103
+ }
104
+
105
+ return result;
106
+ }
107
+
108
+ /** As JSONParser: the JSON text to a value, or SyntaxError 1132. */
109
+ function parse(rt: Runtime, text: string): Value {
110
+ let i = 0;
111
+ let token = "";
112
+ // The current token, read through a function: advance() changes it.
113
+ const current = (): string => token;
114
+ let value: Value;
115
+ const fail = (): never => {
116
+ throw rt.error("SyntaxError", 1132);
117
+ };
118
+
119
+ const digits = () => {
120
+ const start = i;
121
+ while (i < text.length && text.charCodeAt(i) >= 48 && text.charCodeAt(i) <= 57) {
122
+ i++;
123
+ }
124
+
125
+ if (i <= start) {
126
+ fail();
127
+ }
128
+ };
129
+
130
+ const advance = () => {
131
+ token = "";
132
+ while (i < text.length) {
133
+ const c = text[i];
134
+ switch (c) {
135
+ case "\t":
136
+ case "\n":
137
+ case "\r":
138
+ case " ":
139
+ i++;
140
+ continue;
141
+ case ",":
142
+ case ":":
143
+ case "{":
144
+ case "}":
145
+ case "[":
146
+ case "]":
147
+ i++;
148
+ token = c;
149
+ return;
150
+ case '"': {
151
+ i++;
152
+ let s = "";
153
+ let start = i;
154
+ while (i < text.length) {
155
+ const code = text.charCodeAt(i);
156
+ if (code < 32) {
157
+ fail();
158
+ }
159
+
160
+ if (code === 34) {
161
+ break;
162
+ }
163
+
164
+ if (code === 92) {
165
+ s += text.slice(start, i);
166
+ i++;
167
+ if (i === text.length) {
168
+ fail();
169
+ }
170
+
171
+ const e = text[i];
172
+ const simple: Record<string, string> = {
173
+ '"': '"',
174
+ "/": "/",
175
+ "\\": "\\",
176
+ b: "\b",
177
+ f: "\f",
178
+ n: "\n",
179
+ r: "\r",
180
+ t: "\t",
181
+ };
182
+ if (e in simple) {
183
+ s += simple[e];
184
+ } else if (e === "u") {
185
+ const hex = text.slice(i + 1, i + 5);
186
+ if (!/^[0-9a-fA-F]{4}$/.test(hex)) {
187
+ fail();
188
+ }
189
+
190
+ s += String.fromCharCode(Number.parseInt(hex, 16));
191
+ i += 4;
192
+ } else {
193
+ fail();
194
+ }
195
+
196
+ i++;
197
+ start = i;
198
+ } else {
199
+ i++;
200
+ }
201
+ }
202
+
203
+ if (i === text.length) {
204
+ fail();
205
+ }
206
+
207
+ value = s + text.slice(start, i);
208
+ i++;
209
+ token = '"';
210
+ return;
211
+ }
212
+ case "-":
213
+ case ".":
214
+ case "0":
215
+ case "1":
216
+ case "2":
217
+ case "3":
218
+ case "4":
219
+ case "5":
220
+ case "6":
221
+ case "7":
222
+ case "8":
223
+ case "9": {
224
+ const start = i;
225
+ if (text[i] === "-") {
226
+ i++;
227
+ }
228
+
229
+ digits();
230
+ if (text[i] === ".") {
231
+ i++;
232
+ digits();
233
+ }
234
+
235
+ if (text[i] === "e" || text[i] === "E") {
236
+ i++;
237
+ if (text[i] === "-" || text[i] === "+") {
238
+ i++;
239
+ }
240
+
241
+ digits();
242
+ }
243
+
244
+ value = text.slice(start, i);
245
+ token = "0";
246
+ return;
247
+ }
248
+ default:
249
+ for (const word of LITERALS) {
250
+ if (text.startsWith(word, i)) {
251
+ i += word.length;
252
+ token = word[0];
253
+ return;
254
+ }
255
+ }
256
+
257
+ fail();
258
+ }
259
+ }
260
+ };
261
+
262
+ const parseValue = (): Value => {
263
+ switch (current()) {
264
+ case "n":
265
+ advance();
266
+ return null;
267
+ case "t":
268
+ advance();
269
+ return true;
270
+ case "f":
271
+ advance();
272
+ return false;
273
+ case '"': {
274
+ const s = value;
275
+ advance();
276
+ return s;
277
+ }
278
+ case "0": {
279
+ const n = Number(value);
280
+ advance();
281
+ return n;
282
+ }
283
+ case "[": {
284
+ advance();
285
+ const a: Value[] = [];
286
+ if (current() !== "]") {
287
+ for (;;) {
288
+ a.push(parseValue());
289
+ if (current() !== ",") {
290
+ break;
291
+ }
292
+
293
+ advance();
294
+ }
295
+ }
296
+
297
+ if (current() !== "]") {
298
+ fail();
299
+ }
300
+
301
+ advance();
302
+ return rt.array(a);
303
+ }
304
+ case "{": {
305
+ advance();
306
+ const o = rt.newObject([]);
307
+ if (current() !== "}") {
308
+ for (;;) {
309
+ if (current() !== '"') {
310
+ fail();
311
+ }
312
+
313
+ const name = parseValue();
314
+ if (current() !== ":") {
315
+ fail();
316
+ }
317
+
318
+ advance();
319
+ rt.setProperty(o, publicQname(name, rt.userVersions), parseValue());
320
+ if (current() !== ",") {
321
+ break;
322
+ }
323
+
324
+ advance();
325
+ }
326
+ }
327
+
328
+ if (current() !== "}") {
329
+ fail();
330
+ }
331
+
332
+ advance();
333
+ return o;
334
+ }
335
+ default:
336
+ return fail();
337
+ }
338
+ };
339
+
340
+ advance();
341
+ const result = parseValue();
342
+ if (current() !== "") {
343
+ fail();
344
+ }
345
+
346
+ return result;
347
+ }
348
+
349
+ /** A class instance's public variables and readable accessors but [Transient] ones, the class's own first, as TypeDescriber lists them. */
350
+ function describedNames(traits: Traits, apiVersion: number): [string[], string[]] {
351
+ const variables: string[] = [];
352
+ const accessors: string[] = [];
353
+ for (let t: Traits | null = traits; t && t.name !== "Object"; t = t.base) {
354
+ for (const [name, list] of t.bindings) {
355
+ for (const b of list) {
356
+ // A member of a later version, AIR-only or VM-internal, is not the code's to see.
357
+ if (
358
+ b.ns.kind !== NS_Public ||
359
+ b.ns.uri !== "" ||
360
+ b.version > apiVersion ||
361
+ traits.isTransient(b.value)
362
+ ) {
363
+ continue;
364
+ }
365
+
366
+ const kind = b.value & 7;
367
+ if (kind === 2 || kind === 3) {
368
+ variables.push(name);
369
+ } else if (kind === 5 || kind === 7) {
370
+ accessors.push(name);
371
+ }
372
+ }
373
+ }
374
+ }
375
+
376
+ return [variables, accessors];
377
+ }
378
+
379
+ /**
380
+ * As JSONSerializer, in two steps, as Ruffle's does: the walk over the AS3
381
+ * values, calling toJSON and the replacer in avmplus' order and failing a
382
+ * cycle as it does, builds a tree of the host's values, which the host's
383
+ * JSON.stringify writes, gap and all. The text need not be avmplus' own:
384
+ * key order, escapes and numbers' digits differ, and it reads back as the
385
+ * same keys and values.
386
+ */
387
+ class Serializer {
388
+ private readonly active = new Set<AsObject>();
389
+
390
+ constructor(
391
+ private readonly rt: Runtime,
392
+ private readonly propertyList: string[] | null,
393
+ private readonly replacer: AsObject | null,
394
+ private readonly gap: string,
395
+ ) {}
396
+
397
+ stringify(v: Value): Value {
398
+ const wrapper = this.rt.newObject([]);
399
+ wrapper.$d.set("", v);
400
+ const tree = this.str("", v, wrapper);
401
+ return tree === undefined ? undefined : JSON.stringify(tree, null, this.gap);
402
+ }
403
+
404
+ /**
405
+ * As StrFoundValue: the value to write for `valueIn`, the host's, or
406
+ * undefined for none. A number the host writes as null if it is not
407
+ * finite, as avmplus does.
408
+ */
409
+ private str(key: string, valueIn: Value, holder: AsObject): unknown {
410
+ const rt = this.rt;
411
+ let value = valueIn;
412
+ if (value !== null && value !== undefined) {
413
+ const probe = this.toJSONOf(value);
414
+ if (probe?.$f) {
415
+ value = rt.callValue(probe, value, [key], null);
416
+ }
417
+ }
418
+
419
+ if (this.replacer) {
420
+ value = rt.callValue(this.replacer, holder, [key, value], null);
421
+ }
422
+
423
+ if (value instanceof FloatValue) {
424
+ return value.value;
425
+ }
426
+
427
+ switch (typeof value) {
428
+ case "boolean":
429
+ case "string":
430
+ case "number":
431
+ return value;
432
+ case "object":
433
+ break;
434
+ default:
435
+ return undefined;
436
+ }
437
+
438
+ if (value === null) {
439
+ return null;
440
+ }
441
+
442
+ if (value.$f) {
443
+ return undefined;
444
+ }
445
+
446
+ const traits: Traits = rt.traitsOf(value);
447
+ if (isA(traits, "Array") || isVector(traits)) {
448
+ return this.array(value);
449
+ }
450
+
451
+ return this.object(value, traits);
452
+ }
453
+
454
+ /**
455
+ * As the probe of StrFoundValue: `value`'s toJSON, or null. A public
456
+ * binding first; else, as hasProperty finds a public name that is not an
457
+ * index, the object's own dynamic one and then its prototype chain's.
458
+ *
459
+ * avmplus probes the AS3 namespace before the public one, with the
460
+ * builtin's own AS3 namespace, which sees AS3 bindings only at the
461
+ * builtin's API version: no class of avmshell's binds an AS3 toJSON
462
+ * (theirs are its prototypes'), and a script's AS3 toJSON is never
463
+ * found, even when it has no public one. So only the public one is.
464
+ */
465
+ private toJSONOf(value: Value): Value {
466
+ const rt = this.rt;
467
+ const traits = rt.traitsOf(value);
468
+ let bound = boundToJSON.get(traits);
469
+ if (bound === undefined) {
470
+ bound = traits.find(rt.toJSONName) !== 0;
471
+ boundToJSON.set(traits, bound);
472
+ }
473
+
474
+ if (bound) {
475
+ return rt.getProperty(value, rt.toJSONName);
476
+ }
477
+
478
+ const own: Map<string, Value> | null | undefined =
479
+ typeof value === "object" ? value.$d : undefined;
480
+ if (own?.has("toJSON")) {
481
+ return own.get("toJSON");
482
+ }
483
+
484
+ for (let p = rt.protoOf(value); p; p = p.$p) {
485
+ if (p.$d?.has("toJSON")) {
486
+ return p.$d.get("toJSON");
487
+ }
488
+ }
489
+
490
+ return null;
491
+ }
492
+
493
+ private enter(value: AsObject): void {
494
+ if (this.active.has(value)) {
495
+ throw this.rt.error("TypeError", 1129);
496
+ }
497
+
498
+ this.active.add(value);
499
+ }
500
+
501
+ /** As JO: the property list, or the described properties and then the dynamic ones. */
502
+ private object(value: AsObject, traits: Traits): Record<string, unknown> {
503
+ const rt = this.rt;
504
+ this.enter(value);
505
+ const out: Record<string, unknown> = {};
506
+ const own: Map<string, Value> | null = value.$d;
507
+ const prop = (name: string) => {
508
+ // A dynamic property of its own is where getProperty would find it.
509
+ const v = own?.has(name)
510
+ ? own.get(name)
511
+ : rt.getProperty(value, publicQname(name, rt.userVersions));
512
+ const written = this.str(name, v, value);
513
+ if (written === undefined) {
514
+ return;
515
+ }
516
+
517
+ if (name === "__proto__") {
518
+ // Assigned, it would set the prototype, not the key.
519
+ Object.defineProperty(out, name, { value: written, enumerable: true, writable: true });
520
+ } else {
521
+ out[name] = written;
522
+ }
523
+ };
524
+
525
+ if (this.propertyList) {
526
+ for (const name of this.propertyList) {
527
+ prop(name);
528
+ }
529
+ } else {
530
+ const [variables, accessors] = describedNames(traits, rt.apiVersion);
531
+ for (const name of [...variables, ...accessors]) {
532
+ prop(name);
533
+ }
534
+
535
+ for (const name of rt.enumerableNames(value)) {
536
+ prop(name);
537
+ }
538
+ }
539
+
540
+ this.active.delete(value);
541
+ return out;
542
+ }
543
+
544
+ /** As JAfinish: each element, null for one that writes nothing. */
545
+ private array(value: AsObject): unknown[] {
546
+ this.enter(value);
547
+ const length: number = value.$a.length;
548
+ const out = new Array<unknown>(length);
549
+ for (let i = 0; i < length; i++) {
550
+ // The elements as they are now: toJSON or the replacer may have
551
+ // changed them, or the Vector its storage. A hole, or an element
552
+ // since removed, is got as getUintProperty gets it: from the
553
+ // prototype chain, or a Vector's RangeError.
554
+ const elements: Value[] = value.$a;
555
+ const element =
556
+ !(elements instanceof FloatVector) && i in elements
557
+ ? elements[i]
558
+ : this.rt.getProperty(value, this.rt.publicName(i));
559
+ const written = this.str(String(i), element, value);
560
+ out[i] = written === undefined ? null : written;
561
+ }
562
+
563
+ this.active.delete(value);
564
+ return out;
565
+ }
566
+ }
567
+
568
+ function isVector(traits: Traits): boolean {
569
+ for (let t: Traits | null = traits; t; t = t.base) {
570
+ if (t.name.startsWith("__AS3__.vec::Vector$")) {
571
+ return true;
572
+ }
573
+ }
574
+
575
+ return false;
576
+ }
577
+
578
+ function isA(traits: Traits, name: string): boolean {
579
+ for (let t: Traits | null = traits; t; t = t.base) {
580
+ if (t.name === name) {
581
+ return true;
582
+ }
583
+ }
584
+
585
+ return false;
586
+ }
587
+
588
+ export function jsonNatives(): Natives {
589
+ return {
590
+ "JSON.JSON::parseCore": (rt) => (text: Value) => parseText(rt, rt.toString(text)),
591
+ "JSON.JSON::stringifySpecializedToString":
592
+ (rt) => (value: Value, propertyList: Value, replacer: Value, gap: Value) =>
593
+ new Serializer(
594
+ rt,
595
+ propertyList?.$a ? propertyList.$a.map((n: Value) => rt.toString(n)) : null,
596
+ replacer?.$f ? replacer : null,
597
+ gap === null || gap === undefined ? "" : rt.toString(gap),
598
+ ).stringify(value),
599
+ };
600
+ }