codess
Version:
vscode代码片段管理器,通过 本地包(本地某个文件夹) 或官网的 远程包(代码片段集合) 生成本地项目的 vscode 代码片段配置。
138 lines (137 loc) • 7.57 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 });
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));
});
}