@forge/lint

6.0.2-next.96.0.2-next.3-experimental-0949616
out/lint/lint.js
~out/lint/lint.jsModified
+22−7
Index: package/out/lint/lint.js
===================================================================
--- package/out/lint/lint.js
+++ package/out/lint/lint.js
@@ -22,24 +22,29 @@
 const llm_module_linter_1 = require("./linters/llm-module-linter/llm-module-linter");
 const deprecated_api_module_linter_1 = require("./linters/deprecated-api-module-linter/deprecated-api-module-linter");
 const app_managed_permissions_sdk_linter_1 = require("./linters/app-managed-permissions-sdk-linter/app-managed-permissions-sdk-linter");
 const function_timeout_linter_1 = require("./linters/function-timeout-linter/function-timeout-linter");
+const server_side_linter_1 = require("./linters/server-side-linter/server-side-linter");
 const reportLintResults = (logger, lintResults, showSummary = true) => {
-    let numErrors = 0, numWarnings = 0;
+    let numErrors = 0, numWarnings = 0, numApprovals = 0;
     let noProblemsFound = true;
     if (lintResults.length) {
         lintResults.forEach((lintResult) => {
             if (lintResult.size()) {
                 noProblemsFound = false;
                 numErrors += lintResult.errors.length;
                 numWarnings += lintResult.warnings.length;
+                numApprovals += lintResult.approvals.length;
                 logger.info(cli_shared_1.Text.lint.filename(path_1.default.resolve(lintResult.file)));
                 lintResult.errors.forEach(({ line, column, message, reference }) => {
                     logger.info(cli_shared_1.Text.lint.error(line, column, message, reference));
                 });
                 lintResult.warnings.forEach(({ line, column, message, reference }) => {
                     logger.info(cli_shared_1.Text.lint.warning(line, column, message, reference));
                 });
+                lintResult.approvals.forEach(({ line, column, message, reference }) => {
+                    logger.info(cli_shared_1.Text.lint.approval(line, column, message, reference));
+                });
             }
         });
     }
     if (noProblemsFound) {
@@ -50,30 +55,34 @@
         const resultsWithFixers = lintResults.filter((result) => result.hasFixer());
         const numFixableErrors = resultsWithFixers.reduce((count, result) => count + result.errors.length, 0);
         const numFixableWarnings = resultsWithFixers.reduce((count, result) => count + result.warnings.length, 0);
         if (showSummary) {
-            logger.info(cli_shared_1.Text.lint.summary(numErrors, numWarnings, numFixableErrors, numFixableWarnings));
+            logger.info(cli_shared_1.Text.lint.summary(numErrors, numWarnings, numApprovals, numFixableErrors, numFixableWarnings));
             if (numFixableErrors + numFixableWarnings > 0) {
                 logger.info(cli_shared_1.Text.lint.fixSummary(numErrors, numFixableErrors, numFixableWarnings));
             }
             else if (numErrors + numWarnings === 1) {
                 logger.info(cli_shared_1.Text.lint.noFixableProblem);
             }
+            else if (numApprovals > 0) {
+                logger.info(cli_shared_1.Text.lint.noFixableProblem);
+            }
             else {
                 logger.info(cli_shared_1.Text.lint.noFixableProblems);
             }
         }
-        if (numErrors) {
+        if (numErrors || numApprovals) {
             process.exitCode = 1;
         }
     }
 };
 exports.reportLintResults = reportLintResults;
 const problemCount = (lintResults) => {
     return lintResults.reduce((prev, curr) => ({
         errors: prev.errors + curr.errors.length,
-        warnings: prev.warnings + curr.warnings.length
-    }), { errors: 0, warnings: 0 });
+        warnings: prev.warnings + curr.warnings.length,
+        approvals: prev.approvals + curr.approvals.length
+    }), { errors: 0, warnings: 0, approvals: 0 });
 };
 exports.problemCount = problemCount;
 const parseSourceFile = async (filepath, parser, readFilePromise = (0, util_1.promisify)(fs_1.default.readFile)) => {
     const code = await readFilePromise(filepath, { encoding: 'utf-8' });
@@ -83,10 +92,11 @@
         filepath
     };
 };
 exports.parseSourceFile = parseSourceFile;
-const lint = async (filesToLint, manifest, environment, logger, statsigService, parseFunction = exports.parseSourceFile, linters = [
+const getDefaultLinters = async (manifest, environment, logger, statsigService, graphqlClient, approveRules) => [
     new permission_linter_1.PermissionLinter(environment, manifest, logger),
+    await server_side_linter_1.ServerSideLinter.instance(environment, manifest, graphqlClient, logger, approveRules),
     new permissions_manifest_linter_1.PermissionsManifestLinter(logger, statsigService),
     new agent_product_context_permissions_manifest_linter_1.AgentProductContextPermissionsManifestLinter(logger, statsigService),
     new deprecated_csp_permissions_manifest_linter_1.DeprecatedCspPermissionsManifestLinter(logger, statsigService),
     new full_manifest_linter_1.FullManifestLinter(logger, statsigService),
@@ -99,9 +109,13 @@
     new deprecated_api_module_linter_1.DeprecatedApiModuleLinter(environment, manifest, logger),
     new deprecated_egress_permissions_manifest_linter_1.DeprecatedEgressPermissionsManifestLinter(logger, statsigService),
     new app_managed_permissions_sdk_linter_1.AppManagedPermissionsSdkLinter(manifest, logger),
     new function_timeout_linter_1.FunctionTimeoutLinter(manifest, logger)
-]) => {
+];
+const lint = async (filesToLint, manifest, environment, logger, statsigService, graphqlClient, approveRules, parseFunction = exports.parseSourceFile, lintersOverride = []) => {
+    const linters = lintersOverride.length > 0
+        ? lintersOverride
+        : await getDefaultLinters(manifest, environment, logger, statsigService, graphqlClient, approveRules);
     const { include, exclude } = await (0, cli_shared_1.listTSConfigIncludeExclude)(new cli_shared_1.FileSystemReader());
     const tsInclude = new Set(include);
     const tsExclude = new Set(exclude);
     try {
@@ -125,8 +139,9 @@
         return results.map((result) => {
             const comparator = (a, b) => a.line === b.line ? a.column - b.column : a.line - b.line;
             result.errors = result.errors.sort(comparator);
             result.warnings = result.warnings.sort(comparator);
+            result.approvals = result.approvals.sort(comparator);
             return result;
         });
     }
     catch (e) {