roblox-opencode 1.0.0 → 1.0.2
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/README.md +112 -122
- package/commands/setup-game.md +108 -108
- package/commands/sync-check.md +53 -53
- package/core/roblox-core.md +93 -93
- package/dist/server.js +189 -167
- package/package.json +35 -35
- package/skills/roblox-analytics/SKILL.md +277 -277
- package/skills/roblox-analytics/references/event-batcher.luau +75 -75
- package/skills/roblox-animation-vfx/SKILL.md +1325 -1325
- package/skills/roblox-architecture/SKILL.md +877 -863
- package/skills/roblox-architecture/references/combat-systems.md +1381 -1381
- package/skills/roblox-code-review/SKILL.md +686 -686
- package/skills/roblox-data/SKILL.md +889 -889
- package/skills/roblox-data/references/inventory-systems.md +1729 -1729
- package/skills/roblox-debug/SKILL.md +98 -98
- package/skills/roblox-gui/SKILL.md +1103 -1103
- package/skills/roblox-gui-fusion/SKILL.md +150 -150
- package/skills/roblox-gui-fusion/references/inventory.luau +427 -427
- package/skills/roblox-gui-fusion/references/settings-menu.luau +579 -579
- package/skills/roblox-gui-fusion/references/shop.luau +411 -411
- package/skills/roblox-luau-mastery/SKILL.md +1618 -1519
- package/skills/roblox-monetization/SKILL.md +1084 -1084
- package/skills/roblox-monetization/references/process-receipt.luau +131 -131
- package/skills/roblox-networking/SKILL.md +669 -669
- package/skills/roblox-networking/references/remote-validator.luau +193 -193
- package/skills/roblox-publish-checklist/SKILL.md +127 -127
- package/skills/roblox-runtime/SKILL.md +753 -753
- package/skills/roblox-sharp-edges/SKILL.md +294 -294
- package/skills/roblox-sync/SKILL.md +126 -126
- package/skills/roblox-testing/SKILL.md +943 -943
- package/skills/roblox-tooling/SKILL.md +149 -149
- package/vendor/LICENSES/ProfileStore-LICENSE +201 -201
- package/vendor/LICENSES/RbxUtil-LICENSE +7 -7
- package/vendor/LICENSES/promise-LICENSE +20 -20
- package/vendor/LICENSES/t-LICENSE +21 -21
- package/vendor/LICENSES/testez-LICENSE +200 -200
- package/vendor/README.md +83 -83
- package/vendor/fusion/Animation/ExternalTime.luau +83 -83
- package/vendor/fusion/Animation/Spring.luau +321 -321
- package/vendor/fusion/Animation/Stopwatch.luau +127 -127
- package/vendor/fusion/Animation/Tween.luau +187 -187
- package/vendor/fusion/Animation/getTweenDuration.luau +27 -27
- package/vendor/fusion/Animation/getTweenRatio.luau +47 -47
- package/vendor/fusion/Animation/lerpType.luau +163 -163
- package/vendor/fusion/Animation/packType.luau +99 -99
- package/vendor/fusion/Animation/springCoefficients.luau +80 -80
- package/vendor/fusion/Animation/unpackType.luau +102 -102
- package/vendor/fusion/Colour/Oklab.luau +70 -70
- package/vendor/fusion/Colour/sRGB.luau +54 -54
- package/vendor/fusion/External.luau +167 -167
- package/vendor/fusion/ExternalDebug.luau +69 -69
- package/vendor/fusion/Graph/Observer.luau +113 -113
- package/vendor/fusion/Graph/castToGraph.luau +28 -28
- package/vendor/fusion/Graph/change.luau +80 -80
- package/vendor/fusion/Graph/depend.luau +32 -32
- package/vendor/fusion/Graph/evaluate.luau +55 -55
- package/vendor/fusion/Instances/Attribute.luau +57 -57
- package/vendor/fusion/Instances/AttributeChange.luau +46 -46
- package/vendor/fusion/Instances/AttributeOut.luau +63 -63
- package/vendor/fusion/Instances/Child.luau +21 -21
- package/vendor/fusion/Instances/Children.luau +147 -147
- package/vendor/fusion/Instances/Hydrate.luau +32 -32
- package/vendor/fusion/Instances/New.luau +52 -52
- package/vendor/fusion/Instances/OnChange.luau +49 -49
- package/vendor/fusion/Instances/OnEvent.luau +53 -53
- package/vendor/fusion/Instances/Out.luau +69 -69
- package/vendor/fusion/Instances/applyInstanceProps.luau +148 -148
- package/vendor/fusion/Instances/defaultProps.luau +194 -194
- package/vendor/fusion/LICENSE +21 -21
- package/vendor/fusion/Logging/formatError.luau +48 -48
- package/vendor/fusion/Logging/messages.luau +51 -51
- package/vendor/fusion/Logging/parseError.luau +24 -24
- package/vendor/fusion/Memory/checkLifetime.luau +133 -133
- package/vendor/fusion/Memory/deriveScope.luau +23 -23
- package/vendor/fusion/Memory/deriveScopeImpl.luau +44 -44
- package/vendor/fusion/Memory/doCleanup.luau +78 -78
- package/vendor/fusion/Memory/innerScope.luau +33 -33
- package/vendor/fusion/Memory/legacyCleanup.luau +17 -17
- package/vendor/fusion/Memory/needsDestruction.luau +16 -16
- package/vendor/fusion/Memory/poisonScope.luau +33 -33
- package/vendor/fusion/Memory/scopePool.luau +54 -54
- package/vendor/fusion/Memory/scoped.luau +26 -26
- package/vendor/fusion/Memory/whichLivesLonger.luau +74 -74
- package/vendor/fusion/RobloxExternal.luau +97 -97
- package/vendor/fusion/State/Computed.luau +138 -138
- package/vendor/fusion/State/For/Disassembly.luau +210 -210
- package/vendor/fusion/State/For/ForTypes.luau +30 -30
- package/vendor/fusion/State/For/init.luau +109 -109
- package/vendor/fusion/State/ForKeys.luau +93 -93
- package/vendor/fusion/State/ForPairs.luau +96 -96
- package/vendor/fusion/State/ForValues.luau +93 -93
- package/vendor/fusion/State/Value.luau +87 -87
- package/vendor/fusion/State/castToState.luau +25 -25
- package/vendor/fusion/State/peek.luau +30 -30
- package/vendor/fusion/Types.luau +314 -314
- package/vendor/fusion/Utility/Contextual.luau +90 -90
- package/vendor/fusion/Utility/Safe.luau +22 -22
- package/vendor/fusion/Utility/isSimilar.luau +29 -29
- package/vendor/fusion/Utility/merge.luau +35 -35
- package/vendor/fusion/Utility/nameOf.luau +34 -34
- package/vendor/fusion/Utility/never.luau +13 -13
- package/vendor/fusion/Utility/nicknames.luau +10 -10
- package/vendor/fusion/Utility/xtypeof.luau +26 -26
- package/vendor/fusion/init.luau +82 -82
- package/vendor/profilestore/init.luau +2242 -2242
- package/vendor/promise/init.luau +1982 -1982
- package/vendor/rbxutil/buffer-util/Buffer.test.luau +25 -25
- package/vendor/rbxutil/buffer-util/BufferReader.luau +228 -228
- package/vendor/rbxutil/buffer-util/BufferWriter.luau +269 -269
- package/vendor/rbxutil/buffer-util/DataTypeBuffer.luau +223 -223
- package/vendor/rbxutil/buffer-util/Types.luau +60 -60
- package/vendor/rbxutil/buffer-util/index.d.ts +153 -153
- package/vendor/rbxutil/buffer-util/init.luau +41 -41
- package/vendor/rbxutil/buffer-util/package.json +16 -16
- package/vendor/rbxutil/buffer-util/wally.toml +9 -9
- package/vendor/rbxutil/comm/Client/ClientComm.luau +232 -232
- package/vendor/rbxutil/comm/Client/ClientRemoteProperty.luau +156 -156
- package/vendor/rbxutil/comm/Client/ClientRemoteSignal.luau +109 -109
- package/vendor/rbxutil/comm/Client/init.luau +135 -135
- package/vendor/rbxutil/comm/Server/RemoteProperty.luau +295 -295
- package/vendor/rbxutil/comm/Server/RemoteSignal.luau +211 -211
- package/vendor/rbxutil/comm/Server/ServerComm.luau +211 -211
- package/vendor/rbxutil/comm/Server/init.luau +140 -140
- package/vendor/rbxutil/comm/Types.luau +18 -18
- package/vendor/rbxutil/comm/Util.luau +27 -27
- package/vendor/rbxutil/comm/init.luau +35 -35
- package/vendor/rbxutil/comm/wally.toml +13 -13
- package/vendor/rbxutil/component/init.luau +759 -759
- package/vendor/rbxutil/component/init.test.luau +311 -311
- package/vendor/rbxutil/component/wally.toml +14 -14
- package/vendor/rbxutil/concur/init.luau +542 -542
- package/vendor/rbxutil/concur/init.test.luau +364 -364
- package/vendor/rbxutil/concur/wally.toml +8 -8
- package/vendor/rbxutil/enum-list/init.luau +101 -101
- package/vendor/rbxutil/enum-list/init.test.luau +91 -91
- package/vendor/rbxutil/enum-list/wally.toml +8 -8
- package/vendor/rbxutil/find/index.d.ts +20 -20
- package/vendor/rbxutil/find/init.luau +44 -44
- package/vendor/rbxutil/find/package.json +17 -17
- package/vendor/rbxutil/find/wally.toml +8 -8
- package/vendor/rbxutil/input/Gamepad.luau +559 -559
- package/vendor/rbxutil/input/Keyboard.luau +124 -124
- package/vendor/rbxutil/input/Mouse.luau +278 -278
- package/vendor/rbxutil/input/PreferredInput.luau +91 -91
- package/vendor/rbxutil/input/Touch.luau +120 -120
- package/vendor/rbxutil/input/init.luau +33 -33
- package/vendor/rbxutil/input/wally.toml +12 -12
- package/vendor/rbxutil/loader/index.d.ts +15 -15
- package/vendor/rbxutil/loader/init.luau +137 -137
- package/vendor/rbxutil/loader/wally.toml +8 -8
- package/vendor/rbxutil/log/index.d.ts +38 -38
- package/vendor/rbxutil/log/init.luau +746 -746
- package/vendor/rbxutil/log/wally.toml +8 -8
- package/vendor/rbxutil/net/init.luau +190 -190
- package/vendor/rbxutil/net/wally.toml +8 -8
- package/vendor/rbxutil/option/index.d.ts +44 -44
- package/vendor/rbxutil/option/init.luau +489 -489
- package/vendor/rbxutil/option/init.test.luau +342 -342
- package/vendor/rbxutil/option/wally.toml +8 -8
- package/vendor/rbxutil/pid/index.d.ts +53 -53
- package/vendor/rbxutil/pid/init.luau +195 -195
- package/vendor/rbxutil/pid/package.json +16 -16
- package/vendor/rbxutil/pid/wally.toml +9 -9
- package/vendor/rbxutil/quaternion/index.d.ts +117 -117
- package/vendor/rbxutil/quaternion/init.luau +570 -570
- package/vendor/rbxutil/quaternion/package.json +16 -16
- package/vendor/rbxutil/quaternion/wally.toml +9 -9
- package/vendor/rbxutil/query/index.d.ts +43 -43
- package/vendor/rbxutil/query/init.luau +117 -117
- package/vendor/rbxutil/query/package.json +18 -18
- package/vendor/rbxutil/query/wally.toml +9 -9
- package/vendor/rbxutil/sequent/index.d.ts +28 -28
- package/vendor/rbxutil/sequent/init.luau +340 -340
- package/vendor/rbxutil/sequent/package.json +16 -16
- package/vendor/rbxutil/sequent/wally.toml +9 -9
- package/vendor/rbxutil/ser/init.luau +175 -175
- package/vendor/rbxutil/ser/init.test.luau +50 -50
- package/vendor/rbxutil/ser/wally.toml +11 -11
- package/vendor/rbxutil/shake/index.d.ts +36 -36
- package/vendor/rbxutil/shake/init.luau +532 -532
- package/vendor/rbxutil/shake/init.test.luau +267 -267
- package/vendor/rbxutil/shake/package.json +16 -16
- package/vendor/rbxutil/shake/wally.toml +9 -9
- package/vendor/rbxutil/signal/index.d.ts +100 -100
- package/vendor/rbxutil/signal/init.luau +432 -432
- package/vendor/rbxutil/signal/init.test.luau +190 -190
- package/vendor/rbxutil/signal/package.json +17 -17
- package/vendor/rbxutil/signal/wally.toml +9 -9
- package/vendor/rbxutil/silo/TableWatcher.luau +65 -65
- package/vendor/rbxutil/silo/Util.luau +55 -55
- package/vendor/rbxutil/silo/init.luau +338 -338
- package/vendor/rbxutil/silo/init.test.luau +215 -215
- package/vendor/rbxutil/silo/wally.toml +8 -8
- package/vendor/rbxutil/spring/index.d.ts +40 -40
- package/vendor/rbxutil/spring/init.luau +97 -97
- package/vendor/rbxutil/spring/package.json +17 -17
- package/vendor/rbxutil/spring/wally.toml +8 -8
- package/vendor/rbxutil/stream/index.d.ts +88 -88
- package/vendor/rbxutil/stream/init.luau +597 -597
- package/vendor/rbxutil/stream/package.json +18 -18
- package/vendor/rbxutil/stream/wally.toml +9 -9
- package/vendor/rbxutil/streamable/Streamable.luau +202 -202
- package/vendor/rbxutil/streamable/StreamableUtil.luau +80 -80
- package/vendor/rbxutil/streamable/init.luau +8 -8
- package/vendor/rbxutil/streamable/wally.toml +12 -12
- package/vendor/rbxutil/symbol/init.luau +56 -56
- package/vendor/rbxutil/symbol/init.test.luau +37 -37
- package/vendor/rbxutil/symbol/wally.toml +8 -8
- package/vendor/rbxutil/table-util/init.luau +938 -938
- package/vendor/rbxutil/table-util/init.test.luau +439 -439
- package/vendor/rbxutil/task-queue/index.d.ts +27 -27
- package/vendor/rbxutil/task-queue/init.luau +97 -97
- package/vendor/rbxutil/task-queue/wally.toml +8 -8
- package/vendor/rbxutil/timer/index.d.ts +81 -81
- package/vendor/rbxutil/timer/init.luau +249 -249
- package/vendor/rbxutil/timer/init.test.luau +73 -73
- package/vendor/rbxutil/timer/wally.toml +11 -11
- package/vendor/rbxutil/tree/index.d.ts +15 -15
- package/vendor/rbxutil/tree/init.luau +137 -137
- package/vendor/rbxutil/tree/wally.toml +8 -8
- package/vendor/rbxutil/trove/index.d.ts +46 -46
- package/vendor/rbxutil/trove/init.luau +787 -787
- package/vendor/rbxutil/trove/init.test.luau +203 -203
- package/vendor/rbxutil/trove/wally.toml +8 -8
- package/vendor/rbxutil/typed-remote/init.luau +196 -196
- package/vendor/rbxutil/typed-remote/wally.toml +8 -8
- package/vendor/rbxutil/wait-for/index.d.ts +17 -17
- package/vendor/rbxutil/wait-for/init.luau +257 -257
- package/vendor/rbxutil/wait-for/init.test.luau +182 -182
- package/vendor/rbxutil/wait-for/wally.toml +11 -11
- package/vendor/t/t.lua +1350 -1350
- package/vendor/testez/Context.lua +26 -26
- package/vendor/testez/Expectation.lua +311 -311
- package/vendor/testez/ExpectationContext.lua +38 -38
- package/vendor/testez/LifecycleHooks.lua +89 -89
- package/vendor/testez/Reporters/TeamCityReporter.lua +101 -101
- package/vendor/testez/Reporters/TextReporter.lua +105 -105
- package/vendor/testez/Reporters/TextReporterQuiet.lua +96 -96
- package/vendor/testez/TestBootstrap.lua +146 -146
- package/vendor/testez/TestEnum.lua +27 -27
- package/vendor/testez/TestPlan.lua +304 -304
- package/vendor/testez/TestPlanner.lua +39 -39
- package/vendor/testez/TestResults.lua +111 -111
- package/vendor/testez/TestRunner.lua +188 -188
- package/vendor/testez/TestSession.lua +243 -243
- package/vendor/testez/init.lua +39 -39
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
[package]
|
|
2
|
-
name = "sleitnick/concur"
|
|
3
|
-
description = "Concurrent task handler"
|
|
4
|
-
version = "0.1.2"
|
|
5
|
-
license = "MIT"
|
|
6
|
-
authors = ["Stephen Leitnick"]
|
|
7
|
-
registry = "https://github.com/UpliftGames/wally-index"
|
|
8
|
-
realm = "shared"
|
|
1
|
+
[package]
|
|
2
|
+
name = "sleitnick/concur"
|
|
3
|
+
description = "Concurrent task handler"
|
|
4
|
+
version = "0.1.2"
|
|
5
|
+
license = "MIT"
|
|
6
|
+
authors = ["Stephen Leitnick"]
|
|
7
|
+
registry = "https://github.com/UpliftGames/wally-index"
|
|
8
|
+
realm = "shared"
|
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
-- EnumList
|
|
2
|
-
-- Stephen Leitnick
|
|
3
|
-
-- January 08, 2021
|
|
4
|
-
|
|
5
|
-
type EnumNames = { string }
|
|
6
|
-
|
|
7
|
-
--[=[
|
|
8
|
-
@interface EnumItem
|
|
9
|
-
.Name string
|
|
10
|
-
.Value number
|
|
11
|
-
.EnumType EnumList
|
|
12
|
-
@within EnumList
|
|
13
|
-
]=]
|
|
14
|
-
export type EnumItem = {
|
|
15
|
-
Name: string,
|
|
16
|
-
Value: number,
|
|
17
|
-
EnumType: any,
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
local LIST_KEY = newproxy()
|
|
21
|
-
local NAME_KEY = newproxy()
|
|
22
|
-
|
|
23
|
-
local function CreateEnumItem(name: string, value: number, enum: any): EnumItem
|
|
24
|
-
local enumItem = {
|
|
25
|
-
Name = name,
|
|
26
|
-
Value = value,
|
|
27
|
-
EnumType = enum,
|
|
28
|
-
}
|
|
29
|
-
table.freeze(enumItem)
|
|
30
|
-
return enumItem
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
--[=[
|
|
34
|
-
@class EnumList
|
|
35
|
-
Defines a new Enum.
|
|
36
|
-
]=]
|
|
37
|
-
local EnumList = {}
|
|
38
|
-
EnumList.__index = EnumList
|
|
39
|
-
|
|
40
|
-
--[=[
|
|
41
|
-
@param name string
|
|
42
|
-
@param enums {string}
|
|
43
|
-
@return EnumList
|
|
44
|
-
Constructs a new EnumList.
|
|
45
|
-
|
|
46
|
-
```lua
|
|
47
|
-
local directions = EnumList.new("Directions", {
|
|
48
|
-
"Up",
|
|
49
|
-
"Down",
|
|
50
|
-
"Left",
|
|
51
|
-
"Right",
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
local direction = directions.Up
|
|
55
|
-
```
|
|
56
|
-
]=]
|
|
57
|
-
function EnumList.new(name: string, enums: EnumNames)
|
|
58
|
-
assert(type(name) == "string", "Name string required")
|
|
59
|
-
assert(type(enums) == "table", "Enums table required")
|
|
60
|
-
local self = {}
|
|
61
|
-
self[LIST_KEY] = {}
|
|
62
|
-
self[NAME_KEY] = name
|
|
63
|
-
for i, enumName in ipairs(enums) do
|
|
64
|
-
assert(type(enumName) == "string", "Enum name must be a string")
|
|
65
|
-
local enumItem = CreateEnumItem(enumName, i, self)
|
|
66
|
-
self[enumName] = enumItem
|
|
67
|
-
table.insert(self[LIST_KEY], enumItem)
|
|
68
|
-
end
|
|
69
|
-
return table.freeze(setmetatable(self, EnumList))
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
--[=[
|
|
73
|
-
@param obj any
|
|
74
|
-
@return boolean
|
|
75
|
-
Returns `true` if `obj` belongs to the EnumList.
|
|
76
|
-
]=]
|
|
77
|
-
function EnumList:BelongsTo(obj: any): boolean
|
|
78
|
-
return type(obj) == "table" and obj.EnumType == self
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
--[=[
|
|
82
|
-
Returns an array of all enum items.
|
|
83
|
-
@return {EnumItem}
|
|
84
|
-
@since v2.0.0
|
|
85
|
-
]=]
|
|
86
|
-
function EnumList:GetEnumItems()
|
|
87
|
-
return self[LIST_KEY]
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
--[=[
|
|
91
|
-
Get the name of the enum.
|
|
92
|
-
@return string
|
|
93
|
-
@since v2.0.0
|
|
94
|
-
]=]
|
|
95
|
-
function EnumList:GetName()
|
|
96
|
-
return self[NAME_KEY]
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
export type EnumList = typeof(EnumList.new(...))
|
|
100
|
-
|
|
101
|
-
return EnumList
|
|
1
|
+
-- EnumList
|
|
2
|
+
-- Stephen Leitnick
|
|
3
|
+
-- January 08, 2021
|
|
4
|
+
|
|
5
|
+
type EnumNames = { string }
|
|
6
|
+
|
|
7
|
+
--[=[
|
|
8
|
+
@interface EnumItem
|
|
9
|
+
.Name string
|
|
10
|
+
.Value number
|
|
11
|
+
.EnumType EnumList
|
|
12
|
+
@within EnumList
|
|
13
|
+
]=]
|
|
14
|
+
export type EnumItem = {
|
|
15
|
+
Name: string,
|
|
16
|
+
Value: number,
|
|
17
|
+
EnumType: any,
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
local LIST_KEY = newproxy()
|
|
21
|
+
local NAME_KEY = newproxy()
|
|
22
|
+
|
|
23
|
+
local function CreateEnumItem(name: string, value: number, enum: any): EnumItem
|
|
24
|
+
local enumItem = {
|
|
25
|
+
Name = name,
|
|
26
|
+
Value = value,
|
|
27
|
+
EnumType = enum,
|
|
28
|
+
}
|
|
29
|
+
table.freeze(enumItem)
|
|
30
|
+
return enumItem
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
--[=[
|
|
34
|
+
@class EnumList
|
|
35
|
+
Defines a new Enum.
|
|
36
|
+
]=]
|
|
37
|
+
local EnumList = {}
|
|
38
|
+
EnumList.__index = EnumList
|
|
39
|
+
|
|
40
|
+
--[=[
|
|
41
|
+
@param name string
|
|
42
|
+
@param enums {string}
|
|
43
|
+
@return EnumList
|
|
44
|
+
Constructs a new EnumList.
|
|
45
|
+
|
|
46
|
+
```lua
|
|
47
|
+
local directions = EnumList.new("Directions", {
|
|
48
|
+
"Up",
|
|
49
|
+
"Down",
|
|
50
|
+
"Left",
|
|
51
|
+
"Right",
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
local direction = directions.Up
|
|
55
|
+
```
|
|
56
|
+
]=]
|
|
57
|
+
function EnumList.new(name: string, enums: EnumNames)
|
|
58
|
+
assert(type(name) == "string", "Name string required")
|
|
59
|
+
assert(type(enums) == "table", "Enums table required")
|
|
60
|
+
local self = {}
|
|
61
|
+
self[LIST_KEY] = {}
|
|
62
|
+
self[NAME_KEY] = name
|
|
63
|
+
for i, enumName in ipairs(enums) do
|
|
64
|
+
assert(type(enumName) == "string", "Enum name must be a string")
|
|
65
|
+
local enumItem = CreateEnumItem(enumName, i, self)
|
|
66
|
+
self[enumName] = enumItem
|
|
67
|
+
table.insert(self[LIST_KEY], enumItem)
|
|
68
|
+
end
|
|
69
|
+
return table.freeze(setmetatable(self, EnumList))
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
--[=[
|
|
73
|
+
@param obj any
|
|
74
|
+
@return boolean
|
|
75
|
+
Returns `true` if `obj` belongs to the EnumList.
|
|
76
|
+
]=]
|
|
77
|
+
function EnumList:BelongsTo(obj: any): boolean
|
|
78
|
+
return type(obj) == "table" and obj.EnumType == self
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
--[=[
|
|
82
|
+
Returns an array of all enum items.
|
|
83
|
+
@return {EnumItem}
|
|
84
|
+
@since v2.0.0
|
|
85
|
+
]=]
|
|
86
|
+
function EnumList:GetEnumItems()
|
|
87
|
+
return self[LIST_KEY]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
--[=[
|
|
91
|
+
Get the name of the enum.
|
|
92
|
+
@return string
|
|
93
|
+
@since v2.0.0
|
|
94
|
+
]=]
|
|
95
|
+
function EnumList:GetName()
|
|
96
|
+
return self[NAME_KEY]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
export type EnumList = typeof(EnumList.new(...))
|
|
100
|
+
|
|
101
|
+
return EnumList
|
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
local ServerScriptService = game:GetService("ServerScriptService")
|
|
2
|
-
|
|
3
|
-
local Test = require(ServerScriptService.TestRunner.Test)
|
|
4
|
-
|
|
5
|
-
return function(ctx: Test.TestContext)
|
|
6
|
-
local EnumList = require(script.Parent)
|
|
7
|
-
|
|
8
|
-
ctx:Describe("Constructor", function()
|
|
9
|
-
ctx:Test("should create a new enumlist", function()
|
|
10
|
-
ctx:Expect(function()
|
|
11
|
-
EnumList.new("Test", { "ABC", "XYZ" })
|
|
12
|
-
end)
|
|
13
|
-
:Not()
|
|
14
|
-
:ToThrow()
|
|
15
|
-
end)
|
|
16
|
-
|
|
17
|
-
ctx:Test("should fail to create a new enumlist with no name", function()
|
|
18
|
-
ctx:Expect(function()
|
|
19
|
-
EnumList.new(nil, { "ABC", "XYZ" })
|
|
20
|
-
end):ToThrow()
|
|
21
|
-
end)
|
|
22
|
-
|
|
23
|
-
ctx:Test("should fail to create a new enumlist with no enums", function()
|
|
24
|
-
ctx:Expect(function()
|
|
25
|
-
EnumList.new("Test")
|
|
26
|
-
end):ToThrow()
|
|
27
|
-
end)
|
|
28
|
-
|
|
29
|
-
ctx:Test("should fail to create a new enumlist with non string enums", function()
|
|
30
|
-
ctx:Expect(function()
|
|
31
|
-
EnumList.new("Test", { true, false, 32, "ABC" })
|
|
32
|
-
end):ToThrow()
|
|
33
|
-
end)
|
|
34
|
-
end)
|
|
35
|
-
|
|
36
|
-
ctx:Describe("Access", function()
|
|
37
|
-
ctx:Test("should be able to access enum items", function()
|
|
38
|
-
local test = EnumList.new("Test", { "ABC", "XYZ" })
|
|
39
|
-
ctx:Expect(function()
|
|
40
|
-
local _item = test.ABC
|
|
41
|
-
end)
|
|
42
|
-
:Not()
|
|
43
|
-
:ToThrow()
|
|
44
|
-
ctx:Expect(test:BelongsTo(test.ABC)):ToBe(true)
|
|
45
|
-
end)
|
|
46
|
-
|
|
47
|
-
ctx:Test("should throw if trying to modify the enumlist", function()
|
|
48
|
-
local test = EnumList.new("Test", { "ABC", "XYZ" })
|
|
49
|
-
ctx:Expect(function()
|
|
50
|
-
test.Hello = 32
|
|
51
|
-
end):ToThrow()
|
|
52
|
-
ctx:Expect(function()
|
|
53
|
-
test.ABC = 32
|
|
54
|
-
end):ToThrow()
|
|
55
|
-
end)
|
|
56
|
-
|
|
57
|
-
ctx:Test("should throw if trying to modify an enumitem", function()
|
|
58
|
-
local test = EnumList.new("Test", { "ABC", "XYZ" })
|
|
59
|
-
ctx:Expect(function()
|
|
60
|
-
local abc = test.ABC
|
|
61
|
-
abc.XYZ = 32
|
|
62
|
-
end):ToThrow()
|
|
63
|
-
ctx:Expect(function()
|
|
64
|
-
local abc = test.ABC
|
|
65
|
-
abc.Name = "NewName"
|
|
66
|
-
end):ToThrow()
|
|
67
|
-
end)
|
|
68
|
-
|
|
69
|
-
ctx:Test("should get the name", function()
|
|
70
|
-
local test = EnumList.new("Test", { "ABC", "XYZ" })
|
|
71
|
-
local name = test:GetName()
|
|
72
|
-
ctx:Expect(name):ToBe("Test")
|
|
73
|
-
end)
|
|
74
|
-
end)
|
|
75
|
-
|
|
76
|
-
ctx:Describe("Get Items", function()
|
|
77
|
-
ctx:Test("should be able to get all enum items", function()
|
|
78
|
-
local test = EnumList.new("Test", { "ABC", "XYZ" })
|
|
79
|
-
local items = test:GetEnumItems()
|
|
80
|
-
ctx:Expect(items):ToBeA("table")
|
|
81
|
-
ctx:Expect(#items):ToBe(2)
|
|
82
|
-
for i, enumItem in ipairs(items) do
|
|
83
|
-
ctx:Expect(enumItem):ToBeA("table")
|
|
84
|
-
ctx:Expect(enumItem.Name):ToBeA("string")
|
|
85
|
-
ctx:Expect(enumItem.Value):ToBeA("number")
|
|
86
|
-
ctx:Expect(enumItem.Value):ToBe(i)
|
|
87
|
-
ctx:Expect(enumItem.EnumType):ToBe(test)
|
|
88
|
-
end
|
|
89
|
-
end)
|
|
90
|
-
end)
|
|
91
|
-
end
|
|
1
|
+
local ServerScriptService = game:GetService("ServerScriptService")
|
|
2
|
+
|
|
3
|
+
local Test = require(ServerScriptService.TestRunner.Test)
|
|
4
|
+
|
|
5
|
+
return function(ctx: Test.TestContext)
|
|
6
|
+
local EnumList = require(script.Parent)
|
|
7
|
+
|
|
8
|
+
ctx:Describe("Constructor", function()
|
|
9
|
+
ctx:Test("should create a new enumlist", function()
|
|
10
|
+
ctx:Expect(function()
|
|
11
|
+
EnumList.new("Test", { "ABC", "XYZ" })
|
|
12
|
+
end)
|
|
13
|
+
:Not()
|
|
14
|
+
:ToThrow()
|
|
15
|
+
end)
|
|
16
|
+
|
|
17
|
+
ctx:Test("should fail to create a new enumlist with no name", function()
|
|
18
|
+
ctx:Expect(function()
|
|
19
|
+
EnumList.new(nil, { "ABC", "XYZ" })
|
|
20
|
+
end):ToThrow()
|
|
21
|
+
end)
|
|
22
|
+
|
|
23
|
+
ctx:Test("should fail to create a new enumlist with no enums", function()
|
|
24
|
+
ctx:Expect(function()
|
|
25
|
+
EnumList.new("Test")
|
|
26
|
+
end):ToThrow()
|
|
27
|
+
end)
|
|
28
|
+
|
|
29
|
+
ctx:Test("should fail to create a new enumlist with non string enums", function()
|
|
30
|
+
ctx:Expect(function()
|
|
31
|
+
EnumList.new("Test", { true, false, 32, "ABC" })
|
|
32
|
+
end):ToThrow()
|
|
33
|
+
end)
|
|
34
|
+
end)
|
|
35
|
+
|
|
36
|
+
ctx:Describe("Access", function()
|
|
37
|
+
ctx:Test("should be able to access enum items", function()
|
|
38
|
+
local test = EnumList.new("Test", { "ABC", "XYZ" })
|
|
39
|
+
ctx:Expect(function()
|
|
40
|
+
local _item = test.ABC
|
|
41
|
+
end)
|
|
42
|
+
:Not()
|
|
43
|
+
:ToThrow()
|
|
44
|
+
ctx:Expect(test:BelongsTo(test.ABC)):ToBe(true)
|
|
45
|
+
end)
|
|
46
|
+
|
|
47
|
+
ctx:Test("should throw if trying to modify the enumlist", function()
|
|
48
|
+
local test = EnumList.new("Test", { "ABC", "XYZ" })
|
|
49
|
+
ctx:Expect(function()
|
|
50
|
+
test.Hello = 32
|
|
51
|
+
end):ToThrow()
|
|
52
|
+
ctx:Expect(function()
|
|
53
|
+
test.ABC = 32
|
|
54
|
+
end):ToThrow()
|
|
55
|
+
end)
|
|
56
|
+
|
|
57
|
+
ctx:Test("should throw if trying to modify an enumitem", function()
|
|
58
|
+
local test = EnumList.new("Test", { "ABC", "XYZ" })
|
|
59
|
+
ctx:Expect(function()
|
|
60
|
+
local abc = test.ABC
|
|
61
|
+
abc.XYZ = 32
|
|
62
|
+
end):ToThrow()
|
|
63
|
+
ctx:Expect(function()
|
|
64
|
+
local abc = test.ABC
|
|
65
|
+
abc.Name = "NewName"
|
|
66
|
+
end):ToThrow()
|
|
67
|
+
end)
|
|
68
|
+
|
|
69
|
+
ctx:Test("should get the name", function()
|
|
70
|
+
local test = EnumList.new("Test", { "ABC", "XYZ" })
|
|
71
|
+
local name = test:GetName()
|
|
72
|
+
ctx:Expect(name):ToBe("Test")
|
|
73
|
+
end)
|
|
74
|
+
end)
|
|
75
|
+
|
|
76
|
+
ctx:Describe("Get Items", function()
|
|
77
|
+
ctx:Test("should be able to get all enum items", function()
|
|
78
|
+
local test = EnumList.new("Test", { "ABC", "XYZ" })
|
|
79
|
+
local items = test:GetEnumItems()
|
|
80
|
+
ctx:Expect(items):ToBeA("table")
|
|
81
|
+
ctx:Expect(#items):ToBe(2)
|
|
82
|
+
for i, enumItem in ipairs(items) do
|
|
83
|
+
ctx:Expect(enumItem):ToBeA("table")
|
|
84
|
+
ctx:Expect(enumItem.Name):ToBeA("string")
|
|
85
|
+
ctx:Expect(enumItem.Value):ToBeA("number")
|
|
86
|
+
ctx:Expect(enumItem.Value):ToBe(i)
|
|
87
|
+
ctx:Expect(enumItem.EnumType):ToBe(test)
|
|
88
|
+
end
|
|
89
|
+
end)
|
|
90
|
+
end)
|
|
91
|
+
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
[package]
|
|
2
|
-
name = "sleitnick/enum-list"
|
|
3
|
-
description = "Enum List class"
|
|
4
|
-
version = "2.1.0"
|
|
5
|
-
license = "MIT"
|
|
6
|
-
authors = ["Stephen Leitnick"]
|
|
7
|
-
registry = "https://github.com/UpliftGames/wally-index"
|
|
8
|
-
realm = "shared"
|
|
1
|
+
[package]
|
|
2
|
+
name = "sleitnick/enum-list"
|
|
3
|
+
description = "Enum List class"
|
|
4
|
+
version = "2.1.0"
|
|
5
|
+
license = "MIT"
|
|
6
|
+
authors = ["Stephen Leitnick"]
|
|
7
|
+
registry = "https://github.com/UpliftGames/wally-index"
|
|
8
|
+
realm = "shared"
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Find an instance in the data model hierarchy, otherwise throw an error.
|
|
3
|
-
*
|
|
4
|
-
* ```ts
|
|
5
|
-
* const part = find<BasePart>(Workspace, "Some", "Model", "Part");
|
|
6
|
-
* ```
|
|
7
|
-
*
|
|
8
|
-
* Note that the generic type is not a runtime-enforced type-check. A custom
|
|
9
|
-
* assertion is needed if you desire to enforce the type:
|
|
10
|
-
* ```ts
|
|
11
|
-
* const folder = find<Folder>(ReplicatedStorage, "Somewhere", "MyFolder");
|
|
12
|
-
* assert(folder.IsA("Folder"));
|
|
13
|
-
* ```
|
|
14
|
-
*
|
|
15
|
-
* @param parent The parent where the search begins.
|
|
16
|
-
* @param path The name of each instance, where the last one is the returned instance.
|
|
17
|
-
*/
|
|
18
|
-
declare function find<T extends Instance = Instance>(parent: Instance, ...path: string[]): T;
|
|
19
|
-
|
|
20
|
-
export = find;
|
|
1
|
+
/**
|
|
2
|
+
* Find an instance in the data model hierarchy, otherwise throw an error.
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* const part = find<BasePart>(Workspace, "Some", "Model", "Part");
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* Note that the generic type is not a runtime-enforced type-check. A custom
|
|
9
|
+
* assertion is needed if you desire to enforce the type:
|
|
10
|
+
* ```ts
|
|
11
|
+
* const folder = find<Folder>(ReplicatedStorage, "Somewhere", "MyFolder");
|
|
12
|
+
* assert(folder.IsA("Folder"));
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* @param parent The parent where the search begins.
|
|
16
|
+
* @param path The name of each instance, where the last one is the returned instance.
|
|
17
|
+
*/
|
|
18
|
+
declare function find<T extends Instance = Instance>(parent: Instance, ...path: string[]): T;
|
|
19
|
+
|
|
20
|
+
export = find;
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
--!strict
|
|
2
|
-
|
|
3
|
-
--[=[
|
|
4
|
-
@class Find
|
|
5
|
-
|
|
6
|
-
A utility function for finding objects in the data model hierarchy.
|
|
7
|
-
|
|
8
|
-
Similar to `FindFirstChild`, except it explicitly errors if any object
|
|
9
|
-
is not found, as well as a more helpful message as to what wasn't found.
|
|
10
|
-
|
|
11
|
-
```lua
|
|
12
|
-
local find = require(ReplicatedStorage.Packages.find)
|
|
13
|
-
|
|
14
|
-
-- Find instance "workspace.Some.Folder.Here.Item":
|
|
15
|
-
local item = find(workspace, "Some", "Folder", "Here", "Item")
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
In the above example, if "Folder" didn't exist, the function would throw an error with the message: `failed to find instance "Folder" within "Workspace.Some"`.
|
|
19
|
-
|
|
20
|
-
The return type is simply `Instance`. Any type-checking should be done on the return value:
|
|
21
|
-
```lua
|
|
22
|
-
local part = find(workspace, "SomePart") :: BasePart -- Blindly assume and type this as a BasePart
|
|
23
|
-
assert(part:IsA("BasePart")) -- Extra optional precaution to ensure type
|
|
24
|
-
```
|
|
25
|
-
]=]
|
|
26
|
-
|
|
27
|
-
local function find(parent: Instance, ...: string): Instance
|
|
28
|
-
local instance = parent
|
|
29
|
-
|
|
30
|
-
for i = 1, select("#", ...) do
|
|
31
|
-
local name = (select(i, ...))
|
|
32
|
-
|
|
33
|
-
local inst = instance:FindFirstChild(name)
|
|
34
|
-
if inst == nil then
|
|
35
|
-
error(`failed to find instance "{name}" within {instance:GetFullName()}`, 2)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
instance = inst
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
return instance
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
return find
|
|
1
|
+
--!strict
|
|
2
|
+
|
|
3
|
+
--[=[
|
|
4
|
+
@class Find
|
|
5
|
+
|
|
6
|
+
A utility function for finding objects in the data model hierarchy.
|
|
7
|
+
|
|
8
|
+
Similar to `FindFirstChild`, except it explicitly errors if any object
|
|
9
|
+
is not found, as well as a more helpful message as to what wasn't found.
|
|
10
|
+
|
|
11
|
+
```lua
|
|
12
|
+
local find = require(ReplicatedStorage.Packages.find)
|
|
13
|
+
|
|
14
|
+
-- Find instance "workspace.Some.Folder.Here.Item":
|
|
15
|
+
local item = find(workspace, "Some", "Folder", "Here", "Item")
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
In the above example, if "Folder" didn't exist, the function would throw an error with the message: `failed to find instance "Folder" within "Workspace.Some"`.
|
|
19
|
+
|
|
20
|
+
The return type is simply `Instance`. Any type-checking should be done on the return value:
|
|
21
|
+
```lua
|
|
22
|
+
local part = find(workspace, "SomePart") :: BasePart -- Blindly assume and type this as a BasePart
|
|
23
|
+
assert(part:IsA("BasePart")) -- Extra optional precaution to ensure type
|
|
24
|
+
```
|
|
25
|
+
]=]
|
|
26
|
+
|
|
27
|
+
local function find(parent: Instance, ...: string): Instance
|
|
28
|
+
local instance = parent
|
|
29
|
+
|
|
30
|
+
for i = 1, select("#", ...) do
|
|
31
|
+
local name = (select(i, ...))
|
|
32
|
+
|
|
33
|
+
local inst = instance:FindFirstChild(name)
|
|
34
|
+
if inst == nil then
|
|
35
|
+
error(`failed to find instance "{name}" within {instance:GetFullName()}`, 2)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
instance = inst
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
return instance
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
return find
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@rbxutil/find",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"main": "init.luau",
|
|
5
|
-
"repository": "github:Sleitnick/RbxUtil",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"types": "index.d.ts",
|
|
8
|
-
"files": [
|
|
9
|
-
"./*",
|
|
10
|
-
"!*.toml",
|
|
11
|
-
"!*.json",
|
|
12
|
-
"!*.test.luau"
|
|
13
|
-
],
|
|
14
|
-
"publishConfig": {
|
|
15
|
-
"access": "public"
|
|
16
|
-
}
|
|
17
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@rbxutil/find",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "init.luau",
|
|
5
|
+
"repository": "github:Sleitnick/RbxUtil",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"types": "index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"./*",
|
|
10
|
+
"!*.toml",
|
|
11
|
+
"!*.json",
|
|
12
|
+
"!*.test.luau"
|
|
13
|
+
],
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
[package]
|
|
2
|
-
name = "sleitnick/find"
|
|
3
|
-
description = "Utility function for finding an in the data model hierarchy"
|
|
4
|
-
version = "1.0.0"
|
|
5
|
-
license = "MIT"
|
|
6
|
-
authors = ["Stephen Leitnick"]
|
|
7
|
-
registry = "https://github.com/UpliftGames/wally-index"
|
|
8
|
-
realm = "shared"
|
|
1
|
+
[package]
|
|
2
|
+
name = "sleitnick/find"
|
|
3
|
+
description = "Utility function for finding an in the data model hierarchy"
|
|
4
|
+
version = "1.0.0"
|
|
5
|
+
license = "MIT"
|
|
6
|
+
authors = ["Stephen Leitnick"]
|
|
7
|
+
registry = "https://github.com/UpliftGames/wally-index"
|
|
8
|
+
realm = "shared"
|