astro-ghostcms/.pnpm-store/v3/files/19/ffd11694eb60e8e00b7179f6771...

89 lines
3.6 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFormatter = void 0;
const language_service_1 = require("@volar/language-service");
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
const vscode_uri_1 = require("vscode-uri");
const utils_1 = require("./utils");
function createFormatter(config, compilerOptions = utils_1.defaultCompilerOptions) {
const ts = require('typescript');
let settings = {};
let dummyScriptUri = 'file:///dummy.txt';
let fakeScriptFileName = '/dummy.txt';
let fakeScriptSnapshot = ts.ScriptSnapshot.fromString('');
let fakeScriptLanguageId;
const service = (0, language_service_1.createLanguageService)({ typescript: ts }, {
workspaceUri: vscode_uri_1.URI.file('/'),
rootUri: vscode_uri_1.URI.file('/'),
uriToFileName: uri => {
if (uri.startsWith(dummyScriptUri))
return uri.replace(dummyScriptUri, fakeScriptFileName);
return (0, utils_1.uriToFileName)(uri);
},
fileNameToUri: fileName => {
if (fileName.startsWith(fakeScriptFileName))
return fileName.replace(fakeScriptFileName, dummyScriptUri);
return (0, utils_1.fileNameToUri)(fileName);
},
getConfiguration: section => (0, utils_1.getConfiguration)(settings, section),
fs: utils_1.fs,
console,
}, config, createHost());
return {
formatFile,
formatCode,
get settings() {
return settings;
},
set settings(newValue) {
settings = newValue;
},
};
async function formatFile(fileName, options) {
fileName = (0, utils_1.asPosix)(fileName);
const uri = (0, utils_1.fileNameToUri)(fileName);
const document = service.context.getTextDocument(uri);
if (!document)
throw `file not found: ${fileName}`;
const edits = await service.format(uri, options, undefined, undefined);
if (edits?.length) {
const newString = vscode_languageserver_textdocument_1.TextDocument.applyEdits(document, edits);
return newString;
}
return document.getText();
}
async function formatCode(content, languageId, options) {
fakeScriptSnapshot = ts.ScriptSnapshot.fromString(content);
fakeScriptLanguageId = languageId;
const document = service.context.getTextDocument(dummyScriptUri);
const edits = await service.format(dummyScriptUri, options, undefined, undefined);
if (edits?.length) {
const newString = vscode_languageserver_textdocument_1.TextDocument.applyEdits(document, edits);
return newString;
}
return content;
}
function createHost() {
let projectVersion = 0;
const host = {
workspacePath: '/',
rootPath: '/',
getCompilationSettings: () => compilerOptions,
getProjectVersion: () => (projectVersion++).toString(),
getScriptFileNames: () => fakeScriptSnapshot ? [fakeScriptFileName] : [],
getScriptSnapshot: (fileName) => {
if (fileName === fakeScriptFileName) {
return fakeScriptSnapshot;
}
},
getLanguageId: fileName => {
if (fileName === fakeScriptFileName) {
return fakeScriptLanguageId;
}
},
};
return host;
}
}
exports.createFormatter = createFormatter;
//# sourceMappingURL=createFormatter.js.map