@forge/lint
5.14.1-next.75.15.0-next.8
out/lint/linters/endpoint-linter/verifiers/invoke-endpoint-verifier.jsout/lint/linters/endpoint-linter/verifiers/invoke-endpoint-verifier.js+48
Index: package/out/lint/linters/endpoint-linter/verifiers/invoke-endpoint-verifier.js
===================================================================
--- package/out/lint/linters/endpoint-linter/verifiers/invoke-endpoint-verifier.js
+++ package/out/lint/linters/endpoint-linter/verifiers/invoke-endpoint-verifier.js
@@ -0,0 +1,48 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.InvokeEndpointVerifier = void 0;
+const typescript_estree_1 = require("@typescript-eslint/typescript-estree");
+const linter_interface_1 = require("../../../linter-interface");
+const text_1 = require("../../../text");
+const verifier_interface_1 = require("../../verifier-interface");
+const invoke_endpoint_interface_1 = require("../invoke-endpoint-interface");
+class InvokeEndpointVerifier extends verifier_interface_1.BaseLintIssueVerifier {
+ getLintClass() {
+ return linter_interface_1.LintClass.Error;
+ }
+ async process(input) {
+ const validCalls = input.invokeEndpointCalls.filter((call) => this.isValidCall(call, input.imports));
+ const missingEndpoints = validCalls
+ .filter((call) => !this.isRemoteKeyValid(call))
+ .map((call) => ({ call, message: text_1.messages.verifiers.invokeRemoteKey }));
+ const missingComputeOperation = validCalls
+ .filter((call) => this.isRemoteKeyValid(call) && !this.hasComputeOperation(call))
+ .map((call) => ({ call, message: text_1.messages.verifiers.invokeRemoteCompute }));
+ return [...missingEndpoints, ...missingComputeOperation].map(({ call, message }) => ({
+ class: this.getLintClass(),
+ column: call.column,
+ line: call.line,
+ message: message.message(call.endpointKey),
+ reference: message.reference
+ }));
+ }
+ isValidCall(call, imports) {
+ if (call.type === invoke_endpoint_interface_1.InvokeEndpointTypes.DIRECT_CALL) {
+ return imports.some((imp) => imp.type === typescript_estree_1.AST_NODE_TYPES.ImportSpecifier && call.calleeName === imp.alias);
+ }
+ return imports.some((imp) => (imp.type === typescript_estree_1.AST_NODE_TYPES.ImportDefaultSpecifier || imp.type === typescript_estree_1.AST_NODE_TYPES.ImportNamespaceSpecifier) &&
+ call.objectName === imp.alias);
+ }
+ getRemoteForCall(call) {
+ return this.manifest.remotes?.find((remote) => remote.key === call.endpointKey);
+ }
+ isRemoteKeyValid(call) {
+ const remote = this.getRemoteForCall(call);
+ return typeof remote !== 'undefined';
+ }
+ hasComputeOperation(call) {
+ const endpoint = this.getRemoteForCall(call);
+ return endpoint?.operations?.includes('compute') ?? false;
+ }
+}
+exports.InvokeEndpointVerifier = InvokeEndpointVerifier;