codess
Version:
vscode代码片段管理器,通过 本地包(本地某个文件夹) 或官网的 远程包(代码片段集合) 生成本地项目的 vscode 代码片段配置。
62 lines (61 loc) • 3.09 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.parseLocalPackage = parseLocalPackage;
const path_1 = __importDefault(require("path"));
const fs_1 = require("./utils/fs");
const snippet_1 = require("./snippet");
const scopeConfig_1 = require("./config/scopeConfig");
const reservedName_1 = require("./utils/reservedName");
const fileBlacklist = ['README.md', 'LICENSE'];
function parseLocalPackage(dirPath_1) {
return __awaiter(this, arguments, void 0, function* (dirPath, prefix = undefined) {
let f = (itemPath) => __awaiter(this, void 0, void 0, function* () {
let itemPathStat = yield (0, fs_1.fs_stat_p)(itemPath);
if (itemPathStat === null || itemPathStat === void 0 ? void 0 : itemPathStat.isDirectory()) {
return [
{
prefix: (0, reservedName_1.restoreresetReservedName)(path_1.default.basename(itemPath)),
type: 'group',
children: (yield Promise.all((yield (0, fs_1.fs_readdir_p)(itemPath)).map((_) => path_1.default.join(itemPath, _)).map((_) => f(_)))).reduce((a, b) => {
return [...a, ...b];
}, []),
},
];
}
else if (itemPathStat === null || itemPathStat === void 0 ? void 0 : itemPathStat.isFile()) {
let p = path_1.default.parse(itemPath);
if (p.ext && !(0, scopeConfig_1.getExts)().includes(p.ext)) {
return [];
}
if (fileBlacklist.includes(p.base)) {
return [];
}
return (0, snippet_1.parseSnippet)({
type: 'snippet',
prefix: (0, reservedName_1.restoreresetReservedName)(p.name.trim()),
}, (yield (0, fs_1.fs_readFile_p)(itemPath)).toString(), p.ext).snippets;
}
return [];
});
let rootItems = yield f(dirPath);
if (rootItems.length <= 0) {
throw `Unable to build package with ${dirPath}`;
}
rootItems.forEach((_) => {
_.prefix = prefix;
});
return rootItems;
});
}