[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EBXF7RCC1603BJDTKBXHCN":3,"skill-same:01M6EBXF7RCC1603BJDTKBXHCN":101},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":6,"ownerDescription":63,"updatedAt":64,"install":65,"resources":78},"01M6EBXF7RCC1603BJDTKBXHCN","TypeScript Tooling",null,"Development tools, linting, and build config for TypeScript. Use when configuring ESLint, Prettier, Jest, Vitest, tsconfig, or any TS build tooling.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHoangNguyen0403\u002Fagent-skills-standard\u002Ftooling\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,5,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"typescript","tooling","development","lint","development tools","compile","package","Tools","vitest","json","use","config","build","prettier","jest","eslint","linting","testing","2026-11-10 10:12:30",false,"---\nname: TypeScript Tooling\ndescription: Development tools, linting, and build config for TypeScript. Use when configuring ESLint, Prettier, Jest, Vitest, tsconfig, or any TS build tooling.\nmetadata:\n  labels: [tooling, typescript, eslint, prettier, testing]\n  triggers:\n    files: ['tsconfig.json', '.eslintrc.*', 'jest.config.*', 'package.json']\n    keywords: [eslint, prettier, jest, vitest, build, compile, lint]\n---\n\n# TypeScript Tooling\n\n## **Priority: P1 (OPERATIONAL)**\n\nEssential tooling for TypeScript development and maintenance.\n\n## Implementation Guidelines\n\n- **Compiler**: `tsc` for CI. `ts-node`\u002F`esbuild` for dev.\n- **Lint**: ESLint + `@typescript-eslint`. Strict type checking.\n- **Format**: Prettier (on save + commit).\n- **Test**: Jest\u002FVitest > 80% coverage.\n- **Build**: `tsup` (libs), Vite\u002FWebpack (apps).\n- **Check**: `tsc --noEmit` in CI.\n\n## Anti-Patterns\n\n- **No Disable**: Avoid `\u002F\u002F eslint-disable`.\n- **No Skip**: Avoid `skipLibCheck: true` if possible.\n- **No Ignore**: Use `@ts-expect-error` > `@ts-ignore`.\n\n## ESLint Configuration\n\n### Strict Mode Requirement\n\n**CRITICAL**: Every file in the project, including tests (`.spec.ts`), must adhere to strict type-checked rules. NEVER turn off `@typescript-eslint\u002Fno-explicit-any` or `no-unsafe-*` rules.\n\n### Common Linting Issues & Solutions\n\n#### Request Object Typing\n\n**Problem**: Using `any` for Express request objects or creating duplicate inline interfaces.\n**Solution**: Use the centralized interfaces in `src\u002Fcommon\u002Finterfaces\u002Frequest.interface.ts`.\n\n```typescript\nimport { RequestWithUser } from 'src\u002Fcommon\u002Finterfaces\u002Frequest.interface';\n```\n\n#### Unused Parameters\n\n**Problem**: Function parameters marked as unused by linter.\n**Solution**: Prefix the parameter with an underscore (e.g., `_data`) or remove it. NEVER use `eslint-disable`.\n\n#### Test Mock Typing\n\n**Problem**: Jest mocks triggering unsafe type warnings when `expect.any()` or custom mocks are used.\n**Solution**: Cast the mock or expectation using `as unknown as TargetType`.\n\n```typescript\nmockRepo.save.mockResolvedValue(result as unknown as User);\n```\n\n## Configuration\n\n```json\n\u002F\u002F tsconfig.json\n{\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"noImplicitReturns\": true,\n    \"noUnusedLocals\": true\n  }\n}\n```\n\n## Reference & Examples\n\nFor testing configuration and CI\u002FCD setup:\nSee [references\u002FREFERENCE.md](references\u002FREFERENCE.md).\n\n## Related Topics\n\nbest-practices | language\n\n","# TypeScript Tooling\n\n## **Priority: P1 (OPERATIONAL)**\n\nEssential tooling for TypeScript development and maintenance.\n\n## Implementation Guidelines\n\n- **Compiler**: `tsc` for CI. `ts-node`\u002F`esbuild` for dev.\n- **Lint**: ESLint + `@typescript-eslint`. Strict type checking.\n- **Format**: Prettier (on save + commit).\n- **Test**: Jest\u002FVitest > 80% coverage.\n- **Build**: `tsup` (libs), Vite\u002FWebpack (apps).\n- **Check**: `tsc --noEmit` in CI.\n\n## Anti-Patterns\n\n- **No Disable**: Avoid `\u002F\u002F eslint-disable`.\n- **No Skip**: Avoid `skipLibCheck: true` if possible.\n- **No Ignore**: Use `@ts-expect-error` > `@ts-ignore`.\n\n## ESLint Configuration\n\n### Strict Mode Requirement\n\n**CRITICAL**: Every file in the project, including tests (`.spec.ts`), must adhere to strict type-checked rules. NEVER turn off `@typescript-eslint\u002Fno-explicit-any` or `no-unsafe-*` rules.\n\n### Common Linting Issues & Solutions\n\n#### Request Object Typing\n\n**Problem**: Using `any` for Express request objects or creating duplicate inline interfaces.\n**Solution**: Use the centralized interfaces in `src\u002Fcommon\u002Finterfaces\u002Frequest.interface.ts`.\n\n```typescript\nimport { RequestWithUser } from 'src\u002Fcommon\u002Finterfaces\u002Frequest.interface';\n```\n\n#### Unused Parameters\n\n**Problem**: Function parameters marked as unused by linter.\n**Solution**: Prefix the parameter with an underscore (e.g., `_data`) or remove it. NEVER use `eslint-disable`.\n\n#### Test Mock Typing\n\n**Problem**: Jest mocks triggering unsafe type warnings when `expect.any()` or custom mocks are used.\n**Solution**: Cast the mock or expectation using `as unknown as TargetType`.\n\n```typescript\nmockRepo.save.mockResolvedValue(result as unknown as User);\n```\n\n## Configuration\n\n```json\n\u002F\u002F tsconfig.json\n{\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"noImplicitReturns\": true,\n    \"noUnusedLocals\": true\n  }\n}\n```\n\n## Reference & Examples\n\nFor testing configuration and CI\u002FCD setup:\nSee [references\u002FREFERENCE.md](references\u002FREFERENCE.md).\n\n## Related Topics\n\nbest-practices | language\n\n",{"name":5,"metadata":47,"description":7},{"labels":48,"triggers":49},[25,24,39,37,41],{"files":50,"keywords":55},[51,52,53,54],"tsconfig.json",".eslintrc.*","jest.config.*","package.json",[39,37,38,32,36,29,27],"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FHoangNguyen0403\u002Fagent-skills-standard\u002Ftooling",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":77},[67,70,73],{"tool":68,"command":69},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill \"TypeScript Tooling\"",{"tool":71,"command":72},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill \"TypeScript Tooling\"",{"tool":74,"command":75},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill \"TypeScript Tooling\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHoangNguyen0403\u002Fagent-skills-standard\u002Ftooling\u002FSKILL.md",true,[79,85,89,93,97],{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"steps\u002Fstep-01-gather-context.md","REFERENCE","参考文档",6481,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-code-review\u002Fsteps\u002Fstep-01-gather-context.md",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"steps\u002Fstep-02-review.md",2142,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-code-review\u002Fsteps\u002Fstep-02-review.md",{"path":90,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":91,"sourceHtmlUrl":92},"steps\u002Fstep-03-triage.md",2692,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-code-review\u002Fsteps\u002Fstep-03-triage.md",{"path":94,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":95,"sourceHtmlUrl":96},"steps\u002Fstep-04-present.md",6366,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-code-review\u002Fsteps\u002Fstep-04-present.md",{"path":98,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":99,"sourceHtmlUrl":100},"workflow.md",2087,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.kilocode\u002Fskills\u002Fbmad-code-review\u002Fworkflow.md",[102,114,124,133,139,146],{"skillNo":103,"name":104,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":110,"publishedAt":42},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[107],{"categoryNo":108,"categoryName":109,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[111,112,113],"model","model hierarchy","model hierarchy skill",{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":120,"publishedAt":42},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[119],{"categoryNo":108,"categoryName":109,"taxonomyType":21,"taxonomyTypeDesc":22},[121,122,123],"MCP","zoom","zoom mcp",{"skillNo":125,"name":126,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":42},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[130,131,132,122],"sdk","zoom apps sdk","apps",{"skillNo":134,"name":135,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":42},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[135],{"skillNo":140,"name":141,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":145,"publishedAt":42},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[144],{"categoryNo":108,"categoryName":109,"taxonomyType":21,"taxonomyTypeDesc":22},[141],{"skillNo":147,"name":148,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":42},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[148]]