UNPKG

plugify-plugins-types-generator

Version:

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

65 lines (57 loc) 2.52 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 { PlugifyPluginMetadata } from "./src/types/plugify.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 }: { data: PlugifyPluginMetadata, name: string }, 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: string, dtsFolder: string = "./", writeFile: boolean, modulePrefix?: string) => { 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: string) => { const data = JSON.parse(readFileSync(path, 'utf8')) as PlugifyPluginMetadata; return usePlugifyReader(data) } /** * @description Use if you want read pplugin data from memory */ export const usePlugifyReader = (data: PlugifyPluginMetadata) => { // todo: make better plugin name parse? const name = data.entryPoint.replace("bin/", "") return { data, name } }