roblox-opencode 1.0.0 → 1.0.1
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 +863 -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 +1519 -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,135 +1,135 @@
|
|
|
1
|
-
local Util = require(script.Parent.Util)
|
|
2
|
-
local Types = require(script.Parent.Types)
|
|
3
|
-
local Promise = require(script.Parent.Parent.Promise)
|
|
4
|
-
local ClientRemoteSignal = require(script.ClientRemoteSignal)
|
|
5
|
-
local ClientRemoteProperty = require(script.ClientRemoteProperty)
|
|
6
|
-
|
|
7
|
-
local Client = {}
|
|
8
|
-
|
|
9
|
-
function Client.GetFunction(
|
|
10
|
-
parent: Instance,
|
|
11
|
-
name: string,
|
|
12
|
-
usePromise: boolean,
|
|
13
|
-
inboundMiddleware: Types.ClientMiddleware?,
|
|
14
|
-
outboundMiddleware: Types.ClientMiddleware?
|
|
15
|
-
)
|
|
16
|
-
assert(not Util.IsServer, "GetFunction must be called from the client")
|
|
17
|
-
local folder = Util.GetCommSubFolder(parent, "RF"):Expect("Failed to get Comm RF folder")
|
|
18
|
-
local rf = folder:WaitForChild(name, Util.WaitForChildTimeout)
|
|
19
|
-
assert(rf ~= nil, "Failed to find RemoteFunction: " .. name)
|
|
20
|
-
local hasInbound = type(inboundMiddleware) == "table" and #inboundMiddleware > 0
|
|
21
|
-
local hasOutbound = type(outboundMiddleware) == "table" and #outboundMiddleware > 0
|
|
22
|
-
local function ProcessOutbound(args)
|
|
23
|
-
for _, middlewareFunc in ipairs(outboundMiddleware) do
|
|
24
|
-
local middlewareResult = table.pack(middlewareFunc(args))
|
|
25
|
-
if not middlewareResult[1] then
|
|
26
|
-
return table.unpack(middlewareResult, 2, middlewareResult.n)
|
|
27
|
-
end
|
|
28
|
-
args.n = #args
|
|
29
|
-
end
|
|
30
|
-
return table.unpack(args, 1, args.n)
|
|
31
|
-
end
|
|
32
|
-
if hasInbound then
|
|
33
|
-
if usePromise then
|
|
34
|
-
return function(...)
|
|
35
|
-
local args = table.pack(...)
|
|
36
|
-
return Promise.new(function(resolve, reject)
|
|
37
|
-
local success, res = pcall(function()
|
|
38
|
-
if hasOutbound then
|
|
39
|
-
return table.pack(rf:InvokeServer(ProcessOutbound(args)))
|
|
40
|
-
else
|
|
41
|
-
return table.pack(rf:InvokeServer(table.unpack(args, 1, args.n)))
|
|
42
|
-
end
|
|
43
|
-
end)
|
|
44
|
-
if success then
|
|
45
|
-
for _, middlewareFunc in ipairs(inboundMiddleware) do
|
|
46
|
-
local middlewareResult = table.pack(middlewareFunc(res))
|
|
47
|
-
if not middlewareResult[1] then
|
|
48
|
-
return table.unpack(middlewareResult, 2, middlewareResult.n)
|
|
49
|
-
end
|
|
50
|
-
res.n = #res
|
|
51
|
-
end
|
|
52
|
-
resolve(table.unpack(res, 1, res.n))
|
|
53
|
-
else
|
|
54
|
-
reject(res)
|
|
55
|
-
end
|
|
56
|
-
end)
|
|
57
|
-
end
|
|
58
|
-
else
|
|
59
|
-
return function(...)
|
|
60
|
-
local res
|
|
61
|
-
if hasOutbound then
|
|
62
|
-
res = table.pack(rf:InvokeServer(ProcessOutbound(table.pack(...))))
|
|
63
|
-
else
|
|
64
|
-
res = table.pack(rf:InvokeServer(...))
|
|
65
|
-
end
|
|
66
|
-
for _, middlewareFunc in ipairs(inboundMiddleware) do
|
|
67
|
-
local middlewareResult = table.pack(middlewareFunc(res))
|
|
68
|
-
if not middlewareResult[1] then
|
|
69
|
-
return table.unpack(middlewareResult, 2, middlewareResult.n)
|
|
70
|
-
end
|
|
71
|
-
res.n = #res
|
|
72
|
-
end
|
|
73
|
-
return table.unpack(res, 1, res.n)
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
else
|
|
77
|
-
if usePromise then
|
|
78
|
-
return function(...)
|
|
79
|
-
local args = table.pack(...)
|
|
80
|
-
return Promise.new(function(resolve, reject)
|
|
81
|
-
local success, res = pcall(function()
|
|
82
|
-
if hasOutbound then
|
|
83
|
-
return table.pack(rf:InvokeServer(ProcessOutbound(args)))
|
|
84
|
-
else
|
|
85
|
-
return table.pack(rf:InvokeServer(table.unpack(args, 1, args.n)))
|
|
86
|
-
end
|
|
87
|
-
end)
|
|
88
|
-
if success then
|
|
89
|
-
resolve(table.unpack(res, 1, res.n))
|
|
90
|
-
else
|
|
91
|
-
reject(res)
|
|
92
|
-
end
|
|
93
|
-
end)
|
|
94
|
-
end
|
|
95
|
-
else
|
|
96
|
-
if hasOutbound then
|
|
97
|
-
return function(...)
|
|
98
|
-
return rf:InvokeServer(ProcessOutbound(table.pack(...)))
|
|
99
|
-
end
|
|
100
|
-
else
|
|
101
|
-
return function(...)
|
|
102
|
-
return rf:InvokeServer(...)
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
function Client.GetSignal(
|
|
110
|
-
parent: Instance,
|
|
111
|
-
name: string,
|
|
112
|
-
inboundMiddleware: Types.ClientMiddleware?,
|
|
113
|
-
outboundMiddleware: Types.ClientMiddleware?
|
|
114
|
-
)
|
|
115
|
-
assert(not Util.IsServer, "GetSignal must be called from the client")
|
|
116
|
-
local folder = Util.GetCommSubFolder(parent, "RE"):Expect("Failed to get Comm RE folder")
|
|
117
|
-
local re = folder:WaitForChild(name, Util.WaitForChildTimeout)
|
|
118
|
-
assert(re ~= nil, "Failed to find RemoteEvent: " .. name)
|
|
119
|
-
return ClientRemoteSignal.new(re, inboundMiddleware, outboundMiddleware)
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
function Client.GetProperty(
|
|
123
|
-
parent: Instance,
|
|
124
|
-
name: string,
|
|
125
|
-
inboundMiddleware: Types.ClientMiddleware?,
|
|
126
|
-
outboundMiddleware: Types.ClientMiddleware?
|
|
127
|
-
)
|
|
128
|
-
assert(not Util.IsServer, "GetProperty must be called from the client")
|
|
129
|
-
local folder = Util.GetCommSubFolder(parent, "RP"):Expect("Failed to get Comm RP folder")
|
|
130
|
-
local re = folder:WaitForChild(name, Util.WaitForChildTimeout)
|
|
131
|
-
assert(re ~= nil, "Failed to find RemoteEvent for RemoteProperty: " .. name)
|
|
132
|
-
return ClientRemoteProperty.new(re, inboundMiddleware, outboundMiddleware)
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
return Client
|
|
1
|
+
local Util = require(script.Parent.Util)
|
|
2
|
+
local Types = require(script.Parent.Types)
|
|
3
|
+
local Promise = require(script.Parent.Parent.Promise)
|
|
4
|
+
local ClientRemoteSignal = require(script.ClientRemoteSignal)
|
|
5
|
+
local ClientRemoteProperty = require(script.ClientRemoteProperty)
|
|
6
|
+
|
|
7
|
+
local Client = {}
|
|
8
|
+
|
|
9
|
+
function Client.GetFunction(
|
|
10
|
+
parent: Instance,
|
|
11
|
+
name: string,
|
|
12
|
+
usePromise: boolean,
|
|
13
|
+
inboundMiddleware: Types.ClientMiddleware?,
|
|
14
|
+
outboundMiddleware: Types.ClientMiddleware?
|
|
15
|
+
)
|
|
16
|
+
assert(not Util.IsServer, "GetFunction must be called from the client")
|
|
17
|
+
local folder = Util.GetCommSubFolder(parent, "RF"):Expect("Failed to get Comm RF folder")
|
|
18
|
+
local rf = folder:WaitForChild(name, Util.WaitForChildTimeout)
|
|
19
|
+
assert(rf ~= nil, "Failed to find RemoteFunction: " .. name)
|
|
20
|
+
local hasInbound = type(inboundMiddleware) == "table" and #inboundMiddleware > 0
|
|
21
|
+
local hasOutbound = type(outboundMiddleware) == "table" and #outboundMiddleware > 0
|
|
22
|
+
local function ProcessOutbound(args)
|
|
23
|
+
for _, middlewareFunc in ipairs(outboundMiddleware) do
|
|
24
|
+
local middlewareResult = table.pack(middlewareFunc(args))
|
|
25
|
+
if not middlewareResult[1] then
|
|
26
|
+
return table.unpack(middlewareResult, 2, middlewareResult.n)
|
|
27
|
+
end
|
|
28
|
+
args.n = #args
|
|
29
|
+
end
|
|
30
|
+
return table.unpack(args, 1, args.n)
|
|
31
|
+
end
|
|
32
|
+
if hasInbound then
|
|
33
|
+
if usePromise then
|
|
34
|
+
return function(...)
|
|
35
|
+
local args = table.pack(...)
|
|
36
|
+
return Promise.new(function(resolve, reject)
|
|
37
|
+
local success, res = pcall(function()
|
|
38
|
+
if hasOutbound then
|
|
39
|
+
return table.pack(rf:InvokeServer(ProcessOutbound(args)))
|
|
40
|
+
else
|
|
41
|
+
return table.pack(rf:InvokeServer(table.unpack(args, 1, args.n)))
|
|
42
|
+
end
|
|
43
|
+
end)
|
|
44
|
+
if success then
|
|
45
|
+
for _, middlewareFunc in ipairs(inboundMiddleware) do
|
|
46
|
+
local middlewareResult = table.pack(middlewareFunc(res))
|
|
47
|
+
if not middlewareResult[1] then
|
|
48
|
+
return table.unpack(middlewareResult, 2, middlewareResult.n)
|
|
49
|
+
end
|
|
50
|
+
res.n = #res
|
|
51
|
+
end
|
|
52
|
+
resolve(table.unpack(res, 1, res.n))
|
|
53
|
+
else
|
|
54
|
+
reject(res)
|
|
55
|
+
end
|
|
56
|
+
end)
|
|
57
|
+
end
|
|
58
|
+
else
|
|
59
|
+
return function(...)
|
|
60
|
+
local res
|
|
61
|
+
if hasOutbound then
|
|
62
|
+
res = table.pack(rf:InvokeServer(ProcessOutbound(table.pack(...))))
|
|
63
|
+
else
|
|
64
|
+
res = table.pack(rf:InvokeServer(...))
|
|
65
|
+
end
|
|
66
|
+
for _, middlewareFunc in ipairs(inboundMiddleware) do
|
|
67
|
+
local middlewareResult = table.pack(middlewareFunc(res))
|
|
68
|
+
if not middlewareResult[1] then
|
|
69
|
+
return table.unpack(middlewareResult, 2, middlewareResult.n)
|
|
70
|
+
end
|
|
71
|
+
res.n = #res
|
|
72
|
+
end
|
|
73
|
+
return table.unpack(res, 1, res.n)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
else
|
|
77
|
+
if usePromise then
|
|
78
|
+
return function(...)
|
|
79
|
+
local args = table.pack(...)
|
|
80
|
+
return Promise.new(function(resolve, reject)
|
|
81
|
+
local success, res = pcall(function()
|
|
82
|
+
if hasOutbound then
|
|
83
|
+
return table.pack(rf:InvokeServer(ProcessOutbound(args)))
|
|
84
|
+
else
|
|
85
|
+
return table.pack(rf:InvokeServer(table.unpack(args, 1, args.n)))
|
|
86
|
+
end
|
|
87
|
+
end)
|
|
88
|
+
if success then
|
|
89
|
+
resolve(table.unpack(res, 1, res.n))
|
|
90
|
+
else
|
|
91
|
+
reject(res)
|
|
92
|
+
end
|
|
93
|
+
end)
|
|
94
|
+
end
|
|
95
|
+
else
|
|
96
|
+
if hasOutbound then
|
|
97
|
+
return function(...)
|
|
98
|
+
return rf:InvokeServer(ProcessOutbound(table.pack(...)))
|
|
99
|
+
end
|
|
100
|
+
else
|
|
101
|
+
return function(...)
|
|
102
|
+
return rf:InvokeServer(...)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
function Client.GetSignal(
|
|
110
|
+
parent: Instance,
|
|
111
|
+
name: string,
|
|
112
|
+
inboundMiddleware: Types.ClientMiddleware?,
|
|
113
|
+
outboundMiddleware: Types.ClientMiddleware?
|
|
114
|
+
)
|
|
115
|
+
assert(not Util.IsServer, "GetSignal must be called from the client")
|
|
116
|
+
local folder = Util.GetCommSubFolder(parent, "RE"):Expect("Failed to get Comm RE folder")
|
|
117
|
+
local re = folder:WaitForChild(name, Util.WaitForChildTimeout)
|
|
118
|
+
assert(re ~= nil, "Failed to find RemoteEvent: " .. name)
|
|
119
|
+
return ClientRemoteSignal.new(re, inboundMiddleware, outboundMiddleware)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
function Client.GetProperty(
|
|
123
|
+
parent: Instance,
|
|
124
|
+
name: string,
|
|
125
|
+
inboundMiddleware: Types.ClientMiddleware?,
|
|
126
|
+
outboundMiddleware: Types.ClientMiddleware?
|
|
127
|
+
)
|
|
128
|
+
assert(not Util.IsServer, "GetProperty must be called from the client")
|
|
129
|
+
local folder = Util.GetCommSubFolder(parent, "RP"):Expect("Failed to get Comm RP folder")
|
|
130
|
+
local re = folder:WaitForChild(name, Util.WaitForChildTimeout)
|
|
131
|
+
assert(re ~= nil, "Failed to find RemoteEvent for RemoteProperty: " .. name)
|
|
132
|
+
return ClientRemoteProperty.new(re, inboundMiddleware, outboundMiddleware)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
return Client
|