@quenty/gameconfig 12.55.0 → 12.57.0
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,16 @@
|
|
|
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
|
+
# [12.57.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/gameconfig@12.56.0...@quenty/gameconfig@12.57.0) (2026-07-23)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- Add baseline player-mock and support across Nevermore for mocked players. ([567d121](https://github.com/Quenty/NevermoreEngine/commit/567d121ffc014b42391554088189a1a6296dda83))
|
|
11
|
+
|
|
12
|
+
# [12.56.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/gameconfig@12.55.0...@quenty/gameconfig@12.56.0) (2026-07-22)
|
|
13
|
+
|
|
14
|
+
**Note:** Version bump only for package @quenty/gameconfig
|
|
15
|
+
|
|
6
16
|
# [12.55.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/gameconfig@12.54.0...@quenty/gameconfig@12.55.0) (2026-07-21)
|
|
7
17
|
|
|
8
18
|
**Note:** Version bump only for package @quenty/gameconfig
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/gameconfig",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.57.0",
|
|
4
4
|
"description": "Configuration service to specify Roblox badges, products, and other specific assets.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -30,36 +30,36 @@
|
|
|
30
30
|
"access": "public"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@quenty/attributeutils": "14.
|
|
34
|
-
"@quenty/badgeutils": "10.
|
|
35
|
-
"@quenty/baseobject": "10.
|
|
36
|
-
"@quenty/binder": "14.
|
|
37
|
-
"@quenty/brio": "14.
|
|
38
|
-
"@quenty/canceltoken": "11.
|
|
39
|
-
"@quenty/clienttranslator": "14.
|
|
40
|
-
"@quenty/cmdrservice": "13.
|
|
33
|
+
"@quenty/attributeutils": "14.33.0",
|
|
34
|
+
"@quenty/badgeutils": "10.21.0",
|
|
35
|
+
"@quenty/baseobject": "10.15.0",
|
|
36
|
+
"@quenty/binder": "14.41.0",
|
|
37
|
+
"@quenty/brio": "14.33.0",
|
|
38
|
+
"@quenty/canceltoken": "11.22.0",
|
|
39
|
+
"@quenty/clienttranslator": "14.42.0",
|
|
40
|
+
"@quenty/cmdrservice": "13.51.0",
|
|
41
41
|
"@quenty/enums": "1.3.0",
|
|
42
|
-
"@quenty/instanceutils": "13.
|
|
42
|
+
"@quenty/instanceutils": "13.33.0",
|
|
43
43
|
"@quenty/loader": "10.11.0",
|
|
44
|
-
"@quenty/maid": "3.
|
|
45
|
-
"@quenty/marketplaceutils": "11.
|
|
46
|
-
"@quenty/nevermore-test-runner": "1.
|
|
47
|
-
"@quenty/nevermoreclimanifest": "1.
|
|
48
|
-
"@quenty/observablecollection": "12.
|
|
49
|
-
"@quenty/playerutils": "8.
|
|
44
|
+
"@quenty/maid": "3.11.0",
|
|
45
|
+
"@quenty/marketplaceutils": "11.25.0",
|
|
46
|
+
"@quenty/nevermore-test-runner": "1.5.0",
|
|
47
|
+
"@quenty/nevermoreclimanifest": "1.6.0",
|
|
48
|
+
"@quenty/observablecollection": "12.42.0",
|
|
49
|
+
"@quenty/playerutils": "8.36.0",
|
|
50
50
|
"@quenty/preferredparentutils": "4.4.2",
|
|
51
|
-
"@quenty/promise": "10.
|
|
51
|
+
"@quenty/promise": "10.21.0",
|
|
52
52
|
"@quenty/pseudolocalize": "3.5.2",
|
|
53
|
-
"@quenty/remotefunctionutils": "10.
|
|
54
|
-
"@quenty/remoting": "12.
|
|
55
|
-
"@quenty/rx": "13.
|
|
56
|
-
"@quenty/rxbinderutils": "14.
|
|
57
|
-
"@quenty/servicebag": "11.
|
|
58
|
-
"@quenty/statestack": "14.
|
|
59
|
-
"@quenty/string": "3.
|
|
53
|
+
"@quenty/remotefunctionutils": "10.21.0",
|
|
54
|
+
"@quenty/remoting": "12.36.0",
|
|
55
|
+
"@quenty/rx": "13.31.0",
|
|
56
|
+
"@quenty/rxbinderutils": "14.41.0",
|
|
57
|
+
"@quenty/servicebag": "11.20.0",
|
|
58
|
+
"@quenty/statestack": "14.35.0",
|
|
59
|
+
"@quenty/string": "3.4.0",
|
|
60
60
|
"@quenty/table": "3.9.2",
|
|
61
|
-
"@quenty/valueobject": "13.
|
|
61
|
+
"@quenty/valueobject": "13.34.0",
|
|
62
62
|
"@quentystudios/jest-lua": "3.10.0-quenty.2"
|
|
63
63
|
},
|
|
64
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "1de37218a2bedb8e3f8614a2e09bba9eddc812da"
|
|
65
65
|
}
|
|
@@ -28,10 +28,9 @@ local PLACE: GameConfigAssetTypes.GameConfigAssetType = GameConfigAssetTypes.PLA
|
|
|
28
28
|
|
|
29
29
|
local function newProvider()
|
|
30
30
|
local serviceBag = ServiceBag.new()
|
|
31
|
-
local gameConfigService =
|
|
32
|
-
local provider =
|
|
31
|
+
local gameConfigService: GameConfigService.GameConfigService = serviceBag:GetService(GameConfigService) :: any
|
|
32
|
+
local provider: NevermoreManifestConfigProvider.NevermoreManifestConfigProvider =
|
|
33
33
|
serviceBag:GetService(NevermoreManifestConfigProvider) :: any
|
|
34
|
-
) :: NevermoreManifestConfigProvider.NevermoreManifestConfigProvider
|
|
35
34
|
serviceBag:Init()
|
|
36
35
|
serviceBag:Start()
|
|
37
36
|
return serviceBag, gameConfigService, provider, gameConfigService:GetConfigPicker()
|
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
--!strict
|
|
2
2
|
--[[
|
|
3
|
-
Coverage for GameConfigPicker priority selection: when several active assets
|
|
4
|
-
share a type and key (e.g. a hand-authored place and one registered from the
|
|
5
|
-
deploy manifest), the highest-priority one wins, and equal priorities keep
|
|
6
|
-
the first iterated -- so a lone hand-authored asset resolves exactly as it did
|
|
7
|
-
before priority existed.
|
|
8
|
-
|
|
9
|
-
Each test uses a distinct asset key. Configs are bound through global
|
|
10
|
-
CollectionService tags under a shared parent, so assets registered by one
|
|
11
|
-
ServiceBag remain visible to the next within a run; distinct keys keep lookups
|
|
12
|
-
isolated regardless.
|
|
13
|
-
|
|
14
3
|
@class GameConfigPicker.spec.lua
|
|
15
4
|
]]
|
|
16
5
|
local require = require(script.Parent.loader).load(script)
|
|
@@ -31,7 +20,7 @@ local PLACE: GameConfigAssetTypes.GameConfigAssetType = GameConfigAssetTypes.PLA
|
|
|
31
20
|
|
|
32
21
|
local function newPicker()
|
|
33
22
|
local serviceBag = ServiceBag.new()
|
|
34
|
-
local gameConfigService =
|
|
23
|
+
local gameConfigService: GameConfigService.GameConfigService = serviceBag:GetService(GameConfigService) :: any
|
|
35
24
|
serviceBag:Init()
|
|
36
25
|
serviceBag:Start()
|
|
37
26
|
return serviceBag, gameConfigService, gameConfigService:GetConfigPicker()
|
|
@@ -64,8 +53,8 @@ describe("GameConfigPicker.FindFirstActiveAssetOfKey priority", function()
|
|
|
64
53
|
it("prefers the higher-priority asset added after a default one", function()
|
|
65
54
|
local serviceBag, gameConfigService, picker = newPicker()
|
|
66
55
|
|
|
67
|
-
gameConfigService:AddPlace("specClashAfter", 111)
|
|
68
|
-
gameConfigService:AddPlace("specClashAfter", 222, 100)
|
|
56
|
+
gameConfigService:AddPlace("specClashAfter", 111)
|
|
57
|
+
gameConfigService:AddPlace("specClashAfter", 222, 100)
|
|
69
58
|
|
|
70
59
|
local asset = picker:FindFirstActiveAssetOfKey(PLACE, "specClashAfter")
|
|
71
60
|
assert(asset, "No asset")
|
|
@@ -77,8 +66,8 @@ describe("GameConfigPicker.FindFirstActiveAssetOfKey priority", function()
|
|
|
77
66
|
it("prefers the higher-priority asset even when added first", function()
|
|
78
67
|
local serviceBag, gameConfigService, picker = newPicker()
|
|
79
68
|
|
|
80
|
-
gameConfigService:AddPlace("specClashFirst", 222, 100)
|
|
81
|
-
gameConfigService:AddPlace("specClashFirst", 111)
|
|
69
|
+
gameConfigService:AddPlace("specClashFirst", 222, 100)
|
|
70
|
+
gameConfigService:AddPlace("specClashFirst", 111)
|
|
82
71
|
|
|
83
72
|
local asset = picker:FindFirstActiveAssetOfKey(PLACE, "specClashFirst")
|
|
84
73
|
assert(asset, "No asset")
|
|
@@ -93,10 +82,6 @@ describe("GameConfigPicker.FindFirstActiveAssetOfKey priority", function()
|
|
|
93
82
|
gameConfigService:AddPlace("specTie", 111)
|
|
94
83
|
gameConfigService:AddPlace("specTie", 222)
|
|
95
84
|
|
|
96
|
-
-- Equal priority keeps the config's own iteration order (unchanged from
|
|
97
|
-
-- before priority existed), so the exact winner is implementation-defined.
|
|
98
|
-
-- The real contract is only that it is stable and matches -- a higher
|
|
99
|
-
-- priority is the deterministic tie-breaker, covered above.
|
|
100
85
|
local firstAsset = picker:FindFirstActiveAssetOfKey(PLACE, "specTie")
|
|
101
86
|
local secondAsset = picker:FindFirstActiveAssetOfKey(PLACE, "specTie")
|
|
102
87
|
assert(firstAsset, "No firstAsset")
|
|
@@ -119,10 +104,6 @@ describe("GameConfigPicker.FindFirstActiveAssetOfKey priority", function()
|
|
|
119
104
|
end)
|
|
120
105
|
|
|
121
106
|
describe("GameConfigPicker gameId gate dominates priority", function()
|
|
122
|
-
-- Builds a config whose GameId is NOT the running place's, containing one
|
|
123
|
-
-- PLACE asset. Such a config is never active, so its assets must never be
|
|
124
|
-
-- returned -- no matter how high their priority. Returns the config folder so
|
|
125
|
-
-- the caller can destroy it.
|
|
126
107
|
local function addInactiveConfigPlace(
|
|
127
108
|
serviceBag: any,
|
|
128
109
|
gameConfigService: any,
|
|
@@ -154,9 +135,7 @@ describe("GameConfigPicker gameId gate dominates priority", function()
|
|
|
154
135
|
it("keeps a lower-priority active asset over a higher-priority wrong-gameId one", function()
|
|
155
136
|
local serviceBag, gameConfigService, picker = newPicker()
|
|
156
137
|
|
|
157
|
-
-- Wrong-gameId asset with a far higher priority than the active one.
|
|
158
138
|
local inactive = addInactiveConfigPlace(serviceBag, gameConfigService, "specGateBeatsPriority", 888, 5000)
|
|
159
|
-
-- Correct-gameId asset at the default priority.
|
|
160
139
|
gameConfigService:AddPlace("specGateBeatsPriority", 111)
|
|
161
140
|
|
|
162
141
|
local resolved = picker:FindFirstActiveAssetOfKey(PLACE, "specGateBeatsPriority")
|