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,886 @@
|
|
|
1
|
+
local packages = script.Parent.Packages
|
|
2
|
+
|
|
3
|
+
const Signal = require(packages.signal)
|
|
4
|
+
|
|
5
|
+
const Path = require(script.Parent.Path)
|
|
6
|
+
const Enums = require(script.Parent.Enums)
|
|
7
|
+
const PackageEnum = require(script.Parent.Enum)
|
|
8
|
+
|
|
9
|
+
type SignalT = typeof(Signal.new())
|
|
10
|
+
type AnyConnection = RBXScriptConnection
|
|
11
|
+
type TypedSignal<T...> = {
|
|
12
|
+
Connect: (self: TypedSignal<T...>, fn: (T...) -> ()) -> AnyConnection,
|
|
13
|
+
Once: (self: TypedSignal<T...>, fn: (T...) -> ()) -> AnyConnection,
|
|
14
|
+
Wait: (self: TypedSignal<T...>) -> T...,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const Data = {}
|
|
18
|
+
|
|
19
|
+
--[=[
|
|
20
|
+
@class Data
|
|
21
|
+
Per-player data instance. Writable on the server, read-only on the client.
|
|
22
|
+
Use `Get()` for merged reads and `GetPersisted()` for saved ProfileStore values.
|
|
23
|
+
]=]
|
|
24
|
+
const ROOT_KEY = {}
|
|
25
|
+
const WRITABLE_KEY = {}
|
|
26
|
+
const STRICT_PATHS_KEY = {}
|
|
27
|
+
const AUTO_CREATE_KEY = {}
|
|
28
|
+
const CHANGED_MAP_KEY = {}
|
|
29
|
+
const INDEX_CHANGED_MAP_KEY = {}
|
|
30
|
+
const ARRAY_INSERTED_MAP_KEY = {}
|
|
31
|
+
const ARRAY_REMOVED_MAP_KEY = {}
|
|
32
|
+
const TRANSIENT_KEY = {}
|
|
33
|
+
|
|
34
|
+
export type DataPath = Path.Path
|
|
35
|
+
export type DataPathLike = Path.Path | Path.PathToken<never>
|
|
36
|
+
export type DataOptions<T = never> = {
|
|
37
|
+
StrictPaths: boolean?,
|
|
38
|
+
AutoCreateMissingTables: boolean?,
|
|
39
|
+
Template: T?,
|
|
40
|
+
}
|
|
41
|
+
export type OrderedListOrder = typeof(PackageEnum.OrderList.Asc) | typeof(PackageEnum.OrderList.Desc) | "asc" | "desc"
|
|
42
|
+
export type OrderedListOptions = {
|
|
43
|
+
key: string,
|
|
44
|
+
order: OrderedListOrder?,
|
|
45
|
+
limit: number?,
|
|
46
|
+
}
|
|
47
|
+
export type OrderedListEntry<V> = {
|
|
48
|
+
index: number,
|
|
49
|
+
value: V,
|
|
50
|
+
priority: any,
|
|
51
|
+
}
|
|
52
|
+
type TypedPath<V> = Path.PathToken<V>
|
|
53
|
+
type ChangedSignal<V> = TypedSignal<V, V>
|
|
54
|
+
type IndexChangedSignal<V> = TypedSignal<string | number, V, V>
|
|
55
|
+
type ArrayInsertedSignal<V> = TypedSignal<number, V>
|
|
56
|
+
type ArrayRemovedSignal<V> = TypedSignal<number, V>
|
|
57
|
+
type DataCore<T> = {
|
|
58
|
+
Changed: SignalT,
|
|
59
|
+
Destroyed: boolean,
|
|
60
|
+
Typed: <V>(self: DataCore<T>, path: DataPathLike) -> TypedPath<V>,
|
|
61
|
+
Get: <V>(self: DataCore<T>, path: TypedPath<V> | DataPathLike?) -> V,
|
|
62
|
+
GetPersisted: <V>(self: DataCore<T>, path: TypedPath<V> | DataPathLike?) -> V,
|
|
63
|
+
GetTransient: <V>(self: DataCore<T>, path: TypedPath<V> | DataPathLike?) -> V?,
|
|
64
|
+
HasTransient: (self: DataCore<T>, path: DataPathLike?) -> boolean,
|
|
65
|
+
Set: <V>(self: DataCore<T>, path: TypedPath<V> | DataPathLike, value: V) -> (),
|
|
66
|
+
SetTransient: <V>(self: DataCore<T>, path: TypedPath<V> | DataPathLike, value: V) -> (),
|
|
67
|
+
Update: <V>(self: DataCore<T>, path: TypedPath<V> | DataPathLike, fn: (V) -> V) -> V,
|
|
68
|
+
UpdateTransient: <V>(self: DataCore<T>, path: TypedPath<V> | DataPathLike, fn: (V) -> V) -> V,
|
|
69
|
+
ClearTransient: (self: DataCore<T>, path: DataPathLike?) -> (),
|
|
70
|
+
ArrayInsert: <V>(self: DataCore<T>, path: TypedPath<{ V }> | DataPathLike, value: V, index: number?) -> (),
|
|
71
|
+
ArrayInsertTransient: <V>(self: DataCore<T>, path: TypedPath<{ V }> | DataPathLike, value: V, index: number?) -> (),
|
|
72
|
+
ArrayRemove: <V>(self: DataCore<T>, path: TypedPath<{ V }> | DataPathLike, index: number) -> V,
|
|
73
|
+
ArrayRemoveTransient: <V>(self: DataCore<T>, path: TypedPath<{ V }> | DataPathLike, index: number) -> V,
|
|
74
|
+
GetOrderedList: <V>(self: DataCore<T>, path: TypedPath<{ V }> | DataPathLike, options: OrderedListOptions) -> { OrderedListEntry<V> },
|
|
75
|
+
GetOrderedListWithPriority: <V>(
|
|
76
|
+
self: DataCore<T>,
|
|
77
|
+
path: TypedPath<{ V }> | DataPathLike,
|
|
78
|
+
key: string,
|
|
79
|
+
order: OrderedListOrder?
|
|
80
|
+
) -> { OrderedListEntry<V> },
|
|
81
|
+
GetChangedSignal: <V>(self: DataCore<T>, path: TypedPath<V> | DataPathLike) -> ChangedSignal<V>,
|
|
82
|
+
GetPathChangedSignal: <V>(self: DataCore<T>, path: TypedPath<V> | DataPathLike) -> ChangedSignal<V>,
|
|
83
|
+
GetIndexChangedSignal: <V>(self: DataCore<T>, path: TypedPath<V> | DataPathLike) -> IndexChangedSignal<V>,
|
|
84
|
+
GetArrayInsertedSignal: <V>(self: DataCore<T>, path: TypedPath<{ V }> | DataPathLike) -> ArrayInsertedSignal<V>,
|
|
85
|
+
GetArrayRemovedSignal: <V>(self: DataCore<T>, path: TypedPath<{ V }> | DataPathLike) -> ArrayRemovedSignal<V>,
|
|
86
|
+
Destroy: (self: DataCore<T>) -> (),
|
|
87
|
+
}
|
|
88
|
+
export type Data<T> = DataCore<T>
|
|
89
|
+
|
|
90
|
+
const READ_ONLY_ERROR = "DataService: Data on the client is read-only. Mutations are server-driven."
|
|
91
|
+
const INVALID_PATH_ERROR = "DataService: invalid data path %q"
|
|
92
|
+
|
|
93
|
+
const pathToString = function(path: DataPath): string
|
|
94
|
+
if #path == 0 then
|
|
95
|
+
return "<root>"
|
|
96
|
+
end
|
|
97
|
+
local parts = table.create(#path)
|
|
98
|
+
for i, segment in path do
|
|
99
|
+
parts[i] = tostring(segment)
|
|
100
|
+
end
|
|
101
|
+
return table.concat(parts, ".")
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
const normalizePath = function(pathLike: DataPathLike?, allowNil: boolean?): DataPath?
|
|
105
|
+
local resolved = Path.toArray(pathLike)
|
|
106
|
+
if resolved == nil then
|
|
107
|
+
if allowNil then
|
|
108
|
+
return nil
|
|
109
|
+
end
|
|
110
|
+
error("DataService: path is required")
|
|
111
|
+
end
|
|
112
|
+
if not Path.validate(resolved) then
|
|
113
|
+
error(string.format(INVALID_PATH_ERROR, pathToString(resolved)))
|
|
114
|
+
end
|
|
115
|
+
return resolved
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
const pathFromKey = function(key: string): DataPath
|
|
119
|
+
if key == "" then
|
|
120
|
+
return {}
|
|
121
|
+
end
|
|
122
|
+
local path = table.create(4)
|
|
123
|
+
for part in string.gmatch(key, "[^\0]+") do
|
|
124
|
+
local kind = string.sub(part, 1, 1)
|
|
125
|
+
local value = string.sub(part, 3)
|
|
126
|
+
if kind == "s" then
|
|
127
|
+
path[#path + 1] = value
|
|
128
|
+
elseif kind == "n" then
|
|
129
|
+
path[#path + 1] = tonumber(value)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
return path
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
const isDescendantPath = function(childKey: string, parentKey: string): boolean
|
|
136
|
+
if parentKey == "" then
|
|
137
|
+
return childKey ~= ""
|
|
138
|
+
end
|
|
139
|
+
return childKey == parentKey or string.sub(childKey, 1, #parentKey + 1) == parentKey .. "\0"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
local function deepCopyTable(value: any): any
|
|
143
|
+
if type(value) ~= "table" then
|
|
144
|
+
return value
|
|
145
|
+
end
|
|
146
|
+
local out = {}
|
|
147
|
+
for k, v in value do
|
|
148
|
+
out[k] = deepCopyTable(v)
|
|
149
|
+
end
|
|
150
|
+
return out
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
const setAtPath = function(root: any, path: DataPath, value: any)
|
|
154
|
+
if #path == 0 then
|
|
155
|
+
return
|
|
156
|
+
end
|
|
157
|
+
local parent = root
|
|
158
|
+
for i = 1, #path - 1 do
|
|
159
|
+
local k = path[i]
|
|
160
|
+
local nextValue = rawget(parent, k)
|
|
161
|
+
if type(nextValue) ~= "table" then
|
|
162
|
+
nextValue = {}
|
|
163
|
+
rawset(parent, k, nextValue)
|
|
164
|
+
end
|
|
165
|
+
parent = nextValue
|
|
166
|
+
end
|
|
167
|
+
rawset(parent, path[#path], value)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
const getPersistedAt = function(root: any, path: DataPath?): any
|
|
171
|
+
if not path or #path == 0 then
|
|
172
|
+
return root
|
|
173
|
+
end
|
|
174
|
+
local cur: any = root
|
|
175
|
+
for _, k in path do
|
|
176
|
+
if type(cur) ~= "table" then
|
|
177
|
+
return nil
|
|
178
|
+
end
|
|
179
|
+
cur = rawget(cur, k)
|
|
180
|
+
end
|
|
181
|
+
return cur
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
const getMergedValue = function(self: any, path: DataPath): any
|
|
185
|
+
local transient = self[TRANSIENT_KEY]
|
|
186
|
+
local key = Path.toKey(path)
|
|
187
|
+
local direct = transient[key]
|
|
188
|
+
if direct ~= nil then
|
|
189
|
+
return direct
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
if #path == 0 then
|
|
193
|
+
local persisted = self[ROOT_KEY]
|
|
194
|
+
local out = if type(persisted) == "table" then deepCopyTable(persisted) else {}
|
|
195
|
+
for tKey, tVal in transient do
|
|
196
|
+
setAtPath(out, pathFromKey(tKey), tVal)
|
|
197
|
+
end
|
|
198
|
+
return out
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
local persisted = getPersistedAt(self[ROOT_KEY], path)
|
|
202
|
+
local hasDescendant = false
|
|
203
|
+
for tKey in transient do
|
|
204
|
+
if isDescendantPath(tKey, key) then
|
|
205
|
+
hasDescendant = true
|
|
206
|
+
break
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
if not hasDescendant then
|
|
210
|
+
return persisted
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
local out = if type(persisted) == "table" then deepCopyTable(persisted) else {}
|
|
214
|
+
for tKey, tVal in transient do
|
|
215
|
+
if isDescendantPath(tKey, key) then
|
|
216
|
+
local tPath = pathFromKey(tKey)
|
|
217
|
+
local relative = table.create(math.max(#tPath - #path, 0))
|
|
218
|
+
for i = #path + 1, #tPath do
|
|
219
|
+
relative[#relative + 1] = tPath[i]
|
|
220
|
+
end
|
|
221
|
+
if #relative > 0 then
|
|
222
|
+
setAtPath(out, relative, tVal)
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
return out
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
const copyArray = function(value: any): { any }
|
|
230
|
+
local out = table.create(#value)
|
|
231
|
+
for index, item in value do
|
|
232
|
+
out[index] = if type(item) == "table" then deepCopyTable(item) else item
|
|
233
|
+
end
|
|
234
|
+
return out
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
function Data.new<T>(initial: T, writable: boolean?, options: DataOptions<T>?): Data<T>
|
|
238
|
+
local self: any
|
|
239
|
+
self = {
|
|
240
|
+
Get = function(a, b)
|
|
241
|
+
local path = if a == self then b else a
|
|
242
|
+
return Data.Get(self, path)
|
|
243
|
+
end,
|
|
244
|
+
GetPersisted = function(a, b)
|
|
245
|
+
local path = if a == self then b else a
|
|
246
|
+
return Data.GetPersisted(self, path)
|
|
247
|
+
end,
|
|
248
|
+
GetTransient = function(a, b)
|
|
249
|
+
local path = if a == self then b else a
|
|
250
|
+
return Data.GetTransient(self, path)
|
|
251
|
+
end,
|
|
252
|
+
HasTransient = function(a, b)
|
|
253
|
+
local path = if a == self then b else a
|
|
254
|
+
return Data.HasTransient(self, path)
|
|
255
|
+
end,
|
|
256
|
+
Set = function(a, b, c)
|
|
257
|
+
local path = if a == self then b else a
|
|
258
|
+
local value = if a == self then c else b
|
|
259
|
+
return Data.Set(self, path, value)
|
|
260
|
+
end,
|
|
261
|
+
SetTransient = function(a, b, c)
|
|
262
|
+
local path = if a == self then b else a
|
|
263
|
+
local value = if a == self then c else b
|
|
264
|
+
return Data.SetTransient(self, path, value)
|
|
265
|
+
end,
|
|
266
|
+
Update = function(a, b, c)
|
|
267
|
+
local path = if a == self then b else a
|
|
268
|
+
local fn = if a == self then c else b
|
|
269
|
+
return Data.Update(self, path, fn)
|
|
270
|
+
end,
|
|
271
|
+
UpdateTransient = function(a, b, c)
|
|
272
|
+
local path = if a == self then b else a
|
|
273
|
+
local fn = if a == self then c else b
|
|
274
|
+
return Data.UpdateTransient(self, path, fn)
|
|
275
|
+
end,
|
|
276
|
+
ClearTransient = function(a, b)
|
|
277
|
+
local path = if a == self then b else a
|
|
278
|
+
return Data.ClearTransient(self, path)
|
|
279
|
+
end,
|
|
280
|
+
ArrayInsert = function(a, b, c, d)
|
|
281
|
+
local path = if a == self then b else a
|
|
282
|
+
local value = if a == self then c else b
|
|
283
|
+
local index = if a == self then d else c
|
|
284
|
+
return Data.ArrayInsert(self, path, value, index)
|
|
285
|
+
end,
|
|
286
|
+
ArrayInsertTransient = function(a, b, c, d)
|
|
287
|
+
local path = if a == self then b else a
|
|
288
|
+
local value = if a == self then c else b
|
|
289
|
+
local index = if a == self then d else c
|
|
290
|
+
return Data.ArrayInsertTransient(self, path, value, index)
|
|
291
|
+
end,
|
|
292
|
+
ArrayRemove = function(a, b, c)
|
|
293
|
+
local path = if a == self then b else a
|
|
294
|
+
local index = if a == self then c else b
|
|
295
|
+
return Data.ArrayRemove(self, path, index)
|
|
296
|
+
end,
|
|
297
|
+
ArrayRemoveTransient = function(a, b, c)
|
|
298
|
+
local path = if a == self then b else a
|
|
299
|
+
local index = if a == self then c else b
|
|
300
|
+
return Data.ArrayRemoveTransient(self, path, index)
|
|
301
|
+
end,
|
|
302
|
+
GetOrderedList = function(a, b, c)
|
|
303
|
+
local path = if a == self then b else a
|
|
304
|
+
local options = if a == self then c else b
|
|
305
|
+
return Data.GetOrderedList(self, path, options)
|
|
306
|
+
end,
|
|
307
|
+
GetOrderedListWithPriority = function(a, b, c, d)
|
|
308
|
+
local path = if a == self then b else a
|
|
309
|
+
local key = if a == self then c else b
|
|
310
|
+
local order = if a == self then d else c
|
|
311
|
+
return Data.GetOrderedListWithPriority(self, path, key, order)
|
|
312
|
+
end,
|
|
313
|
+
GetChangedSignal = function(a, b)
|
|
314
|
+
local path = if a == self then b else a
|
|
315
|
+
return Data.GetChangedSignal(self, path)
|
|
316
|
+
end,
|
|
317
|
+
GetPathChangedSignal = function(a, b)
|
|
318
|
+
local path = if a == self then b else a
|
|
319
|
+
return Data.GetPathChangedSignal(self, path)
|
|
320
|
+
end,
|
|
321
|
+
GetIndexChangedSignal = function(a, b)
|
|
322
|
+
local path = if a == self then b else a
|
|
323
|
+
return Data.GetIndexChangedSignal(self, path)
|
|
324
|
+
end,
|
|
325
|
+
GetArrayInsertedSignal = function(a, b)
|
|
326
|
+
local path = if a == self then b else a
|
|
327
|
+
return Data.GetArrayInsertedSignal(self, path)
|
|
328
|
+
end,
|
|
329
|
+
GetArrayRemovedSignal = function(a, b)
|
|
330
|
+
local path = if a == self then b else a
|
|
331
|
+
return Data.GetArrayRemovedSignal(self, path)
|
|
332
|
+
end,
|
|
333
|
+
Typed = function(a, b)
|
|
334
|
+
local path = if a == self then b else a
|
|
335
|
+
return Data.Typed(self, path)
|
|
336
|
+
end,
|
|
337
|
+
Destroy = function()
|
|
338
|
+
return Data.Destroy(self)
|
|
339
|
+
end,
|
|
340
|
+
[ROOT_KEY] = initial,
|
|
341
|
+
[WRITABLE_KEY] = writable ~= false,
|
|
342
|
+
[STRICT_PATHS_KEY] = if options and options.StrictPaths ~= nil then options.StrictPaths else true,
|
|
343
|
+
[AUTO_CREATE_KEY] = if options and options.AutoCreateMissingTables ~= nil then options.AutoCreateMissingTables else false,
|
|
344
|
+
[CHANGED_MAP_KEY] = {} :: { [string]: SignalT },
|
|
345
|
+
[INDEX_CHANGED_MAP_KEY] = {} :: { [string]: SignalT },
|
|
346
|
+
[ARRAY_INSERTED_MAP_KEY] = {} :: { [string]: SignalT },
|
|
347
|
+
[ARRAY_REMOVED_MAP_KEY] = {} :: { [string]: SignalT },
|
|
348
|
+
[TRANSIENT_KEY] = {} :: { [string]: any },
|
|
349
|
+
Changed = Signal.new(),
|
|
350
|
+
Destroyed = false,
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
return (self :: any) :: Data<T>
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
const descend = function(root: any, path: DataPath?, ensureLeaf: boolean): (any?, any?)
|
|
357
|
+
if not path or #path == 0 then
|
|
358
|
+
return nil, nil
|
|
359
|
+
end
|
|
360
|
+
local parent = root
|
|
361
|
+
for i = 1, #path - 1 do
|
|
362
|
+
local k = path[i]
|
|
363
|
+
local nextValue = rawget(parent, k)
|
|
364
|
+
if type(nextValue) ~= "table" then
|
|
365
|
+
if ensureLeaf then
|
|
366
|
+
rawset(parent, k, {})
|
|
367
|
+
nextValue = rawget(parent, k)
|
|
368
|
+
else
|
|
369
|
+
return nil, nil
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
parent = nextValue
|
|
373
|
+
end
|
|
374
|
+
return parent, path[#path]
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
--[=[
|
|
378
|
+
@method Get
|
|
379
|
+
@within Data
|
|
380
|
+
@param path PathToken? -- Path tipado ou array legado. Omita para a raiz merged.
|
|
381
|
+
@return any
|
|
382
|
+
Reads the merged value (persisted + transient overlay). Omit path for the full root.
|
|
383
|
+
]=]
|
|
384
|
+
function Data:Get(path: DataPathLike?): any
|
|
385
|
+
local normalized = normalizePath(path, true) or {}
|
|
386
|
+
return getMergedValue(self, normalized)
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
--[=[
|
|
390
|
+
@method GetPersisted
|
|
391
|
+
@within Data
|
|
392
|
+
@tag Query
|
|
393
|
+
@param path PathToken?
|
|
394
|
+
@return any
|
|
395
|
+
Reads the saved ProfileStore value only (ignores transient overlay).
|
|
396
|
+
]=]
|
|
397
|
+
function Data:GetPersisted(path: DataPathLike?): any
|
|
398
|
+
local normalized = normalizePath(path, true)
|
|
399
|
+
if not normalized or #normalized == 0 then
|
|
400
|
+
return self[ROOT_KEY]
|
|
401
|
+
end
|
|
402
|
+
return getPersistedAt(self[ROOT_KEY], normalized)
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
--[=[
|
|
406
|
+
@method GetTransient
|
|
407
|
+
@within Data
|
|
408
|
+
@tag Query
|
|
409
|
+
@param path PathToken?
|
|
410
|
+
@return any?
|
|
411
|
+
Reads the transient overlay at path, if present.
|
|
412
|
+
]=]
|
|
413
|
+
function Data:GetTransient(path: DataPathLike?): any
|
|
414
|
+
local normalized = normalizePath(path, true) or {}
|
|
415
|
+
return self[TRANSIENT_KEY][Path.toKey(normalized)]
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
--[=[
|
|
419
|
+
@method HasTransient
|
|
420
|
+
@within Data
|
|
421
|
+
@tag Query
|
|
422
|
+
@param path PathToken?
|
|
423
|
+
@return boolean
|
|
424
|
+
Returns whether a transient overlay exists at or below the path.
|
|
425
|
+
]=]
|
|
426
|
+
function Data:HasTransient(path: DataPathLike?): boolean
|
|
427
|
+
local normalized = normalizePath(path, true) or {}
|
|
428
|
+
local key = Path.toKey(normalized)
|
|
429
|
+
local transient = self[TRANSIENT_KEY]
|
|
430
|
+
if transient[key] ~= nil then
|
|
431
|
+
return true
|
|
432
|
+
end
|
|
433
|
+
for tKey in transient do
|
|
434
|
+
if isDescendantPath(tKey, key) then
|
|
435
|
+
return true
|
|
436
|
+
end
|
|
437
|
+
end
|
|
438
|
+
return false
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
--[=[
|
|
442
|
+
@method Typed
|
|
443
|
+
@within Data
|
|
444
|
+
@param path PathToken
|
|
445
|
+
@return PathToken
|
|
446
|
+
Type helper for stronger inference in signals and read/write calls.
|
|
447
|
+
]=]
|
|
448
|
+
function Data:Typed(path: DataPathLike): any
|
|
449
|
+
return path :: any
|
|
450
|
+
end
|
|
451
|
+
|
|
452
|
+
function Data:_fireChanged(path: DataPath, newValue: any, oldValue: any)
|
|
453
|
+
if newValue == oldValue then
|
|
454
|
+
return
|
|
455
|
+
end
|
|
456
|
+
local key = Path.toKey(path)
|
|
457
|
+
local sig = self[CHANGED_MAP_KEY][key]
|
|
458
|
+
if sig then
|
|
459
|
+
sig:Fire(newValue, oldValue)
|
|
460
|
+
end
|
|
461
|
+
if #path > 0 then
|
|
462
|
+
local parentKey = Path.toKey(Path.parent(path))
|
|
463
|
+
local idx = self[INDEX_CHANGED_MAP_KEY][parentKey]
|
|
464
|
+
if idx then
|
|
465
|
+
idx:Fire(path[#path], newValue, oldValue)
|
|
466
|
+
end
|
|
467
|
+
end
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
function Data:_applySet(path: DataPath, value: any)
|
|
471
|
+
assert(path and #path > 0, "Data: path must be non-empty")
|
|
472
|
+
local parent, key = descend(self[ROOT_KEY], path, self[AUTO_CREATE_KEY])
|
|
473
|
+
assert(parent ~= nil and key ~= nil, string.format(INVALID_PATH_ERROR, pathToString(path)))
|
|
474
|
+
local old = rawget(parent, key)
|
|
475
|
+
if self[STRICT_PATHS_KEY] and not self[AUTO_CREATE_KEY] and old == nil and type(key) ~= "number" then
|
|
476
|
+
error(string.format(INVALID_PATH_ERROR, pathToString(path)))
|
|
477
|
+
end
|
|
478
|
+
rawset(parent, key, value)
|
|
479
|
+
Data._fireChanged(self, path, value, old)
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
function Data._applyTransientSet(self: any, path: DataPath, value: any)
|
|
483
|
+
local oldMerged = Data.Get(self, path)
|
|
484
|
+
self[TRANSIENT_KEY][Path.toKey(path)] = value
|
|
485
|
+
local newMerged = Data.Get(self, path)
|
|
486
|
+
Data._fireChanged(self, path, newMerged, oldMerged)
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
function Data._applyTransientArrayInsert(self: any, path: DataPath, value: any, index: number?)
|
|
490
|
+
local current = Data.Get(self, path)
|
|
491
|
+
local arr = if type(current) == "table" then copyArray(current) else {}
|
|
492
|
+
if index then
|
|
493
|
+
table.insert(arr, index, value)
|
|
494
|
+
else
|
|
495
|
+
table.insert(arr, value)
|
|
496
|
+
index = #arr
|
|
497
|
+
end
|
|
498
|
+
Data._applyTransientSet(self, path, arr)
|
|
499
|
+
local sig = self[ARRAY_INSERTED_MAP_KEY][Path.toKey(path)]
|
|
500
|
+
if sig then
|
|
501
|
+
sig:Fire(index, value)
|
|
502
|
+
end
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
function Data._applyTransientArrayRemove(self: any, path: DataPath, index: number): any
|
|
506
|
+
local current = Data.Get(self, path)
|
|
507
|
+
local arr = if type(current) == "table" then copyArray(current) else {}
|
|
508
|
+
local removed = table.remove(arr, index)
|
|
509
|
+
Data._applyTransientSet(self, path, arr)
|
|
510
|
+
local sig = self[ARRAY_REMOVED_MAP_KEY][Path.toKey(path)]
|
|
511
|
+
if sig then
|
|
512
|
+
sig:Fire(index, removed)
|
|
513
|
+
end
|
|
514
|
+
return removed
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
function Data._applyTransientClear(self: any, path: DataPath?)
|
|
518
|
+
if path then
|
|
519
|
+
local key = Path.toKey(path)
|
|
520
|
+
if self[TRANSIENT_KEY][key] == nil then
|
|
521
|
+
return
|
|
522
|
+
end
|
|
523
|
+
local oldMerged = Data.Get(self, path)
|
|
524
|
+
self[TRANSIENT_KEY][key] = nil
|
|
525
|
+
local newMerged = Data.Get(self, path)
|
|
526
|
+
Data._fireChanged(self, path, newMerged, oldMerged)
|
|
527
|
+
return
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
if next(self[TRANSIENT_KEY]) == nil then
|
|
531
|
+
return
|
|
532
|
+
end
|
|
533
|
+
table.clear(self[TRANSIENT_KEY])
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
function Data:_applyArrayInsert(path: DataPath, value: any, index: number?)
|
|
537
|
+
local arr = getPersistedAt(self[ROOT_KEY], path)
|
|
538
|
+
assert(type(arr) == "table", "Data: ArrayInsert requires an array path")
|
|
539
|
+
if index then
|
|
540
|
+
table.insert(arr, index, value)
|
|
541
|
+
else
|
|
542
|
+
table.insert(arr, value)
|
|
543
|
+
index = #arr
|
|
544
|
+
end
|
|
545
|
+
local sig = self[ARRAY_INSERTED_MAP_KEY][Path.toKey(path)]
|
|
546
|
+
if sig then
|
|
547
|
+
sig:Fire(index, value)
|
|
548
|
+
end
|
|
549
|
+
end
|
|
550
|
+
|
|
551
|
+
function Data:_applyArrayRemove(path: DataPath, index: number): any
|
|
552
|
+
local arr = getPersistedAt(self[ROOT_KEY], path)
|
|
553
|
+
assert(type(arr) == "table", "Data: ArrayRemove requires an array path")
|
|
554
|
+
local removed = table.remove(arr, index)
|
|
555
|
+
local sig = self[ARRAY_REMOVED_MAP_KEY][Path.toKey(path)]
|
|
556
|
+
if sig then
|
|
557
|
+
sig:Fire(index, removed)
|
|
558
|
+
end
|
|
559
|
+
return removed
|
|
560
|
+
end
|
|
561
|
+
|
|
562
|
+
--[=[
|
|
563
|
+
@method Set
|
|
564
|
+
@within Data
|
|
565
|
+
@tag Mutation
|
|
566
|
+
@param path PathToken
|
|
567
|
+
@param value any
|
|
568
|
+
Writes and persists to ProfileStore. **Server only.**
|
|
569
|
+
]=]
|
|
570
|
+
function Data:Set(path: DataPathLike, value: any)
|
|
571
|
+
assert(self[WRITABLE_KEY], READ_ONLY_ERROR)
|
|
572
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
573
|
+
Data._applySet(self, normalized, value)
|
|
574
|
+
self.Changed:Fire(Enums.Set, normalized, value)
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
--[=[
|
|
578
|
+
@method SetTransient
|
|
579
|
+
@within Data
|
|
580
|
+
@tag Mutation
|
|
581
|
+
@param path PathToken
|
|
582
|
+
@param value any
|
|
583
|
+
Writes a transient overlay visible in `Get()` but **not saved**. **Server only.**
|
|
584
|
+
]=]
|
|
585
|
+
function Data:SetTransient(path: DataPathLike, value: any)
|
|
586
|
+
assert(self[WRITABLE_KEY], READ_ONLY_ERROR)
|
|
587
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
588
|
+
Data._applyTransientSet(self, normalized, value)
|
|
589
|
+
self.Changed:Fire(Enums.SetTransient, normalized, value)
|
|
590
|
+
end
|
|
591
|
+
|
|
592
|
+
--[=[
|
|
593
|
+
@method Update
|
|
594
|
+
@within Data
|
|
595
|
+
@tag Mutation
|
|
596
|
+
@param path PathToken
|
|
597
|
+
@param fn (any) -> any
|
|
598
|
+
Updates the persisted value using a callback. **Server only.**
|
|
599
|
+
]=]
|
|
600
|
+
function Data:Update(path: DataPathLike, fn: (any) -> any): any
|
|
601
|
+
assert(self[WRITABLE_KEY], READ_ONLY_ERROR)
|
|
602
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
603
|
+
local current = self:GetPersisted(normalized)
|
|
604
|
+
local new = fn(current)
|
|
605
|
+
self:Set(normalized, new)
|
|
606
|
+
return new
|
|
607
|
+
end
|
|
608
|
+
|
|
609
|
+
--[=[
|
|
610
|
+
@method UpdateTransient
|
|
611
|
+
@within Data
|
|
612
|
+
@tag Mutation
|
|
613
|
+
@param path PathToken
|
|
614
|
+
@param fn (any) -> any
|
|
615
|
+
Updates the merged value through a transient overlay. **Server only.**
|
|
616
|
+
]=]
|
|
617
|
+
function Data:UpdateTransient(path: DataPathLike, fn: (any) -> any): any
|
|
618
|
+
assert(self[WRITABLE_KEY], READ_ONLY_ERROR)
|
|
619
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
620
|
+
local current = self:Get(normalized)
|
|
621
|
+
local new = fn(current)
|
|
622
|
+
self:SetTransient(normalized, new)
|
|
623
|
+
return new
|
|
624
|
+
end
|
|
625
|
+
|
|
626
|
+
--[=[
|
|
627
|
+
@method ClearTransient
|
|
628
|
+
@within Data
|
|
629
|
+
@tag Mutation
|
|
630
|
+
@param path PathToken?
|
|
631
|
+
Clears transient overlay at path, or all overlays when `path` is omitted. **Server only.**
|
|
632
|
+
]=]
|
|
633
|
+
function Data:ClearTransient(path: DataPathLike?)
|
|
634
|
+
assert(self[WRITABLE_KEY], READ_ONLY_ERROR)
|
|
635
|
+
if path ~= nil then
|
|
636
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
637
|
+
Data._applyTransientClear(self, normalized)
|
|
638
|
+
self.Changed:Fire(Enums.ClearTransient, normalized)
|
|
639
|
+
return
|
|
640
|
+
end
|
|
641
|
+
Data._applyTransientClear(self, nil)
|
|
642
|
+
self.Changed:Fire(Enums.ClearTransient, nil)
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
--[=[
|
|
646
|
+
@method ArrayInsert
|
|
647
|
+
@within Data
|
|
648
|
+
@tag Mutation
|
|
649
|
+
@param path PathToken
|
|
650
|
+
@param value any
|
|
651
|
+
@param index number?
|
|
652
|
+
Inserts into a persisted array. **Server only.**
|
|
653
|
+
]=]
|
|
654
|
+
function Data:ArrayInsert(path: DataPathLike, value: any, index: number?)
|
|
655
|
+
assert(self[WRITABLE_KEY], READ_ONLY_ERROR)
|
|
656
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
657
|
+
local arr = getPersistedAt(self[ROOT_KEY], normalized)
|
|
658
|
+
assert(type(arr) == "table", "Data:ArrayInsert requires an array path")
|
|
659
|
+
if index then
|
|
660
|
+
table.insert(arr, index, value)
|
|
661
|
+
else
|
|
662
|
+
table.insert(arr, value)
|
|
663
|
+
index = #arr
|
|
664
|
+
end
|
|
665
|
+
local sig = self[ARRAY_INSERTED_MAP_KEY][Path.toKey(normalized)]
|
|
666
|
+
if sig then
|
|
667
|
+
sig:Fire(index, value)
|
|
668
|
+
end
|
|
669
|
+
self.Changed:Fire(Enums.ArrayInsert, normalized, value, index)
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
--[=[
|
|
673
|
+
@method ArrayInsertTransient
|
|
674
|
+
@within Data
|
|
675
|
+
@tag Mutation
|
|
676
|
+
Inserts into an array through transient overlay. **Server only.**
|
|
677
|
+
]=]
|
|
678
|
+
function Data:ArrayInsertTransient(path: DataPathLike, value: any, index: number?)
|
|
679
|
+
assert(self[WRITABLE_KEY], READ_ONLY_ERROR)
|
|
680
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
681
|
+
Data._applyTransientArrayInsert(self, normalized, value, index)
|
|
682
|
+
self.Changed:Fire(Enums.ArrayInsertTransient, normalized, value, index)
|
|
683
|
+
end
|
|
684
|
+
|
|
685
|
+
--[=[
|
|
686
|
+
@method ArrayRemove
|
|
687
|
+
@within Data
|
|
688
|
+
@tag Mutation
|
|
689
|
+
@param path PathToken
|
|
690
|
+
@param index number
|
|
691
|
+
Removes from a persisted array and returns the removed value. **Server only.**
|
|
692
|
+
]=]
|
|
693
|
+
function Data:ArrayRemove(path: DataPathLike, index: number): any
|
|
694
|
+
assert(self[WRITABLE_KEY], READ_ONLY_ERROR)
|
|
695
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
696
|
+
local arr = getPersistedAt(self[ROOT_KEY], normalized)
|
|
697
|
+
assert(type(arr) == "table", "Data:ArrayRemove requires an array path")
|
|
698
|
+
local removed = table.remove(arr, index)
|
|
699
|
+
local sig = self[ARRAY_REMOVED_MAP_KEY][Path.toKey(normalized)]
|
|
700
|
+
if sig then
|
|
701
|
+
sig:Fire(index, removed)
|
|
702
|
+
end
|
|
703
|
+
self.Changed:Fire(Enums.ArrayRemove, normalized, index)
|
|
704
|
+
return removed
|
|
705
|
+
end
|
|
706
|
+
|
|
707
|
+
--[=[
|
|
708
|
+
@method ArrayRemoveTransient
|
|
709
|
+
@within Data
|
|
710
|
+
@tag Mutation
|
|
711
|
+
Removes from an array through transient overlay. **Server only.**
|
|
712
|
+
]=]
|
|
713
|
+
function Data:ArrayRemoveTransient(path: DataPathLike, index: number): any
|
|
714
|
+
assert(self[WRITABLE_KEY], READ_ONLY_ERROR)
|
|
715
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
716
|
+
local removed = Data._applyTransientArrayRemove(self, normalized, index)
|
|
717
|
+
self.Changed:Fire(Enums.ArrayRemoveTransient, normalized, index)
|
|
718
|
+
return removed
|
|
719
|
+
end
|
|
720
|
+
|
|
721
|
+
const normalizeOrder = function(order: OrderedListOrder?): string
|
|
722
|
+
if order == nil then
|
|
723
|
+
return PackageEnum.OrderList.Desc
|
|
724
|
+
end
|
|
725
|
+
if order == PackageEnum.OrderList.Asc or order == "asc" then
|
|
726
|
+
return PackageEnum.OrderList.Asc
|
|
727
|
+
end
|
|
728
|
+
return PackageEnum.OrderList.Desc
|
|
729
|
+
end
|
|
730
|
+
|
|
731
|
+
--[=[
|
|
732
|
+
@method GetOrderedList
|
|
733
|
+
@within Data
|
|
734
|
+
@tag Query
|
|
735
|
+
@param path PathToken
|
|
736
|
+
@param options OrderedListOptions
|
|
737
|
+
@return { OrderedListEntry }
|
|
738
|
+
Collects and sorts table entries by `options.key`. Supports `order` and `limit`.
|
|
739
|
+
]=]
|
|
740
|
+
function Data:GetOrderedList(path: DataPathLike, options: OrderedListOptions): { OrderedListEntry<any> }
|
|
741
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
742
|
+
local list = self:Get(normalized)
|
|
743
|
+
assert(type(list) == "table", "Data:GetOrderedList requires a table path")
|
|
744
|
+
|
|
745
|
+
local key = options.key
|
|
746
|
+
local order = normalizeOrder(options.order)
|
|
747
|
+
local entries = table.create(#list)
|
|
748
|
+
|
|
749
|
+
for index, item in list do
|
|
750
|
+
if type(item) == "table" then
|
|
751
|
+
entries[#entries + 1] = {
|
|
752
|
+
index = index,
|
|
753
|
+
value = item,
|
|
754
|
+
priority = item[key],
|
|
755
|
+
}
|
|
756
|
+
end
|
|
757
|
+
end
|
|
758
|
+
|
|
759
|
+
table.sort(entries, function(a, b)
|
|
760
|
+
local left = a.priority
|
|
761
|
+
local right = b.priority
|
|
762
|
+
if order == PackageEnum.OrderList.Desc then
|
|
763
|
+
return (left or 0) > (right or 0)
|
|
764
|
+
end
|
|
765
|
+
return (left or 0) < (right or 0)
|
|
766
|
+
end)
|
|
767
|
+
|
|
768
|
+
local limit = options.limit
|
|
769
|
+
if limit and limit < #entries then
|
|
770
|
+
local trimmed = table.create(limit)
|
|
771
|
+
for i = 1, limit do
|
|
772
|
+
trimmed[i] = entries[i]
|
|
773
|
+
end
|
|
774
|
+
return trimmed
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
return entries
|
|
778
|
+
end
|
|
779
|
+
|
|
780
|
+
--[=[
|
|
781
|
+
@method GetOrderedListWithPriority
|
|
782
|
+
@within Data
|
|
783
|
+
@tag Query
|
|
784
|
+
@param path PathToken
|
|
785
|
+
@param key string
|
|
786
|
+
@param order OrderedListOrder?
|
|
787
|
+
Shortcut for `GetOrderedList` sorted by one field. Default order: `Enum.OrderList.Desc`.
|
|
788
|
+
]=]
|
|
789
|
+
function Data:GetOrderedListWithPriority(path: DataPathLike, key: string, order: OrderedListOrder?): { OrderedListEntry<any> }
|
|
790
|
+
return self:GetOrderedList(path, {
|
|
791
|
+
key = key,
|
|
792
|
+
order = order or PackageEnum.OrderList.Desc,
|
|
793
|
+
})
|
|
794
|
+
end
|
|
795
|
+
|
|
796
|
+
const ensureSignal = function(map: { [string]: SignalT }, key: string): SignalT
|
|
797
|
+
if not map[key] then
|
|
798
|
+
map[key] = Signal.new()
|
|
799
|
+
end
|
|
800
|
+
return map[key]
|
|
801
|
+
end
|
|
802
|
+
|
|
803
|
+
--[=[
|
|
804
|
+
@method GetChangedSignal
|
|
805
|
+
@within Data
|
|
806
|
+
@tag Signals
|
|
807
|
+
@param path PathToken
|
|
808
|
+
@return Signal
|
|
809
|
+
Fires when the merged value at path changes `(newValue, oldValue)`.
|
|
810
|
+
]=]
|
|
811
|
+
function Data:GetChangedSignal<V>(path: TypedPath<V> | DataPathLike): ChangedSignal<V>
|
|
812
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
813
|
+
return ensureSignal(self[CHANGED_MAP_KEY], Path.toKey(normalized)) :: ChangedSignal<V>
|
|
814
|
+
end
|
|
815
|
+
|
|
816
|
+
--[=[
|
|
817
|
+
@method GetPathChangedSignal
|
|
818
|
+
@within Data
|
|
819
|
+
@tag Signals
|
|
820
|
+
Alias of `GetChangedSignal`.
|
|
821
|
+
]=]
|
|
822
|
+
function Data:GetPathChangedSignal<V>(path: TypedPath<V> | DataPathLike): ChangedSignal<V>
|
|
823
|
+
return self:GetChangedSignal(path)
|
|
824
|
+
end
|
|
825
|
+
|
|
826
|
+
--[=[
|
|
827
|
+
@method GetIndexChangedSignal
|
|
828
|
+
@within Data
|
|
829
|
+
@tag Signals
|
|
830
|
+
Fires when a direct child changes `(key, newValue, oldValue)`.
|
|
831
|
+
]=]
|
|
832
|
+
function Data:GetIndexChangedSignal<V>(path: TypedPath<V> | DataPathLike): IndexChangedSignal<V>
|
|
833
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
834
|
+
return ensureSignal(self[INDEX_CHANGED_MAP_KEY], Path.toKey(normalized)) :: IndexChangedSignal<V>
|
|
835
|
+
end
|
|
836
|
+
|
|
837
|
+
--[=[
|
|
838
|
+
@method GetArrayInsertedSignal
|
|
839
|
+
@within Data
|
|
840
|
+
@tag Signals
|
|
841
|
+
Fires when an item is inserted `(index, value)`.
|
|
842
|
+
]=]
|
|
843
|
+
function Data:GetArrayInsertedSignal<V>(path: TypedPath<{ V }> | DataPathLike): ArrayInsertedSignal<V>
|
|
844
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
845
|
+
return ensureSignal(self[ARRAY_INSERTED_MAP_KEY], Path.toKey(normalized)) :: ArrayInsertedSignal<V>
|
|
846
|
+
end
|
|
847
|
+
|
|
848
|
+
--[=[
|
|
849
|
+
@method GetArrayRemovedSignal
|
|
850
|
+
@within Data
|
|
851
|
+
@tag Signals
|
|
852
|
+
Fires when an item is removed `(index, removedValue)`.
|
|
853
|
+
]=]
|
|
854
|
+
function Data:GetArrayRemovedSignal<V>(path: TypedPath<{ V }> | DataPathLike): ArrayRemovedSignal<V>
|
|
855
|
+
local normalized = normalizePath(path, false) :: DataPath
|
|
856
|
+
return ensureSignal(self[ARRAY_REMOVED_MAP_KEY], Path.toKey(normalized)) :: ArrayRemovedSignal<V>
|
|
857
|
+
end
|
|
858
|
+
|
|
859
|
+
--[=[
|
|
860
|
+
@method Destroy
|
|
861
|
+
@within Data
|
|
862
|
+
@tag Lifecycle
|
|
863
|
+
Destroys internal signals and clears transient state.
|
|
864
|
+
]=]
|
|
865
|
+
function Data:Destroy()
|
|
866
|
+
if self.Destroyed then
|
|
867
|
+
return
|
|
868
|
+
end
|
|
869
|
+
self.Destroyed = true
|
|
870
|
+
table.clear(self[TRANSIENT_KEY])
|
|
871
|
+
for _, s in self[CHANGED_MAP_KEY] do
|
|
872
|
+
s:Destroy()
|
|
873
|
+
end
|
|
874
|
+
for _, s in self[INDEX_CHANGED_MAP_KEY] do
|
|
875
|
+
s:Destroy()
|
|
876
|
+
end
|
|
877
|
+
for _, s in self[ARRAY_INSERTED_MAP_KEY] do
|
|
878
|
+
s:Destroy()
|
|
879
|
+
end
|
|
880
|
+
for _, s in self[ARRAY_REMOVED_MAP_KEY] do
|
|
881
|
+
s:Destroy()
|
|
882
|
+
end
|
|
883
|
+
self.Changed:Destroy()
|
|
884
|
+
end
|
|
885
|
+
|
|
886
|
+
return Data
|