UNPKG

codess

Version:

vscode代码片段管理器,通过 本地包(本地某个文件夹) 或官网的 远程包(代码片段集合) 生成本地项目的 vscode 代码片段配置。

159 lines (158 loc) 7.67 kB
"use strict"; 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 }); exports.toLocal = toLocal; const chalk_1 = __importDefault(require("chalk")); const fs_1 = require("fs"); const inquirer_1 = __importDefault(require("inquirer")); const path_1 = __importDefault(require("path")); const snippetsAPI_1 = require("../http/snippetsAPI"); const package_1 = require("../package"); const getAbsolute_1 = require("../utils/getAbsolute"); const reservedName_1 = require("../utils/reservedName"); const install_1 = require("./install"); const fs_2 = require("../utils/fs"); function toLocal(packageStr_1) { return __awaiter(this, arguments, void 0, function* (packageStr, packagePath = '') { let packageConfig = (0, package_1.parsePackageNameStr)(packageStr); if (!packageConfig || packageConfig.type != 'web') { console.log(chalk_1.default.yellow(`"${packageStr}" is not recognized`)); return; } let mk = (dir) => { var _a; try { (0, fs_1.mkdirSync)((0, getAbsolute_1.getAbsolute)(dir), { recursive: true, }); } catch (_b) { } if ((_a = (0, fs_2.statSync)((0, getAbsolute_1.getAbsolute)(dir))) === null || _a === void 0 ? void 0 : _a.isDirectory()) { return true; } else { console.log(chalk_1.default.red(`Directory ${(0, getAbsolute_1.getAbsolute)(dir)} creation failed,Please re-enter`)); return false; } }; let vdir = (dir_1, ...args_1) => __awaiter(this, [dir_1, ...args_1], void 0, function* (dir, defaultDir = '') { var _a; if (dir) { if ((_a = (0, fs_2.statSync)((0, getAbsolute_1.getAbsolute)(dir))) === null || _a === void 0 ? void 0 : _a.isDirectory()) { let s = yield inquirer_1.default .prompt({ type: 'confirm', name: 'confirm', message: `The directory ${(0, getAbsolute_1.getAbsolute)(dir)} already exists,Overlay or not: `, default: false, }) .then(({ confirm }) => confirm) .catch(() => false); if (s) { (0, fs_2.rmSync)((0, getAbsolute_1.getAbsolute)(dir)); if (mk(dir)) { return dir; } } } else { if (mk(dir)) { return dir; } } } dir = yield inquirer_1.default .prompt({ type: 'input', name: 'input', message: 'Please enter a local directory path:', default: defaultDir, }) .then(({ input }) => input) .catch(() => ''); return yield vdir(dir, defaultDir); }); return snippetsAPI_1.SnippetsAPI.getList([ { name: packageConfig.op.web.name, version: packageConfig.op.web.version, }, ]) .then((res) => __awaiter(this, void 0, void 0, function* () { let packageItem = res.find((_) => _.name == packageConfig.op.web.name); if (!packageItem) { throw `Cannot find ${packageConfig.op.web.name}`; } if (!packageItem.type) { packagePath = yield vdir(packagePath, packageItem.name); let snippets = packageItem.snippets || []; let hasFile = (item) => { if (item.children && item.children.length > 0) { return item.children.some((_) => { var _a; return (_.type == 'snippet' || ((_a = _.children) === null || _a === void 0 ? void 0 : _a.some((__) => __.type == 'snippet' || hasFile(__)))); }); } return false; }; let f = (...args_1) => __awaiter(this, [...args_1], void 0, function* (items = [], dirPath) { for (let item of items) { let name = item.name; if ((0, reservedName_1.reservedName)(name)) { name = (0, reservedName_1.resetReservedName)(name); } switch (item.type) { case 'group': if (hasFile(item)) { try { (0, fs_1.mkdirSync)(path_1.default.join(dirPath, name), { recursive: true, }); } catch (e) { } f(item.children, path_1.default.join(dirPath, name)); } break; case 'snippet': yield new Promise((res) => { let _path = path_1.default.join(dirPath, `${name}.md`); (0, fs_1.writeFile)(_path, item.body || '', (error) => { if (error) { console.log(chalk_1.default.red(`File ${_path} creation failed`)); } res(); }); }); break; } } }); yield f(snippets, (0, getAbsolute_1.getAbsolute)(packagePath)); console.log(chalk_1.default.blue(`install ${packageItem.name}@${packageItem.version}`)); yield (0, install_1.install)([(0, getAbsolute_1.getAbsolute)(packagePath)], packageItem.prefix || packageItem.name); if (packageItem.repository) { console.log(chalk_1.default.yellow(`Note that this package references repository ${packageItem.repository}`)); } } else if (packageItem.type == 'null') { console.log(chalk_1.default.red(`Can't find ${packageItem.name}`)); } })) .catch((e) => { console.log(chalk_1.default.red('Error downloading package:')); console.log(e); }); }); }