[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CFB3DMRW02HSYWMMK3VDPM":3,"skill-same:01M6CFB3DMRW02HSYWMMK3VDPM":82},{"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":18,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":6,"ownerHtmlUrl":39,"ownerBlogUrl":39,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M6CFB3DMRW02HSYWMMK3VDPM","java-to-nextjs",null,"Use when converting Java 1.8 classes to Next.js TypeScript interface definitions - handling type mapping, nullability, inheritance, naming conventions, and BaseReq\u002FBaseResponse exclusions.","HeathWang\u002Fhw-cc-plugin","HeathWang","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F4961711?v=4","01M6CF9BZ3A0CSSG3QQGGDPFEH","Heath Wang","01M6CF9C3HT4NPM370Z8MYZW4G",1,"MIT","https:\u002F\u002Fgithub.com\u002FHeathWang\u002Fhw-cc-plugin\u002Fblob\u002Fmaster\u002Fskills\u002Fjava-to-nextjs\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27],"java","nextjs","java to nextjs","typescript","Next.js","js","grep","read","use","2026-11-10 10:12:30",false,"---\nname: java-to-nextjs\ndescription: Use when converting Java 1.8 classes to Next.js TypeScript interface definitions - handling type mapping, nullability, inheritance, naming conventions, and BaseReq\u002FBaseResponse exclusions.\nallowed-tools: Read, Grep, Glob\n---\n\n# Java to Next.js TypeScript Conversion\n\n## Overview\n\nConverts Java 1.8 classes to TypeScript 5.0+ interface definitions for Next.js 14+. Output as markdown code blocks only — **never modify project files**.\n\n## Core Constraint\n\n**CRITICAL**: Output TypeScript `interface` definitions as markdown code blocks only. Do NOT modify, edit, or alter any project files.\n\n## Type Mapping\n\n| Java Type | TypeScript Type |\n|-----------|-----------------|\n| `int` \u002F `Integer` \u002F `long` \u002F `Long` | `number` |\n| `float` \u002F `Float` \u002F `double` \u002F `Double` | `number` |\n| `boolean` \u002F `Boolean` | `boolean` |\n| `String` | `string` |\n| `BigDecimal` \u002F `decimal` | `string` (default) or `number` (with `@BigDecimalToNumber`) |\n| `Date` | `string` (ISO 8601) |\n| `Timestamp` | `number` (unix) or `string` (ISO, with `@TimestampFormat`) |\n| `List\u003CT>` | `T[]` |\n| `Map\u003CK,V>` | `Record\u003CK, V>` |\n| `Object` \u002F `JSONObject` | `Record\u003Cstring, any>` |\n\n## Nullability Rules\n\n| Java Annotation | TypeScript |\n|-----------------|------------|\n| `@NonNull` \u002F `@NotNull` | Required field (`name: string`) |\n| No annotation \u002F `@Nullable` | Optional field (`name?: string`) |\n\n**Default:** All properties are optional unless explicitly marked non-null.\n\n## Naming Conventions\n\n**Interface names:** PascalCase with meaningful suffixes (`SaveEmailData`, `LoginRequest`, `UserProfileResponse`)\n\n**Property names:** ⚠️ KEEP IDENTICAL TO JAVA\u002FAPI — do NOT convert between camelCase and snake_case.\n\n```typescript\n\u002F\u002F ✅ Correct\ninterface SaveEmailData {\n  inviteCode: string;     \u002F\u002F matches API\n  invite_url?: string;    \u002F\u002F preserves snake_case\n}\n\n\u002F\u002F ❌ Wrong\ninterface SaveEmailData {\n  InviteCode: string;     \u002F\u002F changed to PascalCase\n  inviteUrl?: string;     \u002F\u002F changed snake_case to camelCase\n}\n```\n\n## Inheritance Handling\n\n1. Identify parent classes and trace the full chain\n2. **If parent is `BaseReq` or `BaseResponse`** → **EXCLUDE** all their properties (handled by HTTP middleware)\n3. Choose approach:\n   - **Interface Extension (recommended):** use `extends` when parent is reused across multiple children\n   - **Flattened Interface:** copy all properties into one interface when standalone\n\n## Documentation\n\nMigrate Java comments to TypeScript preserving original language:\n- Chinese comments → keep Chinese\n- English comments → keep English\n- Use JSDoc (`\u002F** *\u002F`) for interfaces, inline `\u002F\u002F` for properties\n\n## Step-by-Step Workflow\n\n1. Analyze Java class — properties, annotations, types, inheritance\n2. If inheritance exists → read parent class files\n3. Handle `BaseReq`\u002F`BaseResponse` exclusion if applicable\n4. Create interface with PascalCase name\n5. Apply type mapping (including `@BigDecimalToNumber`, `@TimestampFormat`)\n6. Apply nullability (`@NonNull` → required, else optional)\n7. Preserve property names exactly as in API\n8. Migrate comments preserving original language\n\n## Validation Checklist\n\n- [ ] `@NonNull`\u002F`@NotNull` properties are required (no `?`)\n- [ ] All other properties are optional (`?`)\n- [ ] Interface uses PascalCase naming\n- [ ] Property names match API contract exactly\n- [ ] Inheritance detected and parent classes analyzed\n- [ ] `BaseReq`\u002F`BaseResponse` properties excluded if applicable\n- [ ] Type mappings correct (especially `BigDecimal`, `Date`, arrays)\n- [ ] Documentation migrated in original language\n- [ ] Output is markdown code block only (no file modifications)\n","# Java to Next.js TypeScript Conversion\n\n## Overview\n\nConverts Java 1.8 classes to TypeScript 5.0+ interface definitions for Next.js 14+. Output as markdown code blocks only — **never modify project files**.\n\n## Core Constraint\n\n**CRITICAL**: Output TypeScript `interface` definitions as markdown code blocks only. Do NOT modify, edit, or alter any project files.\n\n## Type Mapping\n\n| Java Type | TypeScript Type |\n|-----------|-----------------|\n| `int` \u002F `Integer` \u002F `long` \u002F `Long` | `number` |\n| `float` \u002F `Float` \u002F `double` \u002F `Double` | `number` |\n| `boolean` \u002F `Boolean` | `boolean` |\n| `String` | `string` |\n| `BigDecimal` \u002F `decimal` | `string` (default) or `number` (with `@BigDecimalToNumber`) |\n| `Date` | `string` (ISO 8601) |\n| `Timestamp` | `number` (unix) or `string` (ISO, with `@TimestampFormat`) |\n| `List\u003CT>` | `T[]` |\n| `Map\u003CK,V>` | `Record\u003CK, V>` |\n| `Object` \u002F `JSONObject` | `Record\u003Cstring, any>` |\n\n## Nullability Rules\n\n| Java Annotation | TypeScript |\n|-----------------|------------|\n| `@NonNull` \u002F `@NotNull` | Required field (`name: string`) |\n| No annotation \u002F `@Nullable` | Optional field (`name?: string`) |\n\n**Default:** All properties are optional unless explicitly marked non-null.\n\n## Naming Conventions\n\n**Interface names:** PascalCase with meaningful suffixes (`SaveEmailData`, `LoginRequest`, `UserProfileResponse`)\n\n**Property names:** ⚠️ KEEP IDENTICAL TO JAVA\u002FAPI — do NOT convert between camelCase and snake_case.\n\n```typescript\n\u002F\u002F ✅ Correct\ninterface SaveEmailData {\n  inviteCode: string;     \u002F\u002F matches API\n  invite_url?: string;    \u002F\u002F preserves snake_case\n}\n\n\u002F\u002F ❌ Wrong\ninterface SaveEmailData {\n  InviteCode: string;     \u002F\u002F changed to PascalCase\n  inviteUrl?: string;     \u002F\u002F changed snake_case to camelCase\n}\n```\n\n## Inheritance Handling\n\n1. Identify parent classes and trace the full chain\n2. **If parent is `BaseReq` or `BaseResponse`** → **EXCLUDE** all their properties (handled by HTTP middleware)\n3. Choose approach:\n   - **Interface Extension (recommended):** use `extends` when parent is reused across multiple children\n   - **Flattened Interface:** copy all properties into one interface when standalone\n\n## Documentation\n\nMigrate Java comments to TypeScript preserving original language:\n- Chinese comments → keep Chinese\n- English comments → keep English\n- Use JSDoc (`\u002F** *\u002F`) for interfaces, inline `\u002F\u002F` for properties\n\n## Step-by-Step Workflow\n\n1. Analyze Java class — properties, annotations, types, inheritance\n2. If inheritance exists → read parent class files\n3. Handle `BaseReq`\u002F`BaseResponse` exclusion if applicable\n4. Create interface with PascalCase name\n5. Apply type mapping (including `@BigDecimalToNumber`, `@TimestampFormat`)\n6. Apply nullability (`@NonNull` → required, else optional)\n7. Preserve property names exactly as in API\n8. Migrate comments preserving original language\n\n## Validation Checklist\n\n- [ ] `@NonNull`\u002F`@NotNull` properties are required (no `?`)\n- [ ] All other properties are optional (`?`)\n- [ ] Interface uses PascalCase naming\n- [ ] Property names match API contract exactly\n- [ ] Inheritance detected and parent classes analyzed\n- [ ] `BaseReq`\u002F`BaseResponse` properties excluded if applicable\n- [ ] Type mappings correct (especially `BigDecimal`, `Date`, arrays)\n- [ ] Documentation migrated in original language\n- [ ] Output is markdown code block only (no file modifications)\n",{"name":5,"description":7,"allowed-tools":33},"Read, Grep, Glob","master","a12b4ddfc807225744ed4ddecc493e87048dca69","skills\u002Fjava-to-nextjs",0,"https:\u002F\u002Fgithub.com\u002FHeathWang\u002Fhw-cc-plugin","https:\u002F\u002Fgithub.com\u002FHeathWang","iOS \u002F front end \u002F python develper","2026-11-03 17:20:23",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add HeathWang\u002Fhw-cc-plugin --skill java-to-nextjs",{"tool":48,"command":49},"bunx","bunx skills add HeathWang\u002Fhw-cc-plugin --skill java-to-nextjs",{"tool":51,"command":52},"pnpm","pnpm dlx skills add HeathWang\u002Fhw-cc-plugin --skill java-to-nextjs","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHeathWang\u002Fhw-cc-plugin\u002Fblob\u002Fmaster\u002Fskills\u002Fjava-to-nextjs\u002FSKILL.md",true,[56,62,66,70,74,78],{"path":57,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":60,"sourceHtmlUrl":61},"examples\u002Fhttp-server.json","REFERENCE","参考文档",505,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Fplugin-dev\u002Fskills\u002Fmcp-integration\u002Fexamples\u002Fhttp-server.json",{"path":63,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":64,"sourceHtmlUrl":65},"examples\u002Fsse-server.json",413,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Fplugin-dev\u002Fskills\u002Fmcp-integration\u002Fexamples\u002Fsse-server.json",{"path":67,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":68,"sourceHtmlUrl":69},"examples\u002Fstdio-server.json",695,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Fplugin-dev\u002Fskills\u002Fmcp-integration\u002Fexamples\u002Fstdio-server.json",{"path":71,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":72,"sourceHtmlUrl":73},"references\u002Fauthentication.md",10229,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Fplugin-dev\u002Fskills\u002Fmcp-integration\u002Freferences\u002Fauthentication.md",{"path":75,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":76,"sourceHtmlUrl":77},"references\u002Fserver-types.md",10643,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Fplugin-dev\u002Fskills\u002Fmcp-integration\u002Freferences\u002Fserver-types.md",{"path":79,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Ftool-usage.md",11704,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fskills\u002Fmarketplace\u002Fcodebuddy-plugins-official\u002Fplugins\u002Fplugin-dev\u002Fskills\u002Fmcp-integration\u002Freferences\u002Ftool-usage.md",[83,114,133,142,160,183],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":94,"publishedAt":28},"01M6CFBEFHMPFRFM9AQAJVVAR0","reconstructing-ui-from-screenshots","Use when implementing or correcting an app or web UI from a design image, screenshot, mockup, or reference PNG where accurate size, spacing, color, typography, assets, and alignment matter.","https:\u002F\u002Fgithub.com\u002FHeathWang\u002Fhw-cc-plugin\u002Fblob\u002Fmaster\u002Fskills\u002Freconstructing-ui-from-screenshots\u002FSKILL.md",[89],{"categoryNo":90,"categoryName":91,"taxonomyType":92,"taxonomyTypeDesc":93},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,27,111,112,113],"screenshots","reconstructing ui from screenshots","ui","spacing","size","web ui","implementing","color","app","png","typography","reference","mockup","alignment","screenshot","design","image","web","assets",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":28},"01M6CFBBT8EXTSBHXEFGRWRZ3C","question-answer","Use when the user wants a read-only explanation of existing code behavior, architecture, control flow, data flow, dependencies, or implementation decisions and has not requested project changes.","https:\u002F\u002Fgithub.com\u002FHeathWang\u002Fhw-cc-plugin\u002Fblob\u002Fmaster\u002Fskills\u002Fquestion-answer\u002FSKILL.md",[],[121,122,25,27,123,124,125,126,127,26,128,129,130,131,132],"question answer","question","decisions","code","architecture","webfetch","behavior","flow","data","implementation","user","only",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":28},"01M6CFB60X8Q9479W73SJCDEVJ","java-to-swift","Use when converting Java 1.8 classes to Swift 5.0+ Codable structs - handling type mapping, nullability, inheritance flattening, BaseReq exclusions, and property naming conventions.","https:\u002F\u002Fgithub.com\u002FHeathWang\u002Fhw-cc-plugin\u002Fblob\u002Fmaster\u002Fskills\u002Fjava-to-swift\u002FSKILL.md",[],[140,19,141,26,25,27],"swift","java to swift",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":153,"publishedAt":28},"01M6CFB055EXKR72703ST6H3XW","ios-i18n-workflow","Use when iOS apps using SwiftGen L10n need localization work - adding keys, checking missing translations, or cleaning unused entries. Triggered by hardcoded strings, missing L10n references, incomplete translations across multiple languages, or unused localization cleanup requests.","https:\u002F\u002Fgithub.com\u002FHeathWang\u002Fhw-cc-plugin\u002Fblob\u002Fmaster\u002Fskills\u002Fios-i18n-workflow\u002FSKILL.md",[148],{"categoryNo":149,"categoryName":150,"taxonomyType":151,"taxonomyTypeDesc":152},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[154,155,156,157,27,158,159],"ios","workflow","ios i18n workflow","cleanup","references","work",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":169,"publishedAt":28},"01M6CFAXJJZ59SWHZ1RAGQ461N","improve-codebase-architecture","Use when the user wants architectural deepening opportunities for a codebase or named files, shown as a visual HTML report, and when they then pick candidates from that report to implement in the code already reviewed.","https:\u002F\u002Fgithub.com\u002FHeathWang\u002Fhw-cc-plugin\u002Fblob\u002Fmaster\u002Fskills\u002Fimprove-codebase-architecture\u002FSKILL.md",[166],{"categoryNo":167,"categoryName":168,"taxonomyType":151,"taxonomyTypeDesc":152},"01JBSEEDCAT000000000000009","前端开发",[170,125,171,172,173,174,175,176,177,178,179,180,27,181,124,182,131],"codebase","improve","improve codebase architecture","html","html report","pick","report","as","for","true","files","visual","implement",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":189,"publishedAt":28},"01M6CFATZXZK0RNE86AEN4AAH3","handoff","Use when the user asks to create a handoff, session summary, context compact, continuation note, 交接文档, 压缩上下文, or instructions for the next agent to resume work later.","https:\u002F\u002Fgithub.com\u002FHeathWang\u002Fhw-cc-plugin\u002Fblob\u002Fmaster\u002Fskills\u002Fhandoff\u002FSKILL.md",[],[185,190,191,131,192,193,194,159,195,196,27,197,198],"instructions","context","压缩","文档","later","create","resume","session","session summary"]