Giving self to a bindable in my .new() constructor causes it to return ...any?

EDIT: It seems that the culprit is this line of code: Package.ScriptAdded:Fire(self), when I remove it works. Why is that? All I am doing is giving the bindable self.

Hello again, I am currently making a module that will make ‘scripts’ with corutines (basically just like adding new scripts but more performant and more control over them.). And then, all the sudden, the module stopped working and my new constructor seems to be returning ...any even though that is not the case. Here is my module:

-- // Services //

local ReplicatedStorage = game:GetService("ReplicatedStorage")

-- // Package Configuration //

local Package = { }

-- // Variables //

local Signal = require(script.Signal)

Package.ScriptAdded = Signal.new()

-- // Functions //

function Package.new(name: string, scriptToRun: () -> ())
	local self = setmetatable({ }, {__index = Package})
	
	self.Name = name
	self.Script = coroutine.create(scriptToRun)
	self.Started = Signal.new()
	self.Destroyed = Signal.new()
	self.Paused = Signal.new()
	self.IsPaused = true
	self.IsClosed = false
	self.IsRunning = false

	Package.ScriptAdded:Fire(self)
	
	return self
end

function Package:Start()
	local Script: thread = self.Script
	
	coroutine.resume(Script)
	
	self.IsRunning = true
	self.IsPaused = false
	
	self.Started:Fire()
end

function Package:Pause()
	local Script: thread = self.Script
	
	coroutine.yield(Script)
	
	self.IsRunning = false
	self.IsPaused = true
	
	self.Paused:Fire()
end

function Package:IsPaused(): boolean
	return self.Paused
end

function Package:IsRunning(): boolean
	return self.IsRunning
end

function Package:IsClosed(): boolean
	return self.IsClosed
end

function Package:Destroy()
	local Script: thread = self.Script
	
	coroutine.close(Script)
	
	self.IsRunning = false
	self.IsPaused = true
	self.IsClosed = true
	
	self.Destroyed:Fire()
end

return Package

I hope someone can help!