@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;