astro-ghostcms/.pnpm-store/v3/files/9e/6eb59931b09c4a273a771aeb4f1...

214 lines
10 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerEditorFeatures = void 0;
const protocol_1 = require("../../protocol");
function registerEditorFeatures(connection, projects, env) {
const scriptVersions = new Map();
const scriptVersionSnapshots = new WeakSet();
connection.onRequest(protocol_1.DocumentDropRequest.type, async ({ textDocument, position, dataTransfer }, token) => {
const dataTransferMap = new Map();
for (const item of dataTransfer) {
dataTransferMap.set(item.mimeType, {
value: item.value,
asString() {
return connection.sendRequest(protocol_1.DocumentDrop_DataTransferItemAsStringRequest.type, { mimeType: item.mimeType });
},
asFile() {
if (item.file) {
return {
name: item.file.name,
uri: item.file.uri,
data() {
return connection.sendRequest(protocol_1.DocumentDrop_DataTransferItemFileDataRequest.type, { mimeType: item.mimeType });
},
};
}
},
});
}
const languageService = (await projects.getProject(textDocument.uri)).getLanguageService();
return languageService.doDocumentDrop(textDocument.uri, position, dataTransferMap, token);
});
connection.onRequest(protocol_1.GetMatchTsConfigRequest.type, async (params) => {
const languageService = (await projects.getProject(params.uri)).getLanguageService();
const configFileName = languageService.context.language.typescript?.configFileName;
if (configFileName) {
return { uri: env.fileNameToUri(configFileName) };
}
});
connection.onRequest(protocol_1.GetVirtualFileRequest.type, async (document) => {
const languageService = (await projects.getProject(document.uri)).getLanguageService();
const sourceFile = languageService.context.language.files.get(document.uri);
if (sourceFile?.generated) {
return prune(sourceFile.generated.code);
}
function prune(code) {
const uri = languageService.context.documents.getVirtualCodeUri(sourceFile.id, code.id);
let version = scriptVersions.get(uri) ?? 0;
if (!scriptVersionSnapshots.has(code.snapshot)) {
version++;
scriptVersions.set(uri, version);
scriptVersionSnapshots.add(code.snapshot);
}
return {
fileUri: sourceFile.id,
virtualCodeId: code.id,
languageId: code.languageId,
embeddedCodes: code.embeddedCodes.map(prune),
version,
disabled: languageService.context.disabledVirtualFileUris.has(uri),
};
}
});
connection.onRequest(protocol_1.GetVirtualCodeRequest.type, async (params) => {
let content = '';
let codegenStacks = [];
const languageService = (await projects.getProject(params.fileUri)).getLanguageService();
const mappings = {};
const [virtualCode] = languageService.context.language.files.getVirtualCode(params.fileUri, params.virtualCodeId);
if (virtualCode) {
for (const map of languageService.context.documents.getMaps(virtualCode)) {
content = map.virtualFileDocument.getText();
codegenStacks = virtualCode.codegenStacks ?? [];
mappings[map.sourceFileDocument.uri] = map.map.mappings;
}
}
return {
content,
mappings,
codegenStacks,
};
});
connection.onNotification(protocol_1.ReloadProjectNotification.type, () => {
projects.reloadProjects();
});
connection.onNotification(protocol_1.WriteVirtualFilesNotification.type, async (params) => {
const fsModeName = 'fs'; // avoid bundle
const fs = await import(fsModeName);
const languageService = (await projects.getProject(params.uri)).getLanguageService();
if (languageService.context.language.typescript) {
const rootUri = languageService.context.env.workspaceFolder;
const { languageServiceHost } = languageService.context.language.typescript;
for (const fileName of languageServiceHost.getScriptFileNames()) {
if (!fs.existsSync(fileName)) {
// global virtual files
const snapshot = languageServiceHost.getScriptSnapshot(fileName);
if (snapshot) {
fs.writeFile(fileName, snapshot.getText(0, snapshot.getLength()), () => { });
}
}
else {
const uri = languageService.context.env.typescript.fileNameToUri(fileName);
if (uri.startsWith(rootUri)) {
const sourceFile = languageService.context.language.files.get(uri);
if (sourceFile?.generated) {
const mainScript = sourceFile.generated.languagePlugin.typescript?.getScript(sourceFile.generated.code);
if (mainScript) {
const { snapshot } = mainScript.code;
fs.writeFile(fileName + mainScript.extension, snapshot.getText(0, snapshot.getLength()), () => { });
}
if (sourceFile.generated.languagePlugin.typescript?.getExtraScripts) {
for (const extraScript of sourceFile.generated.languagePlugin.typescript.getExtraScripts(uri, sourceFile.generated.code)) {
const { snapshot } = extraScript.code;
fs.writeFile(fileName, snapshot.getText(0, snapshot.getLength()), () => { });
}
}
}
}
}
}
}
});
connection.onRequest(protocol_1.LoadedTSFilesMetaRequest.type, async () => {
const sourceFilesData = new Map();
for (const project of await projects.getProjects()) {
const languageService = project.getLanguageService();
const tsLanguageService = languageService.context.inject('typescript/languageService');
const program = tsLanguageService?.getProgram();
if (program && languageService.context.language.typescript) {
const { configFileName, languageServiceHost } = languageService.context.language.typescript;
const projectName = configFileName ?? (languageServiceHost.getCurrentDirectory() + '(inferred)');
const sourceFiles = program.getSourceFiles() ?? [];
for (const sourceFile of sourceFiles) {
if (!sourceFilesData.has(sourceFile)) {
let nodes = 0;
sourceFile.forEachChild(function walk(node) {
nodes++;
node.forEachChild(walk);
});
sourceFilesData.set(sourceFile, {
projectNames: [],
size: nodes * 128,
});
}
sourceFilesData.get(sourceFile).projectNames.push(projectName);
}
;
}
}
const result = {
inputs: {},
outputs: {},
};
for (const [sourceFile, fileData] of sourceFilesData) {
let key = fileData.projectNames.sort().join(', ');
if (fileData.projectNames.length >= 2) {
key = `Shared in ${fileData.projectNames.length} projects (${key})`;
}
result.outputs[key] ??= {
imports: [],
exports: [],
entryPoint: '',
inputs: {},
bytes: 0,
};
result.outputs[key].inputs[sourceFile.fileName] = { bytesInOutput: fileData.size };
}
return result;
});
connection.onNotification(protocol_1.UpdateVirtualCodeStateNotification.type, async (params) => {
const project = await projects.getProject(params.fileUri);
const context = project.getLanguageServiceDontCreate()?.context;
if (context) {
const virtualFileUri = project.getLanguageService().context.documents.getVirtualCodeUri(params.fileUri, params.virtualCodeId);
if (params.disabled) {
context.disabledVirtualFileUris.add(virtualFileUri);
}
else {
context.disabledVirtualFileUris.delete(virtualFileUri);
}
}
});
connection.onNotification(protocol_1.UpdateServicePluginStateNotification.type, async (params) => {
const project = await projects.getProject(params.uri);
const context = project.getLanguageServiceDontCreate()?.context;
if (context) {
const service = context.services[params.serviceId][1];
if (params.disabled) {
context.disabledServicePlugins.add(service);
}
else {
context.disabledServicePlugins.delete(service);
}
}
});
connection.onRequest(protocol_1.GetServicePluginsRequest.type, async (params) => {
const project = await projects.getProject(params.uri);
const context = project.getLanguageServiceDontCreate()?.context;
if (context) {
const result = [];
for (let id in context.services) {
const service = context.services[id];
result.push({
id,
name: service[0].name,
disabled: context.disabledServicePlugins.has(service[1]),
features: Object.keys(service[1]),
});
}
return result;
}
});
}
exports.registerEditorFeatures = registerEditorFeatures;
//# sourceMappingURL=registerEditorFeatures.js.map