Для документации этого модуля может быть создана страница Модуль:JsonPaths/doc

local p = {}
local getArgs = require('Module:Arguments').getArgs

local entityCache = {}

local function trim(value)
    return mw.text.trim(value or "")
end

local function normalizePath(path)
    path = trim(path)

    if path == "Corvax" then
        return ""
    end

    return path
end

local function resolvePath(path)
    path = trim(path)
    if path ~= "" then
        return normalizePath(path)
    end

    local frame = mw.getCurrentFrame()
    if not frame then
        return ""
    end

    local args = getArgs(frame)
    path = trim(args.path or "")

    if path == "" then
        path = trim(frame:preprocess("{{#var:JsonPath}}") or "")
    end

    return normalizePath(path)
end

function p.project(path)
    return resolvePath(path)
end

local function getEntityDataTitle(path)
    path = resolvePath(path)
    if path == "" then
        return ""
    end

    return "Модуль:IanComradeBot/" .. path .. "/entity project.json/data"
end

local function loadEntityIds(path)
    path = resolvePath(path)
    if path == "" then
        return nil
    end

    if entityCache[path] ~= nil then
        return entityCache[path]
    end

    local title = getEntityDataTitle(path)
    local ok, data = pcall(mw.loadData, title)

    if not ok or type(data) ~= "table" then
        entityCache[path] = {}
        return entityCache[path]
    end

    entityCache[path] = data
    return data
end

local function arrayContains(list, value)
    if type(list) ~= "table" then
        return false
    end

    for _, item in ipairs(list) do
        if item == value then
            return true
        end
    end

    return false
end

function p.has(id, path)
    id = trim(id)
    if id == "" then
        return ""
    end

    path = resolvePath(path)
    if path == "" then
        return ""
    end

    local ids = loadEntityIds(path)
    if arrayContains(ids, id) then
        return true
    end

    return false
end

function p.get(rel, path)
    rel = trim(rel)
    if rel == "" then
        return ""
    end

    path = resolvePath(path)

    local prefix = "Module:IanComradeBot/"
    if path ~= "" then
        prefix = prefix .. path .. "/"
    end

    return prefix .. rel .. "/data"
end

function p.git(path)
	path = resolvePath(path)
    if project == "Goob" then
        return "https://github.com/space-syndicate/Goob-Station/tree/master"
    elseif project == "CM" then
        return "https://github.com/space-syndicate/Goob-Station/tree/master"
    elseif project == "Fallout" then
        return "https://github.com/space-syndicate/Goob-Station/tree/master"
    elseif project == "Frontier" then
        return "https://github.com/space-syndicate/Goob-Station/tree/master"
    elseif project == "SW" then
        return "https://github.com/space-syndicate/Goob-Station/tree/master"
    elseif project == "Wega" then
        return "https://github.com/space-syndicate/Goob-Station/tree/master"
    elseif project == "WL" then
        return "https://github.com/space-syndicate/Goob-Station/tree/master"
    end

    return "https://github.com/space-syndicate/space-station-14/tree/master"
end

return p