@quenty/funnels 1.5.0 → 1.5.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
|
+
## [1.5.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/funnels@1.5.0...@quenty/funnels@1.5.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
|
# [1.5.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/funnels@1.4.2...@quenty/funnels@1.5.0) (2025-04-02)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package @quenty/funnels
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/funnels",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "Funnel utility class",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
"Quenty"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@quenty/adorneedata": "^7.18.
|
|
29
|
-
"@quenty/baseobject": "^10.8.
|
|
30
|
-
"@quenty/binder": "^14.19.
|
|
31
|
-
"@quenty/loader": "^10.8.
|
|
32
|
-
"@quenty/propertyvalue": "^7.17.
|
|
33
|
-
"@quenty/servicebag": "^11.11.
|
|
28
|
+
"@quenty/adorneedata": "^7.18.1",
|
|
29
|
+
"@quenty/baseobject": "^10.8.1",
|
|
30
|
+
"@quenty/binder": "^14.19.1",
|
|
31
|
+
"@quenty/loader": "^10.8.1",
|
|
32
|
+
"@quenty/propertyvalue": "^7.17.1",
|
|
33
|
+
"@quenty/servicebag": "^11.11.2"
|
|
34
34
|
},
|
|
35
35
|
"publishConfig": {
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "78c3ac0ab08dd18085b6e6e6e4f745e76ed99f68"
|
|
39
39
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Server-side funnel logger
|
|
3
4
|
|
|
@@ -16,11 +17,22 @@ local FunnelStepLogger = setmetatable({}, BaseObject)
|
|
|
16
17
|
FunnelStepLogger.ClassName = "FunnelStepLogger"
|
|
17
18
|
FunnelStepLogger.__index = FunnelStepLogger
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
export type FunnelStepLogger = typeof(setmetatable(
|
|
21
|
+
{} :: {
|
|
22
|
+
_player: Player,
|
|
23
|
+
_stepTracker: FunnelStepTracker.FunnelStepTracker,
|
|
24
|
+
_funnelName: string,
|
|
25
|
+
_funnelSessionId: string,
|
|
26
|
+
_printDebugEnabled: boolean,
|
|
27
|
+
} & BaseObject.BaseObject,
|
|
28
|
+
{ __index = FunnelStepLogger }
|
|
29
|
+
))
|
|
30
|
+
|
|
31
|
+
function FunnelStepLogger.new(player: Player, funnelName: string): FunnelStepLogger
|
|
32
|
+
local self: any = setmetatable(BaseObject.new() :: any, FunnelStepLogger)
|
|
21
33
|
|
|
22
34
|
self._player = assert(player, "No player")
|
|
23
|
-
self._stepTracker = self._maid:Add(FunnelStepTracker.new())
|
|
35
|
+
self._stepTracker = self._maid:Add(FunnelStepTracker.new() :: any)
|
|
24
36
|
self._funnelName = assert(funnelName, "Bad funnelName")
|
|
25
37
|
self._funnelSessionId = HttpService:GenerateGUID(false)
|
|
26
38
|
self._printDebugEnabled = false
|
|
@@ -29,7 +41,7 @@ function FunnelStepLogger.new(player, funnelName)
|
|
|
29
41
|
if next(steps) then
|
|
30
42
|
-- Give us time to print if we need
|
|
31
43
|
self._maid:GiveTask(task.defer(function()
|
|
32
|
-
for stepNumber, stepName in
|
|
44
|
+
for stepNumber, stepName in steps do
|
|
33
45
|
self:_sendStep(stepNumber, stepName)
|
|
34
46
|
end
|
|
35
47
|
end))
|
|
@@ -42,24 +54,24 @@ function FunnelStepLogger.new(player, funnelName)
|
|
|
42
54
|
return self
|
|
43
55
|
end
|
|
44
56
|
|
|
45
|
-
function FunnelStepLogger
|
|
57
|
+
function FunnelStepLogger.SetPrintDebugEnabled(self: FunnelStepLogger, debugEnabled: boolean)
|
|
46
58
|
assert(type(debugEnabled) == "boolean", "Bad debugEnabled")
|
|
47
59
|
|
|
48
60
|
self._printDebugEnabled = debugEnabled
|
|
49
61
|
end
|
|
50
62
|
|
|
51
|
-
function FunnelStepLogger
|
|
63
|
+
function FunnelStepLogger.LogStep(self: FunnelStepLogger, stepNumber: number, stepName: string)
|
|
52
64
|
assert(type(stepNumber) == "number", "Bad stepNumber")
|
|
53
65
|
assert(type(stepName) == "string", "Bad stepName")
|
|
54
66
|
|
|
55
67
|
self._stepTracker:LogStep(stepNumber, stepName)
|
|
56
68
|
end
|
|
57
69
|
|
|
58
|
-
function FunnelStepLogger
|
|
70
|
+
function FunnelStepLogger.IsStepComplete(self: FunnelStepLogger, stepNumber: number): boolean
|
|
59
71
|
return self._stepTracker:IsStepComplete(stepNumber)
|
|
60
72
|
end
|
|
61
73
|
|
|
62
|
-
function FunnelStepLogger
|
|
74
|
+
function FunnelStepLogger._sendStep(self: FunnelStepLogger, stepNumber: number, stepName: string)
|
|
63
75
|
AnalyticsService:LogFunnelStepEvent(self._player, self._funnelName, self._funnelSessionId, stepNumber, stepName)
|
|
64
76
|
|
|
65
77
|
if self._printDebugEnabled then
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
@class FunnelStepTracker
|
|
3
4
|
]=]
|
|
@@ -6,28 +7,52 @@ local require = require(script.Parent.loader).load(script)
|
|
|
6
7
|
|
|
7
8
|
local Signal = require("Signal")
|
|
8
9
|
local BaseObject = require("BaseObject")
|
|
10
|
+
local _Maid = require("Maid")
|
|
9
11
|
|
|
10
12
|
local FunnelStepTracker = setmetatable({}, BaseObject)
|
|
11
13
|
FunnelStepTracker.ClassName = "FunnelStepTracker"
|
|
12
14
|
FunnelStepTracker.__index = FunnelStepTracker
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
export type FunnelStepTracker = typeof(setmetatable(
|
|
17
|
+
{} :: {
|
|
18
|
+
_maid: _Maid.Maid,
|
|
19
|
+
_stepsLogged: { [number]: string },
|
|
20
|
+
StepLogged: Signal.Signal<number, string>,
|
|
21
|
+
},
|
|
22
|
+
{ __index = FunnelStepTracker }
|
|
23
|
+
))
|
|
24
|
+
|
|
25
|
+
--[=[
|
|
26
|
+
Constructs a new FunnelStepTracker
|
|
27
|
+
|
|
28
|
+
@return FunnelStepTracker
|
|
29
|
+
]=]
|
|
30
|
+
function FunnelStepTracker.new(): FunnelStepTracker
|
|
31
|
+
local self: FunnelStepTracker = setmetatable(BaseObject.new() :: any, FunnelStepTracker)
|
|
16
32
|
|
|
17
33
|
self._stepsLogged = {}
|
|
18
34
|
|
|
19
|
-
self.StepLogged = self._maid:Add(Signal.new())
|
|
35
|
+
self.StepLogged = self._maid:Add(Signal.new() :: any)
|
|
20
36
|
|
|
21
37
|
return self
|
|
22
38
|
end
|
|
23
39
|
|
|
24
|
-
|
|
40
|
+
--[=[
|
|
41
|
+
Logs a step
|
|
42
|
+
]=]
|
|
43
|
+
function FunnelStepTracker.LogStep(self: FunnelStepTracker, stepNumber: number, stepName: string): ()
|
|
25
44
|
assert(type(stepNumber) == "number", "Bad stepNumber")
|
|
26
45
|
assert(type(stepName) == "string", "Bad stepName")
|
|
27
46
|
|
|
28
47
|
if self._stepsLogged[stepNumber] then
|
|
29
48
|
if self._stepsLogged[stepNumber] ~= stepName then
|
|
30
|
-
error(
|
|
49
|
+
error(
|
|
50
|
+
string.format(
|
|
51
|
+
"[FunnelStepTracker.LogStep] - Trying to log step with 2 separate names, %q and %d",
|
|
52
|
+
self._stepsLogged[stepNumber],
|
|
53
|
+
stepNumber
|
|
54
|
+
)
|
|
55
|
+
)
|
|
31
56
|
end
|
|
32
57
|
|
|
33
58
|
return
|
|
@@ -38,17 +63,31 @@ function FunnelStepTracker:LogStep(stepNumber, stepName)
|
|
|
38
63
|
self.StepLogged:Fire(stepNumber, stepName)
|
|
39
64
|
end
|
|
40
65
|
|
|
41
|
-
|
|
66
|
+
--[=[
|
|
67
|
+
Returns true if the step is complete
|
|
68
|
+
|
|
69
|
+
@param stepNumber number
|
|
70
|
+
@return string?
|
|
71
|
+
]=]
|
|
72
|
+
function FunnelStepTracker.IsStepComplete(self: FunnelStepTracker, stepNumber: number): boolean
|
|
42
73
|
assert(type(stepNumber) == "number", "Bad stepNumber")
|
|
43
74
|
|
|
44
75
|
return self._stepsLogged[stepNumber] ~= nil
|
|
45
76
|
end
|
|
46
77
|
|
|
47
|
-
|
|
78
|
+
--[=[
|
|
79
|
+
Gets the logged steps
|
|
80
|
+
|
|
81
|
+
@return { [number]: string }
|
|
82
|
+
]=]
|
|
83
|
+
function FunnelStepTracker.GetLoggedSteps(self: FunnelStepTracker): { [number]: string }
|
|
48
84
|
return table.clone(self._stepsLogged)
|
|
49
85
|
end
|
|
50
86
|
|
|
51
|
-
|
|
87
|
+
--[=[
|
|
88
|
+
Clears all logged steps
|
|
89
|
+
]=]
|
|
90
|
+
function FunnelStepTracker.ClearLoggedSteps(self: FunnelStepTracker)
|
|
52
91
|
table.clear(self._stepsLogged)
|
|
53
92
|
end
|
|
54
93
|
|