UNPKG

appcenter-cli

Version:

Command line tool for Visual Studio App Center

71 lines (70 loc) 3.09 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PathResolver = void 0; const promisfied_glob_1 = require("../../../util/misc/promisfied-glob"); const path = require("path"); const fs = require("fs"); const _ = require("lodash"); class PathResolver { constructor(workspace) { this.workspace = workspace; } resolve(pattern) { return __awaiter(this, void 0, void 0, function* () { if (typeof pattern === "string") { return this.resolveSinglePattern(pattern); } const allFiles = (yield Promise.all(pattern.map((p) => this.resolveSinglePattern(p)))); return _.uniq(_.union.apply(_, allFiles)).sort(); }); } resolveSinglePattern(pattern) { return __awaiter(this, void 0, void 0, function* () { let workspacePattern = path.join(this.workspace, pattern); if (pattern.indexOf("*") === -1) { try { const stats = fs.statSync(workspacePattern); if (stats.isDirectory()) { workspacePattern = `${workspacePattern}${path.sep}**`; } } catch (err) { throw new Error(`Cannot access file or directory "${workspacePattern}"`); } } const matches = yield promisfied_glob_1.glob(workspacePattern); const result = []; for (let i = 0; i < matches.length; i++) { const match = matches[i]; const validatedRelativePath = yield this.validateAndMakeRelative(match); if (validatedRelativePath) { result.push(validatedRelativePath); } } return result; }); } validateAndMakeRelative(match) { return __awaiter(this, void 0, void 0, function* () { const relativePath = path.relative(this.workspace, match); const stats = yield fs.statSync(match); if (stats.isDirectory()) { return null; } if (relativePath.indexOf("..") !== -1) { throw new Error("Pattern cannot contain files that are outside of workspace directory"); } return relativePath; }); } } exports.PathResolver = PathResolver;