UNPKG

@shockpkg/core

Version:
1 lines 22.9 kB
{"version":3,"file":"packages.mjs","names":["access","mkdir","readFile","rename","rm","writeFile","dirname","Package","TEMP_EXT","Packages","_packagesList","_packages","Set","_packagesByName","Map","_packagesBySha256","_packagesBySha1","_packagesByMd5","_packagesByUnique","FORMAT","constructor","path","_path","loaded","update","data","map","pkg","packages","name","file","size","sha256","set","_setPackagesList","_parseData","updated","added","removed","obj","before","get","delete","push","assertLoaded","Error","exists","then","read","_castData","JSON","parse","write","out","prt","recursive","force","stringify","flag","readIfExists","err","code","entry","has","assertHas","byName","bySha256","bySha1","sha1","byMd5","md5","byUnique","unique","_createPackage","info","packagesList","_validateFormat","format","parsed","_parsePackages","_listPackages","_packagesMapName","_packagesMapSha256","_packagesMapSha1","_packagesMapMd5","_packagesMapUnique","Constructor","version","split","Number","parts","length","r","itter","shift","add","chilren","unshift","Array","isArray"],"sources":["../src/packages.ts"],"sourcesContent":["import {access, mkdir, readFile, rename, rm, writeFile} from 'node:fs/promises';\nimport {dirname} from 'node:path';\n\nimport {IPackagesListPackage, Package} from './package.ts';\nimport {TEMP_EXT} from './constants.ts';\n\nexport interface IPackageUpdated {\n\t/**\n\t * Package name.\n\t */\n\tname: string;\n\n\t/**\n\t * File name.\n\t */\n\tfile: string;\n\n\t/**\n\t * File size.\n\t */\n\tsize: number;\n\n\t/**\n\t * SHA256 hash of the file contents.\n\t */\n\tsha256: string;\n}\n\nexport interface IPackagesList {\n\t/**\n\t * Format version.\n\t */\n\tformat: string;\n\n\t/**\n\t * Package list.\n\t */\n\tpackages: IPackagesListPackage[];\n}\n\n/**\n * Packages object.\n */\nexport class Packages {\n\t/**\n\t * Packages data.\n\t */\n\tprotected _packagesList: IPackagesList | null = null;\n\n\t/**\n\t * Packages array.\n\t */\n\tprotected _packages = new Set<Package>();\n\n\t/**\n\t * Packages mapped by name.\n\t */\n\tprotected _packagesByName = new Map<string, Package>();\n\n\t/**\n\t * Packages mapped by sha256.\n\t */\n\tprotected _packagesBySha256 = new Map<string, Package>();\n\n\t/**\n\t * Packages mapped by sha1.\n\t */\n\tprotected _packagesBySha1 = new Map<string, Package>();\n\n\t/**\n\t * Packages mapped by md5.\n\t */\n\tprotected _packagesByMd5 = new Map<string, Package>();\n\n\t/**\n\t * Packages mapped by unique.\n\t */\n\tprotected _packagesByUnique = new Map<string, Package>();\n\n\t/**\n\t * The path to the packages file.\n\t */\n\tprotected readonly _path: string;\n\n\t/**\n\t * Format version.\n\t */\n\tpublic static readonly FORMAT: string = '1.2';\n\n\t/**\n\t * Packages constructor.\n\t *\n\t * @param path The path to the packages file.\n\t */\n\tconstructor(path: string) {\n\t\tthis._path = path;\n\t}\n\n\t/**\n\t * Get path of the packages file.\n\t *\n\t * @returns The path.\n\t */\n\tpublic get path() {\n\t\treturn this._path;\n\t}\n\n\t/**\n\t * Get if packages loaded.\n\t *\n\t * @returns Is loaded.\n\t */\n\tpublic get loaded() {\n\t\treturn !!this._packagesList;\n\t}\n\n\t/**\n\t * Update packages.\n\t *\n\t * @param data Encoded data.\n\t * @returns Update report.\n\t */\n\tpublic update(data: string) {\n\t\t// Map out current list if any.\n\t\tconst map = new Map<string, IPackageUpdated>();\n\t\tfor (const pkg of this.packages()) {\n\t\t\tconst {name, file, size, sha256} = pkg;\n\t\t\tmap.set(name, {\n\t\t\t\tname,\n\t\t\t\tfile,\n\t\t\t\tsize,\n\t\t\t\tsha256\n\t\t\t});\n\t\t}\n\n\t\t// Actually set the data.\n\t\tthis._setPackagesList(this._parseData(data));\n\n\t\t// List out the changes of significance.\n\t\tconst updated: IPackageUpdated[] = [];\n\t\tconst added: IPackageUpdated[] = [];\n\t\tconst removed: IPackageUpdated[] = [];\n\t\tfor (const pkg of this.packages()) {\n\t\t\tconst {name, file, size, sha256} = pkg;\n\t\t\tconst obj: IPackageUpdated = {\n\t\t\t\tname,\n\t\t\t\tfile,\n\t\t\t\tsize,\n\t\t\t\tsha256\n\t\t\t};\n\n\t\t\tconst before = map.get(name) || null;\n\t\t\tmap.delete(name);\n\n\t\t\tif (!before) {\n\t\t\t\tadded.push(obj);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tbefore.sha256 !== sha256 ||\n\t\t\t\tbefore.size !== size ||\n\t\t\t\tbefore.file !== file\n\t\t\t) {\n\t\t\t\tupdated.push(obj);\n\t\t\t}\n\t\t}\n\t\tfor (const [, obj] of map) {\n\t\t\tremoved.push(obj);\n\t\t}\n\n\t\treturn {\n\t\t\tupdated,\n\t\t\tadded,\n\t\t\tremoved\n\t\t};\n\t}\n\n\t/**\n\t * Assert loaded.\n\t */\n\tpublic assertLoaded() {\n\t\tif (!this.loaded) {\n\t\t\tthrow new Error('Packages list not loaded');\n\t\t}\n\t}\n\n\t/**\n\t * Check if the file path exists.\n\t *\n\t * @returns Does exist.\n\t */\n\tpublic async exists() {\n\t\treturn access(this.path).then(\n\t\t\t() => true,\n\t\t\t() => false\n\t\t);\n\t}\n\n\t/**\n\t * Read the file path.\n\t */\n\tpublic async read() {\n\t\tthis._setPackagesList(\n\t\t\tthis._castData(\n\t\t\t\tJSON.parse(await readFile(this.path, 'utf8')) as unknown\n\t\t\t)\n\t\t);\n\t}\n\n\t/**\n\t * Write packages to the file path.\n\t */\n\tpublic async write() {\n\t\tif (!this._packagesList) {\n\t\t\tthrow new Error('Cannot write unloaded list');\n\t\t}\n\t\tconst out = this.path;\n\t\tconst prt = `${out}${TEMP_EXT}`;\n\t\tawait mkdir(dirname(prt), {recursive: true});\n\t\tawait rm(prt, {force: true});\n\t\tawait writeFile(prt, JSON.stringify(this._packagesList, null, '\\t'), {\n\t\t\tflag: 'wx'\n\t\t});\n\t\tawait rename(prt, out);\n\t}\n\n\t/**\n\t * Read the file path if the file exists.\n\t *\n\t * @returns Did exist.\n\t */\n\tpublic async readIfExists() {\n\t\ttry {\n\t\t\tawait this.read();\n\t\t} catch (err) {\n\t\t\tif (err && (err as {code: string}).code === 'ENOENT') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthrow err;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Itterate over the packages.\n\t *\n\t * @yields Package object.\n\t */\n\tpublic *packages() {\n\t\tconst packages = this._packages;\n\t\tfor (const entry of packages) {\n\t\t\t// If the set changes, break loop.\n\t\t\tif (packages !== this._packages) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tyield entry;\n\t\t}\n\t}\n\n\t/**\n\t * Check if package is in this collection.\n\t *\n\t * @param pkg Package instance.\n\t * @returns If the package instance is present.\n\t */\n\tpublic has(pkg: Package) {\n\t\treturn this._packages.has(pkg);\n\t}\n\n\t/**\n\t * Assert the package is in this collection.\n\t *\n\t * @param pkg Package instance.\n\t */\n\tpublic assertHas(pkg: Package) {\n\t\tif (!this.has(pkg)) {\n\t\t\tthrow new Error('Package not in collection');\n\t\t}\n\t}\n\n\t/**\n\t * Get package by the unique name.\n\t *\n\t * @param name Package name.\n\t * @returns The package or null.\n\t */\n\tpublic byName(name: string) {\n\t\treturn this._packagesByName.get(name) || null;\n\t}\n\n\t/**\n\t * Get package by the sha256 hash.\n\t *\n\t * @param sha256 Package sha256.\n\t * @returns The package or null.\n\t */\n\tpublic bySha256(sha256: string) {\n\t\treturn this._packagesBySha256.get(sha256) || null;\n\t}\n\n\t/**\n\t * Get package by the sha1 hash.\n\t *\n\t * @param sha1 Package sha1.\n\t * @returns The package or null.\n\t */\n\tpublic bySha1(sha1: string) {\n\t\treturn this._packagesBySha1.get(sha1) || null;\n\t}\n\n\t/**\n\t * Get package by the md5 hash.\n\t *\n\t * @param md5 Package md5.\n\t * @returns The package or null.\n\t */\n\tpublic byMd5(md5: string) {\n\t\treturn this._packagesByMd5.get(md5) || null;\n\t}\n\n\t/**\n\t * Get package by the unique value.\n\t *\n\t * @param unique Package unique.\n\t * @returns The package or null.\n\t */\n\tpublic byUnique(unique: string) {\n\t\treturn this._packagesByUnique.get(unique) || null;\n\t}\n\n\t/**\n\t * Create a package instance.\n\t *\n\t * @param info Package info.\n\t * @returns Package instance.\n\t */\n\tprotected _createPackage(info: Readonly<IPackagesListPackage>) {\n\t\treturn new Package(info);\n\t}\n\n\t/**\n\t * Set the packages list.\n\t *\n\t * @param packagesList Parsed list.\n\t */\n\tprotected _setPackagesList(packagesList: Readonly<IPackagesList>) {\n\t\tthis._validateFormat(packagesList.format);\n\n\t\tconst parsed = this._parsePackages(packagesList.packages);\n\t\tconst packages = this._listPackages(parsed);\n\n\t\t// Map out the names and hashes.\n\t\tconst byName = this._packagesMapName(packages);\n\t\tconst bySha256 = this._packagesMapSha256(packages);\n\t\tconst bySha1 = this._packagesMapSha1(packages);\n\t\tconst byMd5 = this._packagesMapMd5(packages);\n\t\tconst byUnique = this._packagesMapUnique(packages);\n\n\t\t// If all parsed successfully, set properties.\n\t\tthis._packagesList = packagesList;\n\t\tthis._packages = packages;\n\t\tthis._packagesByName = byName;\n\t\tthis._packagesBySha256 = bySha256;\n\t\tthis._packagesBySha1 = bySha1;\n\t\tthis._packagesByMd5 = byMd5;\n\t\tthis._packagesByUnique = byUnique;\n\t}\n\n\t/**\n\t * Validate format version string.\n\t *\n\t * @param format The format version string.\n\t */\n\tprotected _validateFormat(format: string) {\n\t\tconst Constructor = this.constructor as typeof Packages;\n\t\tconst version = Constructor.FORMAT.split('.').map(Number);\n\t\tconst parts = format.split('.').map(Number);\n\n\t\tif (parts.length !== 2) {\n\t\t\tthrow new Error(`Invalid format version value: ${format}`);\n\t\t}\n\n\t\tif (parts[0] !== version[0]) {\n\t\t\tthrow new Error(`Invalid format version major: ${format}`);\n\t\t}\n\n\t\tif (parts[1] < version[1]) {\n\t\t\tthrow new Error(`Invalid format version minor: ${format}`);\n\t\t}\n\t}\n\n\t/**\n\t * Parse the packages list.\n\t *\n\t * @param packages Packages list.\n\t * @returns Parsed list.\n\t */\n\tprotected _parsePackages(\n\t\tpackages: readonly Readonly<IPackagesListPackage>[]\n\t) {\n\t\treturn packages.map(info => this._createPackage(info));\n\t}\n\n\t/**\n\t * List all packages deep.\n\t *\n\t * @param packages A list of packages.\n\t * @returns A set of all packages and their children.\n\t */\n\tprotected _listPackages(packages: readonly Package[]) {\n\t\tconst r = new Set<Package>();\n\t\tconst itter = [...packages];\n\n\t\tfor (;;) {\n\t\t\tconst entry = itter.shift();\n\t\t\tif (!entry) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tr.add(entry);\n\t\t\tconst chilren = entry.packages;\n\t\t\tif (chilren) {\n\t\t\t\titter.unshift(...chilren);\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\n\t/**\n\t * Map out package list by name.\n\t * Throws on any duplicates.\n\t *\n\t * @param packages Packages list.\n\t * @returns Map from package name to package.\n\t */\n\tprotected _packagesMapName(packages: Readonly<Set<Package>>) {\n\t\tconst r = new Map<string, Package>();\n\n\t\tfor (const entry of packages as Set<Package>) {\n\t\t\tconst {name} = entry;\n\t\t\tif (r.has(name)) {\n\t\t\t\tthrow new Error(`Duplicate package name: ${name}`);\n\t\t\t}\n\t\t\tr.set(name, entry);\n\t\t}\n\n\t\treturn r;\n\t}\n\n\t/**\n\t * Map out package list by sha256.\n\t * Throws on any duplicates.\n\t *\n\t * @param packages Packages list.\n\t * @returns Map from package sha256 to package.\n\t */\n\tprotected _packagesMapSha256(packages: Readonly<Set<Package>>) {\n\t\tconst r = new Map<string, Package>();\n\n\t\tfor (const entry of packages as Set<Package>) {\n\t\t\tconst {sha256} = entry;\n\t\t\tif (r.has(sha256)) {\n\t\t\t\tthrow new Error(`Duplicate package sha256: ${sha256}`);\n\t\t\t}\n\t\t\tr.set(sha256, entry);\n\t\t}\n\n\t\treturn r;\n\t}\n\n\t/**\n\t * Map out package list by sha1.\n\t * Throws on any duplicates.\n\t *\n\t * @param packages Packages list.\n\t * @returns Map from package sha256 to package.\n\t */\n\tprotected _packagesMapSha1(packages: Readonly<Set<Package>>) {\n\t\tconst r = new Map<string, Package>();\n\n\t\tfor (const entry of packages as Set<Package>) {\n\t\t\tconst {sha1} = entry;\n\t\t\tif (r.has(sha1)) {\n\t\t\t\tthrow new Error(`Duplicate package sha1: ${sha1}`);\n\t\t\t}\n\t\t\tr.set(sha1, entry);\n\t\t}\n\n\t\treturn r;\n\t}\n\n\t/**\n\t * Map out package list by md5.\n\t * Throws on any duplicates.\n\t *\n\t * @param packages Packages list.\n\t * @returns Map from package sha256 to package.\n\t */\n\tprotected _packagesMapMd5(packages: Readonly<Set<Package>>) {\n\t\tconst r = new Map<string, Package>();\n\n\t\tfor (const entry of packages as Set<Package>) {\n\t\t\tconst {md5} = entry;\n\t\t\tif (r.has(md5)) {\n\t\t\t\tthrow new Error(`Duplicate package md5: ${md5}`);\n\t\t\t}\n\t\t\tr.set(md5, entry);\n\t\t}\n\n\t\treturn r;\n\t}\n\n\t/**\n\t * Map out package list by unique.\n\t * Throws on any duplicates.\n\t *\n\t * @param packages Packages list.\n\t * @returns Map from package unique to package.\n\t */\n\tprotected _packagesMapUnique(packages: Readonly<Set<Package>>) {\n\t\tconst r = new Map<string, Package>();\n\n\t\tfor (const entry of packages as Set<Package>) {\n\t\t\tfor (const unique of [\n\t\t\t\tentry.name,\n\t\t\t\tentry.sha256,\n\t\t\t\tentry.sha1,\n\t\t\t\tentry.md5\n\t\t\t]) {\n\t\t\t\tif (r.has(unique)) {\n\t\t\t\t\tthrow new Error(`Duplicate package unique: ${unique}`);\n\t\t\t\t}\n\t\t\t\tr.set(unique, entry);\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n\n\t/**\n\t * Parse and cast the encoded data.\n\t *\n\t * @param data Encoded data.\n\t * @returns Parsed and cast data.\n\t */\n\tprotected _parseData(data: string) {\n\t\treturn this._castData(JSON.parse(data));\n\t}\n\n\t/**\n\t * Cast the parsed data.\n\t *\n\t * @param packages Parsed data.\n\t * @returns Cast data.\n\t */\n\tprotected _castData(packages: unknown) {\n\t\tif (\n\t\t\t!packages ||\n\t\t\ttypeof packages !== 'object' ||\n\t\t\ttypeof (packages as {format: unknown}).format !== 'string' ||\n\t\t\t!Array.isArray((packages as {packages: unknown}).packages)\n\t\t) {\n\t\t\tthrow new Error('Failed to validate packages');\n\t\t}\n\n\t\treturn packages as IPackagesList;\n\t}\n}\n"],"mappings":"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","ignoreList":[]}