@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 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.0",
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.0",
32
- "@quenty/baseobject": "^10.8.0",
33
- "@quenty/brio": "^14.17.0",
34
- "@quenty/collectionserviceutils": "^8.17.0",
35
- "@quenty/instanceutils": "^13.17.0",
36
- "@quenty/loader": "^10.8.0",
37
- "@quenty/maid": "^3.4.0",
38
- "@quenty/rx": "^13.17.0",
39
- "@quenty/rxsignal": "^7.17.0",
40
- "@quenty/statestack": "^14.18.0",
41
- "@quenty/string": "^3.3.1",
42
- "@quenty/symbol": "^3.4.0",
43
- "@quenty/table": "^3.7.1",
44
- "@quenty/tuple": "^1.5.0",
45
- "@quenty/valuebaseutils": "^13.17.0",
46
- "@quenty/valueobject": "^13.17.0"
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.1",
50
- "@quenty/signal": "^7.10.0"
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": "e8ea56930e65322fcffc05a1556d5df988068f0b"
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, interfaceTieRealm)
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 pairs(validContainerNameSet) do
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
- error(string.format("[TiePropertyImplementation] - Bad implementation value type %q, cannot set %s", typeof(implementation), self._memberDefinition:GetMemberName()))
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 pairs(signalFiredArgs) do
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 pairs(bindableEventFiredArgs) do
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 pairs(members) do
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 pairs(self:GetImplementationParents(adornee, tieRealm)) do
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 pairs(adornee:GetChildren()) do
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 pairs(adornee:GetChildren()) do
274
- for _, option in pairs(self:GetImplementations(item, tieRealm)) do
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 pairs(adornee:GetChildren()) do
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(implParent: Instance, tieRealm)
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(implParent: Instance, adornee: Instance, tieRealm)
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 pairs(self._memberMap) do
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 pairs(implParent:GetChildren()) do
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 pairs(implParent:GetChildren()) do
717
+ for _, item in implParent:GetChildren() do
709
718
  children[item.Name] = item
710
719
  end
711
720
 
712
- for memberName, member in pairs(self._memberMap) do
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 pairs(self._memberMap) do
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, adornee, interfaceTieRealm)
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 | nil
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 pairs(ActionInterface:GetImplementations(adornee)) do
118
+ for _, action in ActionInterface:GetImplementations(adornee) do
119
119
  -- action.Activated:Connect(function()
120
120
  -- print("Action activation!")
121
121
  -- end)