astro-ghostcms/.pnpm-store/v3/files/c9/774a96ebafd4a77c2b7d4367bc8...

140 lines
5.7 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.safeCall = exports.ruleWorker = exports.languageFeatureWorker = exports.documentFeatureWorker = void 0;
const definePlugin_1 = require("./definePlugin");
const types_1 = require("../types");
async function documentFeatureWorker(context, uri, isValidSourceMap, worker, transform, combineResult) {
return languageFeatureWorker(context, uri, undefined, (_, map, file) => {
if (isValidSourceMap(file, map)) {
return [undefined];
}
return [];
}, worker, transform, combineResult);
}
exports.documentFeatureWorker = documentFeatureWorker;
async function languageFeatureWorker(context, uri, arg, transformArg, worker, transform, combineResult, reportProgress) {
const document = context.getTextDocument(uri);
const virtualFile = context.documents.getSourceByUri(uri)?.root;
let results = [];
if (virtualFile) {
await (0, definePlugin_1.visitEmbedded)(context.documents, virtualFile, async (file, map) => {
for (const mappedArg of transformArg(arg, map, file)) {
for (const [serviceId, service] of Object.entries(context.services)) {
const embeddedResult = await safeCall(() => worker(service, map.virtualFileDocument, mappedArg, map, file), 'service ' + serviceId + ' crashed on ' + map.virtualFileDocument.uri);
if (!embeddedResult)
continue;
const result = transform(embeddedResult, map);
if (!result)
continue;
results.push(result);
if (!combineResult)
return false;
const isEmptyArray = Array.isArray(result) && result.length === 0;
if (reportProgress && !isEmptyArray) {
reportProgress(combineResult(results));
}
}
}
return true;
});
}
else if (document) {
for (const [serviceId, service] of Object.entries(context.services)) {
const embeddedResult = await safeCall(() => worker(service, document, arg, undefined, undefined), 'service ' + serviceId + ' crashed on ' + uri);
if (!embeddedResult)
continue;
const result = transform(embeddedResult, undefined);
if (!result)
continue;
results.push(result);
if (!combineResult)
break;
const isEmptyArray = Array.isArray(result) && result.length === 0;
if (reportProgress && !isEmptyArray) {
reportProgress(combineResult(results));
}
}
}
if (combineResult && results.length > 0) {
return combineResult(results);
}
else if (results.length > 0) {
return results[0];
}
}
exports.languageFeatureWorker = languageFeatureWorker;
async function ruleWorker(context, ruleType, uri, isValidSourceMap, worker, transform, combineResult, reportProgress) {
const document = context.getTextDocument(uri);
const virtualFile = context.documents.getSourceByUri(uri)?.root;
const ruleCtx = {
env: context.env,
inject: context.inject,
report: () => { },
};
let results = [];
if (virtualFile) {
await (0, definePlugin_1.visitEmbedded)(context.documents, virtualFile, async (file, map) => {
if (!isValidSourceMap(file)) {
return true;
}
for (const ruleId in context.rules) {
const rule = context.rules[ruleId];
if ((rule.type ?? types_1.RuleType.Syntax) !== ruleType) {
continue;
}
const embeddedResult = await safeCall(() => worker(ruleId, rule, map.virtualFileDocument, ruleCtx), 'rule ' + ruleId + ' crashed on ' + map.virtualFileDocument.uri);
if (!embeddedResult)
continue;
const result = transform(embeddedResult, map);
if (!result)
continue;
results.push(result);
if (!combineResult)
return false;
const isEmptyArray = Array.isArray(result) && result.length === 0;
if (reportProgress && !isEmptyArray) {
reportProgress(combineResult(results));
}
}
return true;
});
}
else if (document) {
for (const ruleId in context.rules) {
const rule = context.rules[ruleId];
if ((rule.type ?? types_1.RuleType.Syntax) !== ruleType) {
continue;
}
const embeddedResult = await safeCall(() => worker(ruleId, rule, document, ruleCtx), 'rule ' + ruleId + ' crashed on ' + document.uri);
if (!embeddedResult)
continue;
const result = transform(embeddedResult, undefined);
if (!result)
continue;
results.push(result);
if (!combineResult)
break;
const isEmptyArray = Array.isArray(result) && result.length === 0;
if (reportProgress && !isEmptyArray) {
reportProgress(combineResult(results));
}
}
}
if (combineResult && results.length > 0) {
return combineResult(results);
}
else if (results.length > 0) {
return results[0];
}
}
exports.ruleWorker = ruleWorker;
async function safeCall(cb, errorMsg) {
try {
return await cb();
}
catch (err) {
console.warn(errorMsg, err);
}
}
exports.safeCall = safeCall;
//# sourceMappingURL=featureWorkers.js.map