typescript-yaml-plugin
Version:
TypeScript Language Service plugin for YAML
50 lines • 2.5 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const yaml_1 = __importDefault(require("yaml"));
module.exports = ({ typescript: ts_ }) => ({
create: (info) => {
const logger = info.project.projectService.logger;
const languageServiceHost = {
getScriptKind: filename => {
if (!info.languageServiceHost.getScriptKind)
return ts_.ScriptKind.Unknown;
if (/\.ya?ml$/.test(filename))
return ts_.ScriptKind.TS;
return info.languageServiceHost.getScriptKind(filename);
},
getScriptSnapshot: filename => {
if (!/\.ya?ml$/.test(filename))
return info.languageServiceHost.getScriptSnapshot(filename);
const content = fs_1.default.readFileSync(filename, 'utf8');
let object;
try {
object = yaml_1.default.parse(content);
}
catch (error) {
logger.info(`[typescript-plugin-yaml] YAML.parse error:\n${error}`);
}
const text = `export default ${JSON.stringify(object)};`;
return ts_.ScriptSnapshot.fromString(text);
},
resolveModuleNameLiterals: (moduleLiterals, containingFile, ...rest) => info.languageServiceHost.resolveModuleNameLiterals(moduleLiterals, containingFile, ...rest).map((resolvedModule, index) => {
const moduleName = moduleLiterals[index].text;
if (!/\.ya?ml$/.test(moduleName))
return resolvedModule;
return Object.assign(Object.assign({}, resolvedModule), { resolvedModule: {
extension: ts_.Extension.Ts,
isExternalLibraryImport: false,
resolvedFileName: path_1.default.resolve(path_1.default.dirname(containingFile), moduleName)
} });
})
};
const languageServiceHostProxy = new Proxy(info.languageServiceHost, {
get: (target, key) => languageServiceHost[key] ? languageServiceHost[key] : target[key]
});
return ts_.createLanguageService(languageServiceHostProxy);
}
});
//# sourceMappingURL=index.js.map