roblox-opencode 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/README.md +112 -122
  2. package/commands/setup-game.md +108 -108
  3. package/commands/sync-check.md +53 -53
  4. package/core/roblox-core.md +93 -93
  5. package/dist/server.js +189 -167
  6. package/package.json +35 -35
  7. package/skills/roblox-analytics/SKILL.md +277 -277
  8. package/skills/roblox-analytics/references/event-batcher.luau +75 -75
  9. package/skills/roblox-animation-vfx/SKILL.md +1325 -1325
  10. package/skills/roblox-architecture/SKILL.md +877 -863
  11. package/skills/roblox-architecture/references/combat-systems.md +1381 -1381
  12. package/skills/roblox-code-review/SKILL.md +686 -686
  13. package/skills/roblox-data/SKILL.md +889 -889
  14. package/skills/roblox-data/references/inventory-systems.md +1729 -1729
  15. package/skills/roblox-debug/SKILL.md +98 -98
  16. package/skills/roblox-gui/SKILL.md +1103 -1103
  17. package/skills/roblox-gui-fusion/SKILL.md +150 -150
  18. package/skills/roblox-gui-fusion/references/inventory.luau +427 -427
  19. package/skills/roblox-gui-fusion/references/settings-menu.luau +579 -579
  20. package/skills/roblox-gui-fusion/references/shop.luau +411 -411
  21. package/skills/roblox-luau-mastery/SKILL.md +1618 -1519
  22. package/skills/roblox-monetization/SKILL.md +1084 -1084
  23. package/skills/roblox-monetization/references/process-receipt.luau +131 -131
  24. package/skills/roblox-networking/SKILL.md +669 -669
  25. package/skills/roblox-networking/references/remote-validator.luau +193 -193
  26. package/skills/roblox-publish-checklist/SKILL.md +127 -127
  27. package/skills/roblox-runtime/SKILL.md +753 -753
  28. package/skills/roblox-sharp-edges/SKILL.md +294 -294
  29. package/skills/roblox-sync/SKILL.md +126 -126
  30. package/skills/roblox-testing/SKILL.md +943 -943
  31. package/skills/roblox-tooling/SKILL.md +149 -149
  32. package/vendor/LICENSES/ProfileStore-LICENSE +201 -201
  33. package/vendor/LICENSES/RbxUtil-LICENSE +7 -7
  34. package/vendor/LICENSES/promise-LICENSE +20 -20
  35. package/vendor/LICENSES/t-LICENSE +21 -21
  36. package/vendor/LICENSES/testez-LICENSE +200 -200
  37. package/vendor/README.md +83 -83
  38. package/vendor/fusion/Animation/ExternalTime.luau +83 -83
  39. package/vendor/fusion/Animation/Spring.luau +321 -321
  40. package/vendor/fusion/Animation/Stopwatch.luau +127 -127
  41. package/vendor/fusion/Animation/Tween.luau +187 -187
  42. package/vendor/fusion/Animation/getTweenDuration.luau +27 -27
  43. package/vendor/fusion/Animation/getTweenRatio.luau +47 -47
  44. package/vendor/fusion/Animation/lerpType.luau +163 -163
  45. package/vendor/fusion/Animation/packType.luau +99 -99
  46. package/vendor/fusion/Animation/springCoefficients.luau +80 -80
  47. package/vendor/fusion/Animation/unpackType.luau +102 -102
  48. package/vendor/fusion/Colour/Oklab.luau +70 -70
  49. package/vendor/fusion/Colour/sRGB.luau +54 -54
  50. package/vendor/fusion/External.luau +167 -167
  51. package/vendor/fusion/ExternalDebug.luau +69 -69
  52. package/vendor/fusion/Graph/Observer.luau +113 -113
  53. package/vendor/fusion/Graph/castToGraph.luau +28 -28
  54. package/vendor/fusion/Graph/change.luau +80 -80
  55. package/vendor/fusion/Graph/depend.luau +32 -32
  56. package/vendor/fusion/Graph/evaluate.luau +55 -55
  57. package/vendor/fusion/Instances/Attribute.luau +57 -57
  58. package/vendor/fusion/Instances/AttributeChange.luau +46 -46
  59. package/vendor/fusion/Instances/AttributeOut.luau +63 -63
  60. package/vendor/fusion/Instances/Child.luau +21 -21
  61. package/vendor/fusion/Instances/Children.luau +147 -147
  62. package/vendor/fusion/Instances/Hydrate.luau +32 -32
  63. package/vendor/fusion/Instances/New.luau +52 -52
  64. package/vendor/fusion/Instances/OnChange.luau +49 -49
  65. package/vendor/fusion/Instances/OnEvent.luau +53 -53
  66. package/vendor/fusion/Instances/Out.luau +69 -69
  67. package/vendor/fusion/Instances/applyInstanceProps.luau +148 -148
  68. package/vendor/fusion/Instances/defaultProps.luau +194 -194
  69. package/vendor/fusion/LICENSE +21 -21
  70. package/vendor/fusion/Logging/formatError.luau +48 -48
  71. package/vendor/fusion/Logging/messages.luau +51 -51
  72. package/vendor/fusion/Logging/parseError.luau +24 -24
  73. package/vendor/fusion/Memory/checkLifetime.luau +133 -133
  74. package/vendor/fusion/Memory/deriveScope.luau +23 -23
  75. package/vendor/fusion/Memory/deriveScopeImpl.luau +44 -44
  76. package/vendor/fusion/Memory/doCleanup.luau +78 -78
  77. package/vendor/fusion/Memory/innerScope.luau +33 -33
  78. package/vendor/fusion/Memory/legacyCleanup.luau +17 -17
  79. package/vendor/fusion/Memory/needsDestruction.luau +16 -16
  80. package/vendor/fusion/Memory/poisonScope.luau +33 -33
  81. package/vendor/fusion/Memory/scopePool.luau +54 -54
  82. package/vendor/fusion/Memory/scoped.luau +26 -26
  83. package/vendor/fusion/Memory/whichLivesLonger.luau +74 -74
  84. package/vendor/fusion/RobloxExternal.luau +97 -97
  85. package/vendor/fusion/State/Computed.luau +138 -138
  86. package/vendor/fusion/State/For/Disassembly.luau +210 -210
  87. package/vendor/fusion/State/For/ForTypes.luau +30 -30
  88. package/vendor/fusion/State/For/init.luau +109 -109
  89. package/vendor/fusion/State/ForKeys.luau +93 -93
  90. package/vendor/fusion/State/ForPairs.luau +96 -96
  91. package/vendor/fusion/State/ForValues.luau +93 -93
  92. package/vendor/fusion/State/Value.luau +87 -87
  93. package/vendor/fusion/State/castToState.luau +25 -25
  94. package/vendor/fusion/State/peek.luau +30 -30
  95. package/vendor/fusion/Types.luau +314 -314
  96. package/vendor/fusion/Utility/Contextual.luau +90 -90
  97. package/vendor/fusion/Utility/Safe.luau +22 -22
  98. package/vendor/fusion/Utility/isSimilar.luau +29 -29
  99. package/vendor/fusion/Utility/merge.luau +35 -35
  100. package/vendor/fusion/Utility/nameOf.luau +34 -34
  101. package/vendor/fusion/Utility/never.luau +13 -13
  102. package/vendor/fusion/Utility/nicknames.luau +10 -10
  103. package/vendor/fusion/Utility/xtypeof.luau +26 -26
  104. package/vendor/fusion/init.luau +82 -82
  105. package/vendor/profilestore/init.luau +2242 -2242
  106. package/vendor/promise/init.luau +1982 -1982
  107. package/vendor/rbxutil/buffer-util/Buffer.test.luau +25 -25
  108. package/vendor/rbxutil/buffer-util/BufferReader.luau +228 -228
  109. package/vendor/rbxutil/buffer-util/BufferWriter.luau +269 -269
  110. package/vendor/rbxutil/buffer-util/DataTypeBuffer.luau +223 -223
  111. package/vendor/rbxutil/buffer-util/Types.luau +60 -60
  112. package/vendor/rbxutil/buffer-util/index.d.ts +153 -153
  113. package/vendor/rbxutil/buffer-util/init.luau +41 -41
  114. package/vendor/rbxutil/buffer-util/package.json +16 -16
  115. package/vendor/rbxutil/buffer-util/wally.toml +9 -9
  116. package/vendor/rbxutil/comm/Client/ClientComm.luau +232 -232
  117. package/vendor/rbxutil/comm/Client/ClientRemoteProperty.luau +156 -156
  118. package/vendor/rbxutil/comm/Client/ClientRemoteSignal.luau +109 -109
  119. package/vendor/rbxutil/comm/Client/init.luau +135 -135
  120. package/vendor/rbxutil/comm/Server/RemoteProperty.luau +295 -295
  121. package/vendor/rbxutil/comm/Server/RemoteSignal.luau +211 -211
  122. package/vendor/rbxutil/comm/Server/ServerComm.luau +211 -211
  123. package/vendor/rbxutil/comm/Server/init.luau +140 -140
  124. package/vendor/rbxutil/comm/Types.luau +18 -18
  125. package/vendor/rbxutil/comm/Util.luau +27 -27
  126. package/vendor/rbxutil/comm/init.luau +35 -35
  127. package/vendor/rbxutil/comm/wally.toml +13 -13
  128. package/vendor/rbxutil/component/init.luau +759 -759
  129. package/vendor/rbxutil/component/init.test.luau +311 -311
  130. package/vendor/rbxutil/component/wally.toml +14 -14
  131. package/vendor/rbxutil/concur/init.luau +542 -542
  132. package/vendor/rbxutil/concur/init.test.luau +364 -364
  133. package/vendor/rbxutil/concur/wally.toml +8 -8
  134. package/vendor/rbxutil/enum-list/init.luau +101 -101
  135. package/vendor/rbxutil/enum-list/init.test.luau +91 -91
  136. package/vendor/rbxutil/enum-list/wally.toml +8 -8
  137. package/vendor/rbxutil/find/index.d.ts +20 -20
  138. package/vendor/rbxutil/find/init.luau +44 -44
  139. package/vendor/rbxutil/find/package.json +17 -17
  140. package/vendor/rbxutil/find/wally.toml +8 -8
  141. package/vendor/rbxutil/input/Gamepad.luau +559 -559
  142. package/vendor/rbxutil/input/Keyboard.luau +124 -124
  143. package/vendor/rbxutil/input/Mouse.luau +278 -278
  144. package/vendor/rbxutil/input/PreferredInput.luau +91 -91
  145. package/vendor/rbxutil/input/Touch.luau +120 -120
  146. package/vendor/rbxutil/input/init.luau +33 -33
  147. package/vendor/rbxutil/input/wally.toml +12 -12
  148. package/vendor/rbxutil/loader/index.d.ts +15 -15
  149. package/vendor/rbxutil/loader/init.luau +137 -137
  150. package/vendor/rbxutil/loader/wally.toml +8 -8
  151. package/vendor/rbxutil/log/index.d.ts +38 -38
  152. package/vendor/rbxutil/log/init.luau +746 -746
  153. package/vendor/rbxutil/log/wally.toml +8 -8
  154. package/vendor/rbxutil/net/init.luau +190 -190
  155. package/vendor/rbxutil/net/wally.toml +8 -8
  156. package/vendor/rbxutil/option/index.d.ts +44 -44
  157. package/vendor/rbxutil/option/init.luau +489 -489
  158. package/vendor/rbxutil/option/init.test.luau +342 -342
  159. package/vendor/rbxutil/option/wally.toml +8 -8
  160. package/vendor/rbxutil/pid/index.d.ts +53 -53
  161. package/vendor/rbxutil/pid/init.luau +195 -195
  162. package/vendor/rbxutil/pid/package.json +16 -16
  163. package/vendor/rbxutil/pid/wally.toml +9 -9
  164. package/vendor/rbxutil/quaternion/index.d.ts +117 -117
  165. package/vendor/rbxutil/quaternion/init.luau +570 -570
  166. package/vendor/rbxutil/quaternion/package.json +16 -16
  167. package/vendor/rbxutil/quaternion/wally.toml +9 -9
  168. package/vendor/rbxutil/query/index.d.ts +43 -43
  169. package/vendor/rbxutil/query/init.luau +117 -117
  170. package/vendor/rbxutil/query/package.json +18 -18
  171. package/vendor/rbxutil/query/wally.toml +9 -9
  172. package/vendor/rbxutil/sequent/index.d.ts +28 -28
  173. package/vendor/rbxutil/sequent/init.luau +340 -340
  174. package/vendor/rbxutil/sequent/package.json +16 -16
  175. package/vendor/rbxutil/sequent/wally.toml +9 -9
  176. package/vendor/rbxutil/ser/init.luau +175 -175
  177. package/vendor/rbxutil/ser/init.test.luau +50 -50
  178. package/vendor/rbxutil/ser/wally.toml +11 -11
  179. package/vendor/rbxutil/shake/index.d.ts +36 -36
  180. package/vendor/rbxutil/shake/init.luau +532 -532
  181. package/vendor/rbxutil/shake/init.test.luau +267 -267
  182. package/vendor/rbxutil/shake/package.json +16 -16
  183. package/vendor/rbxutil/shake/wally.toml +9 -9
  184. package/vendor/rbxutil/signal/index.d.ts +100 -100
  185. package/vendor/rbxutil/signal/init.luau +432 -432
  186. package/vendor/rbxutil/signal/init.test.luau +190 -190
  187. package/vendor/rbxutil/signal/package.json +17 -17
  188. package/vendor/rbxutil/signal/wally.toml +9 -9
  189. package/vendor/rbxutil/silo/TableWatcher.luau +65 -65
  190. package/vendor/rbxutil/silo/Util.luau +55 -55
  191. package/vendor/rbxutil/silo/init.luau +338 -338
  192. package/vendor/rbxutil/silo/init.test.luau +215 -215
  193. package/vendor/rbxutil/silo/wally.toml +8 -8
  194. package/vendor/rbxutil/spring/index.d.ts +40 -40
  195. package/vendor/rbxutil/spring/init.luau +97 -97
  196. package/vendor/rbxutil/spring/package.json +17 -17
  197. package/vendor/rbxutil/spring/wally.toml +8 -8
  198. package/vendor/rbxutil/stream/index.d.ts +88 -88
  199. package/vendor/rbxutil/stream/init.luau +597 -597
  200. package/vendor/rbxutil/stream/package.json +18 -18
  201. package/vendor/rbxutil/stream/wally.toml +9 -9
  202. package/vendor/rbxutil/streamable/Streamable.luau +202 -202
  203. package/vendor/rbxutil/streamable/StreamableUtil.luau +80 -80
  204. package/vendor/rbxutil/streamable/init.luau +8 -8
  205. package/vendor/rbxutil/streamable/wally.toml +12 -12
  206. package/vendor/rbxutil/symbol/init.luau +56 -56
  207. package/vendor/rbxutil/symbol/init.test.luau +37 -37
  208. package/vendor/rbxutil/symbol/wally.toml +8 -8
  209. package/vendor/rbxutil/table-util/init.luau +938 -938
  210. package/vendor/rbxutil/table-util/init.test.luau +439 -439
  211. package/vendor/rbxutil/task-queue/index.d.ts +27 -27
  212. package/vendor/rbxutil/task-queue/init.luau +97 -97
  213. package/vendor/rbxutil/task-queue/wally.toml +8 -8
  214. package/vendor/rbxutil/timer/index.d.ts +81 -81
  215. package/vendor/rbxutil/timer/init.luau +249 -249
  216. package/vendor/rbxutil/timer/init.test.luau +73 -73
  217. package/vendor/rbxutil/timer/wally.toml +11 -11
  218. package/vendor/rbxutil/tree/index.d.ts +15 -15
  219. package/vendor/rbxutil/tree/init.luau +137 -137
  220. package/vendor/rbxutil/tree/wally.toml +8 -8
  221. package/vendor/rbxutil/trove/index.d.ts +46 -46
  222. package/vendor/rbxutil/trove/init.luau +787 -787
  223. package/vendor/rbxutil/trove/init.test.luau +203 -203
  224. package/vendor/rbxutil/trove/wally.toml +8 -8
  225. package/vendor/rbxutil/typed-remote/init.luau +196 -196
  226. package/vendor/rbxutil/typed-remote/wally.toml +8 -8
  227. package/vendor/rbxutil/wait-for/index.d.ts +17 -17
  228. package/vendor/rbxutil/wait-for/init.luau +257 -257
  229. package/vendor/rbxutil/wait-for/init.test.luau +182 -182
  230. package/vendor/rbxutil/wait-for/wally.toml +11 -11
  231. package/vendor/t/t.lua +1350 -1350
  232. package/vendor/testez/Context.lua +26 -26
  233. package/vendor/testez/Expectation.lua +311 -311
  234. package/vendor/testez/ExpectationContext.lua +38 -38
  235. package/vendor/testez/LifecycleHooks.lua +89 -89
  236. package/vendor/testez/Reporters/TeamCityReporter.lua +101 -101
  237. package/vendor/testez/Reporters/TextReporter.lua +105 -105
  238. package/vendor/testez/Reporters/TextReporterQuiet.lua +96 -96
  239. package/vendor/testez/TestBootstrap.lua +146 -146
  240. package/vendor/testez/TestEnum.lua +27 -27
  241. package/vendor/testez/TestPlan.lua +304 -304
  242. package/vendor/testez/TestPlanner.lua +39 -39
  243. package/vendor/testez/TestResults.lua +111 -111
  244. package/vendor/testez/TestRunner.lua +188 -188
  245. package/vendor/testez/TestSession.lua +243 -243
  246. package/vendor/testez/init.lua +39 -39
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 Daniel P H Fox
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Daniel P H Fox
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,49 +1,49 @@
1
- --!strict
2
- --!nolint LocalUnused
3
- --!nolint LocalShadow
4
- local task = nil -- Disable usage of Roblox's task scheduler
5
-
6
- --[[
7
- Formats a Fusion-specific error message.
8
- ]]
9
-
10
- local Package = script.Parent.Parent
11
- local Types = require(Package.Types)
12
- local messages = require(Package.Logging.messages)
13
-
14
- local ERROR_INFO_URL = "https://elttob.uk/Fusion/0.3/api-reference/general/errors/#"
15
-
16
- local function formatError(
17
- externalProvider: Types.ExternalProvider?,
18
- messageID: string,
19
- errorOrTrace: Types.Error | string | nil,
20
- ...: unknown
21
- ): string
22
- local originalMessageID = messageID
23
- local error: Types.Error? = if typeof(errorOrTrace) == "table" then errorOrTrace else nil
24
- local trace: string? = if typeof(errorOrTrace) == "table" then errorOrTrace.trace else errorOrTrace
25
- local messageText = messages[messageID]
26
- if messageText == nil then
27
- messageID = "unknownMessage"
28
- messageText = messages[messageID]
29
- end
30
- messageText = messageText:format(...)
31
- if error ~= nil then
32
- messageText = messageText:gsub("ERROR_MESSAGE", error.message)
33
- if error.context ~= nil then
34
- messageText ..= ` ({error.context})`
35
- end
36
- else
37
- messageText = messageText:gsub("ERROR_MESSAGE", originalMessageID)
38
- end
39
- messageText = `[Fusion] {messageText} \nID: {messageID}`
40
- if externalProvider ~= nil and externalProvider.policies.allowWebLinks then
41
- messageText ..= `\nLearn more: {ERROR_INFO_URL}{messageID:lower()}`
42
- end
43
- if trace ~= nil then
44
- messageText ..= ` \n---- Stack trace ----\n{trace}`
45
- end
46
- return messageText:gsub("\n", "\n ")
47
- end
48
-
1
+ --!strict
2
+ --!nolint LocalUnused
3
+ --!nolint LocalShadow
4
+ local task = nil -- Disable usage of Roblox's task scheduler
5
+
6
+ --[[
7
+ Formats a Fusion-specific error message.
8
+ ]]
9
+
10
+ local Package = script.Parent.Parent
11
+ local Types = require(Package.Types)
12
+ local messages = require(Package.Logging.messages)
13
+
14
+ local ERROR_INFO_URL = "https://elttob.uk/Fusion/0.3/api-reference/general/errors/#"
15
+
16
+ local function formatError(
17
+ externalProvider: Types.ExternalProvider?,
18
+ messageID: string,
19
+ errorOrTrace: Types.Error | string | nil,
20
+ ...: unknown
21
+ ): string
22
+ local originalMessageID = messageID
23
+ local error: Types.Error? = if typeof(errorOrTrace) == "table" then errorOrTrace else nil
24
+ local trace: string? = if typeof(errorOrTrace) == "table" then errorOrTrace.trace else errorOrTrace
25
+ local messageText = messages[messageID]
26
+ if messageText == nil then
27
+ messageID = "unknownMessage"
28
+ messageText = messages[messageID]
29
+ end
30
+ messageText = messageText:format(...)
31
+ if error ~= nil then
32
+ messageText = messageText:gsub("ERROR_MESSAGE", error.message)
33
+ if error.context ~= nil then
34
+ messageText ..= ` ({error.context})`
35
+ end
36
+ else
37
+ messageText = messageText:gsub("ERROR_MESSAGE", originalMessageID)
38
+ end
39
+ messageText = `[Fusion] {messageText} \nID: {messageID}`
40
+ if externalProvider ~= nil and externalProvider.policies.allowWebLinks then
41
+ messageText ..= `\nLearn more: {ERROR_INFO_URL}{messageID:lower()}`
42
+ end
43
+ if trace ~= nil then
44
+ messageText ..= ` \n---- Stack trace ----\n{trace}`
45
+ end
46
+ return messageText:gsub("\n", "\n ")
47
+ end
48
+
49
49
  return formatError
@@ -1,52 +1,52 @@
1
- --!strict
2
- --!nolint LocalUnused
3
- --!nolint LocalShadow
4
- local task = nil -- Disable usage of Roblox's task scheduler
5
-
6
- --[[
7
- Stores templates for different kinds of logging messages.
8
- ]]
9
-
10
- return {
11
- callbackError = "Error in callback:\nERROR_MESSAGE",
12
- cannotAssignProperty = "The class type '%s' has no assignable property '%s'.",
13
- cannotConnectChange = "The %s class doesn't have a property called '%s'.",
14
- cannotConnectEvent = "The %s class doesn't have an event called '%s'.",
15
- cannotCreateClass = "Can't create a new instance of class '%s'.",
16
- cannotDepend = "%s can't depend on %s.",
17
- cleanupWasRenamed = "`Fusion.cleanup` was renamed to `Fusion.doCleanup`. This will be an error in future versions of Fusion.",
18
- destroyedTwice = "`doCleanup()` was given something that it is already cleaning up. Unclear how to proceed.",
19
- destructorRedundant = "%s destructors no longer do anything. If you wish to run code on destroy, `table.insert` a function into the `scope` argument. See discussion #292 on GitHub for advice.",
20
- forKeyCollision = "The key '%s' was returned multiple times simultaneously, which is not allowed in `For` objects.",
21
- infiniteLoop = "Detected an infinite loop. Consider adding an explicit breakpoint to your code to prevent a cyclic dependency.",
22
- invalidAttributeChangeHandler = "The change handler for the '%s' attribute must be a function.",
23
- invalidAttributeOutType = "[AttributeOut] properties must be given Value objects.",
24
- invalidChangeHandler = "The change handler for the '%s' property must be a function.",
25
- invalidEventHandler = "The handler for the '%s' event must be a function.",
26
- invalidOutProperty = "The %s class doesn't have a property called '%s'.",
27
- invalidOutType = "[Out] properties must be given Value objects.",
28
- invalidPropertyType = "'%s.%s' expected a '%s' type, but got a '%s' type.",
29
- invalidRefType = "Instance refs must be Value objects.",
30
- invalidSpringDamping = "The damping ratio for a spring must be >= 0. (damping was %.2f)",
31
- invalidSpringSpeed = "The speed of a spring must be >= 0. (speed was %.2f)",
32
- mergeConflict = "Multiple definitions for '%s' found while merging.",
33
- mistypedSpringDamping = "The damping ratio for a spring must be a number. (got a %s)",
34
- mistypedSpringSpeed = "The speed of a spring must be a number. (got a %s)",
35
- mistypedTweenInfo = "The tween info of a tween must be a TweenInfo. (got a %s)",
36
- noTaskScheduler = "Fusion is not connected to an external task scheduler.",
37
- poisonedScope = "Attempted to use a scope after it's been destroyed; %s",
38
- possiblyOutlives = "%s will be destroyed before %s; %s. To fix this, review the order they're created in, and what scopes they belong to. See discussion #292 on GitHub for advice.",
39
- propertySetError = "Error setting property:\nERROR_MESSAGE",
40
- scopeMissing = "To create %s, provide a scope. (e.g. `%s`). See discussion #292 on GitHub for advice.",
41
- springNanGoal = "A spring was given a NaN goal, so some simulation has been skipped. Ensure no springs have NaN goals.",
42
- springNanMotion = "A spring encountered NaN during motion, so has snapped to the goal position. Ensure no springs have NaN positions or velocities.",
43
- springTypeMismatch = "The type '%s' doesn't match the spring's type '%s'.",
44
- stateGetWasRemoved = "`StateObject:get()` has been replaced by `use()` and `peek()` - see discussion #217 on GitHub.",
45
- tweenNanGoal = "A tween was given a NaN goal, so some animation has been skipped. Ensure no tweens have NaN goals.",
46
- tweenNanMotion = "A tween encountered NaN during motion, so has snapped to the goal. Ensure no tweens have NaN in their tween infos.",
47
- unknownMessage = "Unknown error:\nERROR_MESSAGE",
48
- unrecognisedChildType = "'%s' type children aren't accepted by `[Children]`.",
49
- unrecognisedPropertyKey = "'%s' keys aren't accepted in property tables.",
50
- unrecognisedPropertyStage = "'%s' isn't a valid stage for a special key to be applied at.",
51
- useAfterDestroy = "%s is no longer valid - it was destroyed before %s. See discussion #292 on GitHub for advice."
1
+ --!strict
2
+ --!nolint LocalUnused
3
+ --!nolint LocalShadow
4
+ local task = nil -- Disable usage of Roblox's task scheduler
5
+
6
+ --[[
7
+ Stores templates for different kinds of logging messages.
8
+ ]]
9
+
10
+ return {
11
+ callbackError = "Error in callback:\nERROR_MESSAGE",
12
+ cannotAssignProperty = "The class type '%s' has no assignable property '%s'.",
13
+ cannotConnectChange = "The %s class doesn't have a property called '%s'.",
14
+ cannotConnectEvent = "The %s class doesn't have an event called '%s'.",
15
+ cannotCreateClass = "Can't create a new instance of class '%s'.",
16
+ cannotDepend = "%s can't depend on %s.",
17
+ cleanupWasRenamed = "`Fusion.cleanup` was renamed to `Fusion.doCleanup`. This will be an error in future versions of Fusion.",
18
+ destroyedTwice = "`doCleanup()` was given something that it is already cleaning up. Unclear how to proceed.",
19
+ destructorRedundant = "%s destructors no longer do anything. If you wish to run code on destroy, `table.insert` a function into the `scope` argument. See discussion #292 on GitHub for advice.",
20
+ forKeyCollision = "The key '%s' was returned multiple times simultaneously, which is not allowed in `For` objects.",
21
+ infiniteLoop = "Detected an infinite loop. Consider adding an explicit breakpoint to your code to prevent a cyclic dependency.",
22
+ invalidAttributeChangeHandler = "The change handler for the '%s' attribute must be a function.",
23
+ invalidAttributeOutType = "[AttributeOut] properties must be given Value objects.",
24
+ invalidChangeHandler = "The change handler for the '%s' property must be a function.",
25
+ invalidEventHandler = "The handler for the '%s' event must be a function.",
26
+ invalidOutProperty = "The %s class doesn't have a property called '%s'.",
27
+ invalidOutType = "[Out] properties must be given Value objects.",
28
+ invalidPropertyType = "'%s.%s' expected a '%s' type, but got a '%s' type.",
29
+ invalidRefType = "Instance refs must be Value objects.",
30
+ invalidSpringDamping = "The damping ratio for a spring must be >= 0. (damping was %.2f)",
31
+ invalidSpringSpeed = "The speed of a spring must be >= 0. (speed was %.2f)",
32
+ mergeConflict = "Multiple definitions for '%s' found while merging.",
33
+ mistypedSpringDamping = "The damping ratio for a spring must be a number. (got a %s)",
34
+ mistypedSpringSpeed = "The speed of a spring must be a number. (got a %s)",
35
+ mistypedTweenInfo = "The tween info of a tween must be a TweenInfo. (got a %s)",
36
+ noTaskScheduler = "Fusion is not connected to an external task scheduler.",
37
+ poisonedScope = "Attempted to use a scope after it's been destroyed; %s",
38
+ possiblyOutlives = "%s will be destroyed before %s; %s. To fix this, review the order they're created in, and what scopes they belong to. See discussion #292 on GitHub for advice.",
39
+ propertySetError = "Error setting property:\nERROR_MESSAGE",
40
+ scopeMissing = "To create %s, provide a scope. (e.g. `%s`). See discussion #292 on GitHub for advice.",
41
+ springNanGoal = "A spring was given a NaN goal, so some simulation has been skipped. Ensure no springs have NaN goals.",
42
+ springNanMotion = "A spring encountered NaN during motion, so has snapped to the goal position. Ensure no springs have NaN positions or velocities.",
43
+ springTypeMismatch = "The type '%s' doesn't match the spring's type '%s'.",
44
+ stateGetWasRemoved = "`StateObject:get()` has been replaced by `use()` and `peek()` - see discussion #217 on GitHub.",
45
+ tweenNanGoal = "A tween was given a NaN goal, so some animation has been skipped. Ensure no tweens have NaN goals.",
46
+ tweenNanMotion = "A tween encountered NaN during motion, so has snapped to the goal. Ensure no tweens have NaN in their tween infos.",
47
+ unknownMessage = "Unknown error:\nERROR_MESSAGE",
48
+ unrecognisedChildType = "'%s' type children aren't accepted by `[Children]`.",
49
+ unrecognisedPropertyKey = "'%s' keys aren't accepted in property tables.",
50
+ unrecognisedPropertyStage = "'%s' isn't a valid stage for a special key to be applied at.",
51
+ useAfterDestroy = "%s is no longer valid - it was destroyed before %s. See discussion #292 on GitHub for advice."
52
52
  }
@@ -1,25 +1,25 @@
1
- --!strict
2
- --!nolint LocalUnused
3
- --!nolint LocalShadow
4
- local task = nil -- Disable usage of Roblox's task scheduler
5
-
6
- --[[
7
- An xpcall() error handler to collect and parse useful information about
8
- errors, such as clean messages and stack traces.
9
- ]]
10
-
11
- local Package = script.Parent.Parent
12
- local Types = require(Package.Types)
13
-
14
- local function parseError(
15
- err: string
16
- ): Types.Error
17
- return {
18
- type = "Error",
19
- raw = err,
20
- message = err:gsub("^.+:%d+:%s*", ""),
21
- trace = debug.traceback(nil, 2)
22
- }
23
- end
24
-
1
+ --!strict
2
+ --!nolint LocalUnused
3
+ --!nolint LocalShadow
4
+ local task = nil -- Disable usage of Roblox's task scheduler
5
+
6
+ --[[
7
+ An xpcall() error handler to collect and parse useful information about
8
+ errors, such as clean messages and stack traces.
9
+ ]]
10
+
11
+ local Package = script.Parent.Parent
12
+ local Types = require(Package.Types)
13
+
14
+ local function parseError(
15
+ err: string
16
+ ): Types.Error
17
+ return {
18
+ type = "Error",
19
+ raw = err,
20
+ message = err:gsub("^.+:%d+:%s*", ""),
21
+ trace = debug.traceback(nil, 2)
22
+ }
23
+ end
24
+
25
25
  return parseError
@@ -1,134 +1,134 @@
1
-
2
-
3
- --!strict
4
- --!nolint LocalUnused
5
- --!nolint LocalShadow
6
- local task = nil -- Disable usage of Roblox's task scheduler
7
-
8
- --[[
9
- Procedures for checking lifetimes and printing helpful warnings about them.
10
- ]]
11
-
12
- local Package = script.Parent.Parent
13
- local Types = require(Package.Types)
14
- local External = require(Package.External)
15
- local whichLivesLonger = require(Package.Memory.whichLivesLonger)
16
- local nameOf = require(Package.Utility.nameOf)
17
-
18
- local checkLifetime = {}
19
-
20
- checkLifetime.formatters = {}
21
-
22
- function checkLifetime.formatters.useFunction(
23
- self: unknown,
24
- used: unknown
25
- ): (string, string)
26
- local selfName = nameOf(self, "object")
27
- local usedName = nameOf(used, "object")
28
- return `The use()-d {usedName}`, `the {selfName}`
29
- end
30
-
31
- function checkLifetime.formatters.boundProperty(
32
- instance: Instance,
33
- bound: unknown,
34
- property: string
35
- ): (string, string)
36
- local selfName = instance.Name
37
- local boundName = nameOf(bound, "value")
38
- return `The {boundName} (bound to the {property} property)`, `the {selfName} instance`
39
- end
40
-
41
- function checkLifetime.formatters.boundAttribute(
42
- instance: Instance,
43
- bound: unknown,
44
- attribute: string
45
- ): (string, string)
46
- local selfName = instance.Name
47
- local boundName = nameOf(bound, "value")
48
- return `The {boundName} (bound to the {attribute} attribute)`, `the {selfName} instance`
49
- end
50
-
51
- function checkLifetime.formatters.propertyOutputsTo(
52
- instance: Instance,
53
- bound: unknown,
54
- property: string
55
- ): (string, string)
56
- local selfName = instance.Name
57
- local boundName = nameOf(bound, "object")
58
- return `The {boundName} (which the {property} property outputs to)`, `the {selfName} instance`
59
- end
60
-
61
- function checkLifetime.formatters.attributeOutputsTo(
62
- instance: Instance,
63
- bound: unknown,
64
- attribute: string
65
- ): (string, string)
66
- local selfName = instance.Name
67
- local boundName = nameOf(bound, "object")
68
- return `The {boundName} (which the {attribute} attribute outputs to)`, `the {selfName} instance`
69
- end
70
-
71
- function checkLifetime.formatters.refOutputsTo(
72
- instance: Instance,
73
- bound: unknown
74
- ): (string, string)
75
- local selfName = instance.Name
76
- local boundName = nameOf(bound, "object")
77
- return `The {boundName} (which the Ref key outputs to)`, `the {selfName} instance`
78
- end
79
-
80
- function checkLifetime.formatters.animationGoal(
81
- self: unknown,
82
- goal: unknown
83
- ): (string, string)
84
- local selfName = nameOf(self, "object")
85
- local goalName = nameOf(goal, "object")
86
- return `The goal {goalName}`, `the {selfName} that is following it`
87
- end
88
-
89
- function checkLifetime.formatters.parameter(
90
- self: unknown,
91
- used: unknown,
92
- parameterName: string | false
93
- ): (string, string)
94
- local selfName = nameOf(self, "object")
95
- local usedName = nameOf(used, "object")
96
- if parameterName == false then
97
- return `The {usedName} parameter`, `the {selfName} that it was used for`
98
- else
99
- return `The {usedName} representing the {parameterName} parameter`, `the {selfName} that it was used for`
100
- end
101
- end
102
-
103
- function checkLifetime.formatters.observer(
104
- self: unknown,
105
- watched: unknown
106
- ): (string, string)
107
- local selfName = nameOf(self, "object")
108
- local watchedName = nameOf(watched, "object")
109
- return `The watched {watchedName}`, `the {selfName} that's observing it for changes`
110
- end
111
-
112
- function checkLifetime.bOutlivesA<A, B, Args...>(
113
- scopeA: Types.Scope<unknown>,
114
- a: A,
115
- scopeB: Types.Scope<unknown>?,
116
- b: B,
117
- formatter: (a: A, b: B, Args...) -> (string, string),
118
- ...: Args...
119
- )
120
- if scopeB == nil then
121
- External.logError("useAfterDestroy", nil, formatter(a, b, ...))
122
- elseif whichLivesLonger(scopeA, a, scopeB, b) == "definitely-a" then
123
- local aName, bName = formatter(a, b, ...)
124
- External.logWarn(
125
- "possiblyOutlives",
126
- aName, bName,
127
- if scopeA == scopeB then
128
- "they're in the same scope, but the latter is destroyed too quickly"
129
- else
130
- "the latter is in a different scope that gets destroyed too quickly"
131
- )
132
- end
133
- end
1
+
2
+
3
+ --!strict
4
+ --!nolint LocalUnused
5
+ --!nolint LocalShadow
6
+ local task = nil -- Disable usage of Roblox's task scheduler
7
+
8
+ --[[
9
+ Procedures for checking lifetimes and printing helpful warnings about them.
10
+ ]]
11
+
12
+ local Package = script.Parent.Parent
13
+ local Types = require(Package.Types)
14
+ local External = require(Package.External)
15
+ local whichLivesLonger = require(Package.Memory.whichLivesLonger)
16
+ local nameOf = require(Package.Utility.nameOf)
17
+
18
+ local checkLifetime = {}
19
+
20
+ checkLifetime.formatters = {}
21
+
22
+ function checkLifetime.formatters.useFunction(
23
+ self: unknown,
24
+ used: unknown
25
+ ): (string, string)
26
+ local selfName = nameOf(self, "object")
27
+ local usedName = nameOf(used, "object")
28
+ return `The use()-d {usedName}`, `the {selfName}`
29
+ end
30
+
31
+ function checkLifetime.formatters.boundProperty(
32
+ instance: Instance,
33
+ bound: unknown,
34
+ property: string
35
+ ): (string, string)
36
+ local selfName = instance.Name
37
+ local boundName = nameOf(bound, "value")
38
+ return `The {boundName} (bound to the {property} property)`, `the {selfName} instance`
39
+ end
40
+
41
+ function checkLifetime.formatters.boundAttribute(
42
+ instance: Instance,
43
+ bound: unknown,
44
+ attribute: string
45
+ ): (string, string)
46
+ local selfName = instance.Name
47
+ local boundName = nameOf(bound, "value")
48
+ return `The {boundName} (bound to the {attribute} attribute)`, `the {selfName} instance`
49
+ end
50
+
51
+ function checkLifetime.formatters.propertyOutputsTo(
52
+ instance: Instance,
53
+ bound: unknown,
54
+ property: string
55
+ ): (string, string)
56
+ local selfName = instance.Name
57
+ local boundName = nameOf(bound, "object")
58
+ return `The {boundName} (which the {property} property outputs to)`, `the {selfName} instance`
59
+ end
60
+
61
+ function checkLifetime.formatters.attributeOutputsTo(
62
+ instance: Instance,
63
+ bound: unknown,
64
+ attribute: string
65
+ ): (string, string)
66
+ local selfName = instance.Name
67
+ local boundName = nameOf(bound, "object")
68
+ return `The {boundName} (which the {attribute} attribute outputs to)`, `the {selfName} instance`
69
+ end
70
+
71
+ function checkLifetime.formatters.refOutputsTo(
72
+ instance: Instance,
73
+ bound: unknown
74
+ ): (string, string)
75
+ local selfName = instance.Name
76
+ local boundName = nameOf(bound, "object")
77
+ return `The {boundName} (which the Ref key outputs to)`, `the {selfName} instance`
78
+ end
79
+
80
+ function checkLifetime.formatters.animationGoal(
81
+ self: unknown,
82
+ goal: unknown
83
+ ): (string, string)
84
+ local selfName = nameOf(self, "object")
85
+ local goalName = nameOf(goal, "object")
86
+ return `The goal {goalName}`, `the {selfName} that is following it`
87
+ end
88
+
89
+ function checkLifetime.formatters.parameter(
90
+ self: unknown,
91
+ used: unknown,
92
+ parameterName: string | false
93
+ ): (string, string)
94
+ local selfName = nameOf(self, "object")
95
+ local usedName = nameOf(used, "object")
96
+ if parameterName == false then
97
+ return `The {usedName} parameter`, `the {selfName} that it was used for`
98
+ else
99
+ return `The {usedName} representing the {parameterName} parameter`, `the {selfName} that it was used for`
100
+ end
101
+ end
102
+
103
+ function checkLifetime.formatters.observer(
104
+ self: unknown,
105
+ watched: unknown
106
+ ): (string, string)
107
+ local selfName = nameOf(self, "object")
108
+ local watchedName = nameOf(watched, "object")
109
+ return `The watched {watchedName}`, `the {selfName} that's observing it for changes`
110
+ end
111
+
112
+ function checkLifetime.bOutlivesA<A, B, Args...>(
113
+ scopeA: Types.Scope<unknown>,
114
+ a: A,
115
+ scopeB: Types.Scope<unknown>?,
116
+ b: B,
117
+ formatter: (a: A, b: B, Args...) -> (string, string),
118
+ ...: Args...
119
+ )
120
+ if scopeB == nil then
121
+ External.logError("useAfterDestroy", nil, formatter(a, b, ...))
122
+ elseif whichLivesLonger(scopeA, a, scopeB, b) == "definitely-a" then
123
+ local aName, bName = formatter(a, b, ...)
124
+ External.logWarn(
125
+ "possiblyOutlives",
126
+ aName, bName,
127
+ if scopeA == scopeB then
128
+ "they're in the same scope, but the latter is destroyed too quickly"
129
+ else
130
+ "the latter is in a different scope that gets destroyed too quickly"
131
+ )
132
+ end
133
+ end
134
134
  return checkLifetime
@@ -1,24 +1,24 @@
1
- --!strict
2
- --!nolint LocalUnused
3
- --!nolint LocalShadow
4
- local task = nil -- Disable usage of Roblox's task scheduler
5
-
6
- --[[
7
- Creates an empty scope with the same metatables as the original scope. Used
8
- for preserving access to constructors when creating inner scopes.
9
-
10
- This is the public version of the function, which implements external
11
- debugging hooks.
12
- ]]
13
- local Package = script.Parent.Parent
14
- local Types = require(Package.Types)
15
- local ExternalDebug = require(Package.ExternalDebug)
16
- local deriveScopeImpl = require(Package.Memory.deriveScopeImpl)
17
-
18
- local function deriveScope(...)
19
- local scope = deriveScopeImpl(...)
20
- ExternalDebug.trackScope(scope)
21
- return scope
22
- end
23
-
1
+ --!strict
2
+ --!nolint LocalUnused
3
+ --!nolint LocalShadow
4
+ local task = nil -- Disable usage of Roblox's task scheduler
5
+
6
+ --[[
7
+ Creates an empty scope with the same metatables as the original scope. Used
8
+ for preserving access to constructors when creating inner scopes.
9
+
10
+ This is the public version of the function, which implements external
11
+ debugging hooks.
12
+ ]]
13
+ local Package = script.Parent.Parent
14
+ local Types = require(Package.Types)
15
+ local ExternalDebug = require(Package.ExternalDebug)
16
+ local deriveScopeImpl = require(Package.Memory.deriveScopeImpl)
17
+
18
+ local function deriveScope(...)
19
+ local scope = deriveScopeImpl(...)
20
+ ExternalDebug.trackScope(scope)
21
+ return scope
22
+ end
23
+
24
24
  return deriveScope :: Types.DeriveScopeConstructor