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.
- package/CHANGELOG.md +20 -0
- package/LICENSE +21 -0
- package/README.md +119 -0
- package/bin/cluau.js +4 -0
- package/bin/cluaupp.js +4 -0
- package/docs/README.md +20 -0
- package/docs/architecture.md +110 -0
- package/docs/cli.md +69 -0
- package/docs/comparison.md +37 -0
- package/docs/config.md +31 -0
- package/docs/cpp-advanced.md +71 -0
- package/docs/cpp-const.md +52 -0
- package/docs/cpp-organization.md +61 -0
- package/docs/cpp-safety.md +58 -0
- package/docs/cpp-types.md +66 -0
- package/docs/getting-started.md +169 -0
- package/docs/intro.md +37 -0
- package/docs/libraries.md +77 -0
- package/docs/roblox-api.md +81 -0
- package/docs/syntax.md +131 -0
- package/include/cluaupp/datatypes.hpp +581 -0
- package/include/cluaupp/generated/enums.hpp +4920 -0
- package/include/cluaupp/generated/instances.hpp +12489 -0
- package/include/cluaupp/libs/chrono.hpp +26 -0
- package/include/cluaupp/libs/cmdr.hpp +16 -0
- package/include/cluaupp/libs/dataservice.hpp +141 -0
- package/include/cluaupp/libs/display.hpp +13 -0
- package/include/cluaupp/libs/ezvisual.hpp +18 -0
- package/include/cluaupp/libs/formatnumber.hpp +15 -0
- package/include/cluaupp/libs/fusion.hpp +41 -0
- package/include/cluaupp/libs/iris.hpp +40 -0
- package/include/cluaupp/libs/janitor.hpp +35 -0
- package/include/cluaupp/libs/math.hpp +14 -0
- package/include/cluaupp/libs/module3d.hpp +25 -0
- package/include/cluaupp/libs/net.hpp +42 -0
- package/include/cluaupp/libs/promise.hpp +30 -0
- package/include/cluaupp/libs/spring.hpp +18 -0
- package/include/cluaupp/libs/statemachine.hpp +19 -0
- package/include/cluaupp/libs/stickybillboard.hpp +14 -0
- package/include/cluaupp/libs/topbarplus.hpp +29 -0
- package/include/cluaupp/libs/twinkle.hpp +15 -0
- package/include/cluaupp/libs/vfx.hpp +13 -0
- package/include/cluaupp/libs.hpp +25 -0
- package/include/cluaupp/roblox.hpp +28 -0
- package/package.json +65 -0
- package/runtime/ArrayIndexer/init.luau +144 -0
- package/runtime/Chrono/Client/ClientClock.luau +202 -0
- package/runtime/Chrono/Client/InterpolationBuffer.luau +74 -0
- package/runtime/Chrono/Client/ModelResolver.luau +53 -0
- package/runtime/Chrono/Client/Player.luau +113 -0
- package/runtime/Chrono/Client/Receiver.luau +395 -0
- package/runtime/Chrono/Client/Replicate.luau +333 -0
- package/runtime/Chrono/Client/Sender.luau +205 -0
- package/runtime/Chrono/LICENSE +21 -0
- package/runtime/Chrono/Server/EntityGrid.luau +299 -0
- package/runtime/Chrono/Server/Player.luau +141 -0
- package/runtime/Chrono/Server/Receiver.luau +287 -0
- package/runtime/Chrono/Server/Replicate.luau +415 -0
- package/runtime/Chrono/Server/Sender.luau +306 -0
- package/runtime/Chrono/Server/ServerClock.luau +50 -0
- package/runtime/Chrono/Shared/ApplyMounts.luau +137 -0
- package/runtime/Chrono/Shared/Bin.luau +31 -0
- package/runtime/Chrono/Shared/ClockUnwrap.luau +70 -0
- package/runtime/Chrono/Shared/Config.luau +264 -0
- package/runtime/Chrono/Shared/Entity.luau +1016 -0
- package/runtime/Chrono/Shared/Events.luau +39 -0
- package/runtime/Chrono/Shared/Holder.luau +210 -0
- package/runtime/Chrono/Shared/InterpolationMath.luau +51 -0
- package/runtime/Chrono/Shared/ModelHelper.luau +122 -0
- package/runtime/Chrono/Shared/Remotes/ClientClockRelay.model.json +3 -0
- package/runtime/Chrono/Shared/Remotes/ClientHeartbeat.model.json +3 -0
- package/runtime/Chrono/Shared/Remotes/ClientLoaded.model.json +3 -0
- package/runtime/Chrono/Shared/Remotes/Death.model.json +3 -0
- package/runtime/Chrono/Shared/Remotes/Heartbeat.model.json +3 -0
- package/runtime/Chrono/Shared/Remotes/Replicate.model.json +3 -0
- package/runtime/Chrono/Shared/Remotes/ReplicateFull.model.json +3 -0
- package/runtime/Chrono/Shared/Remotes/SafeReplicate.model.json +3 -0
- package/runtime/Chrono/Shared/ReplicationRules.luau +122 -0
- package/runtime/Chrono/Shared/Signal.luau +219 -0
- package/runtime/Chrono/Shared/Snapshots.luau +218 -0
- package/runtime/Chrono/Shared/Stats.luau +204 -0
- package/runtime/Chrono/Shared/Ticker.luau +112 -0
- package/runtime/Chrono/Shared/Types.luau +247 -0
- package/runtime/Chrono/Shared/Warn.luau +33 -0
- package/runtime/Chrono/Shared/_CUSTOM_MODEL_REP/init.model.json +3 -0
- package/runtime/Chrono/_impl/Client/ClientClock.luau +202 -0
- package/runtime/Chrono/_impl/Client/InterpolationBuffer.luau +74 -0
- package/runtime/Chrono/_impl/Client/ModelResolver.luau +53 -0
- package/runtime/Chrono/_impl/Client/Player.luau +113 -0
- package/runtime/Chrono/_impl/Client/Receiver.luau +395 -0
- package/runtime/Chrono/_impl/Client/Replicate.luau +333 -0
- package/runtime/Chrono/_impl/Client/Sender.luau +205 -0
- package/runtime/Chrono/_impl/LICENSE +21 -0
- package/runtime/Chrono/_impl/Server/EntityGrid.luau +299 -0
- package/runtime/Chrono/_impl/Server/Player.luau +141 -0
- package/runtime/Chrono/_impl/Server/Receiver.luau +287 -0
- package/runtime/Chrono/_impl/Server/Replicate.luau +415 -0
- package/runtime/Chrono/_impl/Server/Sender.luau +306 -0
- package/runtime/Chrono/_impl/Server/ServerClock.luau +50 -0
- package/runtime/Chrono/_impl/Shared/ApplyMounts.luau +137 -0
- package/runtime/Chrono/_impl/Shared/Bin.luau +31 -0
- package/runtime/Chrono/_impl/Shared/ClockUnwrap.luau +70 -0
- package/runtime/Chrono/_impl/Shared/Config.luau +264 -0
- package/runtime/Chrono/_impl/Shared/Entity.luau +1016 -0
- package/runtime/Chrono/_impl/Shared/Events.luau +39 -0
- package/runtime/Chrono/_impl/Shared/Holder.luau +210 -0
- package/runtime/Chrono/_impl/Shared/InterpolationMath.luau +51 -0
- package/runtime/Chrono/_impl/Shared/ModelHelper.luau +122 -0
- package/runtime/Chrono/_impl/Shared/Remotes/ClientClockRelay.model.json +3 -0
- package/runtime/Chrono/_impl/Shared/Remotes/ClientHeartbeat.model.json +3 -0
- package/runtime/Chrono/_impl/Shared/Remotes/ClientLoaded.model.json +3 -0
- package/runtime/Chrono/_impl/Shared/Remotes/Death.model.json +3 -0
- package/runtime/Chrono/_impl/Shared/Remotes/Heartbeat.model.json +3 -0
- package/runtime/Chrono/_impl/Shared/Remotes/Replicate.model.json +3 -0
- package/runtime/Chrono/_impl/Shared/Remotes/ReplicateFull.model.json +3 -0
- package/runtime/Chrono/_impl/Shared/Remotes/SafeReplicate.model.json +3 -0
- package/runtime/Chrono/_impl/Shared/ReplicationRules.luau +122 -0
- package/runtime/Chrono/_impl/Shared/Signal.luau +219 -0
- package/runtime/Chrono/_impl/Shared/Snapshots.luau +218 -0
- package/runtime/Chrono/_impl/Shared/Stats.luau +204 -0
- package/runtime/Chrono/_impl/Shared/Ticker.luau +112 -0
- package/runtime/Chrono/_impl/Shared/Types.luau +247 -0
- package/runtime/Chrono/_impl/Shared/Warn.luau +33 -0
- package/runtime/Chrono/_impl/Shared/_CUSTOM_MODEL_REP/init.model.json +3 -0
- package/runtime/Chrono/_impl/init.luau +96 -0
- package/runtime/Chrono/init.luau +14 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/announce.luau +21 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/announceServer.luau +17 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/ban.luau +59 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/banServer.luau +30 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/gotoPlace.luau +35 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/gotoPlaceServer.luau +17 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/kick.luau +19 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/kickServer.luau +27 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/kill.luau +13 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/killServer.luau +13 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/respawn.luau +15 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/respawnServer.luau +7 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/teleport.luau +30 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/teleportServer.luau +26 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/unban.luau +26 -0
- package/runtime/Cmdr/BuiltInCommands/Admin/unbanServer.luau +10 -0
- package/runtime/Cmdr/BuiltInCommands/Debug/blink.luau +35 -0
- package/runtime/Cmdr/BuiltInCommands/Debug/fetch.luau +12 -0
- package/runtime/Cmdr/BuiltInCommands/Debug/fetchServer.luau +7 -0
- package/runtime/Cmdr/BuiltInCommands/Debug/getPlayerPlaceInstance.luau +20 -0
- package/runtime/Cmdr/BuiltInCommands/Debug/getPlayerPlaceInstanceServer.luau +28 -0
- package/runtime/Cmdr/BuiltInCommands/Debug/position.luau +30 -0
- package/runtime/Cmdr/BuiltInCommands/Debug/thru.luau +50 -0
- package/runtime/Cmdr/BuiltInCommands/Debug/uptime.luau +6 -0
- package/runtime/Cmdr/BuiltInCommands/Debug/uptimeServer.luau +12 -0
- package/runtime/Cmdr/BuiltInCommands/Debug/version.luau +12 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/alias.luau +22 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/bind.luau +104 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/clear.luau +20 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/convertTimestamp.luau +18 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/echo.luau +17 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/edit.luau +75 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/exit.luau +11 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/history.luau +27 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/hover.luau +21 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/jsonArrayDecode.luau +25 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/jsonArrayEncode.luau +18 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/len.luau +16 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/math.luau +36 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/pick.luau +21 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/rand.luau +27 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/replace.luau +32 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/resolve.luau +32 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/run.luau +20 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/runLines.luau +34 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/runif.luau +95 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/unbind.luau +27 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/var.luau +29 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/varServer.luau +37 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/varSet.luau +30 -0
- package/runtime/Cmdr/BuiltInCommands/Utility/varSetServer.luau +29 -0
- package/runtime/Cmdr/BuiltInCommands/help.luau +96 -0
- package/runtime/Cmdr/BuiltInTypes/BrickColor.luau +258 -0
- package/runtime/Cmdr/BuiltInTypes/Color3.luau +59 -0
- package/runtime/Cmdr/BuiltInTypes/Command.luau +23 -0
- package/runtime/Cmdr/BuiltInTypes/Duration.luau +111 -0
- package/runtime/Cmdr/BuiltInTypes/JSON.luau +13 -0
- package/runtime/Cmdr/BuiltInTypes/MathOperator.luau +43 -0
- package/runtime/Cmdr/BuiltInTypes/Player.luau +36 -0
- package/runtime/Cmdr/BuiltInTypes/PlayerId.luau +66 -0
- package/runtime/Cmdr/BuiltInTypes/Primitives.luau +145 -0
- package/runtime/Cmdr/BuiltInTypes/StoredKey.luau +33 -0
- package/runtime/Cmdr/BuiltInTypes/Team.luau +49 -0
- package/runtime/Cmdr/BuiltInTypes/Type.luau +23 -0
- package/runtime/Cmdr/BuiltInTypes/URL.luau +18 -0
- package/runtime/Cmdr/BuiltInTypes/UserInput.luau +32 -0
- package/runtime/Cmdr/BuiltInTypes/Vector.luau +58 -0
- package/runtime/Cmdr/CmdrClient/CmdrInterface/AutoComplete.luau +240 -0
- package/runtime/Cmdr/CmdrClient/CmdrInterface/CreateGui.luau +227 -0
- package/runtime/Cmdr/CmdrClient/CmdrInterface/Window.luau +713 -0
- package/runtime/Cmdr/CmdrClient/CmdrInterface/init.luau +18 -0
- package/runtime/Cmdr/CmdrClient/DefaultEventHandlers.luau +18 -0
- package/runtime/Cmdr/CmdrClient/Shared/Argument.luau +395 -0
- package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/HasCharacter.luau +39 -0
- package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/IsDataStoreAvailable.luau +36 -0
- package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/MaxArrayLength.luau +10 -0
- package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/MaxStringLength.luau +10 -0
- package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/NonEmptyString.luau +10 -0
- package/runtime/Cmdr/CmdrClient/Shared/BuiltInGuards/NotEquals.luau +8 -0
- package/runtime/Cmdr/CmdrClient/Shared/Command.luau +415 -0
- package/runtime/Cmdr/CmdrClient/Shared/Dispatcher.luau +407 -0
- package/runtime/Cmdr/CmdrClient/Shared/Registry.luau +717 -0
- package/runtime/Cmdr/CmdrClient/Shared/Util.luau +879 -0
- package/runtime/Cmdr/CmdrClient/init.luau +377 -0
- package/runtime/Cmdr/LICENSE +21 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/announce.luau +21 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/announceServer.luau +17 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/ban.luau +59 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/banServer.luau +30 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/gotoPlace.luau +35 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/gotoPlaceServer.luau +17 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/kick.luau +19 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/kickServer.luau +27 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/kill.luau +13 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/killServer.luau +13 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/respawn.luau +15 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/respawnServer.luau +7 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/teleport.luau +30 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/teleportServer.luau +26 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/unban.luau +26 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Admin/unbanServer.luau +10 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Debug/blink.luau +35 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Debug/fetch.luau +12 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Debug/fetchServer.luau +7 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Debug/getPlayerPlaceInstance.luau +20 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Debug/getPlayerPlaceInstanceServer.luau +28 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Debug/position.luau +30 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Debug/thru.luau +50 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Debug/uptime.luau +6 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Debug/uptimeServer.luau +12 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Debug/version.luau +12 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/alias.luau +22 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/bind.luau +104 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/clear.luau +20 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/convertTimestamp.luau +18 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/echo.luau +17 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/edit.luau +75 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/exit.luau +11 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/history.luau +27 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/hover.luau +21 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/jsonArrayDecode.luau +25 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/jsonArrayEncode.luau +18 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/len.luau +16 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/math.luau +36 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/pick.luau +21 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/rand.luau +27 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/replace.luau +32 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/resolve.luau +32 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/run.luau +20 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/runLines.luau +34 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/runif.luau +95 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/unbind.luau +27 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/var.luau +29 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/varServer.luau +37 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/varSet.luau +30 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/Utility/varSetServer.luau +29 -0
- package/runtime/Cmdr/_impl/BuiltInCommands/help.luau +96 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/BrickColor.luau +258 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/Color3.luau +59 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/Command.luau +23 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/Duration.luau +111 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/JSON.luau +13 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/MathOperator.luau +43 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/Player.luau +36 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/PlayerId.luau +66 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/Primitives.luau +145 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/StoredKey.luau +33 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/Team.luau +49 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/Type.luau +23 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/URL.luau +18 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/UserInput.luau +32 -0
- package/runtime/Cmdr/_impl/BuiltInTypes/Vector.luau +58 -0
- package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/AutoComplete.luau +240 -0
- package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/CreateGui.luau +227 -0
- package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/Window.luau +713 -0
- package/runtime/Cmdr/_impl/CmdrClient/CmdrInterface/init.luau +18 -0
- package/runtime/Cmdr/_impl/CmdrClient/DefaultEventHandlers.luau +18 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/Argument.luau +395 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/HasCharacter.luau +39 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/IsDataStoreAvailable.luau +36 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/MaxArrayLength.luau +10 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/MaxStringLength.luau +10 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/NonEmptyString.luau +10 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/BuiltInGuards/NotEquals.luau +8 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/Command.luau +415 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/Dispatcher.luau +407 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/Registry.luau +717 -0
- package/runtime/Cmdr/_impl/CmdrClient/Shared/Util.luau +879 -0
- package/runtime/Cmdr/_impl/CmdrClient/init.luau +377 -0
- package/runtime/Cmdr/_impl/LICENSE +21 -0
- package/runtime/Cmdr/_impl/init.luau +178 -0
- package/runtime/Cmdr/init.luau +8 -0
- package/runtime/DataService/Client.luau +209 -0
- package/runtime/DataService/Data.luau +886 -0
- package/runtime/DataService/Enum.luau +6 -0
- package/runtime/DataService/Enums.luau +10 -0
- package/runtime/DataService/Packages/quicknet/DataTypes.luau +70 -0
- package/runtime/DataService/Packages/quicknet/Enums.luau +85 -0
- package/runtime/DataService/Packages/quicknet/EnumsToNativeTypes.luau +57 -0
- package/runtime/DataService/Packages/quicknet/Parser.luau +355 -0
- package/runtime/DataService/Packages/quicknet/QuickNet.luau +953 -0
- package/runtime/DataService/Packages/quicknet/Serialize.luau +2020 -0
- package/runtime/DataService/Packages/quicknet/Types.luau +72 -0
- package/runtime/DataService/Packages/quicknet/init.luau +1 -0
- package/runtime/DataService/Packages/signal/init.luau +433 -0
- package/runtime/DataService/Path.luau +236 -0
- package/runtime/DataService/ProfileStore.luau +2243 -0
- package/runtime/DataService/Replicator.luau +172 -0
- package/runtime/DataService/Server.luau +412 -0
- package/runtime/DataService/init.luau +204 -0
- package/runtime/Display/LICENSE +201 -0
- package/runtime/Display/_impl/LICENSE +201 -0
- package/runtime/Display/_impl/init.luau +269 -0
- package/runtime/Display/_impl/option.luau +237 -0
- package/runtime/Display/init.luau +10 -0
- package/runtime/Display/option.luau +237 -0
- package/runtime/EzVisualz/Dropshadow.luau +148 -0
- package/runtime/EzVisualz/Gradient.luau +452 -0
- package/runtime/EzVisualz/GradientTemplates/Bubblegum.luau +16 -0
- package/runtime/EzVisualz/GradientTemplates/Chrome.luau +16 -0
- package/runtime/EzVisualz/GradientTemplates/Death.luau +15 -0
- package/runtime/EzVisualz/GradientTemplates/Electric.luau +14 -0
- package/runtime/EzVisualz/GradientTemplates/Fire.luau +13 -0
- package/runtime/EzVisualz/GradientTemplates/Galaxy.luau +11 -0
- package/runtime/EzVisualz/GradientTemplates/Ghost.luau +16 -0
- package/runtime/EzVisualz/GradientTemplates/Gold.luau +14 -0
- package/runtime/EzVisualz/GradientTemplates/Green.luau +14 -0
- package/runtime/EzVisualz/GradientTemplates/Ice.luau +14 -0
- package/runtime/EzVisualz/GradientTemplates/Lava.luau +15 -0
- package/runtime/EzVisualz/GradientTemplates/Matrix.luau +19 -0
- package/runtime/EzVisualz/GradientTemplates/Neon.luau +12 -0
- package/runtime/EzVisualz/GradientTemplates/Oceanic.luau +15 -0
- package/runtime/EzVisualz/GradientTemplates/Rainbow.luau +13 -0
- package/runtime/EzVisualz/GradientTemplates/Silver.luau +12 -0
- package/runtime/EzVisualz/GradientTemplates/Sunset.luau +11 -0
- package/runtime/EzVisualz/GradientTemplates/Zebra.luau +18 -0
- package/runtime/EzVisualz/GradientTemplates/init.luau +9 -0
- package/runtime/EzVisualz/LICENSE.md +21 -0
- package/runtime/EzVisualz/Presets/Bubblegum.luau +36 -0
- package/runtime/EzVisualz/Presets/ChromeStroke.luau +15 -0
- package/runtime/EzVisualz/Presets/DeathStroke.luau +15 -0
- package/runtime/EzVisualz/Presets/ElectricStroke.luau +54 -0
- package/runtime/EzVisualz/Presets/FireStroke.luau +29 -0
- package/runtime/EzVisualz/Presets/GalaxyStroke.luau +31 -0
- package/runtime/EzVisualz/Presets/Ghost.luau +10 -0
- package/runtime/EzVisualz/Presets/GhostStroke.luau +15 -0
- package/runtime/EzVisualz/Presets/Gold.luau +10 -0
- package/runtime/EzVisualz/Presets/GoldStroke.luau +15 -0
- package/runtime/EzVisualz/Presets/GreenOutline.luau +23 -0
- package/runtime/EzVisualz/Presets/IceStroke.luau +15 -0
- package/runtime/EzVisualz/Presets/Lava.luau +9 -0
- package/runtime/EzVisualz/Presets/LavaStroke.luau +13 -0
- package/runtime/EzVisualz/Presets/Matrix.luau +21 -0
- package/runtime/EzVisualz/Presets/NeonStroke.luau +30 -0
- package/runtime/EzVisualz/Presets/OceanicStroke.luau +15 -0
- package/runtime/EzVisualz/Presets/Rainbow.luau +9 -0
- package/runtime/EzVisualz/Presets/RainbowOutline.luau +23 -0
- package/runtime/EzVisualz/Presets/RainbowStroke.luau +13 -0
- package/runtime/EzVisualz/Presets/Shine.luau +48 -0
- package/runtime/EzVisualz/Presets/ShineOutline.luau +66 -0
- package/runtime/EzVisualz/Presets/Silver.luau +10 -0
- package/runtime/EzVisualz/Presets/SilverStroke.luau +15 -0
- package/runtime/EzVisualz/Presets/SunsetStroke.luau +31 -0
- package/runtime/EzVisualz/Presets/WaveStroke.luau +33 -0
- package/runtime/EzVisualz/Presets/Zebra.luau +21 -0
- package/runtime/EzVisualz/Presets/init.luau +9 -0
- package/runtime/EzVisualz/Stroke.luau +167 -0
- package/runtime/EzVisualz/Util.luau +7 -0
- package/runtime/EzVisualz/_impl/Dropshadow.luau +148 -0
- package/runtime/EzVisualz/_impl/Gradient.luau +452 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Bubblegum.luau +16 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Chrome.luau +16 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Death.luau +15 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Electric.luau +14 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Fire.luau +13 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Galaxy.luau +11 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Ghost.luau +16 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Gold.luau +14 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Green.luau +14 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Ice.luau +14 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Lava.luau +15 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Matrix.luau +19 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Neon.luau +12 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Oceanic.luau +15 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Rainbow.luau +13 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Silver.luau +12 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Sunset.luau +11 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/Zebra.luau +18 -0
- package/runtime/EzVisualz/_impl/GradientTemplates/init.luau +9 -0
- package/runtime/EzVisualz/_impl/LICENSE.md +21 -0
- package/runtime/EzVisualz/_impl/Presets/Bubblegum.luau +36 -0
- package/runtime/EzVisualz/_impl/Presets/ChromeStroke.luau +15 -0
- package/runtime/EzVisualz/_impl/Presets/DeathStroke.luau +15 -0
- package/runtime/EzVisualz/_impl/Presets/ElectricStroke.luau +54 -0
- package/runtime/EzVisualz/_impl/Presets/FireStroke.luau +29 -0
- package/runtime/EzVisualz/_impl/Presets/GalaxyStroke.luau +31 -0
- package/runtime/EzVisualz/_impl/Presets/Ghost.luau +10 -0
- package/runtime/EzVisualz/_impl/Presets/GhostStroke.luau +15 -0
- package/runtime/EzVisualz/_impl/Presets/Gold.luau +10 -0
- package/runtime/EzVisualz/_impl/Presets/GoldStroke.luau +15 -0
- package/runtime/EzVisualz/_impl/Presets/GreenOutline.luau +23 -0
- package/runtime/EzVisualz/_impl/Presets/IceStroke.luau +15 -0
- package/runtime/EzVisualz/_impl/Presets/Lava.luau +9 -0
- package/runtime/EzVisualz/_impl/Presets/LavaStroke.luau +13 -0
- package/runtime/EzVisualz/_impl/Presets/Matrix.luau +21 -0
- package/runtime/EzVisualz/_impl/Presets/NeonStroke.luau +30 -0
- package/runtime/EzVisualz/_impl/Presets/OceanicStroke.luau +15 -0
- package/runtime/EzVisualz/_impl/Presets/Rainbow.luau +9 -0
- package/runtime/EzVisualz/_impl/Presets/RainbowOutline.luau +23 -0
- package/runtime/EzVisualz/_impl/Presets/RainbowStroke.luau +13 -0
- package/runtime/EzVisualz/_impl/Presets/Shine.luau +48 -0
- package/runtime/EzVisualz/_impl/Presets/ShineOutline.luau +66 -0
- package/runtime/EzVisualz/_impl/Presets/Silver.luau +10 -0
- package/runtime/EzVisualz/_impl/Presets/SilverStroke.luau +15 -0
- package/runtime/EzVisualz/_impl/Presets/SunsetStroke.luau +31 -0
- package/runtime/EzVisualz/_impl/Presets/WaveStroke.luau +33 -0
- package/runtime/EzVisualz/_impl/Presets/Zebra.luau +21 -0
- package/runtime/EzVisualz/_impl/Presets/init.luau +9 -0
- package/runtime/EzVisualz/_impl/Stroke.luau +167 -0
- package/runtime/EzVisualz/_impl/Util.luau +7 -0
- package/runtime/EzVisualz/_impl/init.luau +319 -0
- package/runtime/EzVisualz/_impl/wally.lock +8 -0
- package/runtime/EzVisualz/_impl/wally.toml +8 -0
- package/runtime/EzVisualz/init.luau +9 -0
- package/runtime/EzVisualz/wally.lock +8 -0
- package/runtime/EzVisualz/wally.toml +8 -0
- package/runtime/FormatNumber/LICENSE.md +25 -0
- package/runtime/FormatNumber/Main/DecimalFormatSymbols.lua +43 -0
- package/runtime/FormatNumber/Main/IntegerWidth.lua +41 -0
- package/runtime/FormatNumber/Main/Notation.lua +116 -0
- package/runtime/FormatNumber/Main/Precision.lua +179 -0
- package/runtime/FormatNumber/Main/init.lua +199 -0
- package/runtime/FormatNumber/Simple/init.lua +76 -0
- package/runtime/FormatNumber/Version.lua +82 -0
- package/runtime/FormatNumber/_impl/LICENSE.md +25 -0
- package/runtime/FormatNumber/_impl/Main/DecimalFormatSymbols.lua +43 -0
- package/runtime/FormatNumber/_impl/Main/IntegerWidth.lua +41 -0
- package/runtime/FormatNumber/_impl/Main/Notation.lua +116 -0
- package/runtime/FormatNumber/_impl/Main/Precision.lua +179 -0
- package/runtime/FormatNumber/_impl/Main/init.lua +199 -0
- package/runtime/FormatNumber/_impl/Simple/init.lua +76 -0
- package/runtime/FormatNumber/_impl/Version.lua +82 -0
- package/runtime/FormatNumber/_impl/_internal/class.lua +204 -0
- package/runtime/FormatNumber/_impl/_internal/decimal_conversion.lua +30 -0
- package/runtime/FormatNumber/_impl/_internal/enums.lua +55 -0
- package/runtime/FormatNumber/_impl/_internal/format.lua +342 -0
- package/runtime/FormatNumber/_impl/_internal/formatter_settings.lua +160 -0
- package/runtime/FormatNumber/_impl/_internal/init.lua +8 -0
- package/runtime/FormatNumber/_impl/_internal/skeleton.lua +541 -0
- package/runtime/FormatNumber/_impl/init.lua +20 -0
- package/runtime/FormatNumber/_internal/class.lua +204 -0
- package/runtime/FormatNumber/_internal/decimal_conversion.lua +30 -0
- package/runtime/FormatNumber/_internal/enums.lua +55 -0
- package/runtime/FormatNumber/_internal/format.lua +342 -0
- package/runtime/FormatNumber/_internal/formatter_settings.lua +160 -0
- package/runtime/FormatNumber/_internal/init.lua +8 -0
- package/runtime/FormatNumber/_internal/skeleton.lua +541 -0
- package/runtime/FormatNumber/init.lua +20 -0
- package/runtime/FormatNumber/init.luau +20 -0
- package/runtime/Fusion/Animation/ExternalTime.luau +84 -0
- package/runtime/Fusion/Animation/Spring.luau +313 -0
- package/runtime/Fusion/Animation/Stopwatch.luau +128 -0
- package/runtime/Fusion/Animation/Tween.luau +178 -0
- package/runtime/Fusion/Animation/getTweenDuration.luau +27 -0
- package/runtime/Fusion/Animation/getTweenRatio.luau +47 -0
- package/runtime/Fusion/Animation/lerpType.luau +164 -0
- package/runtime/Fusion/Animation/packType.luau +100 -0
- package/runtime/Fusion/Animation/springCoefficients.luau +80 -0
- package/runtime/Fusion/Animation/unpackType.luau +103 -0
- package/runtime/Fusion/Colour/Oklab.luau +70 -0
- package/runtime/Fusion/Colour/sRGB.luau +47 -0
- package/runtime/Fusion/External.luau +156 -0
- package/runtime/Fusion/ExternalDebug.luau +70 -0
- package/runtime/Fusion/Graph/Observer.luau +111 -0
- package/runtime/Fusion/Graph/castToGraph.luau +29 -0
- package/runtime/Fusion/Graph/change.luau +81 -0
- package/runtime/Fusion/Graph/depend.luau +33 -0
- package/runtime/Fusion/Graph/evaluate.luau +56 -0
- package/runtime/Fusion/Instances/Attribute.luau +58 -0
- package/runtime/Fusion/Instances/AttributeChange.luau +47 -0
- package/runtime/Fusion/Instances/AttributeOut.luau +63 -0
- package/runtime/Fusion/Instances/Child.luau +21 -0
- package/runtime/Fusion/Instances/Children.luau +148 -0
- package/runtime/Fusion/Instances/Hydrate.luau +29 -0
- package/runtime/Fusion/Instances/New.luau +48 -0
- package/runtime/Fusion/Instances/OnChange.luau +50 -0
- package/runtime/Fusion/Instances/OnEvent.luau +54 -0
- package/runtime/Fusion/Instances/Out.luau +69 -0
- package/runtime/Fusion/Instances/Tag.luau +61 -0
- package/runtime/Fusion/Instances/applyInstanceProps.luau +149 -0
- package/runtime/Fusion/Instances/defaultProps.luau +194 -0
- package/runtime/Fusion/LICENSE +21 -0
- package/runtime/Fusion/Logging/formatError.luau +49 -0
- package/runtime/Fusion/Logging/messages.luau +46 -0
- package/runtime/Fusion/Logging/parseError.luau +25 -0
- package/runtime/Fusion/Memory/checkLifetime.luau +134 -0
- package/runtime/Fusion/Memory/deriveScope.luau +24 -0
- package/runtime/Fusion/Memory/deriveScopeImpl.luau +40 -0
- package/runtime/Fusion/Memory/doCleanup.luau +91 -0
- package/runtime/Fusion/Memory/innerScope.luau +34 -0
- package/runtime/Fusion/Memory/insert.luau +22 -0
- package/runtime/Fusion/Memory/needsDestruction.luau +17 -0
- package/runtime/Fusion/Memory/scoped.luau +24 -0
- package/runtime/Fusion/RobloxExternal.luau +98 -0
- package/runtime/Fusion/State/Computed.luau +122 -0
- package/runtime/Fusion/State/For/Disassembly.luau +207 -0
- package/runtime/Fusion/State/For/ForTypes.luau +30 -0
- package/runtime/Fusion/State/For/init.luau +101 -0
- package/runtime/Fusion/State/ForKeys.luau +88 -0
- package/runtime/Fusion/State/ForPairs.luau +91 -0
- package/runtime/Fusion/State/ForValues.luau +88 -0
- package/runtime/Fusion/State/Value.luau +76 -0
- package/runtime/Fusion/State/castToState.luau +26 -0
- package/runtime/Fusion/State/peek.luau +31 -0
- package/runtime/Fusion/State/updateAll.luau +1 -0
- package/runtime/Fusion/Types.luau +318 -0
- package/runtime/Fusion/Utility/Contextual.luau +91 -0
- package/runtime/Fusion/Utility/Safe.luau +23 -0
- package/runtime/Fusion/Utility/isSimilar.luau +29 -0
- package/runtime/Fusion/Utility/merge.luau +35 -0
- package/runtime/Fusion/Utility/nameOf.luau +35 -0
- package/runtime/Fusion/Utility/never.luau +14 -0
- package/runtime/Fusion/Utility/nicknames.luau +11 -0
- package/runtime/Fusion/Utility/xtypeof.luau +27 -0
- package/runtime/Fusion/_impl/Animation/ExternalTime.luau +84 -0
- package/runtime/Fusion/_impl/Animation/Spring.luau +313 -0
- package/runtime/Fusion/_impl/Animation/Stopwatch.luau +128 -0
- package/runtime/Fusion/_impl/Animation/Tween.luau +178 -0
- package/runtime/Fusion/_impl/Animation/getTweenDuration.luau +27 -0
- package/runtime/Fusion/_impl/Animation/getTweenRatio.luau +47 -0
- package/runtime/Fusion/_impl/Animation/lerpType.luau +164 -0
- package/runtime/Fusion/_impl/Animation/packType.luau +100 -0
- package/runtime/Fusion/_impl/Animation/springCoefficients.luau +80 -0
- package/runtime/Fusion/_impl/Animation/unpackType.luau +103 -0
- package/runtime/Fusion/_impl/Colour/Oklab.luau +70 -0
- package/runtime/Fusion/_impl/Colour/sRGB.luau +47 -0
- package/runtime/Fusion/_impl/External.luau +156 -0
- package/runtime/Fusion/_impl/ExternalDebug.luau +70 -0
- package/runtime/Fusion/_impl/Graph/Observer.luau +111 -0
- package/runtime/Fusion/_impl/Graph/castToGraph.luau +29 -0
- package/runtime/Fusion/_impl/Graph/change.luau +81 -0
- package/runtime/Fusion/_impl/Graph/depend.luau +33 -0
- package/runtime/Fusion/_impl/Graph/evaluate.luau +56 -0
- package/runtime/Fusion/_impl/Instances/Attribute.luau +58 -0
- package/runtime/Fusion/_impl/Instances/AttributeChange.luau +47 -0
- package/runtime/Fusion/_impl/Instances/AttributeOut.luau +63 -0
- package/runtime/Fusion/_impl/Instances/Child.luau +21 -0
- package/runtime/Fusion/_impl/Instances/Children.luau +148 -0
- package/runtime/Fusion/_impl/Instances/Hydrate.luau +29 -0
- package/runtime/Fusion/_impl/Instances/New.luau +48 -0
- package/runtime/Fusion/_impl/Instances/OnChange.luau +50 -0
- package/runtime/Fusion/_impl/Instances/OnEvent.luau +54 -0
- package/runtime/Fusion/_impl/Instances/Out.luau +69 -0
- package/runtime/Fusion/_impl/Instances/Tag.luau +61 -0
- package/runtime/Fusion/_impl/Instances/applyInstanceProps.luau +149 -0
- package/runtime/Fusion/_impl/Instances/defaultProps.luau +194 -0
- package/runtime/Fusion/_impl/LICENSE +21 -0
- package/runtime/Fusion/_impl/Logging/formatError.luau +49 -0
- package/runtime/Fusion/_impl/Logging/messages.luau +46 -0
- package/runtime/Fusion/_impl/Logging/parseError.luau +25 -0
- package/runtime/Fusion/_impl/Memory/checkLifetime.luau +134 -0
- package/runtime/Fusion/_impl/Memory/deriveScope.luau +24 -0
- package/runtime/Fusion/_impl/Memory/deriveScopeImpl.luau +40 -0
- package/runtime/Fusion/_impl/Memory/doCleanup.luau +91 -0
- package/runtime/Fusion/_impl/Memory/innerScope.luau +34 -0
- package/runtime/Fusion/_impl/Memory/insert.luau +22 -0
- package/runtime/Fusion/_impl/Memory/needsDestruction.luau +17 -0
- package/runtime/Fusion/_impl/Memory/scoped.luau +24 -0
- package/runtime/Fusion/_impl/RobloxExternal.luau +98 -0
- package/runtime/Fusion/_impl/State/Computed.luau +122 -0
- package/runtime/Fusion/_impl/State/For/Disassembly.luau +207 -0
- package/runtime/Fusion/_impl/State/For/ForTypes.luau +30 -0
- package/runtime/Fusion/_impl/State/For/init.luau +101 -0
- package/runtime/Fusion/_impl/State/ForKeys.luau +88 -0
- package/runtime/Fusion/_impl/State/ForPairs.luau +91 -0
- package/runtime/Fusion/_impl/State/ForValues.luau +88 -0
- package/runtime/Fusion/_impl/State/Value.luau +76 -0
- package/runtime/Fusion/_impl/State/castToState.luau +26 -0
- package/runtime/Fusion/_impl/State/peek.luau +31 -0
- package/runtime/Fusion/_impl/State/updateAll.luau +1 -0
- package/runtime/Fusion/_impl/Types.luau +318 -0
- package/runtime/Fusion/_impl/Utility/Contextual.luau +91 -0
- package/runtime/Fusion/_impl/Utility/Safe.luau +23 -0
- package/runtime/Fusion/_impl/Utility/isSimilar.luau +29 -0
- package/runtime/Fusion/_impl/Utility/merge.luau +35 -0
- package/runtime/Fusion/_impl/Utility/nameOf.luau +35 -0
- package/runtime/Fusion/_impl/Utility/never.luau +14 -0
- package/runtime/Fusion/_impl/Utility/nicknames.luau +11 -0
- package/runtime/Fusion/_impl/Utility/xtypeof.luau +27 -0
- package/runtime/Fusion/_impl/init.luau +83 -0
- package/runtime/Fusion/init.luau +27 -0
- package/runtime/Iris/API.lua +2085 -0
- package/runtime/Iris/Internal.lua +895 -0
- package/runtime/Iris/LICENSE.txt +21 -0
- package/runtime/Iris/PubTypes.lua +43 -0
- package/runtime/Iris/Types.lua +660 -0
- package/runtime/Iris/WidgetTypes.lua +521 -0
- package/runtime/Iris/_impl/API.lua +2085 -0
- package/runtime/Iris/_impl/Internal.lua +895 -0
- package/runtime/Iris/_impl/LICENSE.txt +21 -0
- package/runtime/Iris/_impl/PubTypes.lua +43 -0
- package/runtime/Iris/_impl/Types.lua +660 -0
- package/runtime/Iris/_impl/WidgetTypes.lua +521 -0
- package/runtime/Iris/_impl/config.lua +305 -0
- package/runtime/Iris/_impl/init.lua +696 -0
- package/runtime/Iris/_impl/widgets/Button.lua +90 -0
- package/runtime/Iris/_impl/widgets/Checkbox.lua +115 -0
- package/runtime/Iris/_impl/widgets/Combo.lua +492 -0
- package/runtime/Iris/_impl/widgets/Format.lua +140 -0
- package/runtime/Iris/_impl/widgets/Image.lua +155 -0
- package/runtime/Iris/_impl/widgets/Input.lua +1232 -0
- package/runtime/Iris/_impl/widgets/Menu.lua +599 -0
- package/runtime/Iris/_impl/widgets/Plot.lua +639 -0
- package/runtime/Iris/_impl/widgets/RadioButton.lua +126 -0
- package/runtime/Iris/_impl/widgets/Root.lua +143 -0
- package/runtime/Iris/_impl/widgets/Tab.lua +333 -0
- package/runtime/Iris/_impl/widgets/Table.lua +635 -0
- package/runtime/Iris/_impl/widgets/Text.lua +132 -0
- package/runtime/Iris/_impl/widgets/Tree.lua +287 -0
- package/runtime/Iris/_impl/widgets/Window.lua +1075 -0
- package/runtime/Iris/_impl/widgets/init.lua +447 -0
- package/runtime/Iris/config.lua +305 -0
- package/runtime/Iris/init.lua +696 -0
- package/runtime/Iris/init.luau +12 -0
- package/runtime/Iris/widgets/Button.lua +90 -0
- package/runtime/Iris/widgets/Checkbox.lua +115 -0
- package/runtime/Iris/widgets/Combo.lua +492 -0
- package/runtime/Iris/widgets/Format.lua +140 -0
- package/runtime/Iris/widgets/Image.lua +155 -0
- package/runtime/Iris/widgets/Input.lua +1232 -0
- package/runtime/Iris/widgets/Menu.lua +599 -0
- package/runtime/Iris/widgets/Plot.lua +639 -0
- package/runtime/Iris/widgets/RadioButton.lua +126 -0
- package/runtime/Iris/widgets/Root.lua +143 -0
- package/runtime/Iris/widgets/Tab.lua +333 -0
- package/runtime/Iris/widgets/Table.lua +635 -0
- package/runtime/Iris/widgets/Text.lua +132 -0
- package/runtime/Iris/widgets/Tree.lua +287 -0
- package/runtime/Iris/widgets/Window.lua +1075 -0
- package/runtime/Iris/widgets/init.lua +447 -0
- package/runtime/Janitor/FastDefer.luau +33 -0
- package/runtime/Janitor/LICENSE +21 -0
- package/runtime/Janitor/_impl/FastDefer.luau +33 -0
- package/runtime/Janitor/_impl/LICENSE +21 -0
- package/runtime/Janitor/_impl/init.luau +999 -0
- package/runtime/Janitor/init.luau +45 -0
- package/runtime/MathUtils/init.luau +100 -0
- package/runtime/Module3D/LICENSE +21 -0
- package/runtime/Module3D/_impl/LICENSE +21 -0
- package/runtime/Module3D/_impl/init.luau +269 -0
- package/runtime/Module3D/init.luau +14 -0
- package/runtime/Net/init.luau +125 -0
- package/runtime/Net/src/codec.luau +153 -0
- package/runtime/Occlude/init.luau +54 -0
- package/runtime/Promise/LICENSE +21 -0
- package/runtime/Promise/_impl/LICENSE +21 -0
- package/runtime/Promise/_impl/init.lua +1991 -0
- package/runtime/Promise/init.lua +1990 -0
- package/runtime/Promise/init.luau +13 -0
- package/runtime/Promise/types.luau +46 -0
- package/runtime/SOURCES.md +22 -0
- package/runtime/Spring/LICENSE +201 -0
- package/runtime/Spring/_impl/LICENSE +201 -0
- package/runtime/Spring/_impl/init.luau +111 -0
- package/runtime/Spring/init.luau +24 -0
- package/runtime/StateMachine/Classes/State.lua +375 -0
- package/runtime/StateMachine/Classes/Transition.lua +336 -0
- package/runtime/StateMachine/Functions/deepCopy.lua +19 -0
- package/runtime/StateMachine/Functions/mergeTables.lua +22 -0
- package/runtime/StateMachine/LICENSE +19 -0
- package/runtime/StateMachine/Vendor/Signal.lua +386 -0
- package/runtime/StateMachine/Vendor/Trove.lua +188 -0
- package/runtime/StateMachine/_impl/Classes/State.lua +375 -0
- package/runtime/StateMachine/_impl/Classes/Transition.lua +336 -0
- package/runtime/StateMachine/_impl/Functions/deepCopy.lua +19 -0
- package/runtime/StateMachine/_impl/Functions/mergeTables.lua +22 -0
- package/runtime/StateMachine/_impl/LICENSE +19 -0
- package/runtime/StateMachine/_impl/Vendor/Signal.lua +386 -0
- package/runtime/StateMachine/_impl/Vendor/Trove.lua +188 -0
- package/runtime/StateMachine/_impl/init.lua +595 -0
- package/runtime/StateMachine/init.lua +595 -0
- package/runtime/StateMachine/init.luau +10 -0
- package/runtime/StickyBillboard/init.luau +167 -0
- package/runtime/TopbarPlus/Attribute.lua +35 -0
- package/runtime/TopbarPlus/Elements/Caption.lua +316 -0
- package/runtime/TopbarPlus/Elements/Container.lua +215 -0
- package/runtime/TopbarPlus/Elements/Dropdown.lua +315 -0
- package/runtime/TopbarPlus/Elements/Indicator.lua +91 -0
- package/runtime/TopbarPlus/Elements/Menu.lua +180 -0
- package/runtime/TopbarPlus/Elements/Notice.lua +113 -0
- package/runtime/TopbarPlus/Elements/Selection.lua +49 -0
- package/runtime/TopbarPlus/Elements/Widget.lua +437 -0
- package/runtime/TopbarPlus/Features/Gamepad.lua +201 -0
- package/runtime/TopbarPlus/Features/Overflow.lua +360 -0
- package/runtime/TopbarPlus/Features/Themes/Classic.lua +27 -0
- package/runtime/TopbarPlus/Features/Themes/Default.lua +75 -0
- package/runtime/TopbarPlus/Features/Themes/init.lua +353 -0
- package/runtime/TopbarPlus/LICENSE +381 -0
- package/runtime/TopbarPlus/Packages/GoodSignal.lua +182 -0
- package/runtime/TopbarPlus/Packages/Janitor.lua +322 -0
- package/runtime/TopbarPlus/Reference.lua +30 -0
- package/runtime/TopbarPlus/Types.lua +477 -0
- package/runtime/TopbarPlus/Utility.lua +462 -0
- package/runtime/TopbarPlus/VERSION.lua +51 -0
- package/runtime/TopbarPlus/_impl/Attribute.lua +35 -0
- package/runtime/TopbarPlus/_impl/Elements/Caption.lua +316 -0
- package/runtime/TopbarPlus/_impl/Elements/Container.lua +215 -0
- package/runtime/TopbarPlus/_impl/Elements/Dropdown.lua +315 -0
- package/runtime/TopbarPlus/_impl/Elements/Indicator.lua +91 -0
- package/runtime/TopbarPlus/_impl/Elements/Menu.lua +180 -0
- package/runtime/TopbarPlus/_impl/Elements/Notice.lua +113 -0
- package/runtime/TopbarPlus/_impl/Elements/Selection.lua +49 -0
- package/runtime/TopbarPlus/_impl/Elements/Widget.lua +437 -0
- package/runtime/TopbarPlus/_impl/Features/Gamepad.lua +201 -0
- package/runtime/TopbarPlus/_impl/Features/Overflow.lua +360 -0
- package/runtime/TopbarPlus/_impl/Features/Themes/Classic.lua +27 -0
- package/runtime/TopbarPlus/_impl/Features/Themes/Default.lua +75 -0
- package/runtime/TopbarPlus/_impl/Features/Themes/init.lua +353 -0
- package/runtime/TopbarPlus/_impl/LICENSE +381 -0
- package/runtime/TopbarPlus/_impl/Packages/GoodSignal.lua +182 -0
- package/runtime/TopbarPlus/_impl/Packages/Janitor.lua +322 -0
- package/runtime/TopbarPlus/_impl/Reference.lua +30 -0
- package/runtime/TopbarPlus/_impl/Types.lua +477 -0
- package/runtime/TopbarPlus/_impl/Utility.lua +462 -0
- package/runtime/TopbarPlus/_impl/VERSION.lua +51 -0
- package/runtime/TopbarPlus/_impl/init.lua +1249 -0
- package/runtime/TopbarPlus/init.lua +1249 -0
- package/runtime/TopbarPlus/init.luau +8 -0
- package/runtime/Twinkle/init.luau +157 -0
- package/runtime/VfxUtil/init.luau +164 -0
- package/src/api.generated.js +3675 -0
- package/src/api.js +57 -0
- package/src/architecture.js +393 -0
- package/src/cli.js +192 -0
- package/src/compile.js +40 -0
- package/src/emit.js +213 -0
- package/src/lex.js +149 -0
- package/src/libs.js +355 -0
- package/src/parse.js +421 -0
- package/src/preprocess.js +80 -0
- package/src/understand.js +453 -0
- package/templates/game/.clangd +5 -0
- package/templates/game/.vscode/c_cpp_properties.json +23 -0
- package/templates/game/.vscode/settings.json +12 -0
- package/templates/game/Packages/.gitkeep +0 -0
- package/templates/game/cluaupp.config.json +6 -0
- package/templates/game/compile_flags.txt +3 -0
- package/templates/game/default.project.json +39 -0
- package/templates/game/package.json +9 -0
- package/templates/game/src/client/init.client.cpp +5 -0
- package/templates/game/src/server/leaderstats.server.cpp +28 -0
- package/templates/game/src/shared/config.cpp +5 -0
- package/templates/game/src/shared/config.h +3 -0
- 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
|