ts-gir
Version:
generate typescript from gir
67 lines (54 loc) • 8.28 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
require("core-js/modules/es.array.index-of");
require("core-js/modules/es.array.iterator");
require("core-js/modules/es.object.entries");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _babelParserGenerator = _interopRequireDefault(require("babel-parser-generator"));
class GirTSGenerator extends _babelParserGenerator.default {
constructor($namespace, renamed) {
super();
this.options = {
plugins: ['jsx'],
sourceType: 'module'
};
this.$namespace = $namespace;
this.renamed = renamed;
}
build() {
const namespaceName = this.$namespace['@_name'];
this.append(`const ${namespaceName} = imports.gi.${namespaceName}`);
this.buildClasses();
this.buildFunctions();
this.append(`export default ${namespaceName}`);
}
buildFunctions(path = '') {
const namespaceName = this.$namespace['@_name'];
return Object.entries(this.renamed.functions).forEach(([fromFunction, toFunction]) => {
this.append(`${namespaceName}.${toFunction} = ${namespaceName}.${fromFunction}`, path);
});
}
buildClasses(path = '') {
const namespaceName = this.$namespace['@_name'];
return Object.entries(this.renamed.classes).forEach(([className, properties]) => {
const count = this.append(`
const ${namespaceName}${className} = ${namespaceName}.${className};
${namespaceName}.${className} = class ${className} extends ${namespaceName}${className} {
constructor(...props) {
super(...props);
}
};`, path);
this.buildPropertyDeclarations(properties, [path, (count - 1).toString(), 'expression.right.body.body.0.body.body']);
});
}
buildPropertyDeclarations(properties, path = '') {
return Object.entries(properties).forEach(([fromProperty, toProperty]) => {
this.append(`class C {constructor() {this.${toProperty.indexOf('-') > -1 ? `'${toProperty}'` : toProperty} = this.${fromProperty.indexOf('-') > -1 ? `'${fromProperty}'` : fromProperty}}}`, path, 'body.body.0.body.body');
});
}
}
exports.default = GirTSGenerator;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9HaXJKU0dlbmVyYXRvci50cyJdLCJuYW1lcyI6WyJHaXJUU0dlbmVyYXRvciIsIkJhYmVsUGFyc2VyR2VuZXJhdG9yIiwiY29uc3RydWN0b3IiLCIkbmFtZXNwYWNlIiwicmVuYW1lZCIsIm9wdGlvbnMiLCJwbHVnaW5zIiwic291cmNlVHlwZSIsImJ1aWxkIiwibmFtZXNwYWNlTmFtZSIsImFwcGVuZCIsImJ1aWxkQ2xhc3NlcyIsImJ1aWxkRnVuY3Rpb25zIiwicGF0aCIsIk9iamVjdCIsImVudHJpZXMiLCJmdW5jdGlvbnMiLCJmb3JFYWNoIiwiZnJvbUZ1bmN0aW9uIiwidG9GdW5jdGlvbiIsImNsYXNzZXMiLCJjbGFzc05hbWUiLCJwcm9wZXJ0aWVzIiwiY291bnQiLCJidWlsZFByb3BlcnR5RGVjbGFyYXRpb25zIiwidG9TdHJpbmciLCJmcm9tUHJvcGVydHkiLCJ0b1Byb3BlcnR5IiwiaW5kZXhPZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBSWUsTUFBTUEsY0FBTixTQUE2QkMsNkJBQTdCLENBQWtEO0FBQy9EQyxFQUFBQSxXQUFXLENBQVFDLFVBQVIsRUFBc0NDLE9BQXRDLEVBQXdEO0FBQ2pFO0FBRGlFLFNBSW5FQyxPQUptRSxHQUkxQztBQUN2QkMsTUFBQUEsT0FBTyxFQUFFLENBQUMsS0FBRCxDQURjO0FBRXZCQyxNQUFBQSxVQUFVLEVBQUU7QUFGVyxLQUowQztBQUFBLFNBQWhESixVQUFnRCxHQUFoREEsVUFBZ0Q7QUFBQSxTQUFsQkMsT0FBa0IsR0FBbEJBLE9BQWtCO0FBRWxFOztBQU9ESSxFQUFBQSxLQUFLLEdBQUc7QUFDTixVQUFNQyxhQUFhLEdBQUcsS0FBS04sVUFBTCxDQUFnQixRQUFoQixDQUF0QjtBQUNBLFNBQUtPLE1BQUwsQ0FBYSxTQUFRRCxhQUFjLGlCQUFnQkEsYUFBYyxFQUFqRTtBQUNBLFNBQUtFLFlBQUw7QUFDQSxTQUFLQyxjQUFMO0FBQ0EsU0FBS0YsTUFBTCxDQUFhLGtCQUFpQkQsYUFBYyxFQUE1QztBQUNEOztBQUVERyxFQUFBQSxjQUFjLENBQUNDLElBQWdCLEdBQUcsRUFBcEIsRUFBOEI7QUFDMUMsVUFBTUosYUFBYSxHQUFHLEtBQUtOLFVBQUwsQ0FBZ0IsUUFBaEIsQ0FBdEI7QUFDQSxXQUFPVyxNQUFNLENBQUNDLE9BQVAsQ0FBZSxLQUFLWCxPQUFMLENBQWFZLFNBQTVCLEVBQXVDQyxPQUF2QyxDQUNMLENBQUMsQ0FBQ0MsWUFBRCxFQUFlQyxVQUFmLENBQUQsS0FBa0Q7QUFDaEQsV0FBS1QsTUFBTCxDQUNHLEdBQUVELGFBQWMsSUFBR1UsVUFBVyxNQUFLVixhQUFjLElBQUdTLFlBQWEsRUFEcEUsRUFFRUwsSUFGRjtBQUlELEtBTkksQ0FBUDtBQVFEOztBQUVERixFQUFBQSxZQUFZLENBQUNFLElBQWdCLEdBQUcsRUFBcEIsRUFBOEI7QUFDeEMsVUFBTUosYUFBYSxHQUFHLEtBQUtOLFVBQUwsQ0FBZ0IsUUFBaEIsQ0FBdEI7QUFDQSxXQUFPVyxNQUFNLENBQUNDLE9BQVAsQ0FBZSxLQUFLWCxPQUFMLENBQWFnQixPQUE1QixFQUFxQ0gsT0FBckMsQ0FDTCxDQUFDLENBQUNJLFNBQUQsRUFBWUMsVUFBWixDQUFELEtBQWtFO0FBQ2hFLFlBQU1DLEtBQUssR0FBRyxLQUFLYixNQUFMLENBQ1g7UUFDSEQsYUFBYyxHQUFFWSxTQUFVLE1BQUtaLGFBQWMsSUFBR1ksU0FBVTtFQUNoRVosYUFBYyxJQUFHWSxTQUFVLFlBQVdBLFNBQVUsWUFBV1osYUFBYyxHQUFFWSxTQUFVOzs7O0dBSGpFLEVBUVpSLElBUlksQ0FBZDtBQVVBLFdBQUtXLHlCQUFMLENBQStCRixVQUEvQixFQUEyQyxDQUN6Q1QsSUFEeUMsRUFFekMsQ0FBQ1UsS0FBSyxHQUFHLENBQVQsRUFBWUUsUUFBWixFQUZ5QyxFQUd6Qyx3Q0FIeUMsQ0FBM0M7QUFLRCxLQWpCSSxDQUFQO0FBbUJEOztBQUVERCxFQUFBQSx5QkFBeUIsQ0FDdkJGLFVBRHVCLEVBRXZCVCxJQUFnQixHQUFHLEVBRkksRUFHakI7QUFDTixXQUFPQyxNQUFNLENBQUNDLE9BQVAsQ0FBZU8sVUFBZixFQUEyQkwsT0FBM0IsQ0FDTCxDQUFDLENBQUNTLFlBQUQsRUFBZUMsVUFBZixDQUFELEtBQWtEO0FBQ2hELFdBQUtqQixNQUFMLENBQ0csZ0NBQ0NpQixVQUFVLENBQUNDLE9BQVgsQ0FBbUIsR0FBbkIsSUFBMEIsQ0FBQyxDQUEzQixHQUFnQyxJQUFHRCxVQUFXLEdBQTlDLEdBQW1EQSxVQUNwRCxXQUNDRCxZQUFZLENBQUNFLE9BQWIsQ0FBcUIsR0FBckIsSUFBNEIsQ0FBQyxDQUE3QixHQUFrQyxJQUFHRixZQUFhLEdBQWxELEdBQXVEQSxZQUN4RCxJQUxILEVBTUViLElBTkYsRUFPRSx1QkFQRjtBQVNELEtBWEksQ0FBUDtBQWFEOztBQXRFOEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFiZWxQYXJzZXJHZW5lcmF0b3IsIHsgSW5qZWN0UGF0aCB9IGZyb20gJ2JhYmVsLXBhcnNlci1nZW5lcmF0b3InO1xuaW1wb3J0IHsgUGFyc2VyT3B0aW9ucyB9IGZyb20gJ0BiYWJlbC9wYXJzZXInO1xuaW1wb3J0IHsgUmVuYW1lZCwgTmFtZXNwYWNlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdpclRTR2VuZXJhdG9yIGV4dGVuZHMgQmFiZWxQYXJzZXJHZW5lcmF0b3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgJG5hbWVzcGFjZTogTmFtZXNwYWNlLCBwdWJsaWMgcmVuYW1lZDogUmVuYW1lZCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBvcHRpb25zOiBQYXJzZXJPcHRpb25zID0ge1xuICAgIHBsdWdpbnM6IFsnanN4J10sXG4gICAgc291cmNlVHlwZTogJ21vZHVsZSdcbiAgfTtcblxuICBidWlsZCgpIHtcbiAgICBjb25zdCBuYW1lc3BhY2VOYW1lID0gdGhpcy4kbmFtZXNwYWNlWydAX25hbWUnXTtcbiAgICB0aGlzLmFwcGVuZChgY29uc3QgJHtuYW1lc3BhY2VOYW1lfSA9IGltcG9ydHMuZ2kuJHtuYW1lc3BhY2VOYW1lfWApO1xuICAgIHRoaXMuYnVpbGRDbGFzc2VzKCk7XG4gICAgdGhpcy5idWlsZEZ1bmN0aW9ucygpO1xuICAgIHRoaXMuYXBwZW5kKGBleHBvcnQgZGVmYXVsdCAke25hbWVzcGFjZU5hbWV9YCk7XG4gIH1cblxuICBidWlsZEZ1bmN0aW9ucyhwYXRoOiBJbmplY3RQYXRoID0gJycpOiB2b2lkIHtcbiAgICBjb25zdCBuYW1lc3BhY2VOYW1lID0gdGhpcy4kbmFtZXNwYWNlWydAX25hbWUnXTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5yZW5hbWVkLmZ1bmN0aW9ucykuZm9yRWFjaChcbiAgICAgIChbZnJvbUZ1bmN0aW9uLCB0b0Z1bmN0aW9uXTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICB0aGlzLmFwcGVuZChcbiAgICAgICAgICBgJHtuYW1lc3BhY2VOYW1lfS4ke3RvRnVuY3Rpb259ID0gJHtuYW1lc3BhY2VOYW1lfS4ke2Zyb21GdW5jdGlvbn1gLFxuICAgICAgICAgIHBhdGhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgYnVpbGRDbGFzc2VzKHBhdGg6IEluamVjdFBhdGggPSAnJyk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWVzcGFjZU5hbWUgPSB0aGlzLiRuYW1lc3BhY2VbJ0BfbmFtZSddO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnJlbmFtZWQuY2xhc3NlcykuZm9yRWFjaChcbiAgICAgIChbY2xhc3NOYW1lLCBwcm9wZXJ0aWVzXTogW3N0cmluZywgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfV0pID0+IHtcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmFwcGVuZChcbiAgICAgICAgICBgXG5jb25zdCAke25hbWVzcGFjZU5hbWV9JHtjbGFzc05hbWV9ID0gJHtuYW1lc3BhY2VOYW1lfS4ke2NsYXNzTmFtZX07XG4ke25hbWVzcGFjZU5hbWV9LiR7Y2xhc3NOYW1lfSA9IGNsYXNzICR7Y2xhc3NOYW1lfSBleHRlbmRzICR7bmFtZXNwYWNlTmFtZX0ke2NsYXNzTmFtZX0ge1xuICBjb25zdHJ1Y3RvciguLi5wcm9wcykge1xuICAgIHN1cGVyKC4uLnByb3BzKTtcbiAgfVxufTtgLFxuICAgICAgICAgIHBhdGhcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5idWlsZFByb3BlcnR5RGVjbGFyYXRpb25zKHByb3BlcnRpZXMsIFtcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIChjb3VudCAtIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgJ2V4cHJlc3Npb24ucmlnaHQuYm9keS5ib2R5LjAuYm9keS5ib2R5J1xuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgYnVpbGRQcm9wZXJ0eURlY2xhcmF0aW9ucyhcbiAgICBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIHBhdGg6IEluamVjdFBhdGggPSAnJ1xuICApOiB2b2lkIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykuZm9yRWFjaChcbiAgICAgIChbZnJvbVByb3BlcnR5LCB0b1Byb3BlcnR5XTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICB0aGlzLmFwcGVuZChcbiAgICAgICAgICBgY2xhc3MgQyB7Y29uc3RydWN0b3IoKSB7dGhpcy4ke1xuICAgICAgICAgICAgdG9Qcm9wZXJ0eS5pbmRleE9mKCctJykgPiAtMSA/IGAnJHt0b1Byb3BlcnR5fSdgIDogdG9Qcm9wZXJ0eVxuICAgICAgICAgIH0gPSB0aGlzLiR7XG4gICAgICAgICAgICBmcm9tUHJvcGVydHkuaW5kZXhPZignLScpID4gLTEgPyBgJyR7ZnJvbVByb3BlcnR5fSdgIDogZnJvbVByb3BlcnR5XG4gICAgICAgICAgfX19YCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgICdib2R5LmJvZHkuMC5ib2R5LmJvZHknXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIl19