code-theme-converter
Version:
Convert any vscode theme with ease!
69 lines (68 loc) • 4.05 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const chalk_1 = __importDefault(require("chalk"));
const rimraf_1 = __importDefault(require("rimraf"));
const fetchRepo_1 = require("../fetchRepo");
const tmTheme_1 = require("./tmTheme");
const sublime_1 = require("../util/sublime");
const vscode_1 = require("../util/vscode");
const uiTheme_1 = require("./uiTheme");
const colorScheme_1 = require("./colorScheme");
function convertToSublime(vscodeThemeRepoUrl, options) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
try {
console.log(chalk_1.default.cyan('Fetching repo'));
const { repo } = yield fetchRepo_1.fetchRepo(vscodeThemeRepoUrl);
const themeDir = path_1.default.join(repo, (_a = options.directory) !== null && _a !== void 0 ? _a : '');
const themes = yield fs_extra_1.default.readdir(themeDir);
const themesCount = themes.length;
console.log(chalk_1.default.cyan(`Converting ${themesCount.toString()} theme${themesCount > 1 ? 's' : ''}`));
const promises = [];
themes.forEach((themeName) => {
vscode_1.readCodeTheme(themeDir, themeName)
.then(vscodeTheme => {
console.log(chalk_1.default.yellow(`Converting ${vscodeTheme.name}`));
const sublimeThemeDir = path_1.default.join(options.save != null && options.save
? sublime_1.getSublimeTextPackageDir()
: process.cwd(), vscodeTheme.name);
if (fs_extra_1.default.existsSync(sublimeThemeDir)) {
rimraf_1.default.sync(sublimeThemeDir);
}
fs_extra_1.default.mkdir(sublimeThemeDir)
.then(() => {
var _a, _b;
promises.push(fs_extra_1.default
.writeFile(path_1.default.join(sublimeThemeDir, vscodeTheme.name +
(((_a = options.asTmTheme) !== null && _a !== void 0 ? _a : false) ? '.tmTheme'
: '.sublime-color-scheme')), ((_b = options.asTmTheme) !== null && _b !== void 0 ? _b : false) ? tmTheme_1.toTmTheme(vscodeTheme)
: JSON.stringify(colorScheme_1.toSublimeColorScheme(vscodeTheme), undefined, 2))
.catch(error => console.log(chalk_1.default.red(error))));
promises.push(fs_extra_1.default.writeFile(path_1.default.join(sublimeThemeDir, vscodeTheme.name + '.sublime-theme'), JSON.stringify(uiTheme_1.createAdaptiveTheme(vscodeTheme), undefined, 2)));
})
.catch(error => console.log(chalk_1.default.red(error)));
})
.catch(error => console.log(chalk_1.default.red(error)));
});
return Promise.all(promises);
}
catch (error) {
console.log(chalk_1.default.red(error));
}
});
}
exports.convertToSublime = convertToSublime;