UNPKG

@tomjs/vscode

Version:

Some utilities to simplify the development of VSCode Extensions

203 lines (202 loc) 6.31 kB
'use strict'; 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;