@quenty/tie 10.20.0 → 10.20.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/CHANGELOG.md +11 -0
- package/package.json +20 -20
- package/src/Shared/Members/Methods/TieMethodDefinition.lua +3 -2
- package/src/Shared/Members/Methods/TieMethodImplementation.lua +1 -1
- package/src/Shared/Members/Methods/TieMethodInterfaceUtils.lua +4 -3
- package/src/Shared/Members/Properties/TiePropertyDefinition.lua +1 -1
- package/src/Shared/Members/Properties/TiePropertyImplementation.lua +9 -2
- package/src/Shared/Members/Properties/TiePropertyImplementationUtils.lua +1 -2
- package/src/Shared/Members/Properties/TiePropertyInterface.lua +1 -1
- package/src/Shared/Members/Signals/TieSignalDefinition.lua +1 -1
- package/src/Shared/Members/Signals/TieSignalImplementation.lua +2 -2
- package/src/Shared/Members/Signals/TieSignalInterface.lua +2 -2
- package/src/Shared/Members/TieMemberDefinition.lua +7 -7
- package/src/Shared/Realms/TieRealmUtils.lua +3 -2
- package/src/Shared/Realms/TieRealms.lua +12 -4
- package/src/Shared/Services/TieRealmService.lua +6 -3
- package/src/Shared/TieDefinition.lua +47 -38
- package/src/Shared/TieImplementation.lua +2 -2
- package/src/Shared/TieInterface.lua +4 -4
- package/src/Shared/Utils/TieUtils.lua +1 -1
- package/test/scripts/Server/ServerMain.server.lua +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [10.20.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/tie@10.20.0...@quenty/tie@10.20.1) (2025-04-05)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* Add types to packages ([2374fb2](https://github.com/Quenty/NevermoreEngine/commit/2374fb2b043cfbe0e9b507b3316eec46a4e353a0))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [10.20.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/tie@10.19.2...@quenty/tie@10.20.0) (2025-04-02)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package @quenty/tie
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/tie",
|
|
3
|
-
"version": "10.20.
|
|
3
|
+
"version": "10.20.1",
|
|
4
4
|
"description": "Tie allows interfaces to be defined between Lua OOP and Roblox objects.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -28,29 +28,29 @@
|
|
|
28
28
|
"Quenty"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@quenty/attributeutils": "^14.17.
|
|
32
|
-
"@quenty/baseobject": "^10.8.
|
|
33
|
-
"@quenty/brio": "^14.17.
|
|
34
|
-
"@quenty/collectionserviceutils": "^8.17.
|
|
35
|
-
"@quenty/instanceutils": "^13.17.
|
|
36
|
-
"@quenty/loader": "^10.8.
|
|
37
|
-
"@quenty/maid": "^3.4.
|
|
38
|
-
"@quenty/rx": "^13.17.
|
|
39
|
-
"@quenty/rxsignal": "^7.17.
|
|
40
|
-
"@quenty/statestack": "^14.18.
|
|
41
|
-
"@quenty/string": "^3.3.
|
|
42
|
-
"@quenty/symbol": "^3.4.
|
|
43
|
-
"@quenty/table": "^3.7.
|
|
44
|
-
"@quenty/tuple": "^1.5.
|
|
45
|
-
"@quenty/valuebaseutils": "^13.17.
|
|
46
|
-
"@quenty/valueobject": "^13.17.
|
|
31
|
+
"@quenty/attributeutils": "^14.17.1",
|
|
32
|
+
"@quenty/baseobject": "^10.8.1",
|
|
33
|
+
"@quenty/brio": "^14.17.1",
|
|
34
|
+
"@quenty/collectionserviceutils": "^8.17.1",
|
|
35
|
+
"@quenty/instanceutils": "^13.17.1",
|
|
36
|
+
"@quenty/loader": "^10.8.1",
|
|
37
|
+
"@quenty/maid": "^3.4.1",
|
|
38
|
+
"@quenty/rx": "^13.17.1",
|
|
39
|
+
"@quenty/rxsignal": "^7.17.1",
|
|
40
|
+
"@quenty/statestack": "^14.18.1",
|
|
41
|
+
"@quenty/string": "^3.3.2",
|
|
42
|
+
"@quenty/symbol": "^3.4.1",
|
|
43
|
+
"@quenty/table": "^3.7.2",
|
|
44
|
+
"@quenty/tuple": "^1.5.1",
|
|
45
|
+
"@quenty/valuebaseutils": "^13.17.1",
|
|
46
|
+
"@quenty/valueobject": "^13.17.1"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@quenty/promise": "^10.10.
|
|
50
|
-
"@quenty/signal": "^7.10.
|
|
49
|
+
"@quenty/promise": "^10.10.2",
|
|
50
|
+
"@quenty/signal": "^7.10.1"
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "78c3ac0ab08dd18085b6e6e6e4f745e76ed99f68"
|
|
56
56
|
}
|
|
@@ -8,12 +8,13 @@ local TieMethodImplementation = require("TieMethodImplementation")
|
|
|
8
8
|
local TieMethodInterfaceUtils = require("TieMethodInterfaceUtils")
|
|
9
9
|
local TieMemberDefinition = require("TieMemberDefinition")
|
|
10
10
|
local TieRealmUtils = require("TieRealmUtils")
|
|
11
|
+
local _TieRealms = require("TieRealms")
|
|
11
12
|
|
|
12
13
|
local TieMethodDefinition = setmetatable({}, TieMemberDefinition)
|
|
13
14
|
TieMethodDefinition.ClassName = "TieMethodDefinition"
|
|
14
15
|
TieMethodDefinition.__index = TieMethodDefinition
|
|
15
16
|
|
|
16
|
-
function TieMethodDefinition.new(tieDefinition, methodName, memberTieRealm)
|
|
17
|
+
function TieMethodDefinition.new(tieDefinition, methodName, memberTieRealm: _TieRealms.TieRealm)
|
|
17
18
|
assert(TieRealmUtils.isTieRealm(memberTieRealm), "Bad memberTieRealm")
|
|
18
19
|
|
|
19
20
|
local self = setmetatable(TieMemberDefinition.new(tieDefinition, methodName, memberTieRealm), TieMethodDefinition)
|
|
@@ -21,7 +22,7 @@ function TieMethodDefinition.new(tieDefinition, methodName, memberTieRealm)
|
|
|
21
22
|
return self
|
|
22
23
|
end
|
|
23
24
|
|
|
24
|
-
function TieMethodDefinition:GetFriendlyName()
|
|
25
|
+
function TieMethodDefinition:GetFriendlyName(): string
|
|
25
26
|
return string.format("%s:%s()", self._tieDefinition:GetName(), self._memberName)
|
|
26
27
|
end
|
|
27
28
|
|
|
@@ -11,7 +11,7 @@ local TieMethodImplementation = setmetatable({}, BaseObject)
|
|
|
11
11
|
TieMethodImplementation.ClassName = "TieMethodImplementation"
|
|
12
12
|
TieMethodImplementation.__index = TieMethodImplementation
|
|
13
13
|
|
|
14
|
-
function TieMethodImplementation.new(memberDefinition, parent, initialValue, actualSelf)
|
|
14
|
+
function TieMethodImplementation.new(memberDefinition, parent: Instance, initialValue, actualSelf)
|
|
15
15
|
local self = setmetatable(BaseObject.new(), TieMethodImplementation)
|
|
16
16
|
|
|
17
17
|
self._memberDefinition = assert(memberDefinition, "No memberDefinition")
|
|
@@ -6,10 +6,11 @@ local require = require(script.Parent.loader).load(script)
|
|
|
6
6
|
|
|
7
7
|
local TieUtils = require("TieUtils")
|
|
8
8
|
local TieRealmUtils = require("TieRealmUtils")
|
|
9
|
+
local _TieRealms = require("TieRealms")
|
|
9
10
|
|
|
10
11
|
local TieMethodInterfaceUtils = {}
|
|
11
12
|
|
|
12
|
-
function TieMethodInterfaceUtils.get(aliasSelf, tieMethodDefinition, implParent, adornee
|
|
13
|
+
function TieMethodInterfaceUtils.get(aliasSelf, tieMethodDefinition, implParent, adornee: Instance?, interfaceTieRealm: _TieRealms.TieRealm)
|
|
13
14
|
assert(TieRealmUtils.isTieRealm(interfaceTieRealm), "Bad interfaceTieRealm")
|
|
14
15
|
|
|
15
16
|
local tieDefinition = tieMethodDefinition:GetTieDefinition()
|
|
@@ -33,7 +34,7 @@ function TieMethodInterfaceUtils.get(aliasSelf, tieMethodDefinition, implParent,
|
|
|
33
34
|
-- Search the adornee (rip this is SO slow)
|
|
34
35
|
|
|
35
36
|
local validContainerNameSet = tieDefinition:GetValidContainerNameSet(interfaceTieRealm)
|
|
36
|
-
for containerName, _ in
|
|
37
|
+
for containerName, _ in validContainerNameSet do
|
|
37
38
|
local found = adornee:FindFirstChild(containerName)
|
|
38
39
|
if found then
|
|
39
40
|
local bindableFunction = found:FindFirstChild(tieMethodDefinition:GetMemberName())
|
|
@@ -52,7 +53,7 @@ function TieMethodInterfaceUtils.get(aliasSelf, tieMethodDefinition, implParent,
|
|
|
52
53
|
end
|
|
53
54
|
|
|
54
55
|
return TieUtils.decode(bindableFunction:Invoke(TieUtils.encode(...)))
|
|
55
|
-
end
|
|
56
|
+
end
|
|
56
57
|
end
|
|
57
58
|
|
|
58
59
|
return TieMethodInterfaceUtils
|
|
@@ -27,7 +27,7 @@ function TiePropertyDefinition:GetDefaultValue()
|
|
|
27
27
|
return self._defaultValue
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
function TiePropertyDefinition:IsRequiredForImplementation(currentRealm)
|
|
30
|
+
function TiePropertyDefinition:IsRequiredForImplementation(currentRealm): boolean
|
|
31
31
|
-- Override
|
|
32
32
|
if getmetatable(TiePropertyDefinition).IsRequiredForImplementation(self, currentRealm) then
|
|
33
33
|
if self:GetDefaultValue() ~= nil then
|
|
@@ -17,7 +17,7 @@ local TiePropertyImplementation = setmetatable({}, BaseObject)
|
|
|
17
17
|
TiePropertyImplementation.ClassName = "TiePropertyImplementation"
|
|
18
18
|
TiePropertyImplementation.__index = TiePropertyImplementation
|
|
19
19
|
|
|
20
|
-
function TiePropertyImplementation.new(memberDefinition, folder, initialValue, _actualSelf)
|
|
20
|
+
function TiePropertyImplementation.new(memberDefinition, folder: Folder, initialValue, _actualSelf)
|
|
21
21
|
local self = setmetatable(BaseObject.new(), TiePropertyImplementation)
|
|
22
22
|
|
|
23
23
|
self._memberDefinition = assert(memberDefinition, "No memberDefinition")
|
|
@@ -100,7 +100,14 @@ function TiePropertyImplementation:_updateImplementation(maid, implementation)
|
|
|
100
100
|
|
|
101
101
|
local className = ValueBaseUtils.getClassNameFromType(typeof(implementation))
|
|
102
102
|
if not className then
|
|
103
|
-
|
|
103
|
+
local memberName = self._memberDefinition:GetMemberName()
|
|
104
|
+
error(
|
|
105
|
+
string.format(
|
|
106
|
+
"[TiePropertyImplementation] - Bad implementation value type %q, cannot set %s",
|
|
107
|
+
typeof(implementation),
|
|
108
|
+
memberName
|
|
109
|
+
)
|
|
110
|
+
)
|
|
104
111
|
end
|
|
105
112
|
|
|
106
113
|
local copy = self:_changeToClassIfNeeded(className, implementation)
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
local TiePropertyImplementationUtils = {}
|
|
6
6
|
|
|
7
|
-
function TiePropertyImplementationUtils.changeToClassIfNeeded(memberDefinition, folder, className)
|
|
8
|
-
|
|
7
|
+
function TiePropertyImplementationUtils.changeToClassIfNeeded(memberDefinition, folder: Folder, className: string)
|
|
9
8
|
local memberName = memberDefinition:GetMemberName()
|
|
10
9
|
folder:SetAttribute(memberName, nil)
|
|
11
10
|
|
|
@@ -263,7 +263,7 @@ function TiePropertyInterface:__newindex(index, value)
|
|
|
263
263
|
|
|
264
264
|
local valueBase = self:_findValueBase()
|
|
265
265
|
if type(valueBase) == "table" or (typeof(valueBase) == "Instance" and valueBase.ClassName == className) then
|
|
266
|
-
valueBase.Value = value
|
|
266
|
+
(valueBase :: any).Value = value
|
|
267
267
|
elseif AttributeUtils.isValidAttributeType(typeof(value)) and value ~= nil then
|
|
268
268
|
local implParent = self:GetImplParent()
|
|
269
269
|
if implParent then
|
|
@@ -13,7 +13,7 @@ local TieSignalDefinition = setmetatable({}, TieMemberDefinition)
|
|
|
13
13
|
TieSignalDefinition.ClassName = "TieSignalDefinition"
|
|
14
14
|
TieSignalDefinition.__index = TieSignalDefinition
|
|
15
15
|
|
|
16
|
-
function TieSignalDefinition.new(tieDefinition, signalName, memberTieRealm)
|
|
16
|
+
function TieSignalDefinition.new(tieDefinition, signalName: string, memberTieRealm)
|
|
17
17
|
assert(TieRealmUtils.isTieRealm(memberTieRealm), "Bad memberTieRealm")
|
|
18
18
|
|
|
19
19
|
local self = setmetatable(TieMemberDefinition.new(tieDefinition, signalName, memberTieRealm), TieSignalDefinition)
|
|
@@ -39,7 +39,7 @@ function TieSignalImplementation:SetImplementation(signal)
|
|
|
39
39
|
|
|
40
40
|
maid:GiveTask(signal:Connect(function(...)
|
|
41
41
|
local args = Tuple.new(...)
|
|
42
|
-
for pendingArgs, _ in
|
|
42
|
+
for pendingArgs, _ in signalFiredArgs do
|
|
43
43
|
if pendingArgs == args then
|
|
44
44
|
-- Remove from queue
|
|
45
45
|
signalFiredArgs[pendingArgs] = nil
|
|
@@ -53,7 +53,7 @@ function TieSignalImplementation:SetImplementation(signal)
|
|
|
53
53
|
|
|
54
54
|
maid:GiveTask(self._bindableEvent.Event:Connect(function(...)
|
|
55
55
|
local args = Tuple.new(TieUtils.decode(...))
|
|
56
|
-
for pendingArgs, _ in
|
|
56
|
+
for pendingArgs, _ in bindableEventFiredArgs do
|
|
57
57
|
if pendingArgs == args then
|
|
58
58
|
-- Remove from queue
|
|
59
59
|
bindableEventFiredArgs[pendingArgs] = nil
|
|
@@ -17,7 +17,7 @@ local TieSignalInterface = setmetatable({}, TieMemberInterface)
|
|
|
17
17
|
TieSignalInterface.ClassName = "TieSignalInterface"
|
|
18
18
|
TieSignalInterface.__index = TieSignalInterface
|
|
19
19
|
|
|
20
|
-
function TieSignalInterface.new(implParent, adornee, memberDefinition, interfaceTieRealm)
|
|
20
|
+
function TieSignalInterface.new(implParent: Instance, adornee: Instance, memberDefinition, interfaceTieRealm)
|
|
21
21
|
assert(TieRealmUtils.isTieRealm(interfaceTieRealm), "Bad interfaceTieRealm")
|
|
22
22
|
|
|
23
23
|
local self = setmetatable(TieMemberInterface.new(implParent, adornee, memberDefinition, interfaceTieRealm), TieSignalInterface)
|
|
@@ -45,7 +45,7 @@ end
|
|
|
45
45
|
@param callback (T...) -> ()
|
|
46
46
|
@return TieSignalConnection
|
|
47
47
|
]=]
|
|
48
|
-
function TieSignalInterface:Connect(callback)
|
|
48
|
+
function TieSignalInterface:Connect(callback: (...any) -> ())
|
|
49
49
|
assert(type(callback) == "function", "Bad callback")
|
|
50
50
|
|
|
51
51
|
return TieSignalConnection.new(self, callback)
|
|
@@ -13,7 +13,7 @@ local TieMemberDefinition = {}
|
|
|
13
13
|
TieMemberDefinition.ClassName = "TieMemberDefinition"
|
|
14
14
|
TieMemberDefinition.__index = TieMemberDefinition
|
|
15
15
|
|
|
16
|
-
function TieMemberDefinition.new(tieDefinition, memberName, memberTieRealm)
|
|
16
|
+
function TieMemberDefinition.new(tieDefinition, memberName: string, memberTieRealm)
|
|
17
17
|
assert(TieRealmUtils.isTieRealm(memberTieRealm), "Bad memberTieRealm")
|
|
18
18
|
|
|
19
19
|
local self = setmetatable({}, TieMemberDefinition)
|
|
@@ -33,11 +33,11 @@ function TieMemberDefinition:GetInterface()
|
|
|
33
33
|
error("Not implemented")
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
function TieMemberDefinition:GetFriendlyName()
|
|
36
|
+
function TieMemberDefinition:GetFriendlyName(): string
|
|
37
37
|
return string.format("%s.%s", self._tieDefinition:GetName(), self._memberName)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
function TieMemberDefinition:IsRequiredForInterface(currentRealm)
|
|
40
|
+
function TieMemberDefinition:IsRequiredForInterface(currentRealm): boolean
|
|
41
41
|
assert(TieRealmUtils.isTieRealm(currentRealm), "Bad currentRealm")
|
|
42
42
|
|
|
43
43
|
if self._memberTieRealm == TieRealms.SHARED then
|
|
@@ -50,7 +50,7 @@ function TieMemberDefinition:IsRequiredForInterface(currentRealm)
|
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
function TieMemberDefinition:IsAllowedOnInterface(currentRealm)
|
|
53
|
+
function TieMemberDefinition:IsAllowedOnInterface(currentRealm): boolean
|
|
54
54
|
assert(TieRealmUtils.isTieRealm(currentRealm), "Bad currentRealm")
|
|
55
55
|
|
|
56
56
|
if self._memberTieRealm == TieRealms.SHARED then
|
|
@@ -63,7 +63,7 @@ function TieMemberDefinition:IsAllowedOnInterface(currentRealm)
|
|
|
63
63
|
end
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
-
function TieMemberDefinition:IsRequiredForImplementation(currentRealm)
|
|
66
|
+
function TieMemberDefinition:IsRequiredForImplementation(currentRealm): boolean
|
|
67
67
|
assert(TieRealmUtils.isTieRealm(currentRealm), "Bad currentRealm")
|
|
68
68
|
|
|
69
69
|
if currentRealm == TieRealms.SHARED then
|
|
@@ -76,7 +76,7 @@ function TieMemberDefinition:IsRequiredForImplementation(currentRealm)
|
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
-
function TieMemberDefinition:IsAllowedForImplementation(currentRealm)
|
|
79
|
+
function TieMemberDefinition:IsAllowedForImplementation(currentRealm): boolean
|
|
80
80
|
assert(TieRealmUtils.isTieRealm(currentRealm), "Bad currentRealm")
|
|
81
81
|
|
|
82
82
|
if self._memberTieRealm == TieRealms.SHARED then
|
|
@@ -97,7 +97,7 @@ function TieMemberDefinition:GetTieDefinition()
|
|
|
97
97
|
return self._tieDefinition
|
|
98
98
|
end
|
|
99
99
|
|
|
100
|
-
function TieMemberDefinition:GetMemberName()
|
|
100
|
+
function TieMemberDefinition:GetMemberName(): string
|
|
101
101
|
return self._memberName
|
|
102
102
|
end
|
|
103
103
|
|
|
@@ -17,7 +17,8 @@ local TieRealmUtils = {}
|
|
|
17
17
|
@param tieRealm any
|
|
18
18
|
@return boolean
|
|
19
19
|
]=]
|
|
20
|
-
function TieRealmUtils.isTieRealm(tieRealm)
|
|
20
|
+
function TieRealmUtils.isTieRealm(tieRealm: any): boolean
|
|
21
|
+
-- stylua: ignore
|
|
21
22
|
return tieRealm == TieRealms.CLIENT
|
|
22
23
|
or tieRealm == TieRealms.SERVER
|
|
23
24
|
or tieRealm == TieRealms.SHARED
|
|
@@ -28,7 +29,7 @@ end
|
|
|
28
29
|
|
|
29
30
|
@return TieRealm
|
|
30
31
|
]=]
|
|
31
|
-
function TieRealmUtils.inferTieRealm()
|
|
32
|
+
function TieRealmUtils.inferTieRealm(): "server" | "client"
|
|
32
33
|
if RunService:IsServer() then
|
|
33
34
|
return TieRealms.SERVER
|
|
34
35
|
elseif RunService:IsClient() then
|
|
@@ -8,8 +8,16 @@ local require = require(script.Parent.loader).load(script)
|
|
|
8
8
|
|
|
9
9
|
local Table = require("Table")
|
|
10
10
|
|
|
11
|
+
export type TieRealm = "shared" | "client" | "server"
|
|
12
|
+
|
|
13
|
+
export type TieRealms = {
|
|
14
|
+
SHARED: "shared",
|
|
15
|
+
CLIENT: "client",
|
|
16
|
+
SERVER: "server",
|
|
17
|
+
}
|
|
18
|
+
|
|
11
19
|
return Table.readonly({
|
|
12
|
-
SHARED = "shared"
|
|
13
|
-
CLIENT = "client"
|
|
14
|
-
SERVER = "server"
|
|
15
|
-
})
|
|
20
|
+
SHARED = "shared",
|
|
21
|
+
CLIENT = "client",
|
|
22
|
+
SERVER = "server",
|
|
23
|
+
} :: TieRealms)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
@class TieRealmService
|
|
3
4
|
]=]
|
|
@@ -5,11 +6,13 @@
|
|
|
5
6
|
local require = require(script.Parent.loader).load(script)
|
|
6
7
|
|
|
7
8
|
local TieRealmUtils = require("TieRealmUtils")
|
|
9
|
+
local _ServiceBag = require("ServiceBag")
|
|
10
|
+
local _TieRealms = require("TieRealms")
|
|
8
11
|
|
|
9
12
|
local TieRealmService = {}
|
|
10
13
|
TieRealmService.ServiceName = "TieRealmService"
|
|
11
14
|
|
|
12
|
-
function TieRealmService:Init(serviceBag)
|
|
15
|
+
function TieRealmService:Init(serviceBag: _ServiceBag.ServiceBag)
|
|
13
16
|
assert(not self._serviceBag, "Already initialized")
|
|
14
17
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
15
18
|
|
|
@@ -18,13 +21,13 @@ function TieRealmService:Init(serviceBag)
|
|
|
18
21
|
end
|
|
19
22
|
end
|
|
20
23
|
|
|
21
|
-
function TieRealmService:SetTieRealm(tieRealm)
|
|
24
|
+
function TieRealmService:SetTieRealm(tieRealm: _TieRealms.TieRealm)
|
|
22
25
|
assert(TieRealmUtils.isTieRealm(tieRealm), "Bad tieRealm")
|
|
23
26
|
|
|
24
27
|
self._tieRealm = tieRealm
|
|
25
28
|
end
|
|
26
29
|
|
|
27
|
-
function TieRealmService:GetTieRealm()
|
|
30
|
+
function TieRealmService:GetTieRealm(): _TieRealms.TieRealm
|
|
28
31
|
return self._tieRealm
|
|
29
32
|
end
|
|
30
33
|
|
|
@@ -66,6 +66,8 @@ local ValueObject = require("ValueObject")
|
|
|
66
66
|
|
|
67
67
|
local UNSET_VALUE = Symbol.named("unsetValue")
|
|
68
68
|
|
|
69
|
+
export type TieRealm = TieRealms.TieRealm
|
|
70
|
+
|
|
69
71
|
local TieDefinition = {}
|
|
70
72
|
TieDefinition.ClassName = "TieDefinition"
|
|
71
73
|
TieDefinition.__index = TieDefinition
|
|
@@ -85,7 +87,7 @@ TieDefinition.Realms = TieRealms
|
|
|
85
87
|
@param members any
|
|
86
88
|
@return TieDefinition
|
|
87
89
|
]=]
|
|
88
|
-
function TieDefinition.new(definitionName, members)
|
|
90
|
+
function TieDefinition.new(definitionName: string, members)
|
|
89
91
|
local self = setmetatable({}, TieDefinition)
|
|
90
92
|
|
|
91
93
|
self._definitionName = assert(definitionName, "No definitionName")
|
|
@@ -112,7 +114,7 @@ function TieDefinition.new(definitionName, members)
|
|
|
112
114
|
end
|
|
113
115
|
|
|
114
116
|
function TieDefinition:_addMembers(members, realm)
|
|
115
|
-
for memberName, memberTypeOrDefaultValue in
|
|
117
|
+
for memberName, memberTypeOrDefaultValue in members do
|
|
116
118
|
if TieRealmUtils.isTieRealm(memberName) then
|
|
117
119
|
self:_addMembers(memberTypeOrDefaultValue, memberName)
|
|
118
120
|
elseif type(memberName) == "string" then
|
|
@@ -128,7 +130,7 @@ function TieDefinition:_addMembers(members, realm)
|
|
|
128
130
|
end
|
|
129
131
|
end
|
|
130
132
|
|
|
131
|
-
function TieDefinition:_addMember(memberName, memberTypeOrDefaultValue, realm)
|
|
133
|
+
function TieDefinition:_addMember(memberName: string, memberTypeOrDefaultValue, realm: TieRealm)
|
|
132
134
|
if memberTypeOrDefaultValue == TieDefinition.Types.METHOD then
|
|
133
135
|
self._memberMap[memberName] = TieMethodDefinition.new(self, memberName, realm)
|
|
134
136
|
elseif memberTypeOrDefaultValue == TieDefinition.Types.SIGNAL then
|
|
@@ -146,7 +148,7 @@ end
|
|
|
146
148
|
@param tieRealm TieRealm?
|
|
147
149
|
@return { TieInterface }
|
|
148
150
|
]=]
|
|
149
|
-
function TieDefinition:GetImplementations(adornee: Instance, tieRealm)
|
|
151
|
+
function TieDefinition:GetImplementations(adornee: Instance, tieRealm: TieRealm?)
|
|
150
152
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
151
153
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
152
154
|
|
|
@@ -154,14 +156,14 @@ function TieDefinition:GetImplementations(adornee: Instance, tieRealm)
|
|
|
154
156
|
|
|
155
157
|
local implementations = {}
|
|
156
158
|
|
|
157
|
-
for _, item in
|
|
159
|
+
for _, item in self:GetImplementationParents(adornee, tieRealm) do
|
|
158
160
|
table.insert(implementations, TieInterface.new(self, item, nil, tieRealm))
|
|
159
161
|
end
|
|
160
162
|
|
|
161
163
|
return implementations
|
|
162
164
|
end
|
|
163
165
|
|
|
164
|
-
function TieDefinition:GetNewImplClass(tieRealm)
|
|
166
|
+
function TieDefinition:GetNewImplClass(tieRealm: TieRealm): string
|
|
165
167
|
assert(TieRealmUtils.isTieRealm(tieRealm), "Bad tieRealm")
|
|
166
168
|
|
|
167
169
|
if tieRealm == TieRealms.CLIENT then
|
|
@@ -184,7 +186,7 @@ local IMPL_SHARED_SET = table.freeze({
|
|
|
184
186
|
["Configuration"] = true,
|
|
185
187
|
})
|
|
186
188
|
|
|
187
|
-
function TieDefinition:GetImplClassSet(tieRealm)
|
|
189
|
+
function TieDefinition:GetImplClassSet(tieRealm: TieRealm): { [string]: boolean }
|
|
188
190
|
if tieRealm == TieRealms.CLIENT then
|
|
189
191
|
-- Shared implements both...
|
|
190
192
|
return IMPL_CLIENT_SET
|
|
@@ -197,7 +199,7 @@ function TieDefinition:GetImplClassSet(tieRealm)
|
|
|
197
199
|
end
|
|
198
200
|
end
|
|
199
201
|
|
|
200
|
-
function TieDefinition:GetImplementationParents(adornee, tieRealm)
|
|
202
|
+
function TieDefinition:GetImplementationParents(adornee: BasePart, tieRealm: TieRealm?): { Instance }
|
|
201
203
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
202
204
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
203
205
|
|
|
@@ -207,7 +209,7 @@ function TieDefinition:GetImplementationParents(adornee, tieRealm)
|
|
|
207
209
|
|
|
208
210
|
local implParents = {}
|
|
209
211
|
|
|
210
|
-
for _, implParent in
|
|
212
|
+
for _, implParent in adornee:GetChildren() do
|
|
211
213
|
if validContainerNameSet[implParent.Name] then
|
|
212
214
|
if self:IsImplementation(implParent) then
|
|
213
215
|
table.insert(implParents, implParent)
|
|
@@ -225,7 +227,7 @@ end
|
|
|
225
227
|
@param tieRealm TieRealm?
|
|
226
228
|
@return Observable<Brio<TieInterface>>
|
|
227
229
|
]=]
|
|
228
|
-
function TieDefinition:ObserveChildrenBrio(adornee: Instance, tieRealm)
|
|
230
|
+
function TieDefinition:ObserveChildrenBrio(adornee: Instance, tieRealm: TieRealm?)
|
|
229
231
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
230
232
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
231
233
|
|
|
@@ -243,7 +245,7 @@ end
|
|
|
243
245
|
@param tieRealm TieRealm?
|
|
244
246
|
@return Promise<TieInterface>
|
|
245
247
|
]=]
|
|
246
|
-
function TieDefinition:Promise(adornee: Instance, tieRealm)
|
|
248
|
+
function TieDefinition:Promise(adornee: Instance, tieRealm: TieRealm?)
|
|
247
249
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
248
250
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
249
251
|
|
|
@@ -263,15 +265,15 @@ end
|
|
|
263
265
|
@param tieRealm TieRealm?
|
|
264
266
|
@return { TieInterface }
|
|
265
267
|
]=]
|
|
266
|
-
function TieDefinition:GetChildren(adornee: Instance, tieRealm)
|
|
268
|
+
function TieDefinition:GetChildren(adornee: Instance, tieRealm: TieRealm?)
|
|
267
269
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
268
270
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
269
271
|
|
|
270
272
|
local implementations = {}
|
|
271
273
|
|
|
272
274
|
-- TODO: Make this faster
|
|
273
|
-
for _, item in
|
|
274
|
-
for _, option in
|
|
275
|
+
for _, item in adornee:GetChildren() do
|
|
276
|
+
for _, option in self:GetImplementations(item, tieRealm) do
|
|
275
277
|
table.insert(implementations, option)
|
|
276
278
|
end
|
|
277
279
|
end
|
|
@@ -286,7 +288,7 @@ end
|
|
|
286
288
|
@param tieRealm TieRealm?
|
|
287
289
|
@return TieInterface | nil
|
|
288
290
|
]=]
|
|
289
|
-
function TieDefinition:Find(adornee: Instance, tieRealm)
|
|
291
|
+
function TieDefinition:Find(adornee: Instance, tieRealm: TieRealm?)
|
|
290
292
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
291
293
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
292
294
|
|
|
@@ -300,7 +302,7 @@ end
|
|
|
300
302
|
@param tieRealm TieRealm?
|
|
301
303
|
@return TieInterface | nil
|
|
302
304
|
]=]
|
|
303
|
-
function TieDefinition:ObserveAllTaggedBrio(tagName, tieRealm)
|
|
305
|
+
function TieDefinition:ObserveAllTaggedBrio(tagName: string, tieRealm: TieRealm?)
|
|
304
306
|
assert(type(tagName) == "string", "Bad tagName")
|
|
305
307
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
306
308
|
|
|
@@ -317,14 +319,14 @@ end
|
|
|
317
319
|
@param tieRealm TieRealm?
|
|
318
320
|
@return TieInterface
|
|
319
321
|
]=]
|
|
320
|
-
function TieDefinition:FindFirstImplementation(adornee: Instance, tieRealm)
|
|
322
|
+
function TieDefinition:FindFirstImplementation(adornee: Instance, tieRealm: TieRealm?)
|
|
321
323
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
322
324
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
323
325
|
|
|
324
326
|
tieRealm = tieRealm or self._defaultTieRealm
|
|
325
327
|
|
|
326
328
|
local validContainerNameSet = self:GetValidContainerNameSet(tieRealm)
|
|
327
|
-
for _, item in
|
|
329
|
+
for _, item in adornee:GetChildren() do
|
|
328
330
|
if validContainerNameSet[item.Name] then
|
|
329
331
|
if self:IsImplementation(item, tieRealm) then
|
|
330
332
|
return TieInterface.new(self, item, nil, tieRealm)
|
|
@@ -341,7 +343,7 @@ end
|
|
|
341
343
|
@param tieRealm TieRealm?
|
|
342
344
|
@return boolean
|
|
343
345
|
]=]
|
|
344
|
-
function TieDefinition:HasImplementation(adornee: Instance, tieRealm)
|
|
346
|
+
function TieDefinition:HasImplementation(adornee: Instance, tieRealm: TieRealm?)
|
|
345
347
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
346
348
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
347
349
|
|
|
@@ -368,7 +370,7 @@ end
|
|
|
368
370
|
@param tieRealm TieRealm?
|
|
369
371
|
@return Observable<boolean>>
|
|
370
372
|
]=]
|
|
371
|
-
function TieDefinition:ObserveIsImplemented(adornee: Instance, tieRealm): boolean
|
|
373
|
+
function TieDefinition:ObserveIsImplemented(adornee: Instance, tieRealm: TieRealm?): Observable.Observable<boolean>
|
|
372
374
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
373
375
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
374
376
|
|
|
@@ -377,8 +379,8 @@ function TieDefinition:ObserveIsImplemented(adornee: Instance, tieRealm): boolea
|
|
|
377
379
|
return result and true or false
|
|
378
380
|
end),
|
|
379
381
|
RxBrioUtils.emitOnDeath(false),
|
|
380
|
-
Rx.defaultsTo(false),
|
|
381
|
-
Rx.distinct(),
|
|
382
|
+
Rx.defaultsTo(false) :: any,
|
|
383
|
+
Rx.distinct() :: any,
|
|
382
384
|
})
|
|
383
385
|
end
|
|
384
386
|
|
|
@@ -388,7 +390,10 @@ end
|
|
|
388
390
|
@param tieRealm TieRealm?
|
|
389
391
|
@return Observable<boolean>>
|
|
390
392
|
]=]
|
|
391
|
-
function TieDefinition:ObserveIsImplementation(
|
|
393
|
+
function TieDefinition:ObserveIsImplementation(
|
|
394
|
+
implParent: Instance,
|
|
395
|
+
tieRealm: TieRealm?
|
|
396
|
+
): Observable.Observable<boolean>
|
|
392
397
|
assert(typeof(implParent) == "Instance", "Bad implParent")
|
|
393
398
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
394
399
|
|
|
@@ -411,7 +416,11 @@ end
|
|
|
411
416
|
@param tieRealm TieRealm?
|
|
412
417
|
@return Observable<boolean>>
|
|
413
418
|
]=]
|
|
414
|
-
function TieDefinition:ObserveIsImplementedOn(
|
|
419
|
+
function TieDefinition:ObserveIsImplementedOn(
|
|
420
|
+
implParent: Instance,
|
|
421
|
+
adornee: Instance,
|
|
422
|
+
tieRealm: TieRealm?
|
|
423
|
+
): Observable.Observable<boolean>
|
|
415
424
|
assert(typeof(implParent) == "Instance", "Bad implParent")
|
|
416
425
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
417
426
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
@@ -440,7 +449,7 @@ end
|
|
|
440
449
|
@param tieRealm TieRealm?
|
|
441
450
|
@return Observable<Brio<TieImplementation<T>>>
|
|
442
451
|
]=]
|
|
443
|
-
function TieDefinition:ObserveBrio(adornee: Instance, tieRealm)
|
|
452
|
+
function TieDefinition:ObserveBrio(adornee: Instance, tieRealm: TieRealm?)
|
|
444
453
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
445
454
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
446
455
|
|
|
@@ -461,7 +470,7 @@ end
|
|
|
461
470
|
@param tieRealm TieRealm?
|
|
462
471
|
@return Observable<TieImplementation<T> | nil>>
|
|
463
472
|
]=]
|
|
464
|
-
function TieDefinition:Observe(adornee: Instance, tieRealm)
|
|
473
|
+
function TieDefinition:Observe(adornee: Instance, tieRealm: TieRealm?)
|
|
465
474
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
466
475
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
467
476
|
|
|
@@ -479,7 +488,7 @@ TieDefinition.ObserveLastImplementationBrio = TieDefinition.ObserveBrio
|
|
|
479
488
|
@param tieRealm TieRealm?
|
|
480
489
|
@return Observable<Brio<TieImplementation<T>>>
|
|
481
490
|
]=]
|
|
482
|
-
function TieDefinition:ObserveImplementationsBrio(adornee: Instance, tieRealm)
|
|
491
|
+
function TieDefinition:ObserveImplementationsBrio(adornee: Instance, tieRealm: TieRealm?)
|
|
483
492
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
484
493
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
485
494
|
|
|
@@ -492,7 +501,7 @@ function TieDefinition:ObserveImplementationsBrio(adornee: Instance, tieRealm)
|
|
|
492
501
|
})
|
|
493
502
|
end
|
|
494
503
|
|
|
495
|
-
function TieDefinition:ObserveValidContainerChildrenBrio(adornee, tieRealm)
|
|
504
|
+
function TieDefinition:ObserveValidContainerChildrenBrio(adornee: Instance, tieRealm: TieRealm?)
|
|
496
505
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
497
506
|
assert(TieRealmUtils.isTieRealm(tieRealm), "Bad tieRealm")
|
|
498
507
|
|
|
@@ -505,7 +514,7 @@ function TieDefinition:ObserveValidContainerChildrenBrio(adornee, tieRealm)
|
|
|
505
514
|
end)
|
|
506
515
|
end
|
|
507
516
|
|
|
508
|
-
function TieDefinition:_observeImplementation(implParent, tieRealm)
|
|
517
|
+
function TieDefinition:_observeImplementation(implParent: Instance, tieRealm: TieRealm?)
|
|
509
518
|
assert(TieRealmUtils.isTieRealm(tieRealm), "Bad tieRealm")
|
|
510
519
|
|
|
511
520
|
return Observable.new(function(sub)
|
|
@@ -544,7 +553,7 @@ function TieDefinition:_observeImplementation(implParent, tieRealm)
|
|
|
544
553
|
update()
|
|
545
554
|
end))
|
|
546
555
|
|
|
547
|
-
for memberName, member in
|
|
556
|
+
for memberName, member in self._memberMap do
|
|
548
557
|
if not member:IsAllowedOnInterface(tieRealm) then
|
|
549
558
|
continue
|
|
550
559
|
end
|
|
@@ -559,7 +568,7 @@ function TieDefinition:_observeImplementation(implParent, tieRealm)
|
|
|
559
568
|
update()
|
|
560
569
|
end))
|
|
561
570
|
|
|
562
|
-
for _, child in
|
|
571
|
+
for _, child in implParent:GetChildren() do
|
|
563
572
|
maid[child] = child:GetPropertyChangedSignal("Name"):Connect(update)
|
|
564
573
|
end
|
|
565
574
|
|
|
@@ -582,7 +591,7 @@ end
|
|
|
582
591
|
@param tieRealm TieRealm?
|
|
583
592
|
@return TieImplementation<T>
|
|
584
593
|
]=]
|
|
585
|
-
function TieDefinition:Implement(adornee: Instance, implementer, tieRealm)
|
|
594
|
+
function TieDefinition:Implement(adornee: Instance, implementer, tieRealm: TieRealm?)
|
|
586
595
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
587
596
|
assert(type(implementer) == "table" or implementer == nil, "Bad implementer")
|
|
588
597
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
@@ -606,7 +615,7 @@ end
|
|
|
606
615
|
@param tieRealm TieRealm?
|
|
607
616
|
@return TieInterface<T>
|
|
608
617
|
]=]
|
|
609
|
-
function TieDefinition:Get(adornee: Instance, tieRealm)
|
|
618
|
+
function TieDefinition:Get(adornee: Instance, tieRealm: TieRealm?)
|
|
610
619
|
assert(typeof(adornee) == "Instance", "Bad adornee")
|
|
611
620
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
612
621
|
|
|
@@ -629,7 +638,7 @@ end
|
|
|
629
638
|
@param tieRealm TieRealm
|
|
630
639
|
@return { [string]: boolean }
|
|
631
640
|
]=]
|
|
632
|
-
function TieDefinition:GetValidContainerNameSet(tieRealm)
|
|
641
|
+
function TieDefinition:GetValidContainerNameSet(tieRealm: TieRealm?): { [string]: boolean }
|
|
633
642
|
-- TODO: Still generate unique datamodel key here?
|
|
634
643
|
if self._validContainerNameSetWeakCache[tieRealm] then
|
|
635
644
|
return self._validContainerNameSetWeakCache[tieRealm]
|
|
@@ -669,7 +678,7 @@ end
|
|
|
669
678
|
@param tieRealm TieRealm
|
|
670
679
|
@return string
|
|
671
680
|
]=]
|
|
672
|
-
function TieDefinition:GetNewContainerName(tieRealm): string
|
|
681
|
+
function TieDefinition:GetNewContainerName(tieRealm: TieRealm): string
|
|
673
682
|
assert(TieRealmUtils.isTieRealm(tieRealm), "Bad tieRealm")
|
|
674
683
|
|
|
675
684
|
-- TODO: Handle server/actor
|
|
@@ -697,7 +706,7 @@ end
|
|
|
697
706
|
@param tieRealm TieRealm? -- Optional tie realm
|
|
698
707
|
@return boolean
|
|
699
708
|
]=]
|
|
700
|
-
function TieDefinition:IsImplementation(implParent, tieRealm)
|
|
709
|
+
function TieDefinition:IsImplementation(implParent: Instance, tieRealm: TieRealm?): boolean
|
|
701
710
|
assert(typeof(implParent) == "Instance", "Bad implParent")
|
|
702
711
|
assert(TieRealmUtils.isTieRealm(tieRealm) or tieRealm == nil, "Bad tieRealm")
|
|
703
712
|
|
|
@@ -705,11 +714,11 @@ function TieDefinition:IsImplementation(implParent, tieRealm)
|
|
|
705
714
|
|
|
706
715
|
local attributes = implParent:GetAttributes()
|
|
707
716
|
local children = {}
|
|
708
|
-
for _, item in
|
|
717
|
+
for _, item in implParent:GetChildren() do
|
|
709
718
|
children[item.Name] = item
|
|
710
719
|
end
|
|
711
720
|
|
|
712
|
-
for memberName, member in
|
|
721
|
+
for memberName, member in self._memberMap do
|
|
713
722
|
if not member:IsRequiredForInterface(tieRealm) then
|
|
714
723
|
continue
|
|
715
724
|
end
|
|
@@ -25,7 +25,7 @@ TieImplementation.__index = TieImplementation
|
|
|
25
25
|
@param implementer table
|
|
26
26
|
@param implementationTieRealm TieRealm
|
|
27
27
|
]=]
|
|
28
|
-
function TieImplementation.new(tieDefinition, adornee: Instance, implementer, implementationTieRealm)
|
|
28
|
+
function TieImplementation.new(tieDefinition, adornee: Instance, implementer, implementationTieRealm: TieRealms.TieRealm)
|
|
29
29
|
assert(TieRealmUtils.isTieRealm(implementationTieRealm), "Bad implementationTieRealm")
|
|
30
30
|
|
|
31
31
|
local self = setmetatable(BaseObject.new(), TieImplementation)
|
|
@@ -115,7 +115,7 @@ function TieImplementation:__newindex(index, value)
|
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
function TieImplementation:_buildMemberImplementations(implementer)
|
|
118
|
-
for _, memberDefinition in
|
|
118
|
+
for _, memberDefinition in self._memberMap do
|
|
119
119
|
local memberName = memberDefinition:GetMemberName()
|
|
120
120
|
local found = nil
|
|
121
121
|
|
|
@@ -14,7 +14,7 @@ local TieInterface = {}
|
|
|
14
14
|
TieInterface.ClassName = "TieInterface"
|
|
15
15
|
TieInterface.__index = TieInterface
|
|
16
16
|
|
|
17
|
-
function TieInterface.new(definition, implParent
|
|
17
|
+
function TieInterface.new(definition, implParent: Instance?, adornee: Instance?, interfaceTieRealm)
|
|
18
18
|
local self = setmetatable({}, TieInterface)
|
|
19
19
|
|
|
20
20
|
assert(implParent or adornee, "ImplParent or adornee required")
|
|
@@ -33,7 +33,7 @@ end
|
|
|
33
33
|
|
|
34
34
|
@return boolean
|
|
35
35
|
]=]
|
|
36
|
-
function TieInterface:IsImplemented()
|
|
36
|
+
function TieInterface:IsImplemented(): boolean
|
|
37
37
|
local implParent = rawget(self, "_implParent")
|
|
38
38
|
local adornee = rawget(self, "_adornee")
|
|
39
39
|
local definition = rawget(self, "_definition")
|
|
@@ -59,9 +59,9 @@ end
|
|
|
59
59
|
--[=[
|
|
60
60
|
Gets the adornee the tie interface is on if it can be found.
|
|
61
61
|
|
|
62
|
-
@return Instance
|
|
62
|
+
@return Instance?
|
|
63
63
|
]=]
|
|
64
|
-
function TieInterface:GetTieAdornee()
|
|
64
|
+
function TieInterface:GetTieAdornee(): Instance?
|
|
65
65
|
local adornee = rawget(self, "_adornee")
|
|
66
66
|
if adornee then
|
|
67
67
|
return adornee
|
|
@@ -51,7 +51,7 @@ end
|
|
|
51
51
|
@param ... any
|
|
52
52
|
@return any
|
|
53
53
|
]=]
|
|
54
|
-
function TieUtils.invokeEncodedBindableFunction(bindableFunction, ...)
|
|
54
|
+
function TieUtils.invokeEncodedBindableFunction(bindableFunction: BindableFunction, ...)
|
|
55
55
|
assert(typeof(bindableFunction) == "Instance" and bindableFunction:IsA("BindableFunction"), "Bad bindableFunction")
|
|
56
56
|
|
|
57
57
|
return TieUtils.decode(bindableFunction:Invoke(TieUtils.encode(...)))
|
|
@@ -115,7 +115,7 @@ do
|
|
|
115
115
|
end
|
|
116
116
|
end
|
|
117
117
|
|
|
118
|
-
for _, action in
|
|
118
|
+
for _, action in ActionInterface:GetImplementations(adornee) do
|
|
119
119
|
-- action.Activated:Connect(function()
|
|
120
120
|
-- print("Action activation!")
|
|
121
121
|
-- end)
|