[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EARVRJMMFFMFNGRH02V1ZY":3,"skill-same:01M6EARVRJMMFFMFNGRH02V1ZY":302},{"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":28,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":60,"ownerHtmlUrl":61,"ownerBlogUrl":6,"ownerDescription":62,"updatedAt":63,"install":64,"resources":77},"01M6EARVRJMMFFMFNGRH02V1ZY","nestjs-best-practices",null,"NestJS best practices and architecture patterns for building production-ready applications. This skill should be used when writing, reviewing, or refactoring NestJS code to ensure proper patterns for modules, dependency injection, security, and performance.","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\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"nestjs","nestjs best practices","best practices","applications","dependency injection","patterns","modules","ready","dependency","refactoring","writing","injection","architecture patterns","Production","code","architecture","performance","security","2026-11-10 10:12:30",false,"---\nname: nestjs-best-practices\ndescription: NestJS best practices and architecture patterns for building production-ready applications. This skill should be used when writing, reviewing, or refactoring NestJS code to ensure proper patterns for modules, dependency injection, security, and performance.\nlicense: MIT\nmetadata:\n  author: Kadajett\n  version: \"1.1.0\"\n---\n\n# NestJS Best Practices\n\nComprehensive best practices guide for NestJS applications. Contains 40 rules across 10 categories, prioritized by impact to guide automated refactoring and code generation.\n\n## When to Apply\n\nReference these guidelines when:\n\n- Writing new NestJS modules, controllers, or services\n- Implementing authentication and authorization\n- Reviewing code for architecture and security issues\n- Refactoring existing NestJS codebases\n- Optimizing performance or database queries\n- Building microservices architectures\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | Architecture | CRITICAL | `arch-` |\n| 2 | Dependency Injection | CRITICAL | `di-` |\n| 3 | Error Handling | HIGH | `error-` |\n| 4 | Security | HIGH | `security-` |\n| 5 | Performance | HIGH | `perf-` |\n| 6 | Testing | MEDIUM-HIGH | `test-` |\n| 7 | Database & ORM | MEDIUM-HIGH | `db-` |\n| 8 | API Design | MEDIUM | `api-` |\n| 9 | Microservices | MEDIUM | `micro-` |\n| 10 | DevOps & Deployment | LOW-MEDIUM | `devops-` |\n\n## Quick Reference\n\n### 1. Architecture (CRITICAL)\n\n- `arch-avoid-circular-deps` - Avoid circular module dependencies\n- `arch-feature-modules` - Organize by feature, not technical layer\n- `arch-module-sharing` - Proper module exports\u002Fimports, avoid duplicate providers\n- `arch-single-responsibility` - Focused services over \"god services\"\n- `arch-use-repository-pattern` - Abstract database logic for testability\n- `arch-use-events` - Event-driven architecture for decoupling\n\n### 2. Dependency Injection (CRITICAL)\n\n- `di-avoid-service-locator` - Avoid service locator anti-pattern\n- `di-interface-segregation` - Interface Segregation Principle (ISP)\n- `di-liskov-substitution` - Liskov Substitution Principle (LSP)\n- `di-prefer-constructor-injection` - Constructor over property injection\n- `di-scope-awareness` - Understand singleton\u002Frequest\u002Ftransient scopes\n- `di-use-interfaces-tokens` - Use injection tokens for interfaces\n\n### 3. Error Handling (HIGH)\n\n- `error-use-exception-filters` - Centralized exception handling\n- `error-throw-http-exceptions` - Use NestJS HTTP exceptions\n- `error-handle-async-errors` - Handle async errors properly\n\n### 4. Security (HIGH)\n\n- `security-auth-jwt` - Secure JWT authentication\n- `security-validate-all-input` - Validate with class-validator\n- `security-use-guards` - Authentication and authorization guards\n- `security-sanitize-output` - Prevent XSS attacks\n- `security-rate-limiting` - Implement rate limiting\n\n### 5. Performance (HIGH)\n\n- `perf-async-hooks` - Proper async lifecycle hooks\n- `perf-use-caching` - Implement caching strategies\n- `perf-optimize-database` - Optimize database queries\n- `perf-lazy-loading` - Lazy load modules for faster startup\n\n### 6. Testing (MEDIUM-HIGH)\n\n- `test-use-testing-module` - Use NestJS testing utilities\n- `test-e2e-supertest` - E2E testing with Supertest\n- `test-mock-external-services` - Mock external dependencies\n\n### 7. Database & ORM (MEDIUM-HIGH)\n\n- `db-use-transactions` - Transaction management\n- `db-avoid-n-plus-one` - Avoid N+1 query problems\n- `db-use-migrations` - Use migrations for schema changes\n\n### 8. API Design (MEDIUM)\n\n- `api-use-dto-serialization` - DTO and response serialization\n- `api-use-interceptors` - Cross-cutting concerns\n- `api-versioning` - API versioning strategies\n- `api-use-pipes` - Input transformation with pipes\n\n### 9. Microservices (MEDIUM)\n\n- `micro-use-patterns` - Message and event patterns\n- `micro-use-health-checks` - Health checks for orchestration\n- `micro-use-queues` - Background job processing\n\n### 10. DevOps & Deployment (LOW-MEDIUM)\n\n- `devops-use-config-module` - Environment configuration\n- `devops-use-logging` - Structured logging\n- `devops-graceful-shutdown` - Zero-downtime deployments\n\n## How to Use\n\nRead individual rule files for detailed explanations and code examples:\n\n```\nrules\u002Farch-avoid-circular-deps.md\nrules\u002Fsecurity-validate-all-input.md\nrules\u002F_sections.md\n```\n\nEach rule file contains:\n- Brief explanation of why it matters\n- Incorrect code example with explanation\n- Correct code example with explanation\n- Additional context and references\n\n## Full Compiled Document\n\nFor the complete guide with all rules expanded: `AGENTS.md`\n","# NestJS Best Practices\n\nComprehensive best practices guide for NestJS applications. Contains 40 rules across 10 categories, prioritized by impact to guide automated refactoring and code generation.\n\n## When to Apply\n\nReference these guidelines when:\n\n- Writing new NestJS modules, controllers, or services\n- Implementing authentication and authorization\n- Reviewing code for architecture and security issues\n- Refactoring existing NestJS codebases\n- Optimizing performance or database queries\n- Building microservices architectures\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | Architecture | CRITICAL | `arch-` |\n| 2 | Dependency Injection | CRITICAL | `di-` |\n| 3 | Error Handling | HIGH | `error-` |\n| 4 | Security | HIGH | `security-` |\n| 5 | Performance | HIGH | `perf-` |\n| 6 | Testing | MEDIUM-HIGH | `test-` |\n| 7 | Database & ORM | MEDIUM-HIGH | `db-` |\n| 8 | API Design | MEDIUM | `api-` |\n| 9 | Microservices | MEDIUM | `micro-` |\n| 10 | DevOps & Deployment | LOW-MEDIUM | `devops-` |\n\n## Quick Reference\n\n### 1. Architecture (CRITICAL)\n\n- `arch-avoid-circular-deps` - Avoid circular module dependencies\n- `arch-feature-modules` - Organize by feature, not technical layer\n- `arch-module-sharing` - Proper module exports\u002Fimports, avoid duplicate providers\n- `arch-single-responsibility` - Focused services over \"god services\"\n- `arch-use-repository-pattern` - Abstract database logic for testability\n- `arch-use-events` - Event-driven architecture for decoupling\n\n### 2. Dependency Injection (CRITICAL)\n\n- `di-avoid-service-locator` - Avoid service locator anti-pattern\n- `di-interface-segregation` - Interface Segregation Principle (ISP)\n- `di-liskov-substitution` - Liskov Substitution Principle (LSP)\n- `di-prefer-constructor-injection` - Constructor over property injection\n- `di-scope-awareness` - Understand singleton\u002Frequest\u002Ftransient scopes\n- `di-use-interfaces-tokens` - Use injection tokens for interfaces\n\n### 3. Error Handling (HIGH)\n\n- `error-use-exception-filters` - Centralized exception handling\n- `error-throw-http-exceptions` - Use NestJS HTTP exceptions\n- `error-handle-async-errors` - Handle async errors properly\n\n### 4. Security (HIGH)\n\n- `security-auth-jwt` - Secure JWT authentication\n- `security-validate-all-input` - Validate with class-validator\n- `security-use-guards` - Authentication and authorization guards\n- `security-sanitize-output` - Prevent XSS attacks\n- `security-rate-limiting` - Implement rate limiting\n\n### 5. Performance (HIGH)\n\n- `perf-async-hooks` - Proper async lifecycle hooks\n- `perf-use-caching` - Implement caching strategies\n- `perf-optimize-database` - Optimize database queries\n- `perf-lazy-loading` - Lazy load modules for faster startup\n\n### 6. Testing (MEDIUM-HIGH)\n\n- `test-use-testing-module` - Use NestJS testing utilities\n- `test-e2e-supertest` - E2E testing with Supertest\n- `test-mock-external-services` - Mock external dependencies\n\n### 7. Database & ORM (MEDIUM-HIGH)\n\n- `db-use-transactions` - Transaction management\n- `db-avoid-n-plus-one` - Avoid N+1 query problems\n- `db-use-migrations` - Use migrations for schema changes\n\n### 8. API Design (MEDIUM)\n\n- `api-use-dto-serialization` - DTO and response serialization\n- `api-use-interceptors` - Cross-cutting concerns\n- `api-versioning` - API versioning strategies\n- `api-use-pipes` - Input transformation with pipes\n\n### 9. Microservices (MEDIUM)\n\n- `micro-use-patterns` - Message and event patterns\n- `micro-use-health-checks` - Health checks for orchestration\n- `micro-use-queues` - Background job processing\n\n### 10. DevOps & Deployment (LOW-MEDIUM)\n\n- `devops-use-config-module` - Environment configuration\n- `devops-use-logging` - Structured logging\n- `devops-graceful-shutdown` - Zero-downtime deployments\n\n## How to Use\n\nRead individual rule files for detailed explanations and code examples:\n\n```\nrules\u002Farch-avoid-circular-deps.md\nrules\u002Fsecurity-validate-all-input.md\nrules\u002F_sections.md\n```\n\nEach rule file contains:\n- Brief explanation of why it matters\n- Incorrect code example with explanation\n- Correct code example with explanation\n- Additional context and references\n\n## Full Compiled Document\n\nFor the complete guide with all rules expanded: `AGENTS.md`\n",{"name":5,"license":15,"metadata":52,"description":7},{"author":53,"version":54},"Kadajett","1.1.0","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices",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":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill nestjs-best-practices",{"tool":70,"command":71},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill nestjs-best-practices",{"tool":73,"command":74},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill nestjs-best-practices","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002FSKILL.md",true,[78,84,88,94,98,102,106,110,114,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,290,294,298],{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},".github\u002Fworkflows\u002Fbranch-protection.yml","REFERENCE","参考文档",760,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002F.github\u002Fworkflows\u002Fbranch-protection.yml",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},".github\u002Fworkflows\u002Fdeploy.yml",1273,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002F.github\u002Fworkflows\u002Fdeploy.yml",{"path":89,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":92,"sourceHtmlUrl":93},".gitignore","OTHER","其他",237,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002F.gitignore",{"path":95,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":96,"sourceHtmlUrl":97},"AGENTS.md",163058,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002FAGENTS.md",{"path":99,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":100,"sourceHtmlUrl":101},"examples\u002F3p-updates.md",3274,"https:\u002F\u002Fgithub.com\u002Fa1627418541\u002F-\u002Fblob\u002Fmain\u002F.kode\u002Fskills\u002Finternal-comms\u002Fexamples\u002F3p-updates.md",{"path":103,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":104,"sourceHtmlUrl":105},"examples\u002Fcompany-newsletter.md",3295,"https:\u002F\u002Fgithub.com\u002Fa1627418541\u002F-\u002Fblob\u002Fmain\u002F.kode\u002Fskills\u002Finternal-comms\u002Fexamples\u002Fcompany-newsletter.md",{"path":107,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":108,"sourceHtmlUrl":109},"examples\u002Ffaq-answers.md",2366,"https:\u002F\u002Fgithub.com\u002Fa1627418541\u002F-\u002Fblob\u002Fmain\u002F.kode\u002Fskills\u002Finternal-comms\u002Fexamples\u002Ffaq-answers.md",{"path":111,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":112,"sourceHtmlUrl":113},"examples\u002Fgeneral-comms.md",602,"https:\u002F\u002Fgithub.com\u002Fa1627418541\u002F-\u002Fblob\u002Fmain\u002F.kode\u002Fskills\u002Finternal-comms\u002Fexamples\u002Fgeneral-comms.md",{"path":115,"resourceType":116,"resourceTypeDesc":117,"sizeBytes":118,"sourceHtmlUrl":119},"LICENSE.txt","LICENSE","许可证",11345,"https:\u002F\u002Fgithub.com\u002Fa1627418541\u002F-\u002Fblob\u002Fmain\u002F.kode\u002Fskills\u002Finternal-comms\u002FLICENSE.txt",{"path":121,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":122,"sourceHtmlUrl":123},"README.md",4493,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002FREADME.md",{"path":125,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":126,"sourceHtmlUrl":127},"rules\u002Fapi-use-dto-serialization.md",4385,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fapi-use-dto-serialization.md",{"path":129,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":130,"sourceHtmlUrl":131},"rules\u002Fapi-use-interceptors.md",5518,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fapi-use-interceptors.md",{"path":133,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":134,"sourceHtmlUrl":135},"rules\u002Fapi-use-pipes.md",5386,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fapi-use-pipes.md",{"path":137,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":138,"sourceHtmlUrl":139},"rules\u002Fapi-versioning.md",4986,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fapi-versioning.md",{"path":141,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":142,"sourceHtmlUrl":143},"rules\u002Farch-avoid-circular-deps.md",2021,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Farch-avoid-circular-deps.md",{"path":145,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":146,"sourceHtmlUrl":147},"rules\u002Farch-feature-modules.md",2316,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Farch-feature-modules.md",{"path":149,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":150,"sourceHtmlUrl":151},"rules\u002Farch-module-sharing.md",3876,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Farch-module-sharing.md",{"path":153,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":154,"sourceHtmlUrl":155},"rules\u002Farch-single-responsibility.md",2922,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Farch-single-responsibility.md",{"path":157,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":158,"sourceHtmlUrl":159},"rules\u002Farch-use-events.md",3051,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Farch-use-events.md",{"path":161,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":162,"sourceHtmlUrl":163},"rules\u002Farch-use-repository-pattern.md",2861,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Farch-use-repository-pattern.md",{"path":165,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":166,"sourceHtmlUrl":167},"rules\u002Fdb-avoid-n-plus-one.md",3888,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdb-avoid-n-plus-one.md",{"path":169,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":170,"sourceHtmlUrl":171},"rules\u002Fdb-use-migrations.md",3837,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdb-use-migrations.md",{"path":173,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":174,"sourceHtmlUrl":175},"rules\u002Fdb-use-transactions.md",4023,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdb-use-transactions.md",{"path":177,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":178,"sourceHtmlUrl":179},"rules\u002Fdevops-graceful-shutdown.md",5916,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdevops-graceful-shutdown.md",{"path":181,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":182,"sourceHtmlUrl":183},"rules\u002Fdevops-use-config-module.md",4446,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdevops-use-config-module.md",{"path":185,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":186,"sourceHtmlUrl":187},"rules\u002Fdevops-use-logging.md",5693,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdevops-use-logging.md",{"path":189,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":190,"sourceHtmlUrl":191},"rules\u002Fdi-avoid-service-locator.md",2981,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdi-avoid-service-locator.md",{"path":193,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":194,"sourceHtmlUrl":195},"rules\u002Fdi-interface-segregation.md",5224,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdi-interface-segregation.md",{"path":197,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":198,"sourceHtmlUrl":199},"rules\u002Fdi-liskov-substitution.md",7275,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdi-liskov-substitution.md",{"path":201,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":202,"sourceHtmlUrl":203},"rules\u002Fdi-prefer-constructor-injection.md",2309,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdi-prefer-constructor-injection.md",{"path":205,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":206,"sourceHtmlUrl":207},"rules\u002Fdi-scope-awareness.md",2618,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdi-scope-awareness.md",{"path":209,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":210,"sourceHtmlUrl":211},"rules\u002Fdi-use-interfaces-tokens.md",2588,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fdi-use-interfaces-tokens.md",{"path":213,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":214,"sourceHtmlUrl":215},"rules\u002Ferror-handle-async-errors.md",3531,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Ferror-handle-async-errors.md",{"path":217,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":218,"sourceHtmlUrl":219},"rules\u002Ferror-throw-http-exceptions.md",3181,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Ferror-throw-http-exceptions.md",{"path":221,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":222,"sourceHtmlUrl":223},"rules\u002Ferror-use-exception-filters.md",3695,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Ferror-use-exception-filters.md",{"path":225,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":226,"sourceHtmlUrl":227},"rules\u002Fmicro-use-health-checks.md",5985,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fmicro-use-health-checks.md",{"path":229,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":230,"sourceHtmlUrl":231},"rules\u002Fmicro-use-patterns.md",5102,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fmicro-use-patterns.md",{"path":233,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":234,"sourceHtmlUrl":235},"rules\u002Fmicro-use-queues.md",6214,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fmicro-use-queues.md",{"path":237,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":238,"sourceHtmlUrl":239},"rules\u002Fperf-async-hooks.md",2918,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fperf-async-hooks.md",{"path":241,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":242,"sourceHtmlUrl":243},"rules\u002Fperf-lazy-loading.md",3822,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fperf-lazy-loading.md",{"path":245,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":246,"sourceHtmlUrl":247},"rules\u002Fperf-optimize-database.md",3276,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fperf-optimize-database.md",{"path":249,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":250,"sourceHtmlUrl":251},"rules\u002Fperf-use-caching.md",3524,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fperf-use-caching.md",{"path":253,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":254,"sourceHtmlUrl":255},"rules\u002Fsecurity-auth-jwt.md",4083,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fsecurity-auth-jwt.md",{"path":257,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":258,"sourceHtmlUrl":259},"rules\u002Fsecurity-rate-limiting.md",3324,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fsecurity-rate-limiting.md",{"path":261,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":262,"sourceHtmlUrl":263},"rules\u002Fsecurity-sanitize-output.md",3815,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fsecurity-sanitize-output.md",{"path":265,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":266,"sourceHtmlUrl":267},"rules\u002Fsecurity-use-guards.md",3647,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fsecurity-use-guards.md",{"path":269,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":270,"sourceHtmlUrl":271},"rules\u002Fsecurity-validate-all-input.md",3393,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Fsecurity-validate-all-input.md",{"path":273,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":274,"sourceHtmlUrl":275},"rules\u002Ftest-e2e-supertest.md",4800,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Ftest-e2e-supertest.md",{"path":277,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":278,"sourceHtmlUrl":279},"rules\u002Ftest-mock-external-services.md",4613,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Ftest-mock-external-services.md",{"path":281,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":282,"sourceHtmlUrl":283},"rules\u002Ftest-use-testing-module.md",4392,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Frules\u002Ftest-use-testing-module.md",{"path":285,"resourceType":286,"resourceTypeDesc":287,"sizeBytes":288,"sourceHtmlUrl":289},"scripts\u002Fbuild-agents.ts","SCRIPT","脚本",8657,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Fscripts\u002Fbuild-agents.ts",{"path":291,"resourceType":286,"resourceTypeDesc":287,"sizeBytes":292,"sourceHtmlUrl":293},"scripts\u002Fbuild.sh",369,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Fscripts\u002Fbuild.sh",{"path":295,"resourceType":286,"resourceTypeDesc":287,"sizeBytes":296,"sourceHtmlUrl":297},"scripts\u002Fpackage-lock.json",8662,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Fscripts\u002Fpackage-lock.json",{"path":299,"resourceType":286,"resourceTypeDesc":287,"sizeBytes":300,"sourceHtmlUrl":301},"scripts\u002Fpackage.json",428,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FHarmeet10000\u002Fskills\u002Fnestjs-best-practices\u002Fscripts\u002Fpackage.json",[303,315,325,334,340,347],{"skillNo":304,"name":305,"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":306,"categories":307,"keywords":311,"publishedAt":47},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[308],{"categoryNo":309,"categoryName":310,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[312,313,314],"model","model hierarchy","model hierarchy skill",{"skillNo":316,"name":317,"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":318,"categories":319,"keywords":321,"publishedAt":47},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[320],{"categoryNo":309,"categoryName":310,"taxonomyType":21,"taxonomyTypeDesc":22},[322,323,324],"MCP","zoom","zoom mcp",{"skillNo":326,"name":327,"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":328,"categories":329,"keywords":330,"publishedAt":47},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[331,332,333,323],"sdk","zoom apps sdk","apps",{"skillNo":335,"name":336,"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":337,"categories":338,"keywords":339,"publishedAt":47},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[336],{"skillNo":341,"name":342,"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":343,"categories":344,"keywords":346,"publishedAt":47},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[345],{"categoryNo":309,"categoryName":310,"taxonomyType":21,"taxonomyTypeDesc":22},[342],{"skillNo":348,"name":349,"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":350,"categories":351,"keywords":352,"publishedAt":47},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[349]]