106 lines
4.3 KiB
Plaintext
106 lines
4.3 KiB
Plaintext
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getEmbeddedFilesByLevel = exports.eachEmbeddedDocument = exports.safeCall = exports.languageFeatureWorker = exports.documentFeatureWorker = void 0;
|
|
async function documentFeatureWorker(context, uri, valid, worker, transformResult, combineResult) {
|
|
return languageFeatureWorker(context, uri, () => void 0, function* (map) {
|
|
if (valid(map)) {
|
|
yield;
|
|
}
|
|
}, worker, transformResult, combineResult);
|
|
}
|
|
exports.documentFeatureWorker = documentFeatureWorker;
|
|
async function languageFeatureWorker(context, uri, getReadDocParams, eachVirtualDocParams, worker, transformResult, combineResult) {
|
|
const sourceFile = context.language.files.get(uri);
|
|
if (!sourceFile) {
|
|
return;
|
|
}
|
|
let results = [];
|
|
if (sourceFile.generated) {
|
|
for (const map of eachEmbeddedDocument(context, sourceFile.generated.code)) {
|
|
for (const mappedArg of eachVirtualDocParams(map)) {
|
|
for (const [serviceId, service] of Object.entries(context.services)) {
|
|
if (context.disabledServicePlugins.has(service[1])) {
|
|
continue;
|
|
}
|
|
const embeddedResult = await safeCall(() => worker(service, map.virtualFileDocument, mappedArg, map), 'service ' + serviceId + ' crashed on ' + map.virtualFileDocument.uri);
|
|
if (!embeddedResult) {
|
|
continue;
|
|
}
|
|
const result = transformResult(embeddedResult, map);
|
|
if (!result) {
|
|
continue;
|
|
}
|
|
results.push(result);
|
|
if (!combineResult) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
const document = context.documents.get(uri, sourceFile.languageId, sourceFile.snapshot);
|
|
const params = getReadDocParams();
|
|
for (const [serviceId, service] of Object.entries(context.services)) {
|
|
if (context.disabledServicePlugins.has(service[1])) {
|
|
continue;
|
|
}
|
|
const embeddedResult = await safeCall(() => worker(service, document, params, undefined), 'service ' + serviceId + ' crashed on ' + uri);
|
|
if (!embeddedResult) {
|
|
continue;
|
|
}
|
|
const result = transformResult(embeddedResult, undefined);
|
|
if (!result) {
|
|
continue;
|
|
}
|
|
results.push(result);
|
|
if (!combineResult) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (combineResult && results.length > 0) {
|
|
return combineResult(results);
|
|
}
|
|
else if (results.length > 0) {
|
|
return results[0];
|
|
}
|
|
}
|
|
exports.languageFeatureWorker = languageFeatureWorker;
|
|
async function safeCall(cb, errorMsg) {
|
|
try {
|
|
return await cb();
|
|
}
|
|
catch (err) {
|
|
console.warn(errorMsg, err);
|
|
}
|
|
}
|
|
exports.safeCall = safeCall;
|
|
function* eachEmbeddedDocument(context, current, rootCode = current) {
|
|
for (const embeddedCode of current.embeddedCodes) {
|
|
yield* eachEmbeddedDocument(context, embeddedCode, rootCode);
|
|
}
|
|
for (const map of context.documents.getMaps(current)) {
|
|
const sourceFile = context.language.files.get(map.sourceFileDocument.uri);
|
|
if (sourceFile?.generated?.code === rootCode
|
|
&& !context.disabledVirtualFileUris.has(context.documents.getVirtualCodeUri(context.language.files.getByVirtualCode(current).id, current.id))) {
|
|
yield map;
|
|
}
|
|
}
|
|
}
|
|
exports.eachEmbeddedDocument = eachEmbeddedDocument;
|
|
function getEmbeddedFilesByLevel(context, sourceFileUri, rootFile, level) {
|
|
const embeddedFilesByLevel = [[rootFile]];
|
|
while (true) {
|
|
if (embeddedFilesByLevel.length > level) {
|
|
return embeddedFilesByLevel[level];
|
|
}
|
|
let nextLevel = [];
|
|
for (const file of embeddedFilesByLevel[embeddedFilesByLevel.length - 1]) {
|
|
nextLevel = nextLevel.concat(file.embeddedCodes.filter(file => !context.disabledVirtualFileUris.has(context.documents.getVirtualCodeUri(sourceFileUri, file.id))));
|
|
}
|
|
embeddedFilesByLevel.push(nextLevel);
|
|
}
|
|
}
|
|
exports.getEmbeddedFilesByLevel = getEmbeddedFilesByLevel;
|
|
//# sourceMappingURL=featureWorkers.js.map |