diff --git a/src/distribution.ts b/src/distribution.ts index faa1e32..5b6b6fe 100644 --- a/src/distribution.ts +++ b/src/distribution.ts @@ -133,16 +133,19 @@ ${json.slice(0, -2)} : undefined; } - public updateExtensions(): void { // we cannot handle enable/disable at the moment, see - if(!files.isDirectory(this.Extensions) || !files.isFile(this.extensions)) return; - - const json: string = fs.readFileSync(this.extensions, "utf-8"); - - const extensions: [{ + public updateExtensions(json: string): void { // we cannot handle enable/disable at the moment, see + const extensions: { identifier: string, version: string, enabled: boolean - }] = isValidJson(json) ? JSON.parse(json) : []; + }[] | undefined = isValidJson(json) ? JSON.parse(json) : undefined; + + if(!Array.isArray(extensions) || !extensions.every(e => isNotNull(e) && typeof e.identifier === "string" && e.identifier.trim() !== "")) + return logger.warn("Skipped updating extensions: extensions.json is malformed", true); + + fs.writeFileSync(this.extensions, json, {encoding: "utf-8"}); + + if(!files.isDirectory(this.Extensions)) return; const installed: string[] = fs.readdirSync(this.Extensions!, {withFileTypes: true}) .filter(f => f.isDirectory()) diff --git a/src/sync/git.ts b/src/sync/git.ts index 8d45ee7..3455f69 100644 --- a/src/sync/git.ts +++ b/src/sync/git.ts @@ -102,11 +102,9 @@ export const pull: (repo: string, branch?: string, skipNotify?: boolean) => Prom /* extensions */ { const extensions: string = path.join(temp, "extensions.json"); - if(files.isFile(extensions)){ - fs.copyFileSync(extensions, dist.extensions); - - dist.updateExtensions(); - }else + if(files.isFile(extensions)) + dist.updateExtensions(fs.readFileSync(extensions, {encoding: "utf-8"})); + else logger.warn("Extensions not found"); } diff --git a/src/sync/zip.ts b/src/sync/zip.ts index 2404639..6998b45 100644 --- a/src/sync/zip.ts +++ b/src/sync/zip.ts @@ -39,11 +39,9 @@ export const inport: (fsPath: string) => void = (fsPath: string) => { /* extensions */ { const extensions: AdmZip.IZipEntry | null = zip.getEntry("extensions.json"); - if(extensions && !extensions.isDirectory){ - zip.extractEntryTo("extensions.json", dist.User, undefined, true); - - dist.updateExtensions(); - }else + if(extensions && !extensions.isDirectory) + dist.updateExtensions(extensions.getData().toString("utf-8")); + else logger.warn("Extensions not found"); }