@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-
|
|
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.
|
|
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.
|
|
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.
|
|
34
|
-
"@quenty/datastore": "^13.26.
|
|
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.
|
|
42
|
-
"@quenty/playerbinder": "^14.26.
|
|
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.
|
|
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.
|
|
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.
|
|
58
|
-
"@quenty/valueobject": "^13.22.
|
|
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": "
|
|
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(
|
|
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
|
|
69
|
-
@return SettingProperty
|
|
70
|
+
@param defaultValue T
|
|
71
|
+
@return SettingProperty.SettingProperty<T>
|
|
70
72
|
]=]
|
|
71
|
-
function PlayerSettingsBase.GetSettingProperty(
|
|
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
|
-
|
|
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(
|
|
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
|
-
--!
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
210
|
+
function SettingDefinition.GetDefaultValue<T>(self: SettingDefinition<T>): T
|
|
191
211
|
return self._defaultValue
|
|
192
212
|
end
|
|
193
213
|
|
|
194
|
-
function SettingDefinition
|
|
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)
|