├── .editorconfig ├── LICENSE ├── README.md └── Libraries.lua /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | insert_final_newline = true 10 | 11 | 12 | # Matches multiple files with brace expansion notation 13 | # Set default charset 14 | [*.lua] 15 | charset = utf-8 16 | indent_style = tab 17 | indent_size = 4 18 | trim_trailing_whitespace = true 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 RoStrap 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Libraries 2 | When you use RoStrap, you are using tested and tried Libraries which are continually **maintained** by the best developers in town! Whenever a developer updates their Library on GitHub, you will see an update button appear (under the `INSTALLED` tab). 3 | 4 | ![](https://user-images.githubusercontent.com/15217173/38776955-f2ca9710-405c-11e8-86e9-74452dbd44ea.png) 5 | 6 | Updates are detected when your source code doesn't match the source code of the latest version of GitHub, excluding whitespace, comments, and configurable variables. Configurable variables have to look like this: 7 | 8 | ```lua 9 | local ALL_CAMEL_CASE = "SINGLE-LINE-VALUE" 10 | ``` 11 | 12 | # Contributing 13 | If you wish to contribute a Library, simply submit a pull request to [Libraries.lua](https://github.com/RoStrap/Libraries/blob/master/Libraries.lua). Simply insert a new table with fields `URL` (you can leave off https://github.com) and an optional `Description` and you are good to go! 14 | 15 | ## Library Standards 16 | Libraries contributed to RoStrap must be useful, reusable, and reasonably universal. The code must be stable, maintained, readable, and speedy. It must have a readme or documentation website that clearly outlines its use and includes functioning demo code. Images help. 17 | 18 | Submitted Libraries may be subject to code review. 19 | 20 | ## How to Package Libraries 21 | To indicate to the plugin's installer that a Lua file is a descendant of another, simply make a folder with the name of the parent Lua file, and place the parent Lua file inside with the name "init" (or "main" or "_"). Here is [an example of a single Library that has ModuleScripts within it using this method.](https://github.com/evaera/EvLightning) 22 | 23 | ## Dependencies 24 | Dependencies are detected by the plugin using [this handy script](https://github.com/RoStrap/Libraries/blob/GetDeps/GetDependencies.ignore.lua). It can detect from the following source code that `Tween` and `Maid` are the names a Library will need to have installed in order to work. If your source code intends to rely on dependencies from the RoStrap system, [the detection script](https://github.com/RoStrap/Libraries/blob/GetDeps/GetDependencies.ignore.lua) *must* be able to successfully determine the dependencies of your Libraries. 25 | 26 | ```lua 27 | local ReplicatedStorage = game:GetService("ReplicatedStorage") -- You have to use game:GetService 28 | local Resources = require(ReplicatedStorage:WaitForChild("Resources")) -- You have to use WaitForChild 29 | local require = Resources.LoadLibrary -- You can localize LoadLibrary 30 | 31 | local Tween = require("Tween") -- Either of these work 32 | local Maid = Resources:LoadLibrary('Maid') 33 | ``` 34 | -------------------------------------------------------------------------------- /Libraries.lua: -------------------------------------------------------------------------------- 1 | return { 2 | Janitor = { 3 | URL = "https://raw.githubusercontent.com/RoStrap/Events/master/Janitor.lua"; 4 | Documentation = "https://rostrap.github.io/Libraries/Events/Janitor/"; 5 | ParentFolderPath = "Events"; 6 | }; 7 | 8 | Signal = { 9 | URL = "https://raw.githubusercontent.com/RoStrap/Events/master/Signal.lua"; 10 | Documentation = "https://rostrap.github.io/Libraries/Events/Signal/"; 11 | ParentFolderPath = "Events"; 12 | }; 13 | 14 | ReplicatedValue = { 15 | URL = "https://raw.githubusercontent.com/RoStrap/Events/master/ReplicatedValue.lua"; 16 | Documentation = "https://rostrap.github.io/Libraries/Events/ReplicatedValue/"; 17 | ParentFolderPath = "Events"; 18 | }; 19 | 20 | Keys = { 21 | URL = "https://raw.githubusercontent.com/RoStrap/Input/master/Keys.lua"; 22 | Documentation = "https://rostrap.github.io/Libraries/Input/Keys/"; 23 | ParentFolderPath = "Input"; 24 | }; 25 | 26 | Enumeration = { 27 | URL = "https://raw.githubusercontent.com/RoStrap/Classes/master/Enumeration.lua"; 28 | Documentation = "https://rostrap.github.io/Libraries/Classes/Enumeration"; 29 | ParentFolderPath = "Classes"; 30 | }; 31 | 32 | PseudoInstance = { 33 | URL = "https://raw.githubusercontent.com/RoStrap/Classes/master/PseudoInstance.lua"; 34 | Documentation = "https://rostrap.github.io/Libraries/Classes/PseudoInstance/"; 35 | ParentFolderPath = "Classes"; 36 | }; 37 | 38 | ReplicatedPseudoInstance = { 39 | URL = "https://raw.githubusercontent.com/RoStrap/Classes/master/ReplicatedPseudoInstance.lua"; 40 | Documentation = "https://rostrap.github.io/Libraries/Classes/ReplicatedPseudoInstance/"; 41 | ParentFolderPath = "Classes"; 42 | }; 43 | 44 | Sentry = { 45 | URL = "https://github.com/RoStrap/Sentry"; 46 | Documentation = "https://rostrap.github.io/Libraries/Sentry/"; 47 | }; 48 | 49 | Bezier = { 50 | URL = "https://raw.githubusercontent.com/RoStrap/Interpolation/master/Bezier.lua"; 51 | Documentation = "https://rostrap.github.io/Libraries/Interpolation/Bezier/"; 52 | ParentFolderPath = "Interpolation"; 53 | }; 54 | 55 | EasingFunctions = { 56 | URL = "https://raw.githubusercontent.com/RoStrap/Interpolation/master/EasingFunctions.lua"; 57 | Documentation = "https://rostrap.github.io/Libraries/Interpolation/EasingFunctions/"; 58 | ParentFolderPath = "Interpolation"; 59 | }; 60 | 61 | Lerps = { 62 | URL = "https://raw.githubusercontent.com/RoStrap/Interpolation/master/Lerps.lua"; 63 | Documentation = "https://rostrap.github.io/Libraries/Interpolation/Lerps/"; 64 | ParentFolderPath = "Interpolation"; 65 | }; 66 | 67 | Tween = { 68 | URL = "https://raw.githubusercontent.com/RoStrap/Interpolation/master/Tween.lua"; 69 | Documentation = "https://rostrap.github.io/Libraries/Interpolation/Tween/"; 70 | ParentFolderPath = "Interpolation"; 71 | }; 72 | 73 | Array = { 74 | URL = "https://raw.githubusercontent.com/RoStrap/DataTypes/master/Array.lua"; 75 | Documentation = "https://rostrap.github.io/Libraries/DataTypes/Array/"; 76 | ParentFolderPath = "DataTypes"; 77 | }; 78 | --[[ 79 | HTMLParser = { 80 | URL = "https://raw.githubusercontent.com/RoStrap/DataTypes/master/HTMLParser.lua"; 81 | Documentation = "https://rostrap.github.io/Libraries/DataTypes/HTMLParser/"; 82 | ParentFolderPath = "DataTypes"; 83 | }; 84 | --]] 85 | SortedArray = { 86 | URL = "https://raw.githubusercontent.com/RoStrap/DataTypes/master/SortedArray.lua"; 87 | Documentation = "https://rostrap.github.io/Libraries/DataTypes/SortedArray/"; 88 | ParentFolderPath = "DataTypes"; 89 | }; 90 | 91 | Table = { 92 | URL = "https://raw.githubusercontent.com/RoStrap/DataTypes/master/Table.lua"; 93 | Documentation = "https://rostrap.github.io/Libraries/DataTypes/Table/"; 94 | ParentFolderPath = "DataTypes"; 95 | }; 96 | 97 | BigNum = { 98 | URL = "https://raw.githubusercontent.com/RoStrap/Math/master/BigNum.lua"; 99 | Documentation = "https://rostrap.github.io/Libraries/Math/BigNum/"; 100 | ParentFolderPath = "Math"; 101 | }; 102 | 103 | Leveler = { 104 | URL = "https://raw.githubusercontent.com/RoStrap/Math/master/Leveler.lua"; 105 | Documentation = "https://rostrap.github.io/Libraries/Math/Leveler/"; 106 | ParentFolderPath = "Math"; 107 | }; 108 | 109 | Normal = { 110 | URL = "https://raw.githubusercontent.com/RoStrap/Math/master/Normal.lua"; 111 | Documentation = "https://rostrap.github.io/Libraries/Math/Normal/"; 112 | ParentFolderPath = "Math"; 113 | }; 114 | 115 | Spring = { 116 | URL = "https://raw.githubusercontent.com/RoStrap/Math/master/Spring.lua"; 117 | Documentation = "https://rostrap.github.io/Libraries/Math/Spring/"; 118 | ParentFolderPath = "Math"; 119 | }; 120 | 121 | WeightedProbabilityFunction = { 122 | URL = "https://raw.githubusercontent.com/RoStrap/Math/master/WeightedProbabilityFunction.lua"; 123 | Documentation = "https://rostrap.github.io/Libraries/Math/WeightedProbabilityFunction/"; 124 | ParentFolderPath = "Math"; 125 | }; 126 | 127 | FastSpawn = { 128 | URL = "https://raw.githubusercontent.com/RoStrap/Helper/master/FastSpawn.lua"; 129 | Documentation = "https://rostrap.github.io/Libraries/Helper/FastSpawn/"; 130 | ParentFolderPath = "Helper"; 131 | }; 132 | 133 | Make = { 134 | URL = "https://raw.githubusercontent.com/RoStrap/Helper/master/Make.lua"; 135 | Documentation = "https://rostrap.github.io/Libraries/Helper/Make/"; 136 | ParentFolderPath = "Helper"; 137 | }; 138 | 139 | Date = { 140 | URL = "https://raw.githubusercontent.com/RoStrap/Time/master/Date.lua"; 141 | Documentation = "https://rostrap.github.io/Libraries/Time/Date/"; 142 | ParentFolderPath = "Time"; 143 | }; 144 | 145 | SyncedPoller = { 146 | URL = "https://raw.githubusercontent.com/RoStrap/Time/master/SyncedPoller.lua"; 147 | Documentation = "https://rostrap.github.io/Libraries/Time/SyncedPoller/"; 148 | ParentFolderPath = "Time"; 149 | }; 150 | 151 | ConditionalPoller = { 152 | URL = "https://raw.githubusercontent.com/RoStrap/Time/master/ConditionalPoller.lua"; 153 | Documentation = "https://rostrap.github.io/Libraries/Time/ConditionalPoller/"; 154 | ParentFolderPath = "Time"; 155 | }; 156 | 157 | Debug = { 158 | URL = "https://raw.githubusercontent.com/RoStrap/Debugging/master/Debug.lua"; 159 | Documentation = "https://rostrap.github.io/Libraries/Debugging/Debug/"; 160 | ParentFolderPath = "Debugging"; 161 | }; 162 | 163 | Typer = { 164 | URL = "https://raw.githubusercontent.com/RoStrap/Debugging/master/Typer.lua"; 165 | Documentation = "https://rostrap.github.io/Libraries/Debugging/Typer/"; 166 | ParentFolderPath = "Debugging"; 167 | }; 168 | 169 | AsymmetricTransformation = { 170 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/AsymmetricTransformation.lua"; 171 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/AsymmetricTransformation/"; 172 | ParentFolderPath = "RoStrapUI"; 173 | }; 174 | 175 | Checkbox = { 176 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/Checkbox.lua"; 177 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/Checkbox/"; 178 | ParentFolderPath = "RoStrapUI"; 179 | }; 180 | 181 | ChoiceDialog = { 182 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/ChoiceDialog.lua"; 183 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/ChoiceDialog/"; 184 | ParentFolderPath = "RoStrapUI"; 185 | }; 186 | 187 | ConfirmationDialog = { 188 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/ConfirmationDialog.lua"; 189 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/ConfirmationDialog/"; 190 | ParentFolderPath = "RoStrapUI"; 191 | }; 192 | 193 | Color = { 194 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/Color.lua"; 195 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/Color/"; 196 | ParentFolderPath = "RoStrapUI"; 197 | }; 198 | 199 | Radio = { 200 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/Radio.lua"; 201 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/Radio/"; 202 | ParentFolderPath = "RoStrapUI"; 203 | }; 204 | 205 | RadioGroup = { 206 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/RadioGroup.lua"; 207 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/RadioGroup/"; 208 | ParentFolderPath = "RoStrapUI"; 209 | }; 210 | 211 | RippleButton = { 212 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/RippleButton.lua"; 213 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/RippleButton/"; 214 | ParentFolderPath = "RoStrapUI"; 215 | }; 216 | 217 | Rippler = { 218 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/Rippler.lua"; 219 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/Rippler/"; 220 | ParentFolderPath = "RoStrapUI"; 221 | }; 222 | 223 | RoStrapPriorityUI = { 224 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/RoStrapPriorityUI.lua"; 225 | Documentation = "WIP"; 226 | ParentFolderPath = "RoStrapUI"; 227 | }; 228 | 229 | SelectionController = { 230 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/SelectionController.lua"; 231 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/SelectionController/"; 232 | ParentFolderPath = "RoStrapUI"; 233 | }; 234 | 235 | Shadow = { 236 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/Shadow.lua"; 237 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/Shadow/"; 238 | ParentFolderPath = "RoStrapUI"; 239 | }; 240 | 241 | Snackbar = { 242 | URL = "https://raw.githubusercontent.com/RoStrap/RoStrapUI/master/Snackbar.lua"; 243 | Documentation = "https://rostrap.github.io/Libraries/RoStrapUI/Snackbar/"; 244 | ParentFolderPath = "RoStrapUI"; 245 | }; 246 | 247 | Try = { 248 | URL = "Validark/RBX-Try-Library/tree/patch-4"; 249 | Description = "An asynchronous pcall-wrapper for interdependent error-prone functions"; 250 | }; 251 | 252 | EvLightning = { 253 | URL = "evaera/EvLightning"; 254 | Description = "Realistic-looking lightning bolt generator"; 255 | Documentation = "https://github.com/evaera/EvLightning/blob/master/README.md"; 256 | }; 257 | 258 | RadialImage = { 259 | URL = "evaera/RadialSpriteSheetGenerator/blob/master/roblox/RadialImage.lua"; 260 | Description = "A library which displays radial progress indicators using a sprite sheet generated by a nifty tool"; 261 | Documentation = "https://github.com/evaera/RadialSpriteSheetGenerator/blob/master/README.md"; 262 | }; 263 | 264 | 265 | DataStoreService = { 266 | URL = "buildthomas/MockDataStoreService/tree/master/lib"; 267 | Description = "An implementation of DataStoreService in Lua for use in Studio"; 268 | Documentation = "https://github.com/buildthomas/MockDataStoreService/blob/master/README.md"; 269 | }; 270 | 271 | Promise = { 272 | URL = "evaera/roblox-lua-promise/tree/master/lib"; 273 | Description = "An implementation of Promise similar to Promise/A+"; 274 | Documentation = "https://eryn.io/roblox-lua-promise/"; 275 | }; 276 | 277 | Cmdr = { 278 | URL = "evaera/Cmdr"; 279 | Description = "A fully extensible and type-safe admin-commands console"; 280 | Documentation = "https://github.com/evaera/Cmdr/blob/master/README.md"; 281 | ParentFolderPath = "Cmdr.Server"; -- Dot separated directory within Repository.Packages into which Cmdr will be installed 282 | }; 283 | 284 | -- Succeeded by Rocs. 285 | --[[ 286 | Aurora = { 287 | URL = "evaera/Aurora/tree/master/lib"; 288 | Description = "A library that can manage status effects (known as \"Auras\") in your Roblox game"; 289 | Documentation = "https://github.com/evaera/Aurora/blob/master/README.md"; 290 | }; 291 | ]] 292 | 293 | Roact = { 294 | URL = "Roblox/roact/tree/master/src"; 295 | Description = "A declarative UI library similar to Facebook's React"; 296 | Documentation = "https://roblox.github.io/roact/"; 297 | }; 298 | 299 | Rodux = { 300 | URL = "Roblox/rodux/tree/master/src"; 301 | Description = "A state management library inspired by Redux"; 302 | Documentation = "https://roblox.github.io/rodux/"; 303 | }; 304 | 305 | ["Roact-Rodux"] = { 306 | URL = "Roblox/roact-rodux/tree/master/src"; 307 | Description = "An ergonomic binding between Roact and Rodux"; 308 | Documentation = "https://roblox.github.io/roact-rodux/"; 309 | }; 310 | 311 | Replica = { 312 | URL = "headjoe3/Replica/tree/master/Replica"; 313 | Description = "An easily controllable Server/Client data replication library"; 314 | Documentation = "https://github.com/headjoe3/Replica/blob/master/README.md"; 315 | }; 316 | 317 | Rocrastinate = { 318 | URL = "headjoe3/Rocrastinate/tree/master/Rocrastinate"; 319 | Description = "A React/Redux-like state management and view library optimized for Roblox"; 320 | Documentation = "https://github.com/headjoe3/Rocrastinate/blob/master/docs/1-1-introduction.md"; 321 | }; 322 | 323 | DataStore2 = { 324 | URL = "Kampfkarren/Roblox/tree/master/DataStore2"; 325 | Description = "DataStore2 is a simple to use data store system that caches, leading to significantly faster performance over traditional data stores"; 326 | Documentation = "https://kampfkarren.github.io/Roblox/"; 327 | }; 328 | 329 | ContextControls = { 330 | URL = "vocksel/context-controls/tree/main/src"; 331 | Description = "Wrapper for ContextActionService with easy mobile button support"; 332 | Documentation = "https://github.com/vocksel/context-controls/blob/main/README.md"; 333 | }; 334 | 335 | t = { 336 | URL = "osyrisrblx/t/tree/master/lib"; 337 | Description = "A module which allows you to create type definitions to check values against"; 338 | Documentation = "https://github.com/osyrisrblx/t/blob/master/README.md"; 339 | }; 340 | 341 | Tag = { 342 | URL = "vocksel/tag/tree/main/src"; 343 | Description = "Class to make tagging instances easy and typesafe"; 344 | Documentation = "https://github.com/vocksel/tag/blob/main/README.md"; 345 | }; 346 | 347 | TestEZ = { 348 | URL = "Roblox/testez/tree/master/src"; 349 | Description = "BDD-style test and assertion library for Roblox Lua"; 350 | Documentation = "https://roblox.github.io/testez/"; 351 | }; 352 | 353 | CameraShaker = { 354 | URL = "Sleitnick/RbxCameraShaker/tree/master/src/CameraShaker"; 355 | Description = "Camera shake effects for Roblox games"; 356 | Documentation = "https://github.com/Sleitnick/RbxCameraShaker/blob/master/README.md"; 357 | }; 358 | 359 | Rocs = { 360 | URL = "rocs-rbx/Rocs/tree/master/lib"; 361 | Description = "Roblox Component System"; 362 | Documentation = "https://rocs-rbx.github.io/Rocs/#rocs"; 363 | }; 364 | 365 | Scheduler = { 366 | URL = "howmanysmall/Scheduler/tree/master/src"; 367 | Description = "A RunService.Heartbeat alternative to Roblox functions that use the legacy scheduler"; 368 | Documentation = "https://github.com/howmanysmall/Scheduler/blob/master/README.md"; 369 | }; 370 | } 371 | --------------------------------------------------------------------------------