@forge/lint

6.0.3-next.206.1.0-next.21
out/lint/linters/server-side-linter/server-side-linter.js
+out/lint/linters/server-side-linter/server-side-linter.jsNew file
+69
Index: package/out/lint/linters/server-side-linter/server-side-linter.js
===================================================================
--- package/out/lint/linters/server-side-linter/server-side-linter.js
+++ package/out/lint/linters/server-side-linter/server-side-linter.js
@@ -0,0 +1,69 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ServerSideLinter = void 0;
+const manifest_1 = require("@forge/manifest");
+const linter_interface_1 = require("../../linter-interface");
+const abstract_linter_1 = require("../../abstract-linter");
+const cli_shared_1 = require("@forge/cli-shared");
+const graphql_client_1 = require("./graphql-client");
+const archiver_1 = require("./archiver");
+class ServerSideLinter extends abstract_linter_1.AbstractLinter {
+    environment;
+    manifest;
+    client;
+    fileReader;
+    archiver;
+    fileUploader;
+    options;
+    manifestUploadUrl;
+    constructor(environment, manifest, client, fileReader, archiver, fileUploader, logger, options) {
+        super(logger);
+        this.environment = environment;
+        this.manifest = manifest;
+        this.client = client;
+        this.fileReader = fileReader;
+        this.archiver = archiver;
+        this.fileUploader = fileUploader;
+        this.options = options;
+    }
+    static async instance(environment, manifest, graphqlClient, logger, options) {
+        const fileSystemReader = new cli_shared_1.FileSystemReader();
+        return new ServerSideLinter(environment, manifest, new graphql_client_1.GraphqlClient(graphqlClient), fileSystemReader, await archiver_1.ZipArchiver.create(), new cli_shared_1.HttpFileUploader(fileSystemReader), logger, options);
+    }
+    mapServerSideResponse(results) {
+        const manifestLintResults = new linter_interface_1.LintResult(manifest_1.MANIFEST_FILE);
+        manifestLintResults.batchAdd(...(this.getResultsLinter(results).map(({ rule, reason, category }) => {
+            return {
+                class: category.toLowerCase(),
+                message: reason,
+                reference: rule,
+                line: 0,
+                column: 0,
+                metadata: {}
+            };
+        }) ?? []).sort((a, b) => a.line - b.line));
+        return manifestLintResults;
+    }
+    async batchExecuteImpl() {
+        if (!this.manifestUploadUrl) {
+            throw new Error('Bootstrap failed');
+        }
+        const results = await this.client.getAppPreDeploymentCheck(this.manifest.app.id, this.environment, this.manifestUploadUrl, this.options.approveRules ?? [], this.options.buildTag, this.options.majorVersion);
+        return [this.mapServerSideResponse(results)];
+    }
+    async bootstrap() {
+        const manifestContent = this.fileReader.readBinaryFile(cli_shared_1.manifestFileName);
+        if (!manifestContent) {
+            throw new Error('No Manifest content found');
+        }
+        this.archiver.addFile(cli_shared_1.manifestFileName, manifestContent);
+        const archivePath = await this.archiver.finalise();
+        const uploadUrl = await this.client.createAppManifestUploadUrl(this.manifest.app.id, this.environment);
+        await this.fileUploader.uploadFromPath(uploadUrl, archivePath);
+        this.manifestUploadUrl = uploadUrl;
+    }
+    getResultsLinter(results) {
+        return results?.filter((outcome) => outcome.value) || [];
+    }
+}
+exports.ServerSideLinter = ServerSideLinter;