@ts-for-gir/lib
Version:
Typescript .d.ts generator from GIR for gjs
57 lines (56 loc) • 2.01 kB
JavaScript
import { Logger } from "../logger.js";
import { promisifyNamespaceFunctions } from "../gir/namespace.js";
import { override as overrideGLib } from "./dts/glib.js";
import { override as overrideGObject } from "./dts/gobject.js";
import { DtsGenerator } from "./dts.js";
export class DtsInlineGenerator extends DtsGenerator {
log;
constructor(namespace, options) {
super(namespace, options);
this.log = new Logger(options.verbose, DtsInlineGenerator.name);
}
generateNamespace(node) {
const { namespace, options } = this;
this.log.debug(`Resolving the types of ${namespace.namespace}...`);
let suffix = "";
if (!options.noAdvancedVariants && node.namespace === "GLib") {
suffix = `\n${overrideGLib(node)}\n`;
}
else if (node.namespace === "GObject") {
suffix = `\n${overrideGObject(node)}\n`;
}
try {
const { namespace: name, version } = node.dependency;
const header = `
/**
* ${name} ${version}
*
* Generated from ${node.package_version.join(".")}
*/
`;
const base = `
`;
if (options.promisify) {
promisifyNamespaceFunctions(node);
}
const content = Array.from(node.members.values())
.map(m => {
return `${(Array.isArray(m) ? m : [m])
.map(m => (m.emit ? m.asString(this) : ""))
.join("\n")}`;
})
.join("\n");
const output = [header, base, content, suffix].join("\n\n");
this.log.debug(`Printing ${namespace.namespace}...`);
return Promise.resolve(output);
}
catch (err) {
this.log.error(`Failed to generate namespace: ${node.namespace}`, err);
return Promise.resolve(null);
}
}
async stringifyNamespace(node) {
return this.generateNamespace(node);
}
}
//# sourceMappingURL=dts-inline.js.map