@tomjs/vscode
Version:
Some utilities to simplify the development of VSCode Extensions
203 lines (202 loc) • 6.31 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
function _nullishCoalesce(lhs, rhsFn) {
if (lhs != null) {
return lhs;
} else {
return rhsFn();
}
}
var _ctx;
function setExtensionContext(ctx) {
_ctx = ctx;
}
function getExtensionContext() {
return _ctx;
}
function getCtx() {
return _ctx;
}
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _node = require('@tomjs/node');
var _vscode = require('vscode');
var DEFAULT_LANGUAGE = 'en';
var DEFAULT_NLS = 'package.nls.json';
function loadI18n(extensionPath, language) {
const lang = _nullishCoalesce(language, () => _vscode.env.language.toLocaleLowerCase());
let name = lang === DEFAULT_LANGUAGE ? DEFAULT_NLS : `package.nls.${lang}.json`;
const nlsPath = _path2.default.join(extensionPath, name);
if (!_fs2.default.existsSync(nlsPath)) {
name = DEFAULT_NLS;
}
return Object.assign(
{},
_node.readJsonSync.call(void 0, _path2.default.join(extensionPath, DEFAULT_NLS)),
_node.readJsonSync.call(void 0, nlsPath),
);
}
var I18n = class {
constructor(messages, language) {
this.use(messages, language);
}
use(messages, language) {
if (typeof messages === 'string') {
this.messages = loadI18n(messages, language);
} else if (typeof messages === 'object') {
this.messages = messages;
}
}
t(...params) {
if (params.length === 0 || !this.messages) {
return '';
}
const [key, ...args] = params;
const text = _nullishCoalesce(this.messages[key], () => '');
if (args[0] === null || args[0] === void 0 || args[0] === '') {
return text;
}
const values = typeof args[0] === 'object' ? args[0] : args;
return text.replace(/{([^}]+)}/g, (match, group) =>
_nullishCoalesce(values[group], () => match),
);
}
};
var i18n = new I18n();
var _lodashclonedeep = require('lodash.clonedeep');
var _lodashclonedeep2 = _interopRequireDefault(_lodashclonedeep);
var Configuration = class {
constructor(identifier, defaultValues) {
this._defaultValues = {};
this._values = {};
this.identifier = identifier;
this._defaultValues = Object.assign({}, defaultValues);
}
configuration() {
return _vscode.workspace.getConfiguration(this.identifier);
}
get(section, defaultValue) {
return this.configuration().get(
section,
_nullishCoalesce(defaultValue, () => this._defaultValues[section]),
);
}
values() {
const values = Object.assign({});
const cfg = this.configuration();
Object.keys(cfg)
.filter(key => typeof cfg[key] !== 'function')
.forEach(key => {
values[key] = _nullishCoalesce(cfg.get(key), () =>
_lodashclonedeep2.default.call(void 0, this._defaultValues[key]),
);
});
return values;
}
async update(section, value, target) {
const values = {};
let _target;
if (typeof section === 'string') {
values[section] = value;
_target = target;
} else if (typeof section === 'object') {
Object.assign(values, section);
_target = value;
} else {
throw new Error('');
}
const cfg = this.configuration();
await Promise.all(
Object.keys(values).map(key =>
cfg
.update(
key,
values[key],
_nullishCoalesce(_target, () => _vscode.ConfigurationTarget.Global),
)
.then(() => {
this._values[key] = values[key];
}),
),
);
}
};
var isInsider = _vscode.version.includes('-insider');
function isUnderDevelopment() {
return getCtx().extensionMode == _vscode.ExtensionMode.Development;
}
function isUnderProduction() {
return getCtx().extensionMode == _vscode.ExtensionMode.Production;
}
var _os = require('os');
var _os2 = _interopRequireDefault(_os);
function getUserDataPath() {
const storageDir = _path2.default.dirname(getCtx().globalStorageUri.fsPath);
return _path2.default.dirname(storageDir);
}
function getDotVSCodePath() {
return _path2.default.join(_os2.default.homedir(), isInsider ? '.vscode-insiders' : '.vscode');
}
function getActiveWorkspaceFolder() {
let activeWorkspace;
const editor = _vscode.window.activeTextEditor;
if (editor) {
activeWorkspace = _vscode.workspace.getWorkspaceFolder(editor.document.uri);
} else {
if (_vscode.workspace.workspaceFolders && _vscode.workspace.workspaceFolders.length > 0) {
activeWorkspace = _vscode.workspace.workspaceFolders[0];
}
}
return activeWorkspace;
}
function getActiveWorkspaceFolderUri() {
var _a;
return (_a = getActiveWorkspaceFolder()) == null ? void 0 : _a.uri;
}
function getActiveWorkspaceFolderPath() {
var _a;
return (_a = getActiveWorkspaceFolder()) == null ? void 0 : _a.uri.fsPath;
}
function getAllWorkspaceFolders() {
const folders = [];
if (_vscode.workspace.workspaceFolders) {
folders.push(..._vscode.workspace.workspaceFolders.map(s => ({ ...s, current: false })));
}
if (folders.length === 0) {
return [];
}
const activePath = getActiveWorkspaceFolderPath();
const current = folders.find(s => s.uri.fsPath === activePath);
if (current) {
current.active = true;
}
return folders;
}
function initExtension(ctx) {
setExtensionContext(ctx);
i18n.use(ctx.extensionPath);
}
var src_default = { init: initExtension };
exports.Configuration = Configuration;
exports.I18n = I18n;
exports.default = src_default;
exports.getActiveWorkspaceFolder = getActiveWorkspaceFolder;
exports.getActiveWorkspaceFolderPath = getActiveWorkspaceFolderPath;
exports.getActiveWorkspaceFolderUri = getActiveWorkspaceFolderUri;
exports.getAllWorkspaceFolders = getAllWorkspaceFolders;
exports.getCtx = getCtx;
exports.getDotVSCodePath = getDotVSCodePath;
exports.getExtensionContext = getExtensionContext;
exports.getUserDataPath = getUserDataPath;
exports.i18n = i18n;
exports.initExtension = initExtension;
exports.isInsider = isInsider;
exports.isUnderDevelopment = isUnderDevelopment;
exports.isUnderProduction = isUnderProduction;
exports.loadI18n = loadI18n;
exports.setExtensionContext = setExtensionContext;