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