@forge/lint
6.0.3-next.206.1.0-next.21
out/lint/lint.js~
out/lint/lint.jsModified+51−8
Index: package/out/lint/lint.js
===================================================================
--- package/out/lint/lint.js
+++ package/out/lint/lint.js
@@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.litelint = exports.lint = exports.parseSourceFile = exports.problemCount = exports.reportLintResults = void 0;
+exports.litelint = exports.lint = exports.getClientSideLintersOnly = exports.parseSourceFile = exports.problemCount = exports.reportLintResults = void 0;
const tslib_1 = require("tslib");
const cli_shared_1 = require("@forge/cli-shared");
const fs_1 = tslib_1.__importDefault(require("fs"));
const path_1 = tslib_1.__importDefault(require("path"));
@@ -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,9 +92,14 @@
filepath
};
};
exports.parseSourceFile = parseSourceFile;
-const lint = async (filesToLint, manifest, environment, logger, statsigService, parseFunction = exports.parseSourceFile, linters = [
+const getServerSideLintersOnly = async (manifest, environment, logger, graphqlClient, options) => [await server_side_linter_1.ServerSideLinter.instance(environment, manifest, graphqlClient, logger, options)];
+const getDefaultLinters = async (manifest, environment, logger, statsigService, graphqlClient, options) => [
+ ...(await (0, exports.getClientSideLintersOnly)(manifest, environment, logger, statsigService)),
+ ...(await getServerSideLintersOnly(manifest, environment, logger, graphqlClient, options))
+];
+const getClientSideLintersOnly = async (manifest, environment, logger, statsigService) => [
new permission_linter_1.PermissionLinter(environment, manifest, logger),
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),
@@ -99,9 +113,37 @@
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)
-]) => {
+];
+exports.getClientSideLintersOnly = getClientSideLintersOnly;
+const lint = async (filesToLint, manifest, environment, logger, statsigService, config) => {
+ let linters;
+ if (config.linters) {
+ linters = config.linters;
+ }
+ else {
+ switch (config.linter.mode) {
+ case 'client-side':
+ linters = await (0, exports.getClientSideLintersOnly)(manifest, environment, logger, statsigService);
+ break;
+ case 'server-side':
+ linters = await getServerSideLintersOnly(manifest, environment, logger, config.linter.graphqlClient, {
+ approveRules: config.approveRules,
+ buildTag: config.buildTag,
+ majorVersion: config.majorVersion
+ });
+ break;
+ case 'both':
+ linters = await getDefaultLinters(manifest, environment, logger, statsigService, config.linter.graphqlClient, {
+ approveRules: config.approveRules,
+ buildTag: config.buildTag,
+ majorVersion: config.majorVersion
+ });
+ break;
+ }
+ }
+ const parseFunction = config.parseFunction || exports.parseSourceFile;
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 +167,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) {