1 line
6.0 KiB
JavaScript
1 line
6.0 KiB
JavaScript
|
|
import{isNewerVersion}from"../../common/utils/helpers.mjs";import{PACKAGE_AVAILABILITY_CODES}from"../../common/constants.mjs";import{World,System,Module,PACKAGE_TYPE_MAPPING}from"./_module.mjs";import PreviewCompatibility from"./preview-compatibility.mjs";import{ReleaseData}from"../../common/config.mjs";import ProgressEmitter from"../components/progress-emitter.mjs";export async function getPackages({type:e="system"}={}){const t=PACKAGE_TYPE_MAPPING[e];if(!t)throw new Error(`Invalid package type ${e} requested`);const{packages:r,owned:a}=await t.getRepositoryPackages();return{packages:Array.from(r.values()).map((e=>e.vend())),owned:a}}export async function getPackageFromRemoteManifest({type:e="module",manifest:t=""}={}){const r=PACKAGE_TYPE_MAPPING[e];return await r.fromRemoteManifest(t)}export async function checkPackage({type:e,id:t,manifest:r,forceSidegrade:a=!1,strict:o=!0}={}){const s=PACKAGE_TYPE_MAPPING[e];if(!s)throw new Error(`Invalid package type ${e} requested`);const n=s.get(t,{strict:!1});if(!r){if(!n.manifest)throw new Error(`The ${e} ${t} has no manifest URL provided`);r=n.manifest}const i=await s.check(r,n,{strict:o}),c=i.remote;let p;if(t||=c.id,(n||a)&&(p=await s.fromRepository(t),a&&p&&c.sidegrade(c,p)),n&&p&&(!c||isNewerVersion(p.version,c.version))&&(i.trackChange=n.suggestTrackChange(p),i.trackChange&&i.error&&404===i.errorCode&&delete i.error,i.trackChange))return i;if(!c)return i;if(c&&"module"===e){i.systemCompatibility={};for(const{id:e,compatibility:t}of c.relationships?.systems??[]){const r=System.get(e,{strict:!1});r&&(i.systemCompatibility[e]={id:e,title:r.title,compatible:c.constructor.testDependencyCompatibility(t,r)&&!r.unavailable})}}if(i.isUpgrade||i.isDowngrade)return i;if(n){n.sidegrade(c,p)&&(i.hasSidegraded=!0)}return i}export async function installPackage({type:e,id:t,manifest:r}){const a=PACKAGE_TYPE_MAPPING[e];if(!a)throw new Error(`Invalid package type ${e} requested`);if(!r)throw new Error("A manifest URL must be provided");const o=await checkPackage({type:e,id:t,manifest:r,forceSidegrade:!0}),s=o.remote;if(!s){let t=[`Unable to load valid ${e} manifest data from "${r}"`,o.error].filterJoin("\n");throw new Error(t)}if(t=s.id,o.isDowngrade)throw new Error(`You are currently using a more recent version of ${e} ${s.title} and may not downgrade to an older version`);const n=s.availability,i=PACKAGE_AVAILABILITY_CODES;if(n===i.REQUIRES_CORE_DOWNGRADE)throw new Error(`${e} ${t} version ${s.version} requires an older version of the Foundry Virtual Tabletop software: ${s.compatibility.maximum} or older`);if([i.REQUIRES_CORE_UPGRADE_STABLE,i.REQUIRES_CORE_UPGRADE_UNSTABLE].includes(n))throw new Error(`${e} ${t} version ${s.version} requires a more modern version of the Foundry Virtual Tabletop software: ${s.compatibility.minimum} or newer`);let c,p=s.download;if(s.protected){if(c=await a.getProtectedDownloadURL({type:e,id:t,version:s.version}),"error"===c.status)throw new Error(c.message);p=c.download}if(!p)throw new Error(`The ${s.title} ${e} does not provide a download URL that can be installed`);const l={};return new Promise((async(o,s)=>{let n;const{ACTIONS:i,STEPS:E}=CONST.SETUP_PACKAGE_PROGRESS,m=new ProgressEmitter(i.INSTALL_PKG,null,1,{type:e,id:r,title:t}),d={[E.DOWNLOAD]:"Downloading package",[E.INSTALL]:"Installing package"};try{const e=await a.install(t,r,p,c,{onFetched:()=>o(l),onProgress:(e,t,r)=>{e!==n&&(m.nextStep(e,r,{message:`SETUP.PackageProgress${e.titleCase()}`}),n=e),m.emit(t,{log:d[e]})},onError:(e,t)=>{if(e===E.DOWNLOAD)return s(t);m.error(t)}});if(!e)return m.error(new Error("PACKAGE.InstallFailed"),{context:{packageWarnings:{[t]:packages.warnings.toJSON()[t]}}});m.complete({context:{pkg:e.vend()}})}catch(e){m.error(e),s(e)}}))}export async function resetPackages(){return Module.resetPackages(),System.resetPackages(),World.resetPackages(),{message:"Reset package cache for all package types"}}export async function uninstallPackage({type:e,id:t}){const r=PACKAGE_TYPE_MAPPING[e];if(!r)throw new Error(`Invalid package type ${e} requested`);const a=r.uninstall(t);re
|