plugify-plugins-types-generator
Version:
tool to generate d.ts for plugify plugins by pplugin file (ESM)
57 lines (56 loc) • 2.32 kB
JavaScript
import { plugifyParseCallbacks, plugifyParseEnums } from "./src/plugify/parser.js";
import { plugifyCallbacksGenerator } from "./src/ts-generator/callback.js";
import { plugifyEnumsGenerator } from "./src/ts-generator/enum.js";
import { plugifyMethodsGenerator } from "./src/ts-generator/method.js";
import { plugifyModuleGenerator } from "./src/ts-generator/module.js";
import { writeDts } from "./src/plugify/utils.js";
import { readFileSync } from "fs";
import { plugifyNamespaceGenerator } from "./src/ts-generator/namespace.js";
/**
* @description Use to create dts from json
*/
export const generateDTS = ({ data: { docsURL, exportedMethods }, name }, modulePrefix = ":") => {
// todo: validate docs url?
const docsViewer = "https://untrustedmodders.github.io/plugify-generator/?file=";
const docsToItemURL = `${docsURL}/blob/main/${name}.pplugin.in`;
const enumsMap = plugifyParseEnums(exportedMethods);
const prototypesMap = plugifyParseCallbacks(exportedMethods);
const callbacks = plugifyCallbacksGenerator(prototypesMap, docsViewer, docsToItemURL);
const enums = plugifyEnumsGenerator(enumsMap);
const methods = plugifyMethodsGenerator(exportedMethods, docsViewer, docsToItemURL);
// Our DTS content
return plugifyModuleGenerator([
enums,
plugifyNamespaceGenerator([callbacks]),
methods,
], {
name: name,
modulePrefix
});
};
/**
* @description Probably, you want to use this one to read from pplugin file & create d.ts or get content (without file)
*/
export const usePlugifyParser = (ppluginPath, dtsFolder = "./", writeFile, modulePrefix) => {
const data = usePlugifyFileReader(ppluginPath);
if (writeFile) {
writeDts(dtsFolder, data.name, generateDTS(data, modulePrefix));
return;
}
return generateDTS(data, modulePrefix);
};
/**
* @description Use if you want read pplugin data from file
*/
export const usePlugifyFileReader = (path) => {
const data = JSON.parse(readFileSync(path, 'utf8'));
return usePlugifyReader(data);
};
/**
* @description Use if you want read pplugin data from memory
*/
export const usePlugifyReader = (data) => {
// todo: make better plugin name parse?
const name = data.entryPoint.replace("bin/", "");
return { data, name };
};