Skip to main content

implement-command

Use when adding or updating Redis command support in ioredis, including command metadata checks, generator inputs under bin/, generated RedisCommander typings, return and argument overrides, functional command tests, optional tsd coverage, and validation.

소스 정보

저장소
redis/ioredis
최근 소스 활동
2026년 7월 1일 11:53
감지된 SKILL.md 언어
영어
스타
15,342
포크
1,263

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
implement-command
description
Use when adding or updating Redis command support in ioredis, including command metadata checks, generator inputs under bin/, generated RedisCommander typings, return and argument overrides, functional command tests, optional tsd coverage, and validation.
# Implement Command Use this skill when adding a missing Redis command, correcting an existing command signature, changing command return types, or adding coverage for command-specific Buffer, callback, pipeline, or transformer behavior. ## Command Support Map - `@ioredis/commands`: upstream command metadata consumed by the generator. - `bin/index.js`: generator entry point for `lib/utils/RedisCommander.ts`. - `bin/returnTypes.js`: command return type map. Most new commands need an entry here. - `bin/argumentTypes.js`: command-specific argument shape overrides when metadata or global mapping is insufficient. - `bin/typeMaps.js`: global Redis argument category to TypeScript type mapping. - `bin/overrides.js`: manual overloads for signatures the generator cannot express cleanly. - `bin/sortArguments.js`: argument reordering for commands whose generated order is wrong. - `lib/utils/RedisCommander.ts`: generated declarations. Regenerate it; do not hand-edit it. - `lib/Command.ts`: command argument and reply transformer registry. Touch only when transformer behavior is needed. - `test/functional/commands/<command>.ts`: runtime command coverage. - `test/functional/transformer.ts`: transformer runtime coverage. - `test/typing/commands.test-d.ts`: public command typing coverage. - `test/typing/transformers.test-d.ts`: transformer typing coverage. ## Workflow 1. Establish command scope. - Normalize command keys to lowercase, matching `bin/returnTypes.js`. - Resolve command aliases or subcommands before editing. - Confirm the command exists in `@ioredis/commands`. If it is missing there, stop and report that the metadata package must be updated before ioredis can generate typed command support. - Identify the minimum Redis server version needed and whether functional tests must be version-gated. 2. Inspect current support. - Search `lib/utils/RedisCommander.ts`, `bin/`, `test/functional/commands/`, and `test/typing/` for the command and related aliases. - Inspect nearby command families before choosing types, for example hash expiration commands, sorted-set commands, stream commands, or pub/sub commands. - Check existing argument and reply transformers before adding new ones. 3. Update generator inputs. - Prefer `bin/returnTypes.js` for return type corrections. - Use a string return type for simple fixed replies. - Use a function return type when replies depend on subcommands, options, or tokens. - Reuse `hasToken` and `matchSubcommand` in `bin/returnTypes.js` when they fit. - Use `bin/argumentTypes.js` only for command-specific argument overrides. - Use `bin/typeMaps.js` only for broad metadata category fixes that should affect multiple commands. - Use `bin/overrides.js` only when generated overloads cannot express the supported API cleanly. - Keep command names lowercase in generator maps unless the surrounding file uses another established convention. 4. Regenerate declarations. - In this repo, use `node bin/index.js` unless `package.json` later adds an explicit generation script. - Review the generated diff in `lib/utils/RedisCommander.ts`. - Check the normal method, callback overload, pipeline/transaction shape, and Buffer variant when the command returns strings, arrays, nullable bulk replies, or transformed objects. - If generation changes unrelated commands, inspect the generator input and do not accept surprising churn without an explanation. 5. Add focused runtime coverage. - Put command tests in `test/functional/commands/<lowercase-command>.ts`. - Use `import Redis from "../../../lib/Redis";` and `import { expect } from "chai";`. - Prefer `let redis: Redis`, `beforeEach(() => { redis = new Redis(); })`, and `afterEach(() => { redis.disconnect(); })`. - For version-gated command tests under `test/functional/commands/`, import `isRedisVersionLowerThan` from `../../helpers/util`, and use `before(async function () { ... this.skip(); })`; use function syntax when calling `this.skip()`. - Use unique keys such as `${command}_${caseName}_${Date.now()}`. - Test the ioredis command surface: accepted argument shapes, option ordering, callback behavior, Buffer variants, and reply shape. - Keep assertions focused on what ioredis sends and returns. Do not test Redis server internals beyond the smallest deterministic setup needed. - Assert exact replies when stable; otherwise assert primitive type, nullable behavior, array/object shape, or Buffer conversion. 6. Add typing coverage when useful. - Add cases to `test/typing/commands.test-d.ts` when the command has nontrivial overloads, return types, Buffer variants, callback typing, or option-dependent replies. - Cover `expectType<Promise<...>>(redis.command(...))`. - Add Buffer variant expectations when the command has one. - Add callback typing for nontrivial return types. - Use `expectError` only for meaningful invalid signatures. - Update `test/typing/transformers.test-d.ts` only when transformer APIs are affected. 7. Consider documentation. - Use the repo `docs-sync` skill when command support changes public signatures, return mapping, examples, or documented command behavior. - Usually command support is documented through generated declarations and typing tests; update README/docs only when existing prose or examples cover the affected command family or users need version/topology caveats. 8. Validate. - Run `node bin/index.js` after generator input changes. - Run the focused functional command test when Redis support is available, using the repo's Mocha pattern with `test/helpers/*.ts`. - Run `npm run build` when generated declarations, public TypeScript, or generator output changed. - If typing tests changed, run `npx tsd --files test/typing/commands.test-d.ts` after building. - Use the repo `code-change-verification` skill before handoff to choose any additional validation. - If Redis access is blocked by sandboxing, ask for permission to access the local Redis server rather than assuming it is unavailable. ## Completion Report Report: - Commands added or updated. - Metadata/generator inputs changed. - Generated files changed. - Functional tests added or updated. - Typing tests added or updated. - Documentation decision. - Validation commands run and results. - Skipped validation with the concrete reason, including Redis version or local environment limits.
GitHub에서 보기