@shockpkg/core
Version:
shockpkg core
463 lines (462 loc) • 11.4 kB
TypeScript
import { Dispatcher } from './dispatcher.ts';
import { Package } from './package.ts';
import { Packages } from './packages.ts';
import { IFetch } from './types.ts';
export type PackageLike = Package | string;
export interface IPackageReceipt {
/**
* Package name.
*/
name: string;
/**
* File name.
*/
file: string;
/**
* File size.
*/
size: number;
/**
* SHA256 hash of the file contents.
*/
sha256: string;
/**
* Source, URL for root or file path for children.
*/
source: string;
}
export interface IPackageInstallBefore {
/**
* Package instance.
*/
package: Package;
}
export interface IPackageInstallAfter {
/**
* Package instance.
*/
package: Package;
}
export interface IPackageInstallCurrent {
/**
* Package instance.
*/
package: Package;
}
export interface IPackageDownloadBefore {
/**
* Package instance.
*/
package: Package;
}
export interface IPackageDownloadAfter {
/**
* Package instance.
*/
package: Package;
}
export interface IPackageDownloadProgress {
/**
* Package instance.
*/
package: Package;
/**
* Progress total.
*/
total: number;
/**
* Progress amount.
*/
amount: number;
}
export interface IPackageCleanupBefore {
/**
* Package name.
*/
package: string;
}
export interface IPackageCleanupAfter {
/**
* Package name.
*/
package: string;
/**
* Package removed.
*/
removed: boolean;
}
export interface IPackageInstalled {
/**
* Package installed.
*/
package: Package;
/**
* List of packages used in install, empty if already installed.
*/
install: Package[];
}
export interface IPackageRemovedObsolete {
/**
* Package removed.
*/
package: string;
/**
* Removed or already removed.
*/
removed: boolean;
}
/**
* Package manager.
*/
export declare class Manager {
/**
* Root path.
*/
readonly path: string;
/**
* The default headers for HTTP requests.
*/
headers: {
[header: string]: string;
};
/**
* A fetch-like interface requiring only a sebset of features.
*/
fetch: IFetch | null;
/**
* Package install before events.
*/
readonly eventPackageInstallBefore: Dispatcher<IPackageInstallBefore>;
/**
* Package install after events.
*/
readonly eventPackageInstallAfter: Dispatcher<IPackageInstallAfter>;
/**
* Package install current events.
*/
readonly eventPackageInstallCurrent: Dispatcher<IPackageInstallCurrent>;
/**
* Package download before events.
*/
readonly eventPackageDownloadBefore: Dispatcher<IPackageDownloadBefore>;
/**
* Package download after events.
*/
readonly eventPackageDownloadAfter: Dispatcher<IPackageDownloadAfter>;
/**
* Package download progress events.
*/
readonly eventPackageDownloadProgress: Dispatcher<IPackageDownloadProgress>;
/**
* Package cleanup before events.
*/
readonly eventPackageCleanupBefore: Dispatcher<IPackageCleanupBefore>;
/**
* Package cleanup after events.
*/
readonly eventPackageCleanupAfter: Dispatcher<IPackageCleanupAfter>;
/**
* Packages instance.
*/
protected readonly _packages: Packages;
/**
* Manager constructor.
*
* @param path The path, defaults to environment variable or relative.
*/
constructor(path?: string | null);
/**
* Packages URL.
*
* @returns The URL.
*/
get packagesUrl(): string;
/**
* Packages file.
*
* @returns The file.
*/
get packagesFile(): string;
/**
* Package file.
*
* @returns The path.
*/
get packageFile(): string;
/**
* Meta directory.
*
* @returns The directory.
*/
get metaDir(): string;
/**
* Packages loaded.
*
* @returns Is loaded.
*/
get loaded(): boolean;
/**
* Assert instance all loaded, including the packages list.
* Implies all active assertions.
*/
assertLoaded(): void;
/**
* Ensure load if exists.
*/
ensureLoad(): Promise<void>;
/**
* Ensure loaded.
*/
ensureLoaded(): Promise<void>;
/**
* Load packages if exist.
*/
load(): Promise<void>;
/**
* Iterate over the packages.
*
* @yields Package object.
*/
packages(): AsyncGenerator<Package, void, unknown>;
/**
* Get package by the unique name.
*
* @param name Package name.
* @returns The package or null.
*/
packageByName(name: string): Promise<Package | null>;
/**
* Get package by the sha256 hash.
*
* @param sha256 Package sha256.
* @returns The package or null.
*/
packageBySha256(sha256: string): Promise<Package | null>;
/**
* Get package by the sha1 hash.
*
* @param sha1 Package sha1.
* @returns The package or null.
*/
packageBySha1(sha1: string): Promise<Package | null>;
/**
* Get package by the md5 hash.
*
* @param md5 Package md5.
* @returns The package or null.
*/
packageByMd5(md5: string): Promise<Package | null>;
/**
* Get package by the unique value.
*
* @param unique Package unique.
* @returns The package or null.
*/
packageByUnique(unique: string): Promise<Package | null>;
/**
* Read package install receipt.
*
* @param pkg The package.
* @returns Install receipt.
*/
receipt(pkg: PackageLike): Promise<IPackageReceipt>;
/**
* Get package install file.
*
* @param pkg The package.
* @returns Path to install file.
*/
file(pkg: PackageLike): Promise<string>;
/**
* Verify package install file, using size and hash.
*
* @param pkg The package.
*/
packageInstallVerify(pkg: PackageLike): Promise<void>;
/**
* Update the package manager installed data.
* Updates the packages list.
*
* @returns Update report.
*/
update(): Promise<{
updated: import("./packages.ts").IPackageUpdated[];
added: import("./packages.ts").IPackageUpdated[];
removed: import("./packages.ts").IPackageUpdated[];
}>;
/**
* Check if a package is installed.
*
* @param pkg The package.
* @returns True if already installed, else false.
*/
isInstalled(pkg: PackageLike): Promise<boolean>;
/**
* Check if a package is installed and up-to-date.
*
* @param pkg The package.
* @returns True if already up-to-date, else false.
*/
isCurrent(pkg: PackageLike): Promise<boolean>;
/**
* List all installed packages.
*
* @returns A list of installed package objects.
*/
installed(): Promise<Package[]>;
/**
* List all outdated packages.
*
* @returns The list of outdated package objects.
*/
outdated(): Promise<Package[]>;
/**
* Upgrade any outdated packages.
*
* @returns List of packages upgraded.
*/
upgrade(): Promise<IPackageInstalled[]>;
/**
* Install package.
* Returns the list of packages processed to install.
* Returns empty array if current version is already installed.
*
* @param pkg The package.
* @returns List of packages processed to complete the install.
*/
install(pkg: PackageLike): Promise<Package[]>;
/**
* Remove package.
*
* @param pkg The package.
* @returns True if removed, false if nothing to remove.
*/
remove(pkg: PackageLike): Promise<boolean>;
/**
* Check if package name is obsolete.
*
* @param pkg The package.
* @returns True if package obslete, else false.
*/
isObsolete(pkg: string): Promise<boolean>;
/**
* List obsolete package names.
*
* @returns A list of obsolete package names.
*/
obsolete(): Promise<string[]>;
/**
* Cleanup all obsolete and outdated packages.
*
* @returns Lists of removed packages.
*/
cleanup(): Promise<IPackageRemovedObsolete[]>;
/**
* Join path on the base path.
*
* @param parts Path parts.
* @returns Joined path.
*/
pathTo(...parts: string[]): string;
/**
* Join path on the meta path.
*
* @param parts Path parts.
* @returns Joined path.
*/
pathToMeta(...parts: string[]): string;
/**
* Join path on package base path.
*
* @param pkg The package.
* @param parts Path parts.
* @returns Joined path.
*/
pathToPackage(pkg: PackageLike, ...parts: string[]): Promise<string>;
/**
* Join path on package meta path.
*
* @param pkg The package.
* @param parts Path parts.
* @returns Joined path.
*/
pathToPackageMeta(pkg: PackageLike, ...parts: string[]): Promise<string>;
/**
* Get package object by object, name, or hash.
* Throw error if package is unknown.
*
* @param pkg The package.
* @returns Package object.
*/
protected _asPackage(pkg: PackageLike): Promise<Package>;
/**
* Get package name by object, name, or hash.
* If package object is passed, uses name from the object.
* If string is passed and unknown, returns that same string.
*
* @param pkg The package.
* @returns Package object.
*/
protected _asName(pkg: PackageLike): Promise<string>;
/**
* Write package installed receipt.
*
* @param pkg The package.
*/
protected _packageMetaReceiptWrite(pkg: PackageLike): Promise<void>;
/**
* Create package installed receipt object from a package.
*
* @param pkg The package.
* @returns Receipt object.
*/
protected _packageMetaReceiptFromPackage(pkg: PackageLike): Promise<IPackageReceipt>;
/**
* Ensure package directory exists.
*
* @param pkg The package.
*/
protected _packageDirsEnsure(pkg: PackageLike): Promise<void>;
/**
* Ensure fetch-like function is set.
*
* @returns The fetch-like function.
*/
protected _ensureFetch(): IFetch;
/**
* Get fetch error messsage.
*
* @param error Error object.
* @returns Error message.
*/
protected _fetchErrorMessage(error: Error): string;
/**
* List directories under package manger control.
*
* @returns The recognized package directories.
*/
protected _packageDirectories(): Promise<string[]>;
/**
* Request the packages file.
*
* @returns File contents as string.
*/
protected _requestPackages(): Promise<string>;
/**
* Ensure base directories exists.
*/
protected _ensureDirs(): Promise<void>;
/**
* Create the main path.
*
* @param path The path, defaults to environment variable or relative.
* @returns Main path.
*/
protected _createPath(path: string | null): string;
/**
* Create the Packages instance.
*
* @returns Packages instance.
*/
protected _createPackages(): Packages;
}