# Shoehorn Desk > A migration of one TypeScript test file from as-assertions to @total-typescript/shoehorn. Paste the file (or drop > it); the browser masks comments, strings, template literals and regex literals, finds every as, as unknown as, as > any and angle-bracket assertion with the exact span of its expression and type, skips as const, import renames and > mapped-type keys, and rewrites the safe ones in place - a literal asserted to a type becomes fromPartial, a double > assertion becomes fromAny, with the type kept as the generic where TypeScript gives the value no contextual type - > merging the shoehorn import. DOM narrowing and casts on values are left for a decision; a file with no tests is > refused (shoehorn is test code only). Metered runs write the review and the whole migrated file. Built on the > SkillSafe skill @mattpocock/migrate-to-shoehorn, from mattpocock/skills (MIT), by Matt Pocock. > Shoehorn Desk is an independent tool for the open-source @total-typescript/shoehorn library; it is not affiliated with or endorsed by Total TypeScript or Matt Pocock. https://shoehorn-desk.skillsafe.ai/ ## What is free - The scan: every finding with an id (S1, S2, ...), a severity (blocker - not test code, major - needs a decision or does not compile, minor - migrated by the page), the line, where it sits, what the page saw and the fix. - Every type assertion with its expression, type and what the page did with it. - The migrated file itself - the safe assertions rewritten and the import merged - plus the skill's checklist, findings and assertions as CSV, everything as JSON. ## The metered lanes Two tasks on gpt-terra, metered per run, routed by `task`. Input string fields: `task` (review or rewrite), `unit`, `code`, `carry` (rewrite only: the review's decisions) and `facts` (the page's scan and assertion list). - `review` replies with `summary`, `findings` (confirmed ids with the issue, the decision and the migrated line), `cleared`, `extra` (up to five issues a scan cannot see, on real lines), `plan` (the steps in order, naming their ids) and `caveats`. - `rewrite` replies with `summary`, `code` (the whole migrated file), `changes`, `kept` and `caveats`. The page holds every reply to its scan: each id accounted for exactly once, every test title and the whole file kept, and the migrated file re-scanned - an assertion the rewrite left behind, or a new one, is flagged. ## Links - API tutorial: https://shoehorn-desk.skillsafe.ai/api.html - Source skill: https://skillsafe.ai/skill/@mattpocock/migrate-to-shoehorn