@forge/lint

6.0.3-next.206.1.0-next.21
out/lint/linters/server-side-linter/archiver.js
+out/lint/linters/server-side-linter/archiver.jsNew file
+45
Index: package/out/lint/linters/server-side-linter/archiver.js
===================================================================
--- package/out/lint/linters/server-side-linter/archiver.js
+++ package/out/lint/linters/server-side-linter/archiver.js
@@ -0,0 +1,45 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ZipArchiver = void 0;
+const tslib_1 = require("tslib");
+const node_fs_1 = require("node:fs");
+const tmp_1 = tslib_1.__importDefault(require("tmp"));
+class ZipArchiver {
+    archive;
+    tempFile = tmp_1.default.fileSync({ postfix: '.zip' });
+    resolves = [];
+    rejects = [];
+    constructor(archive) {
+        this.archive = archive;
+        const output = (0, node_fs_1.createWriteStream)(this.tempFile.name).on('close', this.onClose);
+        this.archive.pipe(output);
+        this.archive.on('warning', this.onArchiveError);
+        this.archive.on('error', this.onArchiveError);
+    }
+    static async create() {
+        const { ZipArchive } = await Promise.resolve().then(() => tslib_1.__importStar(require('archiver')));
+        return new ZipArchiver(new ZipArchive());
+    }
+    addFile(fileName, contents) {
+        this.archive.append(contents, { name: fileName });
+    }
+    finalise() {
+        return new Promise((resolve, reject) => {
+            this.resolves.push(resolve);
+            this.rejects.push(reject);
+            return this.archive.finalize();
+        });
+    }
+    onArchiveError = (err) => {
+        const error = new Error(err.message);
+        for (const reject of this.rejects) {
+            reject(error);
+        }
+    };
+    onClose = () => {
+        for (const resolve of this.resolves) {
+            resolve(this.tempFile.name);
+        }
+    };
+}
+exports.ZipArchiver = ZipArchiver;