@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.0",
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.0",
29
- "@quenty/baseobject": "^10.8.0",
30
- "@quenty/binder": "^14.19.0",
31
- "@quenty/loader": "^10.8.0",
32
- "@quenty/propertyvalue": "^7.17.0",
33
- "@quenty/servicebag": "^11.11.1"
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": "e8ea56930e65322fcffc05a1556d5df988068f0b"
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
- function FunnelStepLogger.new(player, funnelName)
20
- local self = setmetatable(BaseObject.new(), FunnelStepLogger)
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 pairs(steps) do
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:SetPrintDebugEnabled(debugEnabled)
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:LogStep(stepNumber, stepName)
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:IsStepComplete(stepNumber)
70
+ function FunnelStepLogger.IsStepComplete(self: FunnelStepLogger, stepNumber: number): boolean
59
71
  return self._stepTracker:IsStepComplete(stepNumber)
60
72
  end
61
73
 
62
- function FunnelStepLogger:_sendStep(stepNumber, stepName)
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
- function FunnelStepTracker.new()
15
- local self = setmetatable(BaseObject.new(), FunnelStepTracker)
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
- function FunnelStepTracker:LogStep(stepNumber, stepName)
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(string.format("[FunnelStepTracker.LogStep] - Trying to log step with 2 separate names, %q and %q", self._stepsLogged[stepNumber], stepNumber))
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
- function FunnelStepTracker:IsStepComplete(stepNumber)
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
- function FunnelStepTracker:GetLoggedSteps()
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
- function FunnelStepTracker:ClearLoggedSteps()
87
+ --[=[
88
+ Clears all logged steps
89
+ ]=]
90
+ function FunnelStepTracker.ClearLoggedSteps(self: FunnelStepTracker)
52
91
  table.clear(self._stepsLogged)
53
92
  end
54
93