Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion aftman.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ luau-lsp = "Quenty/[email protected]"
lune = "lune-org/[email protected]"
mantle = "blake-mealey/[email protected]"
moonwave-extractor = "UpliftGames/[email protected]"
remodel = "rojo-rbx/[email protected]"
rojo = "quenty/[email protected]"
run-in-roblox = "rojo-rbx/[email protected]"
selene = "Kampfkarren/[email protected]"
Expand Down
6 changes: 4 additions & 2 deletions src/boundingboxutils/src/Shared/CompiledBoundingBoxUtils.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

local CompiledBoundingBoxUtils = {}

export type CompiledBoundingBox = CFrame

--[=[
Compiles a bounding box into a CFrame rotation matrix for easy
usage.
Expand All @@ -15,7 +17,7 @@ local CompiledBoundingBoxUtils = {}
@param size Vector3
@return CFrame
]=]
function CompiledBoundingBoxUtils.compileBBox(cframe: CFrame, size: Vector3): CFrame
function CompiledBoundingBoxUtils.compileBBox(cframe: CFrame, size: Vector3): CompiledBoundingBox
-- stylua: ignore
return CFrame.fromMatrix(
cframe.Position,
Expand All @@ -31,7 +33,7 @@ end
@param bbox CFrame
@return boolean
]=]
function CompiledBoundingBoxUtils.testPointBBox(point: Vector3, bbox: CFrame): boolean
function CompiledBoundingBoxUtils.testPointBBox(point: Vector3, bbox: CompiledBoundingBox): boolean
local objPos = bbox * point

-- stylua: ignore
Expand Down
4 changes: 2 additions & 2 deletions src/datastore/src/Server/DataStore.lua
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ function DataStore.PromiseViewUpToDate(self: DataStore): Promise.Promise<()>
return promise
end

function DataStore._setupAutoSaving(self: DataStore)
function DataStore._setupAutoSaving(self: DataStore): ()
local startTime = os.clock()

self._maid:GiveTask(Rx.combineLatest({
Expand Down Expand Up @@ -364,7 +364,7 @@ function DataStore._setupAutoSaving(self: DataStore)
end))
end

function DataStore._syncData(self: DataStore, doMergeNewData: boolean, doCloseSession: boolean?)
function DataStore._syncData(self: DataStore, doMergeNewData: boolean, doCloseSession: boolean?): Promise.Promise<()>
if self:DidLoadFail() then
warn("[DataStore] - Not syncing, failed to load")
return Promise.rejected("Load not successful, not syncing")
Expand Down
34 changes: 26 additions & 8 deletions src/datastore/src/Server/GameDataStoreService.lua
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,31 @@ local ServiceBag = require("ServiceBag")
local GameDataStoreService = {}
GameDataStoreService.ServiceName = "GameDataStoreService"

function GameDataStoreService:Init(serviceBag: ServiceBag.ServiceBag)
assert(not self._serviceBag, "Already initialized")
export type GameDataStoreService = typeof(setmetatable(
{} :: {
_serviceBag: ServiceBag.ServiceBag,
_maid: Maid.Maid,
_dataStorePromise: Promise.Promise<DataStore.DataStore>?,
_robloxDataStorePromise: Promise.Promise<any>?,
_bindToCloseService: any,
},
{} :: typeof({ __index = GameDataStoreService })
))

function GameDataStoreService.Init(self: GameDataStoreService, serviceBag: ServiceBag.ServiceBag): ()
assert(not (self :: any)._serviceBag, "Already initialized")
self._serviceBag = assert(serviceBag, "No serviceBag")
self._maid = Maid.new()

self._bindToCloseService = self._serviceBag:GetService(require("BindToCloseService"))

self._maid = Maid.new()
end

function GameDataStoreService:PromiseDataStore(): Promise.Promise<DataStore>
--[=[
Promises a DataStore for the current game that is synchronized every 5 seconds.

@return Promise<DataStore>
]=]
function GameDataStoreService.PromiseDataStore(self: GameDataStoreService): Promise.Promise<DataStore>
if self._dataStorePromise then
return self._dataStorePromise
end
Expand All @@ -48,26 +63,29 @@ function GameDataStoreService:PromiseDataStore(): Promise.Promise<DataStore>

return dataStore
end)
assert(self._dataStorePromise, "Typechecking assertion")

return self._dataStorePromise
end

function GameDataStoreService:_promiseRobloxDataStore(): Promise.Promise<any>
function GameDataStoreService._promiseRobloxDataStore(self: GameDataStoreService): Promise.Promise<any>
if self._robloxDataStorePromise then
return self._robloxDataStorePromise
end

self._robloxDataStorePromise =
self._maid:GivePromise(DataStorePromises.promiseDataStore("GameDataStore", "Version1"))

assert(self._robloxDataStorePromise, "Typechecking assertion")

return self._robloxDataStorePromise
end

function GameDataStoreService:_getKey(): string
function GameDataStoreService._getKey(_self: GameDataStoreService): string
return "version1"
end

function GameDataStoreService:Destroy()
function GameDataStoreService.Destroy(self: GameDataStoreService)
self._maid:DoCleaning()
end

Expand Down
4 changes: 3 additions & 1 deletion src/datastore/src/Server/Modules/DataStoreDeleteToken.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@ local require = require(script.Parent.loader).load(script)

local Symbol = require("Symbol")

return Symbol.named("dataStoreDeleteToken")
export type DataStoreDeleteToken = Symbol.Symbol

return Symbol.named("dataStoreDeleteToken") :: DataStoreDeleteToken
54 changes: 31 additions & 23 deletions src/datastore/src/Server/Modules/DataStoreStage.lua
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,12 @@ end
@param key string
@param value any
]=]
function DataStoreStage.Store(self: DataStoreStage, key: string, value: any)
assert(type(key) == "string", "Bad key")
function DataStoreStage.Store(
self: DataStoreStage,
key: DataStoreStageKey,
value: any | DataStoreDeleteToken.DataStoreDeleteToken
): ()
assert(type(key) == "string" or type(key) == "number", "Bad key")

if value == nil then
value = DataStoreDeleteToken
Expand All @@ -133,7 +137,7 @@ end
end)
```

@param key string | number
@param key DataStoreStageKey
@param defaultValue T?
@return Promise<T>
]=]
Expand Down Expand Up @@ -166,7 +170,7 @@ end
@param defaultValue any
@return Promise<any>
]=]
function DataStoreStage.LoadAll(self: DataStoreStage, defaultValue)
function DataStoreStage.LoadAll<T>(self: DataStoreStage, defaultValue: T?): Promise.Promise<T?>
return self:PromiseViewUpToDate():Then(function()
if self._viewSnapshot == nil then
return defaultValue
Expand All @@ -187,10 +191,10 @@ end
saveslot:Store("Money", 0)
```

@param key string | number
@param key DataStoreStageKey
@return DataStoreStage
]=]
function DataStoreStage.GetSubStore(self: DataStoreStage, key: DataStoreStageKey)
function DataStoreStage.GetSubStore(self: DataStoreStage, key: DataStoreStageKey): DataStoreStage
assert(type(key) == "string" or type(key) == "number", "Bad key")

if self._stores[key] then
Expand Down Expand Up @@ -243,18 +247,18 @@ end
--[=[
Explicitely deletes data at the key

@param key string | number
@param key DataStoreStageKey
]=]
function DataStoreStage.Delete(self: DataStoreStage, key: string)
assert(type(key) == "string", "Bad key")
function DataStoreStage.Delete(self: DataStoreStage, key: DataStoreStageKey): ()
assert(type(key) == "string" or type(key) == "number", "Bad key")

self:_storeAtKey(key, DataStoreDeleteToken)
end

--[=[
Queues up a wipe of all values. This will completely set the data to nil.
]=]
function DataStoreStage.Wipe(self: DataStoreStage)
function DataStoreStage.Wipe(self: DataStoreStage): ()
self:Overwrite(DataStoreDeleteToken)
end

Expand All @@ -263,12 +267,16 @@ end

If no key is passed than it will observe the whole view snapshot

@param key string | number?
@param key DataStoreStageKey?
@param defaultValue T?
@return Observable<T>
]=]
function DataStoreStage.Observe(self: DataStoreStage, key, defaultValue)
assert(type(key) == "string" or type(key) == "number" or key == nil, "Bad key")
function DataStoreStage.Observe<T>(
self: DataStoreStage,
key: DataStoreStageKey?,
defaultValue: T?
): Observable.Observable<T>
assert(type(key) == "string" or type(key) == "number", "Bad key")

if key == nil then
return Observable.new(function(sub)
Expand All @@ -293,7 +301,7 @@ function DataStoreStage.Observe(self: DataStoreStage, key, defaultValue)
end)

return maid
end)
end) :: any
end

return Observable.new(function(sub)
Expand All @@ -315,16 +323,16 @@ function DataStoreStage.Observe(self: DataStoreStage, key, defaultValue)
end)

return maid
end)
end) :: any
end

--[=[
Adds a callback to be called before save. This may return a promise.

@param callback function -- May return a promise
@return function -- Call to remove
@return () -> () -- Call to remove
]=]
function DataStoreStage.AddSavingCallback(self: DataStoreStage, callback: DataStoreCallback?)
function DataStoreStage.AddSavingCallback(self: DataStoreStage, callback: DataStoreCallback?): () -> ()
assert(type(callback) == "function", "Bad callback")

table.insert(self._savingCallbacks, callback)
Expand All @@ -340,7 +348,7 @@ end
Removes a saving callback from the data store stage
@param callback function
]=]
function DataStoreStage.RemoveSavingCallback(self: DataStoreStage, callback: DataStoreCallback?)
function DataStoreStage.RemoveSavingCallback(self: DataStoreStage, callback: DataStoreCallback?): ()
assert(type(callback) == "function", "Bad callback")

local index = table.find(self._savingCallbacks, callback)
Expand Down Expand Up @@ -434,7 +442,7 @@ end

@param parentWriter DataStoreWriter
]=]
function DataStoreStage.MarkDataAsSaved(self: DataStoreStage, parentWriter: DataStoreWriter.DataStoreWriter)
function DataStoreStage.MarkDataAsSaved(self: DataStoreStage, parentWriter: DataStoreWriter.DataStoreWriter): ()
-- Update all children first
for key, subwriter in pairs(parentWriter:GetSubWritersMap()) do
local store = self._stores[key]
Expand Down Expand Up @@ -504,7 +512,7 @@ end

@return Promise
]=]
function DataStoreStage.PromiseViewUpToDate(self: DataStoreStage)
function DataStoreStage.PromiseViewUpToDate(self: DataStoreStage): Promise.Promise<()>
if not self._loadParent then
error("[DataStoreStage.Load] - Failed to load, no loadParent!")
end
Expand All @@ -525,7 +533,7 @@ end

@param data any
]=]
function DataStoreStage.Overwrite(self: DataStoreStage, data)
function DataStoreStage.Overwrite(self: DataStoreStage, data: any | DataStoreDeleteToken.DataStoreDeleteToken): ()
-- Ensure that we at least start loading (and thus the autosave loop) for write
self:PromiseViewUpToDate()

Expand Down Expand Up @@ -578,7 +586,7 @@ end

@param data any
]=]
function DataStoreStage.OverwriteMerge(self: DataStoreStage, data)
function DataStoreStage.OverwriteMerge(self: DataStoreStage, data: any): ()
-- Ensure that we at least start loading (and thus the autosave loop) for write
self:PromiseViewUpToDate()

Expand Down Expand Up @@ -775,7 +783,7 @@ end
function DataStoreStage._updateStoresAndComputeBaseDataSnapshotValueFromDiffSnapshot(
self: DataStoreStage,
key: DataStoreStageKey,
value
value: any | DataStoreDeleteToken.DataStoreDeleteToken
)
assert(type(key) == "string" or type(key) == "number", "Bad key")

Expand Down
4 changes: 2 additions & 2 deletions src/datastore/src/Server/Modules/DataStoreWriter.lua
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ end

--[=[
Adds a recursive child writer to use at the key `name`
@param name string | number
@param name DataStoreStageKey
@param writer DataStoreWriter
]=]
function DataStoreWriter.AddSubWriter(self: DataStoreWriter, name: DataStoreStageKey, writer: DataStoreWriter)
Expand All @@ -109,7 +109,7 @@ end
--[=[
Gets a sub writer

@param name string | number
@param name DataStoreStageKey
@return DataStoreWriter
]=]
function DataStoreWriter.GetWriter(self: DataStoreWriter, name: DataStoreStageKey): DataStoreWriter?
Expand Down
Loading