cluaupp 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 (760) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +119 -0
  4. package/bin/cluau.js +4 -0
  5. package/bin/cluaupp.js +4 -0
  6. package/docs/README.md +20 -0
  7. package/docs/architecture.md +110 -0
  8. package/docs/cli.md +69 -0
  9. package/docs/comparison.md +37 -0
  10. package/docs/config.md +31 -0
  11. package/docs/cpp-advanced.md +71 -0
  12. package/docs/cpp-const.md +52 -0
  13. package/docs/cpp-organization.md +61 -0
  14. package/docs/cpp-safety.md +58 -0
  15. package/docs/cpp-types.md +66 -0
  16. package/docs/getting-started.md +169 -0
  17. package/docs/intro.md +37 -0
  18. package/docs/libraries.md +77 -0
  19. package/docs/roblox-api.md +81 -0
  20. package/docs/syntax.md +131 -0
  21. package/include/cluaupp/datatypes.hpp +581 -0
  22. package/include/cluaupp/generated/enums.hpp +4920 -0
  23. package/include/cluaupp/generated/instances.hpp +12489 -0
  24. package/include/cluaupp/libs/chrono.hpp +26 -0
  25. package/include/cluaupp/libs/cmdr.hpp +16 -0
  26. package/include/cluaupp/libs/dataservice.hpp +141 -0
  27. package/include/cluaupp/libs/display.hpp +13 -0
  28. package/include/cluaupp/libs/ezvisual.hpp +18 -0
  29. package/include/cluaupp/libs/formatnumber.hpp +15 -0
  30. package/include/cluaupp/libs/fusion.hpp +41 -0
  31. package/include/cluaupp/libs/iris.hpp +40 -0
  32. package/include/cluaupp/libs/janitor.hpp +35 -0
  33. package/include/cluaupp/libs/math.hpp +14 -0
  34. package/include/cluaupp/libs/module3d.hpp +25 -0
  35. package/include/cluaupp/libs/net.hpp +42 -0
  36. package/include/cluaupp/libs/promise.hpp +30 -0
  37. package/include/cluaupp/libs/spring.hpp +18 -0
  38. package/include/cluaupp/libs/statemachine.hpp +19 -0
  39. package/include/cluaupp/libs/stickybillboard.hpp +14 -0
  40. package/include/cluaupp/libs/topbarplus.hpp +29 -0
  41. package/include/cluaupp/libs/twinkle.hpp +15 -0
  42. package/include/cluaupp/libs/vfx.hpp +13 -0
  43. package/include/cluaupp/libs.hpp +25 -0
  44. package/include/cluaupp/roblox.hpp +28 -0
  45. package/package.json +65 -0
  46. package/runtime/ArrayIndexer/init.luau +144 -0
  47. package/runtime/Chrono/Client/ClientClock.luau +202 -0
  48. package/runtime/Chrono/Client/InterpolationBuffer.luau +74 -0
  49. package/runtime/Chrono/Client/ModelResolver.luau +53 -0
  50. package/runtime/Chrono/Client/Player.luau +113 -0
  51. package/runtime/Chrono/Client/Receiver.luau +395 -0
  52. package/runtime/Chrono/Client/Replicate.luau +333 -0
  53. package/runtime/Chrono/Client/Sender.luau +205 -0
  54. package/runtime/Chrono/LICENSE +21 -0
  55. package/runtime/Chrono/Server/EntityGrid.luau +299 -0
  56. package/runtime/Chrono/Server/Player.luau +141 -0
  57. package/runtime/Chrono/Server/Receiver.luau +287 -0
  58. package/runtime/Chrono/Server/Replicate.luau +415 -0
  59. package/runtime/Chrono/Server/Sender.luau +306 -0
  60. package/runtime/Chrono/Server/ServerClock.luau +50 -0
  61. package/runtime/Chrono/Shared/ApplyMounts.luau +137 -0
  62. package/runtime/Chrono/Shared/Bin.luau +31 -0
  63. package/runtime/Chrono/Shared/ClockUnwrap.luau +70 -0
  64. package/runtime/Chrono/Shared/Config.luau +264 -0
  65. package/runtime/Chrono/Shared/Entity.luau +1016 -0
  66. package/runtime/Chrono/Shared/Events.luau +39 -0
  67. package/runtime/Chrono/Shared/Holder.luau +210 -0
  68. package/runtime/Chrono/Shared/InterpolationMath.luau +51 -0
  69. package/runtime/Chrono/Shared/ModelHelper.luau +122 -0
  70. package/runtime/Chrono/Shared/Remotes/ClientClockRelay.model.json +3 -0
  71. package/runtime/Chrono/Shared/Remotes/ClientHeartbeat.model.json +3 -0
  72. package/runtime/Chrono/Shared/Remotes/ClientLoaded.model.json +3 -0
  73. package/runtime/Chrono/Shared/Remotes/Death.model.json +3 -0
  74. package/runtime/Chrono/Shared/Remotes/Heartbeat.model.json +3 -0
  75. package/runtime/Chrono/Shared/Remotes/Replicate.model.json +3 -0
  76. package/runtime/Chrono/Shared/Remotes/ReplicateFull.model.json +3 -0
  77. package/runtime/Chrono/Shared/Remotes/SafeReplicate.model.json +3 -0
  78. package/runtime/Chrono/Shared/ReplicationRules.luau +122 -0
  79. package/runtime/Chrono/Shared/Signal.luau +219 -0
  80. package/runtime/Chrono/Shared/Snapshots.luau +218 -0
  81. package/runtime/Chrono/Shared/Stats.luau +204 -0
  82. package/runtime/Chrono/Shared/Ticker.luau +112 -0
  83. package/runtime/Chrono/Shared/Types.luau +247 -0
  84. package/runtime/Chrono/Shared/Warn.luau +33 -0
  85. package/runtime/Chrono/Shared/_CUSTOM_MODEL_REP/init.model.json +3 -0
  86. package/runtime/Chrono/_impl/Client/ClientClock.luau +202 -0
  87. package/runtime/Chrono/_impl/Client/InterpolationBuffer.luau +74 -0
  88. package/runtime/Chrono/_impl/Client/ModelResolver.luau +53 -0
  89. package/runtime/Chrono/_impl/Client/Player.luau +113 -0
  90. package/runtime/Chrono/_impl/Client/Receiver.luau +395 -0
  91. package/runtime/Chrono/_impl/Client/Replicate.luau +333 -0
  92. package/runtime/Chrono/_impl/Client/Sender.luau +205 -0
  93. package/runtime/Chrono/_impl/LICENSE +21 -0
  94. package/runtime/Chrono/_impl/Server/EntityGrid.luau +299 -0
  95. package/runtime/Chrono/_impl/Server/Player.luau +141 -0
  96. package/runtime/Chrono/_impl/Server/Receiver.luau +287 -0
  97. package/runtime/Chrono/_impl/Server/Replicate.luau +415 -0
  98. package/runtime/Chrono/_impl/Server/Sender.luau +306 -0
  99. package/runtime/Chrono/_impl/Server/ServerClock.luau +50 -0
  100. package/runtime/Chrono/_impl/Shared/ApplyMounts.luau +137 -0
  101. package/runtime/Chrono/_impl/Shared/Bin.luau +31 -0
  102. package/runtime/Chrono/_impl/Shared/ClockUnwrap.luau +70 -0
  103. package/runtime/Chrono/_impl/Shared/Config.luau +264 -0
  104. package/runtime/Chrono/_impl/Shared/Entity.luau +1016 -0
  105. package/runtime/Chrono/_impl/Shared/Events.luau +39 -0
  106. package/runtime/Chrono/_impl/Shared/Holder.luau +210 -0
  107. package/runtime/Chrono/_impl/Shared/InterpolationMath.luau +51 -0
  108. package/runtime/Chrono/_impl/Shared/ModelHelper.luau +122 -0
  109. package/runtime/Chrono/_impl/Shared/Remotes/ClientClockRelay.model.json +3 -0
  110. package/runtime/Chrono/_impl/Shared/Remotes/ClientHeartbeat.model.json +3 -0
  111. package/runtime/Chrono/_impl/Shared/Remotes/ClientLoaded.model.json +3 -0
  112. package/runtime/Chrono/_impl/Shared/Remotes/Death.model.json +3 -0
  113. package/runtime/Chrono/_impl/Shared/Remotes/Heartbeat.model.json +3 -0
  114. package/runtime/Chrono/_impl/Shared/Remotes/Replicate.model.json +3 -0
  115. package/runtime/Chrono/_impl/Shared/Remotes/ReplicateFull.model.json +3 -0
  116. package/runtime/Chrono/_impl/Shared/Remotes/SafeReplicate.model.json +3 -0
  117. package/runtime/Chrono/_impl/Shared/ReplicationRules.luau +122 -0
  118. package/runtime/Chrono/_impl/Shared/Signal.luau +219 -0
  119. package/runtime/Chrono/_impl/Shared/Snapshots.luau +218 -0
  120. package/runtime/Chrono/_impl/Shared/Stats.luau +204 -0
  121. package/runtime/Chrono/_impl/Shared/Ticker.luau +112 -0
  122. package/runtime/Chrono/_impl/Shared/Types.luau +247 -0
  123. package/runtime/Chrono/_impl/Shared/Warn.luau +33 -0
  124. package/runtime/Chrono/_impl/Shared/_CUSTOM_MODEL_REP/init.model.json +3 -0
  125. package/runtime/Chrono/_impl/init.luau +96 -0
  126. package/runtime/Chrono/init.luau +14 -0
  127. package/runtime/Cmdr/BuiltInCommands/Admin/announce.luau +21 -0
  128. package/runtime/Cmdr/BuiltInCommands/Admin/announceServer.luau +17 -0
  129. package/runtime/Cmdr/BuiltInCommands/Admin/ban.luau +59 -0
  130. package/runtime/Cmdr/BuiltInCommands/Admin/banServer.luau +30 -0
  131. package/runtime/Cmdr/BuiltInCommands/Admin/gotoPlace.luau +35 -0
  132. package/runtime/Cmdr/BuiltInCommands/Admin/gotoPlaceServer.luau +17 -0
  133. package/runtime/Cmdr/BuiltInCommands/Admin/kick.luau +19 -0
  134. package/runtime/Cmdr/BuiltInCommands/Admin/kickServer.luau +27 -0
  135. package/runtime/Cmdr/BuiltInCommands/Admin/kill.luau +13 -0
  136. package/runtime/Cmdr/BuiltInCommands/Admin/killServer.luau +13 -0
  137. package/runtime/Cmdr/BuiltInCommands/Admin/respawn.luau +15 -0
  138. package/runtime/Cmdr/BuiltInCommands/Admin/respawnServer.luau +7 -0
  139. package/runtime/Cmdr/BuiltInCommands/Admin/teleport.luau +30 -0
  140. package/runtime/Cmdr/BuiltInCommands/Admin/teleportServer.luau +26 -0
  141. package/runtime/Cmdr/BuiltInCommands/Admin/unban.luau +26 -0
  142. package/runtime/Cmdr/BuiltInCommands/Admin/unbanServer.luau +10 -0
  143. package/runtime/Cmdr/BuiltInCommands/Debug/blink.luau +35 -0
  144. package/runtime/Cmdr/BuiltInCommands/Debug/fetch.luau +12 -0
  145. package/runtime/Cmdr/BuiltInCommands/Debug/fetchServer.luau +7 -0
  146. package/runtime/Cmdr/BuiltInCommands/Debug/getPlayerPlaceInstance.luau +20 -0
  147. package/runtime/Cmdr/BuiltInCommands/Debug/getPlayerPlaceInstanceServer.luau +28 -0
  148. package/runtime/Cmdr/BuiltInCommands/Debug/position.luau +30 -0
  149. package/runtime/Cmdr/BuiltInCommands/Debug/thru.luau +50 -0
  150. package/runtime/Cmdr/BuiltInCommands/Debug/uptime.luau +6 -0
  151. package/runtime/Cmdr/BuiltInCommands/Debug/uptimeServer.luau +12 -0
  152. package/runtime/Cmdr/BuiltInCommands/Debug/version.luau +12 -0
  153. package/runtime/Cmdr/BuiltInCommands/Utility/alias.luau +22 -0
  154. package/runtime/Cmdr/BuiltInCommands/Utility/bind.luau +104 -0
  155. package/runtime/Cmdr/BuiltInCommands/Utility/clear.luau +20 -0
  156. package/runtime/Cmdr/BuiltInCommands/Utility/convertTimestamp.luau +18 -0
  157. package/runtime/Cmdr/BuiltInCommands/Utility/echo.luau +17 -0
  158. package/runtime/Cmdr/BuiltInCommands/Utility/edit.luau +75 -0
  159. package/runtime/Cmdr/BuiltInCommands/Utility/exit.luau +11 -0
  160. package/runtime/Cmdr/BuiltInCommands/Utility/history.luau +27 -0
  161. package/runtime/Cmdr/BuiltInCommands/Utility/hover.luau +21 -0
  162. package/runtime/Cmdr/BuiltInCommands/Utility/jsonArrayDecode.luau +25 -0
  163. package/runtime/Cmdr/BuiltInCommands/Utility/jsonArrayEncode.luau +18 -0
  164. package/runtime/Cmdr/BuiltInCommands/Utility/len.luau +16 -0
  165. package/runtime/Cmdr/BuiltInCommands/Utility/math.luau +36 -0
  166. package/runtime/Cmdr/BuiltInCommands/Utility/pick.luau +21 -0
  167. package/runtime/Cmdr/BuiltInCommands/Utility/rand.luau +27 -0
  168. package/runtime/Cmdr/BuiltInCommands/Utility/replace.luau +32 -0
  169. package/runtime/Cmdr/BuiltInCommands/Utility/resolve.luau +32 -0
  170. package/runtime/Cmdr/BuiltInCommands/Utility/run.luau +20 -0
  171. package/runtime/Cmdr/BuiltInCommands/Utility/runLines.luau +34 -0
  172. package/runtime/Cmdr/BuiltInCommands/Utility/runif.luau +95 -0
  173. package/runtime/Cmdr/BuiltInCommands/Utility/unbind.luau +27 -0
  174. package/runtime/Cmdr/BuiltInCommands/Utility/var.luau +29 -0
  175. package/runtime/Cmdr/BuiltInCommands/Utility/varServer.luau +37 -0
  176. package/runtime/Cmdr/BuiltInCommands/Utility/varSet.luau +30 -0
  177. package/runtime/Cmdr/BuiltInCommands/Utility/varSetServer.luau +29 -0
  178. package/runtime/Cmdr/BuiltInCommands/help.luau +96 -0
  179. package/runtime/Cmdr/BuiltInTypes/BrickColor.luau +258 -0
  180. package/runtime/Cmdr/BuiltInTypes/Color3.luau +59 -0
  181. package/runtime/Cmdr/BuiltInTypes/Command.luau +23 -0
  182. package/runtime/Cmdr/BuiltInTypes/Duration.luau +111 -0
  183. package/runtime/Cmdr/BuiltInTypes/JSON.luau +13 -0
  184. package/runtime/Cmdr/BuiltInTypes/MathOperator.luau +43 -0
  185. package/runtime/Cmdr/BuiltInTypes/Player.luau +36 -0
  186. package/runtime/Cmdr/BuiltInTypes/PlayerId.luau +66 -0
  187. package/runtime/Cmdr/BuiltInTypes/Primitives.luau +145 -0
  188. package/runtime/Cmdr/BuiltInTypes/StoredKey.luau +33 -0
  189. package/runtime/Cmdr/BuiltInTypes/Team.luau +49 -0
  190. package/runtime/Cmdr/BuiltInTypes/Type.luau +23 -0
  191. package/runtime/Cmdr/BuiltInTypes/URL.luau +18 -0
  192. package/runtime/Cmdr/BuiltInTypes/UserInput.luau +32 -0
  193. package/runtime/Cmdr/BuiltInTypes/Vector.luau +58 -0
  194. package/runtime/Cmdr/CmdrClient/CmdrInterface/AutoComplete.luau +240 -0
  195. package/runtime/Cmdr/CmdrClient/CmdrInterface/CreateGui.luau +227 -0
  196. package/runtime/Cmdr/CmdrClient/CmdrInterface/Window.luau +713 -0
  197. package/runtime/Cmdr/CmdrClient/CmdrInterface/init.luau +18 -0
  198. package/runtime/Cmdr/CmdrClient/DefaultEventHandlers.luau +18 -0
  199. package/runtime/Cmdr/CmdrClient/Shared/Argument.luau +395 -0
  200. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/HasCharacter.luau +39 -0
  201. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/IsDataStoreAvailable.luau +36 -0
  202. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/MaxArrayLength.luau +10 -0
  203. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/MaxStringLength.luau +10 -0
  204. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/NonEmptyString.luau +10 -0
  205. package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/NotEquals.luau +8 -0
  206. package/runtime/Cmdr/CmdrClient/Shared/Command.luau +415 -0
  207. package/runtime/Cmdr/CmdrClient/Shared/Dispatcher.luau +407 -0
  208. package/runtime/Cmdr/CmdrClient/Shared/Registry.luau +717 -0
  209. package/runtime/Cmdr/CmdrClient/Shared/Util.luau +879 -0
  210. package/runtime/Cmdr/CmdrClient/init.luau +377 -0
  211. package/runtime/Cmdr/LICENSE +21 -0
  212. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/announce.luau +21 -0
  213. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/announceServer.luau +17 -0
  214. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/ban.luau +59 -0
  215. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/banServer.luau +30 -0
  216. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/gotoPlace.luau +35 -0
  217. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/gotoPlaceServer.luau +17 -0
  218. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/kick.luau +19 -0
  219. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/kickServer.luau +27 -0
  220. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/kill.luau +13 -0
  221. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/killServer.luau +13 -0
  222. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/respawn.luau +15 -0
  223. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/respawnServer.luau +7 -0
  224. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/teleport.luau +30 -0
  225. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/teleportServer.luau +26 -0
  226. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/unban.luau +26 -0
  227. package/runtime/Cmdr/_impl/BuiltInCommands/Admin/unbanServer.luau +10 -0
  228. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/blink.luau +35 -0
  229. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/fetch.luau +12 -0
  230. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/fetchServer.luau +7 -0
  231. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/getPlayerPlaceInstance.luau +20 -0
  232. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/getPlayerPlaceInstanceServer.luau +28 -0
  233. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/position.luau +30 -0
  234. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/thru.luau +50 -0
  235. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/uptime.luau +6 -0
  236. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/uptimeServer.luau +12 -0
  237. package/runtime/Cmdr/_impl/BuiltInCommands/Debug/version.luau +12 -0
  238. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/alias.luau +22 -0
  239. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/bind.luau +104 -0
  240. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/clear.luau +20 -0
  241. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/convertTimestamp.luau +18 -0
  242. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/echo.luau +17 -0
  243. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/edit.luau +75 -0
  244. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/exit.luau +11 -0
  245. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/history.luau +27 -0
  246. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/hover.luau +21 -0
  247. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/jsonArrayDecode.luau +25 -0
  248. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/jsonArrayEncode.luau +18 -0
  249. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/len.luau +16 -0
  250. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/math.luau +36 -0
  251. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/pick.luau +21 -0
  252. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/rand.luau +27 -0
  253. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/replace.luau +32 -0
  254. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/resolve.luau +32 -0
  255. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/run.luau +20 -0
  256. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/runLines.luau +34 -0
  257. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/runif.luau +95 -0
  258. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/unbind.luau +27 -0
  259. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/var.luau +29 -0
  260. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/varServer.luau +37 -0
  261. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/varSet.luau +30 -0
  262. package/runtime/Cmdr/_impl/BuiltInCommands/Utility/varSetServer.luau +29 -0
  263. package/runtime/Cmdr/_impl/BuiltInCommands/help.luau +96 -0
  264. package/runtime/Cmdr/_impl/BuiltInTypes/BrickColor.luau +258 -0
  265. package/runtime/Cmdr/_impl/BuiltInTypes/Color3.luau +59 -0
  266. package/runtime/Cmdr/_impl/BuiltInTypes/Command.luau +23 -0
  267. package/runtime/Cmdr/_impl/BuiltInTypes/Duration.luau +111 -0
  268. package/runtime/Cmdr/_impl/BuiltInTypes/JSON.luau +13 -0
  269. package/runtime/Cmdr/_impl/BuiltInTypes/MathOperator.luau +43 -0
  270. package/runtime/Cmdr/_impl/BuiltInTypes/Player.luau +36 -0
  271. package/runtime/Cmdr/_impl/BuiltInTypes/PlayerId.luau +66 -0
  272. package/runtime/Cmdr/_impl/BuiltInTypes/Primitives.luau +145 -0
  273. package/runtime/Cmdr/_impl/BuiltInTypes/StoredKey.luau +33 -0
  274. package/runtime/Cmdr/_impl/BuiltInTypes/Team.luau +49 -0
  275. package/runtime/Cmdr/_impl/BuiltInTypes/Type.luau +23 -0
  276. package/runtime/Cmdr/_impl/BuiltInTypes/URL.luau +18 -0
  277. package/runtime/Cmdr/_impl/BuiltInTypes/UserInput.luau +32 -0
  278. package/runtime/Cmdr/_impl/BuiltInTypes/Vector.luau +58 -0
  279. package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/AutoComplete.luau +240 -0
  280. package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/CreateGui.luau +227 -0
  281. package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/Window.luau +713 -0
  282. package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/init.luau +18 -0
  283. package/runtime/Cmdr/_impl/CmdrClient/DefaultEventHandlers.luau +18 -0
  284. package/runtime/Cmdr/_impl/CmdrClient/Shared/Argument.luau +395 -0
  285. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/HasCharacter.luau +39 -0
  286. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/IsDataStoreAvailable.luau +36 -0
  287. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/MaxArrayLength.luau +10 -0
  288. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/MaxStringLength.luau +10 -0
  289. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/NonEmptyString.luau +10 -0
  290. package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/NotEquals.luau +8 -0
  291. package/runtime/Cmdr/_impl/CmdrClient/Shared/Command.luau +415 -0
  292. package/runtime/Cmdr/_impl/CmdrClient/Shared/Dispatcher.luau +407 -0
  293. package/runtime/Cmdr/_impl/CmdrClient/Shared/Registry.luau +717 -0
  294. package/runtime/Cmdr/_impl/CmdrClient/Shared/Util.luau +879 -0
  295. package/runtime/Cmdr/_impl/CmdrClient/init.luau +377 -0
  296. package/runtime/Cmdr/_impl/LICENSE +21 -0
  297. package/runtime/Cmdr/_impl/init.luau +178 -0
  298. package/runtime/Cmdr/init.luau +8 -0
  299. package/runtime/DataService/Client.luau +209 -0
  300. package/runtime/DataService/Data.luau +886 -0
  301. package/runtime/DataService/Enum.luau +6 -0
  302. package/runtime/DataService/Enums.luau +10 -0
  303. package/runtime/DataService/Packages/quicknet/DataTypes.luau +70 -0
  304. package/runtime/DataService/Packages/quicknet/Enums.luau +85 -0
  305. package/runtime/DataService/Packages/quicknet/EnumsToNativeTypes.luau +57 -0
  306. package/runtime/DataService/Packages/quicknet/Parser.luau +355 -0
  307. package/runtime/DataService/Packages/quicknet/QuickNet.luau +953 -0
  308. package/runtime/DataService/Packages/quicknet/Serialize.luau +2020 -0
  309. package/runtime/DataService/Packages/quicknet/Types.luau +72 -0
  310. package/runtime/DataService/Packages/quicknet/init.luau +1 -0
  311. package/runtime/DataService/Packages/signal/init.luau +433 -0
  312. package/runtime/DataService/Path.luau +236 -0
  313. package/runtime/DataService/ProfileStore.luau +2243 -0
  314. package/runtime/DataService/Replicator.luau +172 -0
  315. package/runtime/DataService/Server.luau +412 -0
  316. package/runtime/DataService/init.luau +204 -0
  317. package/runtime/Display/LICENSE +201 -0
  318. package/runtime/Display/_impl/LICENSE +201 -0
  319. package/runtime/Display/_impl/init.luau +269 -0
  320. package/runtime/Display/_impl/option.luau +237 -0
  321. package/runtime/Display/init.luau +10 -0
  322. package/runtime/Display/option.luau +237 -0
  323. package/runtime/EzVisualz/Dropshadow.luau +148 -0
  324. package/runtime/EzVisualz/Gradient.luau +452 -0
  325. package/runtime/EzVisualz/GradientTemplates/Bubblegum.luau +16 -0
  326. package/runtime/EzVisualz/GradientTemplates/Chrome.luau +16 -0
  327. package/runtime/EzVisualz/GradientTemplates/Death.luau +15 -0
  328. package/runtime/EzVisualz/GradientTemplates/Electric.luau +14 -0
  329. package/runtime/EzVisualz/GradientTemplates/Fire.luau +13 -0
  330. package/runtime/EzVisualz/GradientTemplates/Galaxy.luau +11 -0
  331. package/runtime/EzVisualz/GradientTemplates/Ghost.luau +16 -0
  332. package/runtime/EzVisualz/GradientTemplates/Gold.luau +14 -0
  333. package/runtime/EzVisualz/GradientTemplates/Green.luau +14 -0
  334. package/runtime/EzVisualz/GradientTemplates/Ice.luau +14 -0
  335. package/runtime/EzVisualz/GradientTemplates/Lava.luau +15 -0
  336. package/runtime/EzVisualz/GradientTemplates/Matrix.luau +19 -0
  337. package/runtime/EzVisualz/GradientTemplates/Neon.luau +12 -0
  338. package/runtime/EzVisualz/GradientTemplates/Oceanic.luau +15 -0
  339. package/runtime/EzVisualz/GradientTemplates/Rainbow.luau +13 -0
  340. package/runtime/EzVisualz/GradientTemplates/Silver.luau +12 -0
  341. package/runtime/EzVisualz/GradientTemplates/Sunset.luau +11 -0
  342. package/runtime/EzVisualz/GradientTemplates/Zebra.luau +18 -0
  343. package/runtime/EzVisualz/GradientTemplates/init.luau +9 -0
  344. package/runtime/EzVisualz/LICENSE.md +21 -0
  345. package/runtime/EzVisualz/Presets/Bubblegum.luau +36 -0
  346. package/runtime/EzVisualz/Presets/ChromeStroke.luau +15 -0
  347. package/runtime/EzVisualz/Presets/DeathStroke.luau +15 -0
  348. package/runtime/EzVisualz/Presets/ElectricStroke.luau +54 -0
  349. package/runtime/EzVisualz/Presets/FireStroke.luau +29 -0
  350. package/runtime/EzVisualz/Presets/GalaxyStroke.luau +31 -0
  351. package/runtime/EzVisualz/Presets/Ghost.luau +10 -0
  352. package/runtime/EzVisualz/Presets/GhostStroke.luau +15 -0
  353. package/runtime/EzVisualz/Presets/Gold.luau +10 -0
  354. package/runtime/EzVisualz/Presets/GoldStroke.luau +15 -0
  355. package/runtime/EzVisualz/Presets/GreenOutline.luau +23 -0
  356. package/runtime/EzVisualz/Presets/IceStroke.luau +15 -0
  357. package/runtime/EzVisualz/Presets/Lava.luau +9 -0
  358. package/runtime/EzVisualz/Presets/LavaStroke.luau +13 -0
  359. package/runtime/EzVisualz/Presets/Matrix.luau +21 -0
  360. package/runtime/EzVisualz/Presets/NeonStroke.luau +30 -0
  361. package/runtime/EzVisualz/Presets/OceanicStroke.luau +15 -0
  362. package/runtime/EzVisualz/Presets/Rainbow.luau +9 -0
  363. package/runtime/EzVisualz/Presets/RainbowOutline.luau +23 -0
  364. package/runtime/EzVisualz/Presets/RainbowStroke.luau +13 -0
  365. package/runtime/EzVisualz/Presets/Shine.luau +48 -0
  366. package/runtime/EzVisualz/Presets/ShineOutline.luau +66 -0
  367. package/runtime/EzVisualz/Presets/Silver.luau +10 -0
  368. package/runtime/EzVisualz/Presets/SilverStroke.luau +15 -0
  369. package/runtime/EzVisualz/Presets/SunsetStroke.luau +31 -0
  370. package/runtime/EzVisualz/Presets/WaveStroke.luau +33 -0
  371. package/runtime/EzVisualz/Presets/Zebra.luau +21 -0
  372. package/runtime/EzVisualz/Presets/init.luau +9 -0
  373. package/runtime/EzVisualz/Stroke.luau +167 -0
  374. package/runtime/EzVisualz/Util.luau +7 -0
  375. package/runtime/EzVisualz/_impl/Dropshadow.luau +148 -0
  376. package/runtime/EzVisualz/_impl/Gradient.luau +452 -0
  377. package/runtime/EzVisualz/_impl/GradientTemplates/Bubblegum.luau +16 -0
  378. package/runtime/EzVisualz/_impl/GradientTemplates/Chrome.luau +16 -0
  379. package/runtime/EzVisualz/_impl/GradientTemplates/Death.luau +15 -0
  380. package/runtime/EzVisualz/_impl/GradientTemplates/Electric.luau +14 -0
  381. package/runtime/EzVisualz/_impl/GradientTemplates/Fire.luau +13 -0
  382. package/runtime/EzVisualz/_impl/GradientTemplates/Galaxy.luau +11 -0
  383. package/runtime/EzVisualz/_impl/GradientTemplates/Ghost.luau +16 -0
  384. package/runtime/EzVisualz/_impl/GradientTemplates/Gold.luau +14 -0
  385. package/runtime/EzVisualz/_impl/GradientTemplates/Green.luau +14 -0
  386. package/runtime/EzVisualz/_impl/GradientTemplates/Ice.luau +14 -0
  387. package/runtime/EzVisualz/_impl/GradientTemplates/Lava.luau +15 -0
  388. package/runtime/EzVisualz/_impl/GradientTemplates/Matrix.luau +19 -0
  389. package/runtime/EzVisualz/_impl/GradientTemplates/Neon.luau +12 -0
  390. package/runtime/EzVisualz/_impl/GradientTemplates/Oceanic.luau +15 -0
  391. package/runtime/EzVisualz/_impl/GradientTemplates/Rainbow.luau +13 -0
  392. package/runtime/EzVisualz/_impl/GradientTemplates/Silver.luau +12 -0
  393. package/runtime/EzVisualz/_impl/GradientTemplates/Sunset.luau +11 -0
  394. package/runtime/EzVisualz/_impl/GradientTemplates/Zebra.luau +18 -0
  395. package/runtime/EzVisualz/_impl/GradientTemplates/init.luau +9 -0
  396. package/runtime/EzVisualz/_impl/LICENSE.md +21 -0
  397. package/runtime/EzVisualz/_impl/Presets/Bubblegum.luau +36 -0
  398. package/runtime/EzVisualz/_impl/Presets/ChromeStroke.luau +15 -0
  399. package/runtime/EzVisualz/_impl/Presets/DeathStroke.luau +15 -0
  400. package/runtime/EzVisualz/_impl/Presets/ElectricStroke.luau +54 -0
  401. package/runtime/EzVisualz/_impl/Presets/FireStroke.luau +29 -0
  402. package/runtime/EzVisualz/_impl/Presets/GalaxyStroke.luau +31 -0
  403. package/runtime/EzVisualz/_impl/Presets/Ghost.luau +10 -0
  404. package/runtime/EzVisualz/_impl/Presets/GhostStroke.luau +15 -0
  405. package/runtime/EzVisualz/_impl/Presets/Gold.luau +10 -0
  406. package/runtime/EzVisualz/_impl/Presets/GoldStroke.luau +15 -0
  407. package/runtime/EzVisualz/_impl/Presets/GreenOutline.luau +23 -0
  408. package/runtime/EzVisualz/_impl/Presets/IceStroke.luau +15 -0
  409. package/runtime/EzVisualz/_impl/Presets/Lava.luau +9 -0
  410. package/runtime/EzVisualz/_impl/Presets/LavaStroke.luau +13 -0
  411. package/runtime/EzVisualz/_impl/Presets/Matrix.luau +21 -0
  412. package/runtime/EzVisualz/_impl/Presets/NeonStroke.luau +30 -0
  413. package/runtime/EzVisualz/_impl/Presets/OceanicStroke.luau +15 -0
  414. package/runtime/EzVisualz/_impl/Presets/Rainbow.luau +9 -0
  415. package/runtime/EzVisualz/_impl/Presets/RainbowOutline.luau +23 -0
  416. package/runtime/EzVisualz/_impl/Presets/RainbowStroke.luau +13 -0
  417. package/runtime/EzVisualz/_impl/Presets/Shine.luau +48 -0
  418. package/runtime/EzVisualz/_impl/Presets/ShineOutline.luau +66 -0
  419. package/runtime/EzVisualz/_impl/Presets/Silver.luau +10 -0
  420. package/runtime/EzVisualz/_impl/Presets/SilverStroke.luau +15 -0
  421. package/runtime/EzVisualz/_impl/Presets/SunsetStroke.luau +31 -0
  422. package/runtime/EzVisualz/_impl/Presets/WaveStroke.luau +33 -0
  423. package/runtime/EzVisualz/_impl/Presets/Zebra.luau +21 -0
  424. package/runtime/EzVisualz/_impl/Presets/init.luau +9 -0
  425. package/runtime/EzVisualz/_impl/Stroke.luau +167 -0
  426. package/runtime/EzVisualz/_impl/Util.luau +7 -0
  427. package/runtime/EzVisualz/_impl/init.luau +319 -0
  428. package/runtime/EzVisualz/_impl/wally.lock +8 -0
  429. package/runtime/EzVisualz/_impl/wally.toml +8 -0
  430. package/runtime/EzVisualz/init.luau +9 -0
  431. package/runtime/EzVisualz/wally.lock +8 -0
  432. package/runtime/EzVisualz/wally.toml +8 -0
  433. package/runtime/FormatNumber/LICENSE.md +25 -0
  434. package/runtime/FormatNumber/Main/DecimalFormatSymbols.lua +43 -0
  435. package/runtime/FormatNumber/Main/IntegerWidth.lua +41 -0
  436. package/runtime/FormatNumber/Main/Notation.lua +116 -0
  437. package/runtime/FormatNumber/Main/Precision.lua +179 -0
  438. package/runtime/FormatNumber/Main/init.lua +199 -0
  439. package/runtime/FormatNumber/Simple/init.lua +76 -0
  440. package/runtime/FormatNumber/Version.lua +82 -0
  441. package/runtime/FormatNumber/_impl/LICENSE.md +25 -0
  442. package/runtime/FormatNumber/_impl/Main/DecimalFormatSymbols.lua +43 -0
  443. package/runtime/FormatNumber/_impl/Main/IntegerWidth.lua +41 -0
  444. package/runtime/FormatNumber/_impl/Main/Notation.lua +116 -0
  445. package/runtime/FormatNumber/_impl/Main/Precision.lua +179 -0
  446. package/runtime/FormatNumber/_impl/Main/init.lua +199 -0
  447. package/runtime/FormatNumber/_impl/Simple/init.lua +76 -0
  448. package/runtime/FormatNumber/_impl/Version.lua +82 -0
  449. package/runtime/FormatNumber/_impl/_internal/class.lua +204 -0
  450. package/runtime/FormatNumber/_impl/_internal/decimal_conversion.lua +30 -0
  451. package/runtime/FormatNumber/_impl/_internal/enums.lua +55 -0
  452. package/runtime/FormatNumber/_impl/_internal/format.lua +342 -0
  453. package/runtime/FormatNumber/_impl/_internal/formatter_settings.lua +160 -0
  454. package/runtime/FormatNumber/_impl/_internal/init.lua +8 -0
  455. package/runtime/FormatNumber/_impl/_internal/skeleton.lua +541 -0
  456. package/runtime/FormatNumber/_impl/init.lua +20 -0
  457. package/runtime/FormatNumber/_internal/class.lua +204 -0
  458. package/runtime/FormatNumber/_internal/decimal_conversion.lua +30 -0
  459. package/runtime/FormatNumber/_internal/enums.lua +55 -0
  460. package/runtime/FormatNumber/_internal/format.lua +342 -0
  461. package/runtime/FormatNumber/_internal/formatter_settings.lua +160 -0
  462. package/runtime/FormatNumber/_internal/init.lua +8 -0
  463. package/runtime/FormatNumber/_internal/skeleton.lua +541 -0
  464. package/runtime/FormatNumber/init.lua +20 -0
  465. package/runtime/FormatNumber/init.luau +20 -0
  466. package/runtime/Fusion/Animation/ExternalTime.luau +84 -0
  467. package/runtime/Fusion/Animation/Spring.luau +313 -0
  468. package/runtime/Fusion/Animation/Stopwatch.luau +128 -0
  469. package/runtime/Fusion/Animation/Tween.luau +178 -0
  470. package/runtime/Fusion/Animation/getTweenDuration.luau +27 -0
  471. package/runtime/Fusion/Animation/getTweenRatio.luau +47 -0
  472. package/runtime/Fusion/Animation/lerpType.luau +164 -0
  473. package/runtime/Fusion/Animation/packType.luau +100 -0
  474. package/runtime/Fusion/Animation/springCoefficients.luau +80 -0
  475. package/runtime/Fusion/Animation/unpackType.luau +103 -0
  476. package/runtime/Fusion/Colour/Oklab.luau +70 -0
  477. package/runtime/Fusion/Colour/sRGB.luau +47 -0
  478. package/runtime/Fusion/External.luau +156 -0
  479. package/runtime/Fusion/ExternalDebug.luau +70 -0
  480. package/runtime/Fusion/Graph/Observer.luau +111 -0
  481. package/runtime/Fusion/Graph/castToGraph.luau +29 -0
  482. package/runtime/Fusion/Graph/change.luau +81 -0
  483. package/runtime/Fusion/Graph/depend.luau +33 -0
  484. package/runtime/Fusion/Graph/evaluate.luau +56 -0
  485. package/runtime/Fusion/Instances/Attribute.luau +58 -0
  486. package/runtime/Fusion/Instances/AttributeChange.luau +47 -0
  487. package/runtime/Fusion/Instances/AttributeOut.luau +63 -0
  488. package/runtime/Fusion/Instances/Child.luau +21 -0
  489. package/runtime/Fusion/Instances/Children.luau +148 -0
  490. package/runtime/Fusion/Instances/Hydrate.luau +29 -0
  491. package/runtime/Fusion/Instances/New.luau +48 -0
  492. package/runtime/Fusion/Instances/OnChange.luau +50 -0
  493. package/runtime/Fusion/Instances/OnEvent.luau +54 -0
  494. package/runtime/Fusion/Instances/Out.luau +69 -0
  495. package/runtime/Fusion/Instances/Tag.luau +61 -0
  496. package/runtime/Fusion/Instances/applyInstanceProps.luau +149 -0
  497. package/runtime/Fusion/Instances/defaultProps.luau +194 -0
  498. package/runtime/Fusion/LICENSE +21 -0
  499. package/runtime/Fusion/Logging/formatError.luau +49 -0
  500. package/runtime/Fusion/Logging/messages.luau +46 -0
  501. package/runtime/Fusion/Logging/parseError.luau +25 -0
  502. package/runtime/Fusion/Memory/checkLifetime.luau +134 -0
  503. package/runtime/Fusion/Memory/deriveScope.luau +24 -0
  504. package/runtime/Fusion/Memory/deriveScopeImpl.luau +40 -0
  505. package/runtime/Fusion/Memory/doCleanup.luau +91 -0
  506. package/runtime/Fusion/Memory/innerScope.luau +34 -0
  507. package/runtime/Fusion/Memory/insert.luau +22 -0
  508. package/runtime/Fusion/Memory/needsDestruction.luau +17 -0
  509. package/runtime/Fusion/Memory/scoped.luau +24 -0
  510. package/runtime/Fusion/RobloxExternal.luau +98 -0
  511. package/runtime/Fusion/State/Computed.luau +122 -0
  512. package/runtime/Fusion/State/For/Disassembly.luau +207 -0
  513. package/runtime/Fusion/State/For/ForTypes.luau +30 -0
  514. package/runtime/Fusion/State/For/init.luau +101 -0
  515. package/runtime/Fusion/State/ForKeys.luau +88 -0
  516. package/runtime/Fusion/State/ForPairs.luau +91 -0
  517. package/runtime/Fusion/State/ForValues.luau +88 -0
  518. package/runtime/Fusion/State/Value.luau +76 -0
  519. package/runtime/Fusion/State/castToState.luau +26 -0
  520. package/runtime/Fusion/State/peek.luau +31 -0
  521. package/runtime/Fusion/State/updateAll.luau +1 -0
  522. package/runtime/Fusion/Types.luau +318 -0
  523. package/runtime/Fusion/Utility/Contextual.luau +91 -0
  524. package/runtime/Fusion/Utility/Safe.luau +23 -0
  525. package/runtime/Fusion/Utility/isSimilar.luau +29 -0
  526. package/runtime/Fusion/Utility/merge.luau +35 -0
  527. package/runtime/Fusion/Utility/nameOf.luau +35 -0
  528. package/runtime/Fusion/Utility/never.luau +14 -0
  529. package/runtime/Fusion/Utility/nicknames.luau +11 -0
  530. package/runtime/Fusion/Utility/xtypeof.luau +27 -0
  531. package/runtime/Fusion/_impl/Animation/ExternalTime.luau +84 -0
  532. package/runtime/Fusion/_impl/Animation/Spring.luau +313 -0
  533. package/runtime/Fusion/_impl/Animation/Stopwatch.luau +128 -0
  534. package/runtime/Fusion/_impl/Animation/Tween.luau +178 -0
  535. package/runtime/Fusion/_impl/Animation/getTweenDuration.luau +27 -0
  536. package/runtime/Fusion/_impl/Animation/getTweenRatio.luau +47 -0
  537. package/runtime/Fusion/_impl/Animation/lerpType.luau +164 -0
  538. package/runtime/Fusion/_impl/Animation/packType.luau +100 -0
  539. package/runtime/Fusion/_impl/Animation/springCoefficients.luau +80 -0
  540. package/runtime/Fusion/_impl/Animation/unpackType.luau +103 -0
  541. package/runtime/Fusion/_impl/Colour/Oklab.luau +70 -0
  542. package/runtime/Fusion/_impl/Colour/sRGB.luau +47 -0
  543. package/runtime/Fusion/_impl/External.luau +156 -0
  544. package/runtime/Fusion/_impl/ExternalDebug.luau +70 -0
  545. package/runtime/Fusion/_impl/Graph/Observer.luau +111 -0
  546. package/runtime/Fusion/_impl/Graph/castToGraph.luau +29 -0
  547. package/runtime/Fusion/_impl/Graph/change.luau +81 -0
  548. package/runtime/Fusion/_impl/Graph/depend.luau +33 -0
  549. package/runtime/Fusion/_impl/Graph/evaluate.luau +56 -0
  550. package/runtime/Fusion/_impl/Instances/Attribute.luau +58 -0
  551. package/runtime/Fusion/_impl/Instances/AttributeChange.luau +47 -0
  552. package/runtime/Fusion/_impl/Instances/AttributeOut.luau +63 -0
  553. package/runtime/Fusion/_impl/Instances/Child.luau +21 -0
  554. package/runtime/Fusion/_impl/Instances/Children.luau +148 -0
  555. package/runtime/Fusion/_impl/Instances/Hydrate.luau +29 -0
  556. package/runtime/Fusion/_impl/Instances/New.luau +48 -0
  557. package/runtime/Fusion/_impl/Instances/OnChange.luau +50 -0
  558. package/runtime/Fusion/_impl/Instances/OnEvent.luau +54 -0
  559. package/runtime/Fusion/_impl/Instances/Out.luau +69 -0
  560. package/runtime/Fusion/_impl/Instances/Tag.luau +61 -0
  561. package/runtime/Fusion/_impl/Instances/applyInstanceProps.luau +149 -0
  562. package/runtime/Fusion/_impl/Instances/defaultProps.luau +194 -0
  563. package/runtime/Fusion/_impl/LICENSE +21 -0
  564. package/runtime/Fusion/_impl/Logging/formatError.luau +49 -0
  565. package/runtime/Fusion/_impl/Logging/messages.luau +46 -0
  566. package/runtime/Fusion/_impl/Logging/parseError.luau +25 -0
  567. package/runtime/Fusion/_impl/Memory/checkLifetime.luau +134 -0
  568. package/runtime/Fusion/_impl/Memory/deriveScope.luau +24 -0
  569. package/runtime/Fusion/_impl/Memory/deriveScopeImpl.luau +40 -0
  570. package/runtime/Fusion/_impl/Memory/doCleanup.luau +91 -0
  571. package/runtime/Fusion/_impl/Memory/innerScope.luau +34 -0
  572. package/runtime/Fusion/_impl/Memory/insert.luau +22 -0
  573. package/runtime/Fusion/_impl/Memory/needsDestruction.luau +17 -0
  574. package/runtime/Fusion/_impl/Memory/scoped.luau +24 -0
  575. package/runtime/Fusion/_impl/RobloxExternal.luau +98 -0
  576. package/runtime/Fusion/_impl/State/Computed.luau +122 -0
  577. package/runtime/Fusion/_impl/State/For/Disassembly.luau +207 -0
  578. package/runtime/Fusion/_impl/State/For/ForTypes.luau +30 -0
  579. package/runtime/Fusion/_impl/State/For/init.luau +101 -0
  580. package/runtime/Fusion/_impl/State/ForKeys.luau +88 -0
  581. package/runtime/Fusion/_impl/State/ForPairs.luau +91 -0
  582. package/runtime/Fusion/_impl/State/ForValues.luau +88 -0
  583. package/runtime/Fusion/_impl/State/Value.luau +76 -0
  584. package/runtime/Fusion/_impl/State/castToState.luau +26 -0
  585. package/runtime/Fusion/_impl/State/peek.luau +31 -0
  586. package/runtime/Fusion/_impl/State/updateAll.luau +1 -0
  587. package/runtime/Fusion/_impl/Types.luau +318 -0
  588. package/runtime/Fusion/_impl/Utility/Contextual.luau +91 -0
  589. package/runtime/Fusion/_impl/Utility/Safe.luau +23 -0
  590. package/runtime/Fusion/_impl/Utility/isSimilar.luau +29 -0
  591. package/runtime/Fusion/_impl/Utility/merge.luau +35 -0
  592. package/runtime/Fusion/_impl/Utility/nameOf.luau +35 -0
  593. package/runtime/Fusion/_impl/Utility/never.luau +14 -0
  594. package/runtime/Fusion/_impl/Utility/nicknames.luau +11 -0
  595. package/runtime/Fusion/_impl/Utility/xtypeof.luau +27 -0
  596. package/runtime/Fusion/_impl/init.luau +83 -0
  597. package/runtime/Fusion/init.luau +27 -0
  598. package/runtime/Iris/API.lua +2085 -0
  599. package/runtime/Iris/Internal.lua +895 -0
  600. package/runtime/Iris/LICENSE.txt +21 -0
  601. package/runtime/Iris/PubTypes.lua +43 -0
  602. package/runtime/Iris/Types.lua +660 -0
  603. package/runtime/Iris/WidgetTypes.lua +521 -0
  604. package/runtime/Iris/_impl/API.lua +2085 -0
  605. package/runtime/Iris/_impl/Internal.lua +895 -0
  606. package/runtime/Iris/_impl/LICENSE.txt +21 -0
  607. package/runtime/Iris/_impl/PubTypes.lua +43 -0
  608. package/runtime/Iris/_impl/Types.lua +660 -0
  609. package/runtime/Iris/_impl/WidgetTypes.lua +521 -0
  610. package/runtime/Iris/_impl/config.lua +305 -0
  611. package/runtime/Iris/_impl/init.lua +696 -0
  612. package/runtime/Iris/_impl/widgets/Button.lua +90 -0
  613. package/runtime/Iris/_impl/widgets/Checkbox.lua +115 -0
  614. package/runtime/Iris/_impl/widgets/Combo.lua +492 -0
  615. package/runtime/Iris/_impl/widgets/Format.lua +140 -0
  616. package/runtime/Iris/_impl/widgets/Image.lua +155 -0
  617. package/runtime/Iris/_impl/widgets/Input.lua +1232 -0
  618. package/runtime/Iris/_impl/widgets/Menu.lua +599 -0
  619. package/runtime/Iris/_impl/widgets/Plot.lua +639 -0
  620. package/runtime/Iris/_impl/widgets/RadioButton.lua +126 -0
  621. package/runtime/Iris/_impl/widgets/Root.lua +143 -0
  622. package/runtime/Iris/_impl/widgets/Tab.lua +333 -0
  623. package/runtime/Iris/_impl/widgets/Table.lua +635 -0
  624. package/runtime/Iris/_impl/widgets/Text.lua +132 -0
  625. package/runtime/Iris/_impl/widgets/Tree.lua +287 -0
  626. package/runtime/Iris/_impl/widgets/Window.lua +1075 -0
  627. package/runtime/Iris/_impl/widgets/init.lua +447 -0
  628. package/runtime/Iris/config.lua +305 -0
  629. package/runtime/Iris/init.lua +696 -0
  630. package/runtime/Iris/init.luau +12 -0
  631. package/runtime/Iris/widgets/Button.lua +90 -0
  632. package/runtime/Iris/widgets/Checkbox.lua +115 -0
  633. package/runtime/Iris/widgets/Combo.lua +492 -0
  634. package/runtime/Iris/widgets/Format.lua +140 -0
  635. package/runtime/Iris/widgets/Image.lua +155 -0
  636. package/runtime/Iris/widgets/Input.lua +1232 -0
  637. package/runtime/Iris/widgets/Menu.lua +599 -0
  638. package/runtime/Iris/widgets/Plot.lua +639 -0
  639. package/runtime/Iris/widgets/RadioButton.lua +126 -0
  640. package/runtime/Iris/widgets/Root.lua +143 -0
  641. package/runtime/Iris/widgets/Tab.lua +333 -0
  642. package/runtime/Iris/widgets/Table.lua +635 -0
  643. package/runtime/Iris/widgets/Text.lua +132 -0
  644. package/runtime/Iris/widgets/Tree.lua +287 -0
  645. package/runtime/Iris/widgets/Window.lua +1075 -0
  646. package/runtime/Iris/widgets/init.lua +447 -0
  647. package/runtime/Janitor/FastDefer.luau +33 -0
  648. package/runtime/Janitor/LICENSE +21 -0
  649. package/runtime/Janitor/_impl/FastDefer.luau +33 -0
  650. package/runtime/Janitor/_impl/LICENSE +21 -0
  651. package/runtime/Janitor/_impl/init.luau +999 -0
  652. package/runtime/Janitor/init.luau +45 -0
  653. package/runtime/MathUtils/init.luau +100 -0
  654. package/runtime/Module3D/LICENSE +21 -0
  655. package/runtime/Module3D/_impl/LICENSE +21 -0
  656. package/runtime/Module3D/_impl/init.luau +269 -0
  657. package/runtime/Module3D/init.luau +14 -0
  658. package/runtime/Net/init.luau +125 -0
  659. package/runtime/Net/src/codec.luau +153 -0
  660. package/runtime/Occlude/init.luau +54 -0
  661. package/runtime/Promise/LICENSE +21 -0
  662. package/runtime/Promise/_impl/LICENSE +21 -0
  663. package/runtime/Promise/_impl/init.lua +1991 -0
  664. package/runtime/Promise/init.lua +1990 -0
  665. package/runtime/Promise/init.luau +13 -0
  666. package/runtime/Promise/types.luau +46 -0
  667. package/runtime/SOURCES.md +22 -0
  668. package/runtime/Spring/LICENSE +201 -0
  669. package/runtime/Spring/_impl/LICENSE +201 -0
  670. package/runtime/Spring/_impl/init.luau +111 -0
  671. package/runtime/Spring/init.luau +24 -0
  672. package/runtime/StateMachine/Classes/State.lua +375 -0
  673. package/runtime/StateMachine/Classes/Transition.lua +336 -0
  674. package/runtime/StateMachine/Functions/deepCopy.lua +19 -0
  675. package/runtime/StateMachine/Functions/mergeTables.lua +22 -0
  676. package/runtime/StateMachine/LICENSE +19 -0
  677. package/runtime/StateMachine/Vendor/Signal.lua +386 -0
  678. package/runtime/StateMachine/Vendor/Trove.lua +188 -0
  679. package/runtime/StateMachine/_impl/Classes/State.lua +375 -0
  680. package/runtime/StateMachine/_impl/Classes/Transition.lua +336 -0
  681. package/runtime/StateMachine/_impl/Functions/deepCopy.lua +19 -0
  682. package/runtime/StateMachine/_impl/Functions/mergeTables.lua +22 -0
  683. package/runtime/StateMachine/_impl/LICENSE +19 -0
  684. package/runtime/StateMachine/_impl/Vendor/Signal.lua +386 -0
  685. package/runtime/StateMachine/_impl/Vendor/Trove.lua +188 -0
  686. package/runtime/StateMachine/_impl/init.lua +595 -0
  687. package/runtime/StateMachine/init.lua +595 -0
  688. package/runtime/StateMachine/init.luau +10 -0
  689. package/runtime/StickyBillboard/init.luau +167 -0
  690. package/runtime/TopbarPlus/Attribute.lua +35 -0
  691. package/runtime/TopbarPlus/Elements/Caption.lua +316 -0
  692. package/runtime/TopbarPlus/Elements/Container.lua +215 -0
  693. package/runtime/TopbarPlus/Elements/Dropdown.lua +315 -0
  694. package/runtime/TopbarPlus/Elements/Indicator.lua +91 -0
  695. package/runtime/TopbarPlus/Elements/Menu.lua +180 -0
  696. package/runtime/TopbarPlus/Elements/Notice.lua +113 -0
  697. package/runtime/TopbarPlus/Elements/Selection.lua +49 -0
  698. package/runtime/TopbarPlus/Elements/Widget.lua +437 -0
  699. package/runtime/TopbarPlus/Features/Gamepad.lua +201 -0
  700. package/runtime/TopbarPlus/Features/Overflow.lua +360 -0
  701. package/runtime/TopbarPlus/Features/Themes/Classic.lua +27 -0
  702. package/runtime/TopbarPlus/Features/Themes/Default.lua +75 -0
  703. package/runtime/TopbarPlus/Features/Themes/init.lua +353 -0
  704. package/runtime/TopbarPlus/LICENSE +381 -0
  705. package/runtime/TopbarPlus/Packages/GoodSignal.lua +182 -0
  706. package/runtime/TopbarPlus/Packages/Janitor.lua +322 -0
  707. package/runtime/TopbarPlus/Reference.lua +30 -0
  708. package/runtime/TopbarPlus/Types.lua +477 -0
  709. package/runtime/TopbarPlus/Utility.lua +462 -0
  710. package/runtime/TopbarPlus/VERSION.lua +51 -0
  711. package/runtime/TopbarPlus/_impl/Attribute.lua +35 -0
  712. package/runtime/TopbarPlus/_impl/Elements/Caption.lua +316 -0
  713. package/runtime/TopbarPlus/_impl/Elements/Container.lua +215 -0
  714. package/runtime/TopbarPlus/_impl/Elements/Dropdown.lua +315 -0
  715. package/runtime/TopbarPlus/_impl/Elements/Indicator.lua +91 -0
  716. package/runtime/TopbarPlus/_impl/Elements/Menu.lua +180 -0
  717. package/runtime/TopbarPlus/_impl/Elements/Notice.lua +113 -0
  718. package/runtime/TopbarPlus/_impl/Elements/Selection.lua +49 -0
  719. package/runtime/TopbarPlus/_impl/Elements/Widget.lua +437 -0
  720. package/runtime/TopbarPlus/_impl/Features/Gamepad.lua +201 -0
  721. package/runtime/TopbarPlus/_impl/Features/Overflow.lua +360 -0
  722. package/runtime/TopbarPlus/_impl/Features/Themes/Classic.lua +27 -0
  723. package/runtime/TopbarPlus/_impl/Features/Themes/Default.lua +75 -0
  724. package/runtime/TopbarPlus/_impl/Features/Themes/init.lua +353 -0
  725. package/runtime/TopbarPlus/_impl/LICENSE +381 -0
  726. package/runtime/TopbarPlus/_impl/Packages/GoodSignal.lua +182 -0
  727. package/runtime/TopbarPlus/_impl/Packages/Janitor.lua +322 -0
  728. package/runtime/TopbarPlus/_impl/Reference.lua +30 -0
  729. package/runtime/TopbarPlus/_impl/Types.lua +477 -0
  730. package/runtime/TopbarPlus/_impl/Utility.lua +462 -0
  731. package/runtime/TopbarPlus/_impl/VERSION.lua +51 -0
  732. package/runtime/TopbarPlus/_impl/init.lua +1249 -0
  733. package/runtime/TopbarPlus/init.lua +1249 -0
  734. package/runtime/TopbarPlus/init.luau +8 -0
  735. package/runtime/Twinkle/init.luau +157 -0
  736. package/runtime/VfxUtil/init.luau +164 -0
  737. package/src/api.generated.js +3675 -0
  738. package/src/api.js +57 -0
  739. package/src/architecture.js +393 -0
  740. package/src/cli.js +192 -0
  741. package/src/compile.js +40 -0
  742. package/src/emit.js +213 -0
  743. package/src/lex.js +149 -0
  744. package/src/libs.js +355 -0
  745. package/src/parse.js +421 -0
  746. package/src/preprocess.js +80 -0
  747. package/src/understand.js +453 -0
  748. package/templates/game/.clangd +5 -0
  749. package/templates/game/.vscode/c_cpp_properties.json +23 -0
  750. package/templates/game/.vscode/settings.json +12 -0
  751. package/templates/game/Packages/.gitkeep +0 -0
  752. package/templates/game/cluaupp.config.json +6 -0
  753. package/templates/game/compile_flags.txt +3 -0
  754. package/templates/game/default.project.json +39 -0
  755. package/templates/game/package.json +9 -0
  756. package/templates/game/src/client/init.client.cpp +5 -0
  757. package/templates/game/src/server/leaderstats.server.cpp +28 -0
  758. package/templates/game/src/shared/config.cpp +5 -0
  759. package/templates/game/src/shared/config.h +3 -0
  760. package/templates/game/wally.toml +11 -0
@@ -0,0 +1,879 @@
1
+ -- Here be dragons
2
+
3
+ const DataStoreService = game:GetService("DataStoreService")
4
+ const RunService = game:GetService("RunService")
5
+ const TextService = game:GetService("TextService")
6
+
7
+ local dataStoreActive: boolean? = nil
8
+ local dataStore: GlobalDataStore? = nil
9
+ const dataStoreQueue: { thread } = {}
10
+
11
+ const CMDR_ESCAPE = "___!CMDR_ESCAPE!___"
12
+ const CMDR_QUOTE = "___!CMDR_QUOTE!___"
13
+ const CMDR_SQUOTE = "___!CMDR_SQUOTE!___"
14
+ const CMDR_NEW_LINE = "___!CMDR_NL!___"
15
+ const CMDR_DOLLAR = "___!CMDR_DOLLAR!___"
16
+
17
+ const OPERATORS = { "&&", "||", ";" }
18
+ const START_QUOTE_PATTERN = [=[^(['"])]=]
19
+ const END_QUOTE_PATTERN = [=[(['"])$]=]
20
+ const ESCAPED_QUOTE_PATTERN = [=[(\*)['"]$]=]
21
+
22
+ const CACHED_LABELS = setmetatable({}, { __mode = "k" })
23
+
24
+ if RunService:IsServer() then
25
+ task.spawn(function()
26
+ const success, result = pcall(function()
27
+ const targetStore = DataStoreService:GetDataStore("_package/eryn.io/Cmdr")
28
+ targetStore:GetAsync("test_key")
29
+ return targetStore
30
+ end)
31
+
32
+ dataStoreActive = success
33
+
34
+ if success then
35
+ dataStore = result
36
+ end
37
+
38
+ while #dataStoreQueue > 0 do
39
+ const nextThread = table.remove(dataStoreQueue, 1)
40
+
41
+ if nextThread then
42
+ coroutine.resume(nextThread)
43
+ end
44
+ end
45
+ end)
46
+ end
47
+
48
+ -- Converts instances into display names and keeps the original values.
49
+ const function transformInstanceSet(instances: { any }): ({ string }, { any })
50
+ const names: { string } = {}
51
+
52
+ for index = 1, #instances do
53
+ local object = instances[index]
54
+ names[index] = object.Name or tostring(object)
55
+ end
56
+
57
+ return names, instances
58
+ end
59
+
60
+ -- Converts a hexadecimal string into a UTF-8 character.
61
+ const function hexToChar(value: string): string
62
+ return utf8.char(tonumber(value, 16) :: number)
63
+ end
64
+
65
+ -- Replaces escaped control characters with temporary placeholders.
66
+ const function encodeControlChars(text: string): string
67
+ return (text:gsub("\\\\", CMDR_ESCAPE):gsub('\\"', CMDR_QUOTE):gsub("\\'", CMDR_SQUOTE):gsub("\\\n", CMDR_NEW_LINE))
68
+ end
69
+
70
+ -- Restores temporary placeholders back into control characters.
71
+ const function decodeControlChars(text: string): string
72
+ return (text:gsub(CMDR_ESCAPE, "\\"):gsub(CMDR_QUOTE, '"'):gsub(CMDR_SQUOTE, "'"):gsub(CMDR_NEW_LINE, "\n"))
73
+ end
74
+
75
+ -- Replaces escaped command variables with temporary placeholders.
76
+ const function encodeCommandEscape(text: string): string
77
+ return (text:gsub("\\%$", CMDR_DOLLAR))
78
+ end
79
+
80
+ -- Restores temporary command variable placeholders.
81
+ const function decodeCommandEscape(text: string): string
82
+ return (text:gsub(CMDR_DOLLAR, "$"))
83
+ end
84
+
85
+ -- Wraps a string in quotes while escaping special characters.
86
+ const function quoteString(value: string): string
87
+ return ("%q"):format(value)
88
+ end
89
+
90
+ --[=[
91
+ @class Util
92
+ Cmdr utilities module.
93
+ ]=]
94
+
95
+ --[=[
96
+ @within Util
97
+ @readonly
98
+ @private
99
+
100
+ @prop _deprecationWarnings { [string]: { Description: string, Suppressed: boolean, Emitted: boolean } }
101
+
102
+ A collection of deprecated methods and their warnings.
103
+ ]=]
104
+
105
+ const Util = {
106
+ _deprecationWarnings = {} :: { [string]: { Description: string, Suppressed: boolean, Emitted: boolean } },
107
+ }
108
+
109
+ function Util.GetDataStore(): GlobalDataStore?
110
+ if RunService:IsClient() then
111
+ return
112
+ end
113
+
114
+ if dataStoreActive == nil then
115
+ table.insert(dataStoreQueue, coroutine.running())
116
+ coroutine.yield()
117
+ end
118
+
119
+ return dataStore
120
+ end
121
+
122
+ --[=[
123
+ @within Util
124
+ Takes an array and flips its values into dictionary keys with value of true.
125
+ ]=]
126
+ function Util.MakeDictionary(array: { any }): { [any]: true }
127
+ const dictionary = {}
128
+
129
+ for index = 1, #array do
130
+ dictionary[array[index]] = true
131
+ end
132
+
133
+ return dictionary
134
+ end
135
+
136
+ --[=[
137
+ @within Util
138
+ Takes a dictionary and returns its keys.
139
+ ]=]
140
+ function Util.DictionaryKeys(dict: { [any]: any }): { any }
141
+ const keys = {}
142
+
143
+ for key in pairs(dict) do
144
+ table.insert(keys, key)
145
+ end
146
+
147
+ return keys
148
+ end
149
+
150
+ --[=[
151
+ @within Util
152
+
153
+ Returns a function that is a fuzzy finder for the specified set or container.
154
+
155
+ Can pass an array of strings, array of instances, array of EnumItems,
156
+ array of dictionaries with a Name key or an instance (in which case its children will be used).
157
+
158
+ Exact matches will be inserted in the front of the resulting array.
159
+ ]=]
160
+ function Util.MakeFuzzyFinder(setOrContainer: any): (string, boolean?, boolean?) -> any
161
+ const containerType = typeof(setOrContainer)
162
+ assert(
163
+ containerType == "table" or containerType == "Enum" or containerType == "Instance",
164
+ "[Cmdr] MakeFuzzyFinder only accepts a table, Enum, or Instance."
165
+ )
166
+
167
+ if containerType == "Enum" then
168
+ setOrContainer = setOrContainer:GetEnumItems()
169
+ elseif containerType == "Instance" then
170
+ setOrContainer = setOrContainer:GetChildren()
171
+ end
172
+
173
+ local names: { string }
174
+ local instances: { any }? = nil
175
+ if #setOrContainer == 0 then
176
+ names = {}
177
+ else
178
+ const first = setOrContainer[1]
179
+ const firstType = typeof(first)
180
+
181
+ if firstType == "string" then
182
+ names = setOrContainer
183
+ else
184
+ const firstNameType = if firstType == "table" or firstType == "Instance" then typeof(first.Name) else "nil"
185
+ assert(
186
+ firstType == "Instance"
187
+ or firstType == "EnumItem"
188
+ or (firstType == "table" and firstNameType == "string"),
189
+ "[Cmdr] MakeFuzzyFinder only accepts tables of instances or strings."
190
+ )
191
+ names, instances = transformInstanceSet(setOrContainer)
192
+ end
193
+ end
194
+
195
+ -- Searches the set (checking exact matches first)
196
+ return function(text: string, returnFirst: boolean?, matchStart: boolean?)
197
+ const resultsPriority = {}
198
+ const results = {}
199
+
200
+ for index, name in pairs(names) do
201
+ const value = if instances then instances[index] else name
202
+
203
+ if name:lower() == text:lower() then
204
+ if returnFirst then
205
+ return value
206
+ end
207
+
208
+ results[#results + 1] = value
209
+ resultsPriority[value] = 0
210
+ elseif matchStart then
211
+ if name:lower():sub(1, #text) == text:lower() then
212
+ results[#results + 1] = value
213
+ resultsPriority[value] = 1
214
+ end
215
+ else
216
+ const startingIndex = name:lower():find(text:lower(), 1, true)
217
+ if startingIndex then
218
+ results[#results + 1] = value
219
+ resultsPriority[value] = startingIndex
220
+ end
221
+ end
222
+ end
223
+
224
+ table.sort(results, function(a, b)
225
+ const aPriority = resultsPriority[a]
226
+ const bPriority = resultsPriority[b]
227
+
228
+ if aPriority ~= bPriority then
229
+ return aPriority < bPriority
230
+ end
231
+
232
+ const aString = if typeof(a) == "string"
233
+ then a
234
+ elseif typeof(a) == "Instance" then a.Name
235
+ elseif typeof(a) == "table" and typeof(a.Name) == "string" then a.Name
236
+ else ""
237
+ const bString = if typeof(b) == "string"
238
+ then b
239
+ elseif typeof(b) == "Instance" then b.Name
240
+ elseif typeof(b) == "table" and typeof(b.Name) == "string" then b.Name
241
+ else ""
242
+
243
+ return #aString < #bString
244
+ end)
245
+
246
+ if returnFirst then
247
+ return results[1]
248
+ end
249
+
250
+ return results
251
+ end
252
+ end
253
+
254
+ --[=[
255
+ @within Util
256
+
257
+ Takes an array of instances (or anything with a Name property) and maps them into an array of their names.
258
+ If no Name property is present, then tostring will be called instead.
259
+ ]=]
260
+ function Util.GetNames(instances: any): { string }
261
+ const names, _ = transformInstanceSet(instances)
262
+ return names
263
+ end
264
+
265
+ --[=[
266
+ @within Util
267
+ Splits a string using a simple separator (no quote parsing)
268
+ ]=]
269
+ function Util.SplitStringSimple(input: string, separator: string?): { string }
270
+ separator = separator or "%s"
271
+
272
+ const segments = {}
273
+ local index = 1
274
+ for string in input:gmatch(`([^{separator :: string}]+)`) do
275
+ segments[index] = string
276
+ index = index + 1
277
+ end
278
+
279
+ return segments
280
+ end
281
+
282
+ --[=[
283
+ @within Util
284
+ Parses escape sequences into their fully qualified characters
285
+ ]=]
286
+ function Util.ParseEscapeSequences(text: string): string
287
+ return text:gsub("\\(.)", {
288
+ t = "\t",
289
+ n = "\n",
290
+ })
291
+ :gsub("\\u(%x%x%x%x)", hexToChar)
292
+ :gsub("\\x(%x%x)", hexToChar)
293
+ end
294
+
295
+ --[=[
296
+ @within Util
297
+ Encodes escaped operators in a string, replacing them with their unicode representations.
298
+ ]=]
299
+ function Util.EncodeEscapedOperator(text: string, operator: string): string
300
+ const first = operator:sub(1, 1)
301
+ const escapedOp = operator:gsub("(.)", "%%%1")
302
+ const escapedFirst = `%{first}`
303
+
304
+ return text:gsub(`({escapedFirst}+)({escapedOp})`, function(esc, op)
305
+ return (`{esc:sub(1, #esc - 1)}{op}`):gsub(".", function(char)
306
+ return `\\u{("%04x"):format(char:byte())}`
307
+ end)
308
+ end)
309
+ end
310
+
311
+ --[=[
312
+ @within Util
313
+ Encodes all escaped operators in a string, replacing them with their unicode representations.
314
+ ]=]
315
+ function Util.EncodeEscapedOperators(text: string): string
316
+ for _, operator in ipairs(OPERATORS) do
317
+ text = Util.EncodeEscapedOperator(text, operator)
318
+ end
319
+
320
+ return text
321
+ end
322
+
323
+ --[[
324
+ FIXME: Listable types containing spaces are currently handled incorrectly.
325
+ The issue spans multiple systems, including Window, Dispatcher, and Argument.
326
+ Fixing this properly would require a major overhaul of how Cmdr tokenizes,
327
+ parses, and preserves command input strings.
328
+
329
+ Good luck, future reader.
330
+
331
+ Hours wasted attempting to fix this:
332
+ 3
333
+ ]]
334
+
335
+ --[=[
336
+ @within Util
337
+ Splits a string by space but taking into account quoted sequences which will be treated as a single argument.
338
+ ]=]
339
+ function Util.SplitString(text: string, max: number?): { string }
340
+ text = encodeControlChars(text)
341
+ max = max or math.huge
342
+
343
+ const segments = {}
344
+ local buffer = nil
345
+ local quoteChar = nil
346
+
347
+ const function addSegment(segment: string)
348
+ if #segments > max then
349
+ segments[max] ..= ` {segment}`
350
+ else
351
+ segments[#segments + 1] = segment
352
+ end
353
+ end
354
+
355
+ for segment in text:gmatch("[^ ]+") do
356
+ segment = Util.ParseEscapeSequences(segment)
357
+
358
+ const startsWithQuote = segment:match(START_QUOTE_PATTERN)
359
+ const endsWithQuote = segment:match(END_QUOTE_PATTERN)
360
+ const escapedQuotes = segment:match(ESCAPED_QUOTE_PATTERN)
361
+
362
+ if startsWithQuote and not quoteChar and not endsWithQuote then
363
+ buffer = segment
364
+ quoteChar = startsWithQuote
365
+ elseif buffer and endsWithQuote == quoteChar and #escapedQuotes % 2 == 0 then
366
+ buffer ..= ` {segment}`
367
+
368
+ addSegment(decodeControlChars(buffer:gsub(START_QUOTE_PATTERN, ""):gsub(END_QUOTE_PATTERN, "")))
369
+
370
+ buffer = nil
371
+ quoteChar = nil
372
+ elseif buffer then
373
+ buffer ..= ` {segment}`
374
+ else
375
+ addSegment(decodeControlChars(segment:gsub(START_QUOTE_PATTERN, ""):gsub(END_QUOTE_PATTERN, "")))
376
+ end
377
+ end
378
+
379
+ if buffer then
380
+ addSegment(decodeControlChars(buffer))
381
+ end
382
+
383
+ return segments
384
+ end
385
+
386
+ --[=[
387
+ @within Util
388
+ Takes an array of arguments and a max value. Any indicies past the max value will be appended to the last valid argument.
389
+ ]=]
390
+ function Util.MashExcessArguments(arguments: { string }, max: number): { string }
391
+ const results = {}
392
+
393
+ for argumentIndex = 1, #arguments do
394
+ if argumentIndex > max then
395
+ results[max] = (results[max] or "") .. ` {arguments[argumentIndex]}`
396
+ else
397
+ results[argumentIndex] = arguments[argumentIndex]
398
+ end
399
+ end
400
+
401
+ return results
402
+ end
403
+
404
+ --[=[
405
+ @within Util
406
+ Trims whitespace from both sides of a string.
407
+ ]=]
408
+ function Util.TrimString(str: string): string
409
+ const _, from = str:find("^%s*")
410
+ return if from == #str then "" else str:match(".*%S", from + 1) :: string
411
+ end
412
+
413
+ --[=[
414
+ @within Util
415
+ Returns the text bounds size based on given text, label (from which properties will be pulled), and optional Vector2 container size.
416
+ ]=]
417
+ function Util.GetTextSize(text: string, label: TextLabel, size: Vector2?): Vector2
418
+ size = size or Vector2.new(label.AbsoluteSize.X, 0)
419
+
420
+ if label.Font == Enum.Font.Unknown then
421
+ const textBoundsParams = CACHED_LABELS[label] or Instance.new("GetTextBoundsParams")
422
+ textBoundsParams.Text = text
423
+ textBoundsParams.Font = label.FontFace
424
+ textBoundsParams.Size = label.TextSize
425
+ textBoundsParams.Width = (size :: Vector2).X
426
+ textBoundsParams.RichText = label.RichText
427
+ CACHED_LABELS[label] = textBoundsParams
428
+
429
+ const success, bounds = pcall(TextService.GetTextBoundsAsync, TextService, textBoundsParams)
430
+ if not success or not bounds then
431
+ warn(`[Cmdr] Failed to get TextSize for Font Face {label.FontFace.Family}: {bounds}`)
432
+ return Vector2.new(0, 0)
433
+ end
434
+
435
+ return bounds
436
+ end
437
+
438
+ return TextService:GetTextSize(text, label.TextSize, label.Font, size)
439
+ end
440
+
441
+ --[=[
442
+ @within Util
443
+ @return TypeDefinition
444
+
445
+ Makes an Enum type.
446
+ ]=]
447
+ function Util.MakeEnumType(name: string, values: any): { [string]: any }
448
+ const findValue = Util.MakeFuzzyFinder(values)
449
+ return {
450
+ Validate = function(text)
451
+ return findValue(text, true) ~= nil, `Value {("%q"):format(text)} is not a valid {name}.`
452
+ end,
453
+
454
+ Autocomplete = function(text)
455
+ local list = findValue(text)
456
+ return type(list[1]) ~= "string" and Util.GetNames(list) or list
457
+ end,
458
+
459
+ Parse = function(text)
460
+ return findValue(text, true)
461
+ end,
462
+ }
463
+ end
464
+
465
+ --[=[
466
+ @within Util
467
+ Parses a prefixed union type argument (such as %Team)
468
+ ]=]
469
+ function Util.ParsePrefixedUnionType(typeValue: string, rawValue: string): (string?, string?, string?)
470
+ const split = Util.SplitStringSimple(typeValue)
471
+
472
+ const types = {}
473
+ for splitIndex = 1, #split, 2 do
474
+ types[#types + 1] = {
475
+ prefix = split[splitIndex - 1] or "",
476
+ type = split[splitIndex],
477
+ }
478
+ end
479
+
480
+ table.sort(types, function(a, b)
481
+ return #a.prefix > #b.prefix
482
+ end)
483
+
484
+ for typeIndex = 1, #types do
485
+ const typeInfo = types[typeIndex]
486
+
487
+ if rawValue:sub(1, #typeInfo.prefix) == typeInfo.prefix then
488
+ return typeInfo.type, rawValue:sub(#typeInfo.prefix + 1), typeInfo.prefix
489
+ end
490
+ end
491
+
492
+ return
493
+ end
494
+
495
+ --[=[
496
+ @within Util
497
+
498
+ @param typeDefinition TypeDefinition
499
+ @param override table
500
+ @return TypeDefinition
501
+
502
+ Creates a listable type from a singular type
503
+ ]=]
504
+ function Util.MakeListableType(typeDefinition: any, override: { [string]: any }?): { [string]: any }
505
+ const listableType: { [string]: any } = {
506
+ Listable = true,
507
+ Transform = typeDefinition.Transform,
508
+ Validate = typeDefinition.Validate,
509
+ ValidateOnce = typeDefinition.ValidateOnce,
510
+ Autocomplete = typeDefinition.Autocomplete,
511
+ Default = typeDefinition.Default,
512
+ ArgumentOperatorAliases = typeDefinition.ArgumentOperatorAliases,
513
+ Parse = function(...)
514
+ return { typeDefinition.Parse(...) }
515
+ end,
516
+ }
517
+
518
+ if override then
519
+ for key, value in pairs(override) do
520
+ listableType[key] = value
521
+ end
522
+ end
523
+
524
+ return listableType
525
+ end
526
+
527
+ --[=[
528
+ @within Util
529
+ @param dispatcher Dispatcher
530
+
531
+ Runs a command string, chaining commands with && and replacing || with the previous command's output.
532
+ ]=]
533
+ function Util.RunCommandString(dispatcher: any, commandString: string): string?
534
+ commandString = Util.ParseEscapeSequences(commandString)
535
+ commandString = Util.EncodeEscapedOperators(commandString)
536
+
537
+ const commands = commandString:split("&&")
538
+ local output = ""
539
+ for commandIndex, command in ipairs(commands) do
540
+ const outputEncoded = output:gsub("%$", "\\x24"):gsub("%%", "%%%%")
541
+ command = command:gsub("||", output:find("%s") and quoteString(outputEncoded) or outputEncoded)
542
+
543
+ output = tostring(dispatcher:EvaluateAndRun((Util.RunEmbeddedCommands(dispatcher, command))))
544
+
545
+ if commandIndex == #commands then
546
+ return output
547
+ end
548
+ end
549
+
550
+ return
551
+ end
552
+
553
+ --[=[
554
+ @within Util
555
+ @param dispatcher Dispatcher
556
+
557
+ Runs embedded commands and replaces them
558
+ ]=]
559
+ function Util.RunEmbeddedCommands(dispatcher: any, str: string): string
560
+ str = encodeCommandEscape(str)
561
+
562
+ const results = {}
563
+ -- We need to do this because you can't yield in the gsub function
564
+ for text in str:gmatch("$(%b{})") do
565
+ local doQuotes = true
566
+ local commandString = text:sub(2, #text - 1)
567
+
568
+ if commandString:match("^{.+}$") then -- Allow double curly for literal replacement
569
+ doQuotes = false
570
+ commandString = commandString:sub(2, #commandString - 1)
571
+ end
572
+
573
+ results[text] = Util.RunCommandString(dispatcher, commandString)
574
+
575
+ if doQuotes then
576
+ if results[text]:find("%s") or results[text] == "" then
577
+ results[text] = quoteString(results[text])
578
+ end
579
+ end
580
+ end
581
+
582
+ const escaped = (str:gsub("%$(%b{})", results))
583
+ return decodeCommandEscape(escaped)
584
+ end
585
+
586
+ --[=[
587
+ @within Util
588
+ Replaces arguments in the format $1, $2, $something with whatever the given function returns for it.
589
+ ]=]
590
+ function Util.SubstituteArgs(str: string, replace: any): string
591
+ str = encodeCommandEscape(str)
592
+
593
+ if type(replace) == "table" then
594
+ for index = 1, #replace do
595
+ const key = tostring(index)
596
+ replace[key] = replace[index]
597
+
598
+ if replace[key]:find("%s") then
599
+ replace[key] = quoteString(replace[key])
600
+ end
601
+ end
602
+ end
603
+
604
+ const escaped = str:gsub("%$(%d+)%b{}", "$%1"):gsub("%$(%w+)", replace)
605
+ return decodeCommandEscape(escaped)
606
+ end
607
+
608
+ --[=[
609
+ @within Util
610
+ @return CommandDefinition
611
+
612
+ Creates an alias command, should only be used on the client.
613
+ ]=]
614
+ function Util.MakeAliasCommand(name: string, commandString: string): { [string]: any }
615
+ const commandName, commandDescription = unpack(name:split("|"))
616
+ const args, seenArgs = {}, {}
617
+
618
+ commandString = Util.EncodeEscapedOperators(commandString)
619
+ for arg in commandString:gmatch("$(%d+)") do
620
+ if seenArgs[arg] == nil then
621
+ seenArgs[arg] = true
622
+ local options = commandString:match(`${arg}(%b\{})`)
623
+
624
+ local argOptional, argType, argName, argDescription
625
+ if options then
626
+ options = options:sub(2, #options - 1) -- remove braces
627
+ argType, argName, argDescription = unpack(options:split("|"))
628
+ end
629
+
630
+ argOptional = argType and not not argType:match("%?$")
631
+ argType = if argType then argType:match("^%w+") else "string"
632
+ argName = argName or `Argument {arg}`
633
+ argDescription = argDescription or ""
634
+
635
+ table.insert(args, {
636
+ Type = argType,
637
+ Name = argName,
638
+ Description = argDescription,
639
+ Optional = argOptional,
640
+ })
641
+ end
642
+ end
643
+
644
+ return {
645
+ Name = commandName,
646
+ Description = `<Alias> {commandDescription or commandString}`,
647
+ Group = "UserAlias",
648
+ Args = args,
649
+ ClientRun = function(context: any)
650
+ return Util.RunCommandString(context.Dispatcher, Util.SubstituteArgs(commandString, context.RawArguments))
651
+ end,
652
+ }
653
+ end
654
+
655
+ --[=[
656
+ @within Util
657
+
658
+ @param options { Transform: function?, Parse: function?, Constructor: function?, TransformEach: function?, ValidateEach: function?, Prefixes: {string}?, Length: number? }
659
+ @return ArgumentDefinition
660
+
661
+ Makes a type that contains a sequence, e.g. Vector3 or Color3
662
+ For options, one of Constructor or Parse is required
663
+ ]=]
664
+ function Util.MakeSequenceType(options: {
665
+ Transform: ((string) -> any)?,
666
+ Parse: (({ string }) -> any)?,
667
+ Constructor: ((...any) -> any)?,
668
+ TransformEach: ((string) -> any)?,
669
+ ValidateEach: ((any, number) -> (boolean, string?))?,
670
+ Prefixes: { string }?,
671
+ Length: number?,
672
+ }): { [string]: any }
673
+ assert(
674
+ options.Parse ~= nil or options.Constructor ~= nil,
675
+ "[Cmdr] MakeSequenceType: Must provide one of: Constructor, Parse"
676
+ )
677
+ options.TransformEach = options.TransformEach or function(value: string): string
678
+ return value
679
+ end
680
+
681
+ options.ValidateEach = options.ValidateEach or function()
682
+ return true
683
+ end
684
+
685
+ return {
686
+ Prefixes = options.Prefixes,
687
+
688
+ Transform = options.Transform or function(text: string)
689
+ const elements = Util.SplitPrioritizedDelimeter(text, { ",", "%s" }) or {}
690
+ return Util.Map(elements, function(value: string)
691
+ return (options :: any).TransformEach(value)
692
+ end)
693
+ end,
694
+
695
+ Validate = function(components)
696
+ if options.Length and #components > options.Length then
697
+ return false, `Maximum of {options.Length} values allowed in sequence`
698
+ end
699
+
700
+ for componentIndex = 1, options.Length or #components do
701
+ const valid, reason = (options :: any).ValidateEach(components[componentIndex], componentIndex)
702
+ if not valid then
703
+ return false, reason
704
+ end
705
+ end
706
+
707
+ return true
708
+ end,
709
+
710
+ Parse = options.Parse or function(components)
711
+ return options.Constructor(unpack(components))
712
+ end,
713
+ }
714
+ end
715
+
716
+ --[=[
717
+ @within Util
718
+ Splits a string by a single delimeter chosen from the given set. The first matching delimeter from the set becomes the split character.
719
+ ]=]
720
+ function Util.SplitPrioritizedDelimeter(text: string, delimiters: { string }): { string }?
721
+ for delimiterIndex, delimiter in ipairs(delimiters) do
722
+ if text:find(delimiter) or delimiterIndex == #delimiters then
723
+ return Util.SplitStringSimple(text, delimiter)
724
+ end
725
+ end
726
+
727
+ return
728
+ end
729
+
730
+ --[=[
731
+ @within Util
732
+ Maps values of an array through a callback and returns an array of mapped values.
733
+ ]=]
734
+ function Util.Map(array: { any }, callback: (any, number) -> any): { any }
735
+ const results: { any } = {}
736
+ for index, value in ipairs(array) do
737
+ results[index] = callback(value, index)
738
+ end
739
+
740
+ return results
741
+ end
742
+
743
+ --[=[
744
+ @within Util
745
+ Maps arguments #2-n through callback and returns values as tuple.
746
+ ]=]
747
+ function Util.Each(callback: (any) -> any, ...: any): ...any
748
+ const results: { any } = {}
749
+ for index, value in ipairs({ ... }) do
750
+ results[index] = callback(value)
751
+ end
752
+
753
+ return unpack(results)
754
+ end
755
+
756
+ --[=[
757
+ @within Util
758
+ Emulates tabstops with spaces.
759
+ ]=]
760
+ function Util.EmulateTabstops(text: string, tabWidth: number): string
761
+ local currentColumn = 0
762
+ const result = table.create(#text)
763
+ for index = 1, #text do
764
+ const character = text:sub(index, index)
765
+
766
+ if character == "\t" then
767
+ const spaces = tabWidth - currentColumn % tabWidth
768
+ table.insert(result, (" "):rep(spaces))
769
+ currentColumn += spaces
770
+ else
771
+ table.insert(result, character)
772
+
773
+ if character == "\n" then
774
+ currentColumn = 0
775
+ elseif character ~= "\r" then
776
+ currentColumn += 1
777
+ end
778
+ end
779
+ end
780
+
781
+ return table.concat(result)
782
+ end
783
+
784
+ --[=[
785
+ @within Util
786
+ @return function -- A function that locks the mutex and returns a function to unlock it.
787
+
788
+ Creates a mutex for synchronizing coroutines.
789
+ ]=]
790
+ function Util.Mutex(): () -> ()
791
+ const queue: { thread } = {}
792
+ local locked = false
793
+
794
+ return function()
795
+ if locked then
796
+ table.insert(queue, coroutine.running())
797
+ coroutine.yield()
798
+ else
799
+ locked = true
800
+ end
801
+
802
+ return function()
803
+ if #queue > 0 then
804
+ const nextThread = table.remove(queue, 1)
805
+ coroutine.resume(nextThread)
806
+ else
807
+ locked = false
808
+ end
809
+ end
810
+ end
811
+ end
812
+
813
+ --[=[
814
+ @within Util
815
+ @private
816
+
817
+ Registers a deprecation warning for a method.
818
+ ]=]
819
+ function Util:_registerDeprecationWarning(name: string, description: string)
820
+ assert(type(name) == "string" and #name > 0, "[Cmdr] Deprecation warning name must be a string.")
821
+ assert(
822
+ type(description) == "string" and #description > 0,
823
+ "[Cmdr] Deprecation warning description must be a string."
824
+ )
825
+ assert(not self._deprecationWarnings[name], `[Cmdr] Deprecation warning {name} is already registered.`)
826
+
827
+ self._deprecationWarnings[name] = {
828
+ Description = description,
829
+ Suppressed = false,
830
+ Emitted = false,
831
+ }
832
+ end
833
+
834
+ --[=[
835
+ @within Util
836
+ @private
837
+
838
+ Emits a deprecation warning for a method if it has been called. This should be called at the start of a deprecated method.
839
+ ]=]
840
+ function Util:_emitDeprecationWarning(name: string)
841
+ const warningInfo = self._deprecationWarnings[name]
842
+ assert(warningInfo, `[Cmdr] Unknown deprecation warning {name}.`)
843
+
844
+ if not warningInfo.Suppressed and not warningInfo.Emitted then
845
+ warn(debug.traceback(`[Cmdr] [DeprecationWarning::{name}] {warningInfo.Description}`, 2))
846
+ warningInfo.Emitted = true
847
+ end
848
+ end
849
+
850
+ --[=[
851
+ @within Util
852
+ Suppresses a deprecation warning for a method.
853
+ ]=]
854
+ function Util:SuppressDeprecationWarning(names: string | { string })
855
+ assert(
856
+ type(names) == "string" or type(names) == "table",
857
+ "[Cmdr] Deprecation warning name(s) must be a string or an array of strings."
858
+ )
859
+ assert(#names > 0, "[Cmdr] Deprecation warning name(s) must not be empty.")
860
+
861
+ if type(names) == "string" then
862
+ names = { names }
863
+ end
864
+
865
+ for _, name in pairs(names) do
866
+ assert(type(name) == "string", "[Cmdr] Deprecation warning names must be strings.")
867
+ assert(self._deprecationWarnings[name], `[Cmdr] Unknown deprecation warning {name}.`)
868
+ self._deprecationWarnings[name].Suppressed = true
869
+ end
870
+ end
871
+
872
+ Util:_registerDeprecationWarning(
873
+ "ProxyCalls",
874
+ `Method calls should be performed against their respective modules rather than the {if RunService:IsServer()
875
+ then "Cmdr"
876
+ else "CmdrClient"} object. Proxy calls are deprecated, they exist for backwards compatibility and should not be used for new work.`
877
+ )
878
+
879
+ return Util