UNPKG

plugify-plugins-types-generator

Version:

tool to generate d.ts for plugify plugins by pplugin file (ESM)

57 lines (56 loc) 2.33 kB
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, methods: 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 }; };