From 484cbcd96058eeed382c597c606d371a79a95b4d Mon Sep 17 00:00:00 2001 From: Hans Ott Date: Sat, 1 Nov 2025 13:28:11 +0100 Subject: [PATCH] Use @typedef {Object} X MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When you write @typedef {Object} ScanResult, you’re telling both JSDoc and TypeScript’s parser that this typedef represents an object type, not just an abstract name. This is important because it makes tools like IDEs, linters, and TypeScript’s JSDoc inference more reliable. It avoids ambiguity, especially in cases where the typedef might later be confused with something like a primitive, union, or function type. The official TypeScript documentation and the JSDoc spec both show this form as the canonical one for object shapes. --- packages/safe-chain/src/api/aikido.js | 2 +- packages/safe-chain/src/environment/userInteraction.js | 2 +- .../safe-chain/src/packagemanager/currentPackageManager.js | 2 +- .../npm/dependencyScanner/commandArgumentScanner.js | 2 +- packages/safe-chain/src/scanning/audit/index.js | 4 ++-- packages/safe-chain/src/scanning/malwareDatabase.js | 2 +- packages/safe-chain/src/shell-integration/helpers.js | 2 +- packages/safe-chain/src/shell-integration/shellDetection.js | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/safe-chain/src/api/aikido.js b/packages/safe-chain/src/api/aikido.js index 7e786d1..901131c 100644 --- a/packages/safe-chain/src/api/aikido.js +++ b/packages/safe-chain/src/api/aikido.js @@ -4,7 +4,7 @@ const malwareDatabaseUrl = "https://malware-list.aikido.dev/malware_predictions.json"; /** - * @typedef MalwarePackage + * @typedef {Object} MalwarePackage * @property {string} package_name * @property {string} version * @property {string} reason diff --git a/packages/safe-chain/src/environment/userInteraction.js b/packages/safe-chain/src/environment/userInteraction.js index 43f5312..3f690fb 100644 --- a/packages/safe-chain/src/environment/userInteraction.js +++ b/packages/safe-chain/src/environment/userInteraction.js @@ -60,7 +60,7 @@ function writeExitWithoutInstallingMaliciousPackages() { } /** - * @typedef Spinner + * @typedef {Object} Spinner * @property {(message: string) => void} succeed * @property {(message: string) => void} fail * @property {() => void} stop diff --git a/packages/safe-chain/src/packagemanager/currentPackageManager.js b/packages/safe-chain/src/packagemanager/currentPackageManager.js index aaf8aae..ef7e9aa 100644 --- a/packages/safe-chain/src/packagemanager/currentPackageManager.js +++ b/packages/safe-chain/src/packagemanager/currentPackageManager.js @@ -18,7 +18,7 @@ const state = { }; /** - * @typedef PackageManager + * @typedef {Object} PackageManager * @property {(args: string[]) => Promise<{ status: number }>} runCommand * @property {(args: string[]) => boolean} isSupportedCommand * @property {(args: string[]) => Promise<{name: string, version: string, type: string}[]>} getDependencyUpdatesForCommand diff --git a/packages/safe-chain/src/packagemanager/npm/dependencyScanner/commandArgumentScanner.js b/packages/safe-chain/src/packagemanager/npm/dependencyScanner/commandArgumentScanner.js index 51746c4..f19449b 100644 --- a/packages/safe-chain/src/packagemanager/npm/dependencyScanner/commandArgumentScanner.js +++ b/packages/safe-chain/src/packagemanager/npm/dependencyScanner/commandArgumentScanner.js @@ -15,7 +15,7 @@ import { hasDryRunArg } from "../utils/npmCommands.js"; */ /** - * @typedef CommandArgumentScanner + * @typedef {Object} CommandArgumentScanner * @property {(args: string[]) => Promise} scan * @property {(args: string[]) => boolean} shouldScan */ diff --git a/packages/safe-chain/src/scanning/audit/index.js b/packages/safe-chain/src/scanning/audit/index.js index 8eea526..b6dfcc5 100644 --- a/packages/safe-chain/src/scanning/audit/index.js +++ b/packages/safe-chain/src/scanning/audit/index.js @@ -4,14 +4,14 @@ import { } from "../malwareDatabase.js"; /** - * @typedef PackageChange + * @typedef {Object} PackageChange * @property {string} name * @property {string} version * @property {string} type */ /** - * @typedef AuditResult + * @typedef {Object} AuditResult * @property {PackageChange[]} allowedChanges * @property {(PackageChange & {reason: string})[]} disallowedChanges * @property {boolean} isAllowed diff --git a/packages/safe-chain/src/scanning/malwareDatabase.js b/packages/safe-chain/src/scanning/malwareDatabase.js index 481ff7d..b54846e 100644 --- a/packages/safe-chain/src/scanning/malwareDatabase.js +++ b/packages/safe-chain/src/scanning/malwareDatabase.js @@ -9,7 +9,7 @@ import { import { ui } from "../environment/userInteraction.js"; /** - * @typedef MalwareDatabase + * @typedef {Object} MalwareDatabase * @property {function(string, string): string} getPackageStatus * @property {function(string, string): boolean} isMalware */ diff --git a/packages/safe-chain/src/shell-integration/helpers.js b/packages/safe-chain/src/shell-integration/helpers.js index 697f2cb..1732228 100644 --- a/packages/safe-chain/src/shell-integration/helpers.js +++ b/packages/safe-chain/src/shell-integration/helpers.js @@ -4,7 +4,7 @@ import fs from "fs"; import path from "path"; /** - * @typedef AikidoTool + * @typedef {Object} AikidoTool * @property {string} tool * @property {string} aikidoCommand */ diff --git a/packages/safe-chain/src/shell-integration/shellDetection.js b/packages/safe-chain/src/shell-integration/shellDetection.js index 701570a..9e0f110 100644 --- a/packages/safe-chain/src/shell-integration/shellDetection.js +++ b/packages/safe-chain/src/shell-integration/shellDetection.js @@ -6,7 +6,7 @@ import fish from "./supported-shells/fish.js"; import { ui } from "../environment/userInteraction.js"; /** - * @typedef Shell + * @typedef {Object} Shell * @property {string} name * @property {() => boolean} isInstalled * @property {(tools: import("./helpers.js").AikidoTool[]) => boolean} setup