Skip to content

Commit

Permalink
update(generator): New Format
Browse files Browse the repository at this point in the history
  • Loading branch information
skuzzis committed Jan 12, 2025
1 parent 903bfed commit fa3c9c9
Show file tree
Hide file tree
Showing 12 changed files with 5,471 additions and 1,019 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ dist/
.vscode-test/
*.vsix
EmmyLua/
generator/data.json
generator/data.json
documentation/
6 changes: 0 additions & 6 deletions generate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,6 @@

git clone https://github.com/swiftly-solution/documentation

cd documentation
bash gen_docs.sh
mv docgen/data/data.json ../generator
cd ..
rm -rf documentation

mkdir EmmyLua
cd generator
node index.js
63 changes: 31 additions & 32 deletions generator/index.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,26 @@
const { readFileSync, existsSync, writeFileSync, rm, mkdirSync, appendFileSync } = require("fs");
const { readFileSync, writeFileSync, existsSync, appendFileSync, mkdirSync } = require("fs")
const { dirname } = require('path')

let data = JSON.parse(readFileSync("data.json").toString())
data.events.data.function.data.addeventhandler.params.eventName = "GameEvent"
data.events.data.function.data.addeventhandler.params.callback = "fun(event:Event,...:any):integer|nil"
data.database.data.query.params.callback = "fun(err:string,result:table)|nil"
data.database.data.queryparams.params.callback = "fun(err:string,result:table)|nil"
data.database.data.querybuilder.functions.Execute.params.callback = "fun(err:string,result:table)|nil"
data.commands.data.register.params.callback = "fun(playerid:number,args:table,argc:number,silent:boolean,prefix:string)"
data.utils.data.json.data.encode.params.options = "table|nil"
data.utils.data.targetselector.data.getplayer.return.lua = "Player|nil"
const dataFiles = [
"../documentation/data/coreclass/data.json",
"../documentation/data/coretypes/data.json",
"../documentation/data/gameevents/data.json",
"../documentation/data/scripting/data.json",
"../documentation/data/sdkclass/data.json",
"../documentation/data/sdktypes/data.json",
]

const GetType = (type) => {
if (data.types.data.core.data[type.toLowerCase()]) {
if (Object.keys(data.types.data.core.data[type.toLowerCase()].values).length == 0) return type
return "number " + type
}
else if (data.types.data.generated.data[type.toLowerCase()]) return "number " + type
else return type
return type
}

var existsTypes = false

const ProcessParameters = (params) => {
const returnParams = [];
for (const paramkey of Object.keys(params)) {
let name = paramkey
if (name == "eventName") params[paramkey] = "GameEvent"
returnParams.push(`--- @param ${name} ${GetType(params[paramkey]).replace(/\//g, "|")}`)
}
if (returnParams.length == 0) return "";
Expand Down Expand Up @@ -52,9 +49,10 @@ const GenerateClassFunctions = (key, data) => {
return `\n\n${functions.join("\n")}`
}

const ProcessData = async (data, subfolder, className) => {
const ProcessData = (data, subfolder, className) => {
for (const key of Object.keys(data)) {
if (data[key].iscategory) {
if (data[key].file != undefined) continue;
if (data[key].template == "category") {
ProcessData(data[key].data, `${subfolder}/${key}`, data[key].title)
} else {
const dir = subfolder + ".lua"
Expand Down Expand Up @@ -83,25 +81,26 @@ ${classVariable.toLowerCase()} = {}` : `---@meta`)
}
appendFileSync(subfolder + ".lua", `\n\n--- ${data[key].description.split("\n>")[0]}${ProcessParameters(data[key].params)}\n--- @return ${data[key].return['lua'] == "void" ? "nil" : (data[key].return['lua'] == "Any* any" ? "any" : (data[key].return['lua'].includes("table of") ? "table" : data[key].return['lua'].replace(/ \/ /g, "|")))}\nfunction ${data[key].variable['lua']}(${Object.keys(data[key].params).join(", ")}) end`)
} else if (data[key].template == "types-syntax") {
if(subfolder.includes("generated")) {
if (!existsSync(subfolder + ".lua")) writeFileSync(subfolder + ".lua", "--- @meta");
appendFileSync(subfolder + ".lua", `\n\n--- @class ${data[key].title.split(" ").join("")}\n${data[key].title} = {\n${Object.keys(data[key].values).map((val) => ` ${val} = ${data[key].values[val]}`).join(",\n")}\n}`)
} else {
if (!existsSync(subfolder)) mkdirSync(subfolder)
writeFileSync(subfolder + "/" + data[key].title.toLowerCase() + ".lua", `--- @meta\n\n--- @class ${data[key].title.split(" ").join("")}\n${data[key].title} = {\n${Object.keys(data[key].values).map((val) => ` ${val} = ${data[key].values[val]}`).join(",\n")}\n}`)
if (!existsTypes) {
writeFileSync(subfolder + "/types.lua", "--- @meta")
existsTypes = true
}
appendFileSync(subfolder + "/types.lua", `\n\n--- @class ${data[key].title.split(" ").join("")}\n${data[key].title} = {\n${Object.keys(data[key].values).map((val) => ` ${val} = ${data[key].values[val]}`).join(",\n")}\n}`)
} else if (data[key].template.includes("event-syntax")) {
var somehowDir = subfolder.split("/")
somehowDir.pop()
subfolder = `${somehowDir.join("/")}/list.lua`
if (!existsSync(subfolder)) writeFileSync(subfolder, `--- @meta\n--- @alias GameEvent`)
appendFileSync(subfolder, `\n--- |"${data[key].title}"`)
var subfld = `../EmmyLua/events/list.lua`
if (!existsSync("../EmmyLua/events")) mkdirSync("../EmmyLua/events")
if (!existsSync(subfld)) writeFileSync(subfld, `--- @meta\n--- @alias GameEvent`)
appendFileSync(subfld, `\n--- | '"${data[key].title}"' # ${data[key].description}`)
} else if (data[key].template == "class-syntax") {
if (!existsSync(subfolder)) mkdirSync(subfolder)
writeFileSync(subfolder + `/${key}.lua`, `--- @meta\n\n--- @class ${data[key].title.split(" ").join("")}${GenerateClassProperties(data[key].properties)}\n${key} = {}\n\n--- This is the constructor for ${data[key].title} class.${ProcessParameters(data[key].constructor)}\n--- @return ${data[key].title}\nfunction ${data[key].title}(${Object.keys(data[key].constructor).join(", ")}) end${GenerateClassFunctions(key, data[key])}`)
if (!existsSync("../EmmyLua/classes.lua")) writeFileSync("../EmmyLua/classes.lua", "--- @meta");
if (!existsSync("../EmmyLua/sdkclassalias.lua")) writeFileSync("../EmmyLua/sdkclassalias.lua", `--- @meta\n--- @alias AnySDKClass`)
appendFileSync("../EmmyLua/classes.lua", `\n\n--- @class ${data[key].title.split(" ").join("")}${GenerateClassProperties(data[key].properties)}\n${key} = {}${!data[key].constructor.hide ? `\n\n--- This is the constructor for ${data[key].title} class.${ProcessParameters(data[key].constructor)}\n--- @return ${data[key].title}\nfunction ${data[key].title}(${Object.keys(data[key].constructor).join(", ")}) end` : ""}${GenerateClassFunctions(key, data[key])}`)
if (data[key].description == "") appendFileSync("../EmmyLua/sdkclassalias.lua", `\n--- | '${data[key].title.split(" ").join("")}'`)
}
}
}
}

ProcessData(data, __dirname + "/../EmmyLua")
for (const dataFile of dataFiles) {
ProcessData(JSON.parse(readFileSync(dataFile)), __dirname + "/../EmmyLua")
}
Loading

0 comments on commit fa3c9c9

Please sign in to comment.