@quenty/settings 11.35.0 → 11.35.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
+ ## [11.35.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/settings@11.35.0...@quenty/settings@11.35.1) (2026-01-05)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * Adjust typing accordingly for settings system ([4a5438c](https://github.com/Quenty/NevermoreEngine/commit/4a5438c073276c3f1e870fcafb6632ba2dd8a8d8))
12
+
13
+
14
+
15
+
16
+
6
17
  # [11.35.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/settings@11.34.4...@quenty/settings@11.35.0) (2026-01-04)
7
18
 
8
19
  **Note:** Version bump only for package @quenty/settings
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2014-2025 James Onnen (Quenty)
3
+ Copyright (c) 2014-2026 James Onnen (Quenty)
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenty/settings",
3
- "version": "11.35.0",
3
+ "version": "11.35.1",
4
4
  "description": "Centralized player settings service",
5
5
  "keywords": [
6
6
  "Roblox",
@@ -27,38 +27,38 @@
27
27
  "dependencies": {
28
28
  "@quenty/attributeutils": "^14.21.0",
29
29
  "@quenty/baseobject": "^10.9.1",
30
- "@quenty/binder": "^14.26.0",
30
+ "@quenty/binder": "^14.26.1",
31
31
  "@quenty/brio": "^14.21.0",
32
32
  "@quenty/canceltoken": "^11.13.4",
33
- "@quenty/cmdrservice": "^13.30.0",
34
- "@quenty/datastore": "^13.26.0",
33
+ "@quenty/cmdrservice": "^13.30.1",
34
+ "@quenty/datastore": "^13.26.1",
35
35
  "@quenty/ducktype": "^5.9.1",
36
36
  "@quenty/enumutils": "^3.4.3",
37
37
  "@quenty/instanceutils": "^13.21.0",
38
38
  "@quenty/jsonutils": "^10.12.4",
39
39
  "@quenty/loader": "^10.9.1",
40
40
  "@quenty/maid": "^3.5.1",
41
- "@quenty/observablecollection": "^12.25.0",
42
- "@quenty/playerbinder": "^14.26.0",
41
+ "@quenty/observablecollection": "^12.25.1",
42
+ "@quenty/playerbinder": "^14.26.1",
43
43
  "@quenty/playerutils": "^8.22.0",
44
44
  "@quenty/promise": "^10.12.4",
45
45
  "@quenty/remotefunctionutils": "^10.12.4",
46
46
  "@quenty/remoting": "^12.22.0",
47
47
  "@quenty/rx": "^13.21.0",
48
- "@quenty/rxbinderutils": "^14.26.0",
48
+ "@quenty/rxbinderutils": "^14.26.1",
49
49
  "@quenty/rxsignal": "^7.21.0",
50
50
  "@quenty/servicebag": "^11.13.4",
51
51
  "@quenty/signal": "^7.11.3",
52
- "@quenty/statestack": "^14.23.0",
52
+ "@quenty/statestack": "^14.23.1",
53
53
  "@quenty/string": "^3.3.4",
54
54
  "@quenty/symbol": "^3.5.0",
55
55
  "@quenty/table": "^3.9.0",
56
56
  "@quenty/throttle": "^10.10.1",
57
- "@quenty/tie": "^10.27.0",
58
- "@quenty/valueobject": "^13.22.0"
57
+ "@quenty/tie": "^10.27.1",
58
+ "@quenty/valueobject": "^13.22.1"
59
59
  },
60
60
  "publishConfig": {
61
61
  "access": "public"
62
62
  },
63
- "gitHead": "22144a14aa443a177ff307edd3813a838f8c1d5f"
63
+ "gitHead": "5232cd2c58ca0dcdf591dd8ae78995211da2f3e2"
64
64
  }
@@ -52,7 +52,7 @@ function PlayerSettings.new(folder: Folder, serviceBag: ServiceBag.ServiceBag):
52
52
  return self
53
53
  end
54
54
 
55
- function PlayerSettings.EnsureInitialized(self: PlayerSettings, settingName: string, defaultValue)
55
+ function PlayerSettings.EnsureInitialized<T>(self: PlayerSettings, settingName: string, defaultValue: T): ()
56
56
  assert(DataStoreStringUtils.isValidUTF8(settingName), "Bad settingName")
57
57
  assert(defaultValue ~= nil, "defaultValue cannot be nil")
58
58
 
@@ -68,7 +68,7 @@ function PlayerSettings.EnsureInitialized(self: PlayerSettings, settingName: str
68
68
 
69
69
  -- Paranoid UTF8 check
70
70
  if type(encoded) == "string" then
71
- assert(DataStoreStringUtils.isValidUTF8(defaultValue), "Bad UTF8 defaultValue")
71
+ assert(DataStoreStringUtils.isValidUTF8(encoded), "Bad UTF8 defaultValue")
72
72
  end
73
73
 
74
74
  self._obj:SetAttribute(attributeName, encoded)
@@ -9,11 +9,13 @@ local require = require(script.Parent.loader).load(script)
9
9
 
10
10
  local BaseObject = require("BaseObject")
11
11
  local DataStoreStringUtils = require("DataStoreStringUtils")
12
+ local Observable = require("Observable")
12
13
  local PlayerSettingsUtils = require("PlayerSettingsUtils")
13
14
  local Rx = require("Rx")
14
15
  local RxAttributeUtils = require("RxAttributeUtils")
15
16
  local ServiceBag = require("ServiceBag")
16
17
  local SettingDefinition = require("SettingDefinition")
18
+ local SettingProperty = require("SettingProperty")
17
19
 
18
20
  local PlayerSettingsBase = setmetatable({}, BaseObject)
19
21
  PlayerSettingsBase.ClassName = "PlayerSettingsBase"
@@ -65,16 +67,23 @@ end
65
67
  consider using the setting definitions in a centralized location.
66
68
 
67
69
  @param settingName string
68
- @param defaultValue any
69
- @return SettingProperty
70
+ @param defaultValue T
71
+ @return SettingProperty.SettingProperty<T>
70
72
  ]=]
71
- function PlayerSettingsBase.GetSettingProperty(self: PlayerSettingsBase, settingName: string, defaultValue)
73
+ function PlayerSettingsBase.GetSettingProperty<T>(
74
+ self: PlayerSettingsBase,
75
+ settingName: string,
76
+ defaultValue: T
77
+ ): SettingProperty.SettingProperty<T>
72
78
  assert(type(settingName) == "string", "Bad settingName")
73
79
  assert(defaultValue ~= nil, "defaultValue cannot be nil")
74
80
 
75
81
  self:EnsureInitialized(settingName, defaultValue)
76
82
 
77
- return SettingDefinition.new(settingName, defaultValue):GetSettingProperty(self._serviceBag, self:GetPlayer())
83
+ local player = self:GetPlayer()
84
+ assert(player ~= nil, "No player found for settings")
85
+
86
+ return SettingDefinition.new(settingName, defaultValue):GetSettingProperty(self._serviceBag, player)
78
87
  end
79
88
 
80
89
  --[=[
@@ -84,7 +93,7 @@ end
84
93
  @param defaultValue any
85
94
  @return any
86
95
  ]=]
87
- function PlayerSettingsBase.GetValue(self: PlayerSettingsBase, settingName: string, defaultValue)
96
+ function PlayerSettingsBase.GetValue<T>(self: PlayerSettingsBase, settingName: string, defaultValue: T): T
88
97
  assert(type(settingName) == "string", "Bad settingName")
89
98
  assert(defaultValue ~= nil, "defaultValue cannot be nil")
90
99
  assert(DataStoreStringUtils.isValidUTF8(settingName), "Bad settingName")
@@ -108,7 +117,7 @@ end
108
117
  @param value any
109
118
  @return any
110
119
  ]=]
111
- function PlayerSettingsBase.SetValue(self: PlayerSettingsBase, settingName: string, value)
120
+ function PlayerSettingsBase.SetValue<T>(self: PlayerSettingsBase, settingName: string, value: T): ()
112
121
  assert(type(settingName) == "string", "Bad settingName")
113
122
  assert(DataStoreStringUtils.isValidUTF8(settingName), "Bad settingName")
114
123
 
@@ -124,7 +133,11 @@ end
124
133
  @param defaultValue any
125
134
  @return Observable<any>
126
135
  ]=]
127
- function PlayerSettingsBase.ObserveValue(self: PlayerSettingsBase, settingName: string, defaultValue)
136
+ function PlayerSettingsBase.ObserveValue<T>(
137
+ self: PlayerSettingsBase,
138
+ settingName: string,
139
+ defaultValue: T
140
+ ): Observable.Observable<T>
128
141
  assert(type(settingName) == "string", "Bad settingName")
129
142
  assert(defaultValue ~= nil, "defaultValue cannot be nil")
130
143
  assert(DataStoreStringUtils.isValidUTF8(settingName), "Bad settingName")
@@ -144,7 +157,7 @@ end
144
157
  @param settingName string
145
158
  @param defaultValue T
146
159
  ]=]
147
- function PlayerSettingsBase.RestoreDefault(self: PlayerSettingsBase, settingName: string, defaultValue)
160
+ function PlayerSettingsBase.RestoreDefault<T>(self: PlayerSettingsBase, settingName: string, defaultValue: T): ()
148
161
  assert(type(settingName) == "string", "Bad settingName")
149
162
  assert(DataStoreStringUtils.isValidUTF8(settingName), "Bad settingName")
150
163
 
@@ -158,7 +171,7 @@ end
158
171
  @param settingName string
159
172
  @param defaultValue any
160
173
  ]=]
161
- function PlayerSettingsBase.EnsureInitialized(_self: PlayerSettingsBase, settingName: string, defaultValue)
174
+ function PlayerSettingsBase.EnsureInitialized<T>(_self: PlayerSettingsBase, settingName: string, defaultValue: T): ()
162
175
  assert(type(settingName) == "string", "Bad settingName")
163
176
  assert(defaultValue ~= nil, "defaultValue cannot be nil")
164
177
  assert(DataStoreStringUtils.isValidUTF8(settingName), "Bad settingName")
@@ -1,4 +1,4 @@
1
- --!nonstrict
1
+ --!strict
2
2
  --[=[
3
3
  These settings definitions are used to define a setting and register them on both the client and server. See
4
4
  [SettingDefinitionProvider] for more details on grouping these.
@@ -25,6 +25,8 @@ local Players = game:GetService("Players")
25
25
 
26
26
  local DuckTypeUtils = require("DuckTypeUtils")
27
27
  local Maid = require("Maid")
28
+ local Observable = require("Observable")
29
+ local Promise = require("Promise")
28
30
  local ServiceBag = require("ServiceBag")
29
31
  local SettingProperty = require("SettingProperty")
30
32
  local SettingsDataService = require("SettingsDataService")
@@ -34,6 +36,17 @@ SettingDefinition.ClassName = "SettingDefinition"
34
36
  SettingDefinition.ServiceName = "SettingDefinition"
35
37
  SettingDefinition.__index = SettingDefinition
36
38
 
39
+ export type SettingDefinition<T> = typeof(setmetatable(
40
+ {} :: {
41
+ _settingName: string,
42
+ _defaultValue: T,
43
+ _maid: Maid.Maid,
44
+ _serviceBag: ServiceBag.ServiceBag,
45
+ ServiceName: string,
46
+ },
47
+ {} :: typeof({ __index = SettingDefinition })
48
+ ))
49
+
37
50
  --[=[
38
51
  Constructs a new setting definition which defines the name and the defaultValue
39
52
 
@@ -41,11 +54,11 @@ SettingDefinition.__index = SettingDefinition
41
54
  @param defaultValue T
42
55
  @return SettingDefinition<T>
43
56
  ]=]
44
- function SettingDefinition.new(settingName, defaultValue)
57
+ function SettingDefinition.new<T>(settingName: string, defaultValue: T): SettingDefinition<T>
45
58
  assert(type(settingName) == "string", "Bad settingName")
46
59
  assert(defaultValue ~= nil, "DefaultValue cannot be nil")
47
60
 
48
- local self = setmetatable({}, SettingDefinition)
61
+ local self: SettingDefinition<T> = setmetatable({} :: any, SettingDefinition)
49
62
 
50
63
  self._settingName = settingName
51
64
  self._defaultValue = defaultValue
@@ -60,9 +73,9 @@ end
60
73
 
61
74
  @param serviceBag ServiceBag
62
75
  ]=]
63
- function SettingDefinition:Init(serviceBag: ServiceBag.ServiceBag)
76
+ function SettingDefinition.Init<T>(self: SettingDefinition<T>, serviceBag: ServiceBag.ServiceBag)
64
77
  assert(serviceBag, "No serviceBag")
65
- assert(not self._maid, "Already initialized")
78
+ assert(not (self :: any)._maid, "Already initialized")
66
79
 
67
80
  self._maid = Maid.new()
68
81
  self._serviceBag = assert(serviceBag, "No serviceBag")
@@ -77,11 +90,11 @@ end
77
90
  @param player Player
78
91
  @return T
79
92
  ]=]
80
- function SettingDefinition:Get(player: Player)
93
+ function SettingDefinition.Get<T>(self: SettingDefinition<T>, player: Player): T
81
94
  assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
82
95
  assert(self._serviceBag, "Retrieve from serviceBag")
83
96
 
84
- return self:GetSettingProperty(self._serviceBag, player):GetValue()
97
+ return self:GetSettingProperty(self._serviceBag, player).Value
85
98
  end
86
99
 
87
100
  --[=[
@@ -90,7 +103,7 @@ end
90
103
  @param player Player
91
104
  @param value T
92
105
  ]=]
93
- function SettingDefinition:Set(player: Player, value)
106
+ function SettingDefinition.Set<T>(self: SettingDefinition<T>, player: Player, value: T): ()
94
107
  assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
95
108
  assert(self._serviceBag, "Retrieve from serviceBag")
96
109
 
@@ -103,7 +116,7 @@ end
103
116
  @param player Player
104
117
  @return Promise<T>
105
118
  ]=]
106
- function SettingDefinition:Promise(player: Player)
119
+ function SettingDefinition.Promise<T>(self: SettingDefinition<T>, player: Player): Promise.Promise<T>
107
120
  assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
108
121
  assert(self._serviceBag, "Retrieve from serviceBag")
109
122
 
@@ -117,7 +130,7 @@ end
117
130
  @param value T
118
131
  @return Promise<T>
119
132
  ]=]
120
- function SettingDefinition:PromiseSet(player: Player, value)
133
+ function SettingDefinition.PromiseSet<T>(self: SettingDefinition<T>, player: Player, value: T): Promise.Promise<()>
121
134
  assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
122
135
  assert(self._serviceBag, "Retrieve from serviceBag")
123
136
 
@@ -130,7 +143,7 @@ end
130
143
  @param player Player
131
144
  @return Promise<T>
132
145
  ]=]
133
- function SettingDefinition:Observe(player: Player)
146
+ function SettingDefinition.Observe<T>(self: SettingDefinition<T>, player: Player): Observable.Observable<T>
134
147
  assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
135
148
  assert(self._serviceBag, "Retrieve from serviceBag")
136
149
 
@@ -154,7 +167,11 @@ end
154
167
  @param player Player
155
168
  @return SettingProperty<T>
156
169
  ]=]
157
- function SettingDefinition:GetSettingProperty(serviceBag, player: Player)
170
+ function SettingDefinition.GetSettingProperty<T>(
171
+ self: SettingDefinition<T>,
172
+ serviceBag: ServiceBag.ServiceBag,
173
+ player: Player
174
+ ): SettingProperty.SettingProperty<T>
158
175
  assert(ServiceBag.isServiceBag(serviceBag), "Bad serviceBag")
159
176
  assert(typeof(player) == "Instance" and player:IsA("Player") or player == nil, "Bad player")
160
177
 
@@ -169,7 +186,10 @@ end
169
186
  @param serviceBag ServiceBag
170
187
  @return SettingProperty<T>
171
188
  ]=]
172
- function SettingDefinition:GetLocalPlayerSettingProperty(serviceBag)
189
+ function SettingDefinition.GetLocalPlayerSettingProperty<T>(
190
+ self: SettingDefinition<T>,
191
+ serviceBag: ServiceBag.ServiceBag
192
+ ): SettingProperty.SettingProperty<T>
173
193
  assert(ServiceBag.isServiceBag(serviceBag), "Bad serviceBag")
174
194
 
175
195
  return self:GetSettingProperty(serviceBag, Players.LocalPlayer)
@@ -179,7 +199,7 @@ end
179
199
  Retrieves the default name of the setting
180
200
  @return string
181
201
  ]=]
182
- function SettingDefinition:GetSettingName(): string
202
+ function SettingDefinition.GetSettingName<T>(self: SettingDefinition<T>): string
183
203
  return self._settingName
184
204
  end
185
205
 
@@ -187,11 +207,11 @@ end
187
207
  Retrieves the default value for the setting
188
208
  @return T
189
209
  ]=]
190
- function SettingDefinition:GetDefaultValue()
210
+ function SettingDefinition.GetDefaultValue<T>(self: SettingDefinition<T>): T
191
211
  return self._defaultValue
192
212
  end
193
213
 
194
- function SettingDefinition:Destroy()
214
+ function SettingDefinition.Destroy<T>(self: SettingDefinition<T>): ()
195
215
  self._maid:DoCleaning()
196
216
  end
197
217
 
@@ -130,7 +130,7 @@ end
130
130
 
131
131
  @param value T
132
132
  ]=]
133
- function SettingProperty.SetValue<T>(self: SettingProperty<T>, value: T)
133
+ function SettingProperty.SetValue<T>(self: SettingProperty<T>, value: T): ()
134
134
  local settings = self:_getPlayerSettings()
135
135
  if settings then
136
136
  settings:SetValue(self._definition:GetSettingName(), value)