ts-oak-plugin/lib/languageServiceProxy.js

37 lines
1.2 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LanguageServiceProxyBuilder = void 0;
class LanguageServiceProxyBuilder {
constructor(info) {
this.info = info;
this.wrappers = [];
}
wrap(name, wrapper) {
this.wrappers.push({ name, wrapper });
return this;
}
build() {
const proxy = Object.create(null);
const languageService = this.info.languageService;
// 复制所有方法
for (const k of Object.keys(languageService)) {
const original = languageService[k];
if (typeof original === 'function') {
proxy[k] = (...args) => original.apply(languageService, args);
}
else {
proxy[k] = original;
}
}
// 应用包装器
for (const { name, wrapper } of this.wrappers) {
const original = languageService[name];
if (typeof original === 'function') {
proxy[name] = wrapper(original, this.info);
}
}
return proxy;
}
}
exports.LanguageServiceProxyBuilder = LanguageServiceProxyBuilder;
//# sourceMappingURL=languageServiceProxy.js.map