outers
Version:
outers - a all in one package for your day to day use
124 lines • 8.89 kB
JavaScript
"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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var _repositoryCloner_Provider, _repositoryCloner_UserName, _repositoryCloner_Directory, _repositoryCloner_AutoDelete;
Object.defineProperty(exports, "__esModule", { value: true });
// Import Package for executeCommand
const exec_command_1 = __importDefault(require("../command/exec.command")); // import package from outer
const CheckFolderExistence_1 = __importDefault(require("./functions/CheckFolderExistence")); // import package from outer
// Import Cloner Functions
const Github_function_1 = __importDefault(require("./functions/Github.function")); // To Clone Github Repos
const Gitlab_function_1 = __importDefault(require("./functions/Gitlab.function")); // To Clone Gitlab Repos
const BitBucket_function_1 = __importDefault(require("./functions/BitBucket.function")); // To Clone BitBucket Repos
// Main Class Definitions
class repositoryCloner {
/**
* Constructs a new RepositoryCloner instance.
* @param {string} Provider - The name of the provider to use for the repository.
* @param {string} [UserName] - The username for the repository.
* @param {boolean} [AutoDelete=false] - Whether to delete the old repository after cloning (default is false).
* @param {string} [DirectoryName] - The directory to clone the repository (optional).
*/
constructor(Provider, UserName, AutoDelete = false, DirectoryName) {
// Properties
_repositoryCloner_Provider.set(this, void 0); // Name of the provider to use for the repository
_repositoryCloner_UserName.set(this, void 0); // Username for the repository
_repositoryCloner_Directory.set(this, void 0); // Directory to clone the repository (private)
_repositoryCloner_AutoDelete.set(this, void 0); // Delete the old repository after cloning (private)
__classPrivateFieldSet(this, _repositoryCloner_Provider, Provider.toUpperCase(), "f");
__classPrivateFieldSet(this, _repositoryCloner_UserName, UserName, "f");
__classPrivateFieldSet(this, _repositoryCloner_Directory, DirectoryName, "f");
__classPrivateFieldSet(this, _repositoryCloner_AutoDelete, AutoDelete, "f");
}
// Methods
/**
* Clone a repository from a specified provider to a directory.
* @param {string} [RepositoryName] - The name of the repository to clone.
* @param {string} [Branch] - Branch name to clone (Default main)
* @returns {Promise<bool | undefined>} - A Promise that resolves to true if the download finishes successfully, false if it fails, or undefined if an error occurs.
*/
Clone(RepositoryName, Branch = "main") {
return __awaiter(this, void 0, void 0, function* () {
// Check if Repository Name is provided
if (!RepositoryName) {
throw new Error("Repository Name is not provided");
}
// Check if Provider is provided
if (!__classPrivateFieldGet(this, _repositoryCloner_Provider, "f")) {
throw new Error("Provider is not provided");
}
// Check if Username is provided
if (!__classPrivateFieldGet(this, _repositoryCloner_UserName, "f")) {
throw new Error("Username is not provided");
}
// Set Directory Name to Repository Name if not provided
if (!__classPrivateFieldGet(this, _repositoryCloner_Directory, "f")) {
__classPrivateFieldSet(this, _repositoryCloner_Directory, RepositoryName, "f");
}
// Check if directory exists and if auto-delete is enabled
const FolderStatus = yield (0, CheckFolderExistence_1.default)(__classPrivateFieldGet(this, _repositoryCloner_Directory, "f"), __classPrivateFieldGet(this, _repositoryCloner_AutoDelete, "f"));
// If auto-delete is enabled and directory already exists, throw an error
if (__classPrivateFieldGet(this, _repositoryCloner_AutoDelete, "f") === true &&
FolderStatus.message === "Directory Not Deleted") {
throw new Error("Directory already exists & cannot be deleted Automatically");
}
// Clone the Repository from the specified provider to the directory
if (__classPrivateFieldGet(this, _repositoryCloner_Provider, "f").toUpperCase() === "GITHUB") {
// Execute git clone command for GitHub repository & Return It
return yield (0, Github_function_1.default)(__classPrivateFieldGet(this, _repositoryCloner_UserName, "f"), RepositoryName, __classPrivateFieldGet(this, _repositoryCloner_Directory, "f"), Branch);
}
// Clone the Repository from BitBucket to directory
if (__classPrivateFieldGet(this, _repositoryCloner_Provider, "f").toUpperCase() === "BITBUCKET") {
// Execute git clone command for BitBucket repository
return yield (0, BitBucket_function_1.default)(__classPrivateFieldGet(this, _repositoryCloner_UserName, "f"), RepositoryName, __classPrivateFieldGet(this, _repositoryCloner_Directory, "f"), Branch);
}
// Clone the Repository from GitLab to directory
if (__classPrivateFieldGet(this, _repositoryCloner_Provider, "f").toUpperCase() === "GITLAB") {
// Execute git clone command for GitLab repository & Return It
return yield (0, Gitlab_function_1.default)(__classPrivateFieldGet(this, _repositoryCloner_UserName, "f"), RepositoryName, __classPrivateFieldGet(this, _repositoryCloner_Directory, "f"), Branch); // Clone Gitlab Repo
}
});
}
/**
* Clone a repository from the specified URL using git clone command.
* @param {string} [RepositoryURL] - The URL of the repository to clone.
* @param {string} [Branch] - Branch name to clone (Default main)
* @returns {Promise<bool | undefined>} - A Promise that resolves to true if the download finishes successfully, false if it fails, or undefined if an error occurs.
*/
static Clone(RepositoryURL, Branch = "main") {
return __awaiter(this, void 0, void 0, function* () {
// Execute the git clone command to clone the repository specified by RepositoryURL
const GitStatus = yield (0, exec_command_1.default)(`git clone -b ${Branch} ${RepositoryURL}.git`);
// Check if any error occurred during the cloning process
if (GitStatus.error && GitStatus.error.code === 128) {
return false; // Return false indicating that the download failed
}
// If no error occurred during cloning, return true indicating that the download finished successfully
return true;
});
}
}
_repositoryCloner_Provider = new WeakMap(), _repositoryCloner_UserName = new WeakMap(), _repositoryCloner_Directory = new WeakMap(), _repositoryCloner_AutoDelete = new WeakMap();
exports.default = repositoryCloner;
//# sourceMappingURL=Cloner.js.map