Jest Skill
sickn33/agentic-awesome-skills
Generates Jest unit and integration tests in JavaScript or TypeScript.
A skill your agent uses when converting an existing JavaScript Lightning Web Component (.js, .html, .css) to TypeScript with full type annotations and a matching .d.ts file that exposes only the…
$ npx skills add forcedotcom/sf-skills --skill experience-lwc-typescript-migrate -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install forcedotcom/sf-skills experience-lwc-typescript-migrate --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/experience-lwc-typescript-migrate .claude/skills/experience-lwc-typescript-migrate && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "experience-lwc-typescript-migrate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-lwc-typescript-migrate into .claude/skills/experience-lwc-typescript-migrate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-lwc-typescript-migrate", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-lwc-typescript-migrateType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add forcedotcom/sf-skills --skill experience-lwc-typescript-migrate -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install forcedotcom/sf-skills experience-lwc-typescript-migrate --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/experience-lwc-typescript-migrate .agents/skills/experience-lwc-typescript-migrate && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "experience-lwc-typescript-migrate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-lwc-typescript-migrate into .agents/skills/experience-lwc-typescript-migrate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-lwc-typescript-migrate", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add forcedotcom/sf-skills --skill experience-lwc-typescript-migrate -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install forcedotcom/sf-skills experience-lwc-typescript-migrate --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/experience-lwc-typescript-migrate .cursor/skills/experience-lwc-typescript-migrate && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "experience-lwc-typescript-migrate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-lwc-typescript-migrate into .cursor/skills/experience-lwc-typescript-migrate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-lwc-typescript-migrate", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/forcedotcom/sf-skills.git --path skills/experience-lwc-typescript-migrate--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add forcedotcom/sf-skills --skill experience-lwc-typescript-migrate -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install forcedotcom/sf-skills experience-lwc-typescript-migrate --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/experience-lwc-typescript-migrate .gemini/skills/experience-lwc-typescript-migrate && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "experience-lwc-typescript-migrate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-lwc-typescript-migrate into .gemini/skills/experience-lwc-typescript-migrate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-lwc-typescript-migrate", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install forcedotcom/sf-skills experience-lwc-typescript-migrateInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add forcedotcom/sf-skills --skill experience-lwc-typescript-migrate -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/experience-lwc-typescript-migrate .github/skills/experience-lwc-typescript-migrate && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "experience-lwc-typescript-migrate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-lwc-typescript-migrate into .github/skills/experience-lwc-typescript-migrate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-lwc-typescript-migrate", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add forcedotcom/sf-skills --skill experience-lwc-typescript-migrate -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install forcedotcom/sf-skills experience-lwc-typescript-migrate --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/experience-lwc-typescript-migrate .opencode/skills/experience-lwc-typescript-migrate && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "experience-lwc-typescript-migrate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-lwc-typescript-migrate into .opencode/skills/experience-lwc-typescript-migrate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-lwc-typescript-migrate", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
experience-lwc-typescript-migrateA skill your agent uses when converting an existing JavaScript Lightning Web Component (.js, .html, .css) to TypeScript with full type annotations and a matching .d.ts file that exposes only the…
Experience Lwc Typescript Migrate is an agent skill from forcedotcom/sf-skills. Use when converting an existing JavaScript Lightning Web Component (.js, .html, .css) to TypeScript with full type annotations and a matching .d.ts file that exposes only the component's @api surface. TRIGGER when the user says "convert LWC to TypeScript", "migrate LWC to TS", "rename .js to .ts for this component", "add types to my LWC", "generate .d.ts for this LWC", "type-annotate @api properties", or "produce declare module 'c/componentName' definitions". DO NOT TRIGGER when the user is authoring a brand-new…
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts and assets (for example `assets/dts-template.ts`, `assets/type-patterns.ts` and `scripts/find-consumers.sh`).
It sits in Testing & QA, covering Unit testing. It works with TypeScript, JavaScript, Salesforce and Jest. The repository describes itself as: Salesforce's curated collection of agent skills for building applications. Optimized for Agentforce Vibes, compatible with all AI tools. The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e5164d9. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (TypeScript and Shell), which the agent can run.
Shell commands in SKILL.md call:
gittscFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
developer.salesforce.comtypescriptlang.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Experience Lwc Typescript Migrate loads about 2.1k tokens when it runs. Until then it costs about 179 tokens; SKILL.md has 902 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from forcedotcom/sf-skills at commit e5164d9, republished under its Apache-2.0 licence (© forcedotcom). 902 words, ~2,113 tokens.
.claude/skills/experience-lwc-typescript-migrate/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.<!-- adk-managed-skill -->
Convert a Lightning Web Component bundle from JavaScript to TypeScript. The
deliverable is a fully-typed .ts implementation plus a .d.ts file
that only exposes @api members (the public surface other LWCs consume).
.js to .ts..d.ts for an existing LWC so other components (or an
external TypeScript host) can import it safely..ts LWC that
hasn't been properly typed yet.git is available (the rename must preserve history via git mv).tsc step).Open every file in the bundle:
componentName/
├── componentName.js
├── componentName.html
├── componentName.css
└── (possibly) __tests__/, __utam__/, existing .d.tsUnderstand:
LightningElement? What is the class name?@api decorator?.js → .ts using git mvgit mv componentName/componentName.js componentName/componentName.tsRepeat for any helper .js files in the bundle (unless they're already
.ts). Never plain mv — that loses the history link TypeScript
reviewers rely on.
.tsApply types in this priority order so you stop as soon as the public contract is solid:
@api properties and methods first. Generate JSDoc if it's
missing, then translate JSDoc types to TS syntax (string, number,
boolean, Promise<T>). Validate each JSDoc claim against the code
before trusting it.interface or type aliases — not inline
shapes repeated everywhere.? only when the value is genuinely allowed
to be undefined. Do not sprinkle ? defensively.private for members that must never be touched by
consumers.MouseEvent for onclick (and other click-like handlers). click
is dispatched as a MouseEvent — including keyboard-activated
clicks — so typing it as PointerEvent would let handlers rely on
pointer-only fields (pointerType, pressure, etc.) that are
undefined in those cases.PointerEvent for onpointerdown / onpointerup / onpointermove
and other pointer* handlers where pointer-specific fields are
actually meaningful.CustomEvent<{ detail: ... }> for LWC custom events.Event is the last resort; document why when using it.Promise<T> — never bare T.any. If you genuinely can't type something, use unknown
and narrow with a type guard.Load [[assets/type-patterns.ts|assets/type-patterns.ts]] as an inline example covering property types, method types, and event handler types.
.d.tsCreate componentName.d.ts next to the .ts. It must:
@api members — no private state, no internal
methods, no lifecycle hooks unless they are themselves @api.@api JSDoc verbatim (including @type, @required,
@default, @param, @returns tags) directly above each declaration.c/componentName (or the org's
namespace if different).Template: load [[assets/dts-template.ts|assets/dts-template.ts]] as the
starting .d.ts shape.
If the component has no @api members, still produce the module
declaration with a comment explaining there's no public surface — don't
skip the file.
tsc --noEmit or the build's equivalent).
Resolve every error before calling it done; no @ts-ignore patches.sfdx-project.json's packageDirectories (or falls back
to <project-root>), rejects any entry that escapes the project root,
and performs the LWC-import search internally so the invocation is
fully deterministic:"<skill_dir>/scripts/find-consumers.sh" "<project-root>" "<componentName>" For each match, confirm the consumer's expected types still align with
the new .d.ts public surface.
componentName/
├── componentName.ts # Main TypeScript implementation
├── componentName.html # Template (unchanged)
├── componentName.css # Styles (unchanged)
└── componentName.d.ts # Type definitions (new)Before conversion:
@api member and its intended type.After conversion:
git mv was used so history is preserved..ts has a concrete type
(no implicit any).interface / type aliases, not
inline repeats.? is only on genuinely optional fields..d.ts exists, declares c/componentName, extends
LightningElement, includes only @api members.@api JSDoc is preserved verbatim in the .d.ts.tsc passes with zero errors; no @ts-ignore or any used as a
workaround.any to silence errors. Solve the actual type instead.
If the value is truly unknown, use unknown + a type guard..d.ts. The .d.ts is the
public contract. Internal lifecycle and helpers must not leak.@api members must appear in both the .ts and .d.ts.git mv. Makes review miserable and confuses blame.foo() with an async keyword
always returns a Promise. Declare it.onclick as PointerEvent. click is a MouseEvent
(keyboard-triggered clicks included), so PointerEvent fields like
pointerType are undefined for those events. Type onclick as
MouseEvent; reserve PointerEvent for onpointer* handlers. Use
MouseEvent | TouchEvent only when the code branches on TouchEvent
distinctly.© forcedotcom, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (scripts, assets) in skills/experience-lwc-typescript-migrate of forcedotcom/sf-skills.
Open the folder on GitHubat commit e5164d9
Experience Lwc Typescript Migrate next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Experience Lwc Typescript Migrate this skillforcedotcom/sf-skills | 1.1k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Jest Skillsickn33/agentic-awesome-skills | 47k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Vitest Skillsickn33/agentic-awesome-skills | 47k | 1 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Javascript Typescript Jestgithub/awesome-copilot | 40k | 1 repos | ~559 | Automated safety check: Pass | MIT | |
| Jest UnitPramodDutta/qaskills | 232 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Typescript Rulessoftspark/ai-toolkit | 179 | — | ~2.7k | Automated safety check: Notes | Apache-2.0 |
sickn33/agentic-awesome-skills
Generates Jest unit and integration tests in JavaScript or TypeScript.
sickn33/agentic-awesome-skills
Generates Vitest tests in JavaScript/TypeScript with Vite-native speed.
github/awesome-copilot
Best practices for writing JavaScript/TypeScript tests using Jest, including mocking strategies, test structure, and common patterns.
PramodDutta/qaskills
Unit testing skill using Jest for TypeScript and JavaScript, covering mocking, spies, snapshots, coverage, async testing, and custom matchers.
softspark/ai-toolkit
TypeScript/JavaScript coding rules: style, patterns, security, testing.
secondsky/claude-skills
Generate Jest unit tests for JavaScript/TypeScript with mocking, coverage.
forcedotcom/sf-skills
Declared architecture snapshot for one Agentforce agent: planner, topics, actions, flows, Apex, prompt templates, and NGA plugins.
forcedotcom/sf-skills
Data Cloud 360° view of a single Agentforce session. An agent skill from forcedotcom/sf-skills.
forcedotcom/sf-skills
Apply a Salesforce sandbox post-copy automation JSON config against a target org.
forcedotcom/sf-skills
Apply a Salesforce sandbox post-copy automation JSON config against a target org.
forcedotcom/sf-skills
Apply SLDS-compliant UI using the correct blueprints, styling hooks, utility classes, and icons.
forcedotcom/sf-skills
Lightning Web Components with PICKLES methodology and 165-point scoring.
Works with
Categories
A skill your agent uses when converting an existing JavaScript Lightning Web Component (.js, .html, .css) to TypeScript with full type annotations and a matching .d.ts file that exposes only the…. Experience Lwc Typescript Migrate is an agent skill from forcedotcom/sf-skills.ts file that exposes only the component's @api surface.
Experience Lwc Typescript Migrate fits situations like: converting an existing JavaScript Lightning Web Component (.js; .css) to TypeScript with full type annotations and a matching .d.ts file that exposes only the components @api surface; the user says convert LWC to TypeScript; migrate LWC to TS.
Run `npx skills add forcedotcom/sf-skills --skill experience-lwc-typescript-migrate -a claude-code`. Or copy the skill folder (skills/experience-lwc-typescript-migrate in forcedotcom/sf-skills) into .claude/skills/experience-lwc-typescript-migrate in your project. Claude Code loads it when a task matches its description.
Run `npx skills add forcedotcom/sf-skills --skill experience-lwc-typescript-migrate -a codex`. Or copy the skill folder (skills/experience-lwc-typescript-migrate in forcedotcom/sf-skills) into .agents/skills/experience-lwc-typescript-migrate in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add forcedotcom/sf-skills --skill experience-lwc-typescript-migrate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/experience-lwc-typescript-migrate, .gemini/skills/experience-lwc-typescript-migrate, .github/skills/experience-lwc-typescript-migrate and .opencode/skills/experience-lwc-typescript-migrate in your project.
Going by SKILL.md and its folder, Experience Lwc Typescript Migrate needs TypeScript and a shell for the scripts in its folder and the command-line tools its instructions call (git and tsc). Our summary lists: Node.js; A Bash shell.
SKILL.md names 2 domains. As links in the text: developer.salesforce.com and typescriptlang.org. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Experience Lwc Typescript Migrate is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Experience Lwc Typescript Migrate: Jest Skill (sickn33/agentic-awesome-skills, 47k stars), Vitest Skill (sickn33/agentic-awesome-skills, 47k stars), Javascript Typescript Jest (github/awesome-copilot, 40k stars) and Jest Unit (PramodDutta/qaskills, 232 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
forcedotcom (a GitHub organization) maintains it in forcedotcom/sf-skills, which has 1,060 GitHub stars. The repository holds 251 skills in this directory. The repository was last updated on October 7, 2026.
Source: forcedotcom/sf-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.