37 lines
1.2 KiB
JavaScript
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
|