Jump to content

Module:DatasetLoader

Documentation for this module may be created at Module:DatasetLoader/doc

-- Module:DatasetLoader
-- Central loader for Data: JSON assets via JsonConfig or mw.loadData, cached per render

local DatasetLoader = {}
local cache = {}

-- Retrieve a dataset by name (without extension). Returns a Lua table or {}.
function DatasetLoader.get(name)
    -- Return cached if available
    if cache[name] then
        return cache[name]
    end

    -- Ensure filename has .json extension
    local fullName = name
    if not fullName:match('%.%w+$') then
        fullName = fullName .. '.json'
    end

    local data

    -- Try JsonConfig extension (mw.ext.data.get)
    local success, result = pcall(function()
        return mw.ext.data.get(fullName)
    end)
    if success and type(result) == 'table' then
        data = result
    else
        -- Fallback to mw.loadData from Data: namespace
        success, result = pcall(function()
            return mw.loadData('Data:' .. fullName)
        end)
        if success and type(result) == 'table' then
            data = result
        end
    end

    -- Default to empty table on any failure
    if not data or type(data) ~= 'table' then
        data = {}
    end

    -- Cache and return
    cache[name] = data
    return data
end

return DatasetLoader