UNPKG

codess

Version:

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

138 lines (137 loc) 7.57 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.build = build; const chalk_1 = __importDefault(require("chalk")); const config_1 = require("../config/config"); const package_1 = require("../package"); const saveSnippetsConfig_1 = require("../saveSnippetsConfig"); const fs_1 = require("../utils/fs"); const parseLocalPackage_1 = require("../parseLocalPackage"); const snippet_1 = require("../snippet"); const snippetsAPI_1 = require("../http/snippetsAPI"); const apiSnippets_1 = require("../http/apiSnippets"); const getRepository_1 = require("../http/getRepository"); function build(list_1) { return __awaiter(this, arguments, void 0, function* (list, force = false, install = false) { var _a; let config = (0, config_1.getConfig)(); config.dependent = config.dependent || []; config.installRecord = config.installRecord || {}; let buildItems = (list.length > 0 ? config.dependent.filter((_) => list.findIndex((__) => (0, package_1.comparePackageStr)(_.package, __)) != -1) : config.dependent) .map((_) => { let info = (0, package_1.parsePackageNameStr)(_.package); if (!info) { return; } return Object.assign(Object.assign({}, _), { info }); }) .filter(Boolean); for (let { info, prefix } of buildItems.filter((_) => _.info.type == 'file')) { let packageDirPath = info.op.file.path; if ((_a = (0, fs_1.statSync)(packageDirPath)) === null || _a === void 0 ? void 0 : _a.isDirectory()) { yield (0, parseLocalPackage_1.parseLocalPackage)(packageDirPath, prefix) .then((snippets) => { (0, saveSnippetsConfig_1.saveSnippetsConfig)(JSON.stringify((0, snippet_1.toSnippetConfig)(snippets), undefined, 4), info.package, 'file'); console.log(packageDirPath, chalk_1.default.blue('Built')); }) .catch((e) => { console.log(packageDirPath, chalk_1.default.red('There is an installation error: ')); console.log(e); }); } else { console.log(chalk_1.default.red(`Directory ${packageDirPath} cannot be found.`)); } } yield snippetsAPI_1.SnippetsAPI.getList(buildItems .filter((_) => _.info.type == 'web') .map((_) => { let on = config.installRecord[_.info.op.web.name]; return Object.assign({ name: _.info.op.web.name, version: _.info.op.web.version }, (force ? {} : { onVersion: on === null || on === void 0 ? void 0 : on.version, iterationNumber: on === null || on === void 0 ? void 0 : on.iterationNumber, prefix: _.prefix || '', onPrefix: on === null || on === void 0 ? void 0 : on.prefix, })); })) .then((list) => __awaiter(this, void 0, void 0, function* () { for (let _ of list) { let onBuildItem = buildItems.find((__) => { return __.info.type == 'web' && __.info.op.web.name == _.name; }); let dependentItem = config.dependent.find((_) => (0, package_1.comparePackageStr)(_.package, onBuildItem.package)); if (install && _.type != 'null') { dependentItem.prefix = _.prefix || ''; onBuildItem.prefix = dependentItem.prefix; } if (!_.type) { config.installRecord[_.name] = { home: _.home, description: _.description, version: _.version, repository: _.repository || undefined, iterationNumber: _.repository ? undefined : _.iterationNumber, prefix: onBuildItem.prefix || '', }; let snippets = (0, apiSnippets_1.parseApiSnippets)(_.snippets || []); if (_.repository) { let repConfig = (0, package_1.parsePackageNameStr)(_.repository); if (!repConfig || repConfig.type != 'github') { console.log(chalk_1.default.red(`${_.name}: repository "${_.repository}" is unrecognized`)); } else { snippets.push(...(yield (0, getRepository_1.getRepoSnippets)(repConfig.op.repository, repConfig.type).catch((e) => { console.log(_.name, chalk_1.default.red(`"${_.repository}" download error`)); console.log(e); return []; }))); } } (0, saveSnippetsConfig_1.saveSnippetsConfig)(JSON.stringify((0, snippet_1.toSnippetConfig)(snippets, onBuildItem.prefix || ''), undefined, 4), onBuildItem.package, 'web'); console.log(`${_.name}@${_.version}`, chalk_1.default.blue('Built')); } else if (_.type == 'null') { console.log(_.name, chalk_1.default.red('cannot find')); } else if (_.type == 'latest') { console.log(`${_.name}@${_.version}`, chalk_1.default.blue('is the latest')); } } })) .catch((e) => { console.log(chalk_1.default.red('Error downloading package:')); console.log(e); }); for (let { info, prefix } of buildItems.filter((_) => _.info.type == 'github')) { yield (0, getRepository_1.getRepoSnippets)(info.op.repository, info.type) .then((snippets) => { (0, saveSnippetsConfig_1.saveSnippetsConfig)(JSON.stringify((0, snippet_1.toSnippetConfig)(snippets, prefix || ''), undefined, 4), info.package, 'github'); console.log(info.package, chalk_1.default.blue('Built')); }) .catch((e) => { let op = info.op.repository; console.log(chalk_1.default.red(`"${`https://github.com/${op.owner}/${op.repo}/tree/${op.ref}${op.path}`}" download error`)); console.log(e); }); } (0, config_1.setConfig)(config); (0, saveSnippetsConfig_1.saveDefSnippets)(); (0, saveSnippetsConfig_1.clearSnippets)(config.dependent.map((_) => (0, package_1.parsePackageNameStr)(_.package)).filter(Boolean)); }); }