@el-j/magic-helix-core 4.0.0-beta.1 → 4.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/index-B88j4AyE.js +13 -0
  2. package/dist/index-B88j4AyE.js.map +1 -0
  3. package/dist/index-CY-pQbuu.cjs +2 -0
  4. package/dist/index-CY-pQbuu.cjs.map +1 -0
  5. package/dist/index.cjs +75 -1
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.mjs +2234 -51
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/pattern-combiner.d.ts +1 -1
  11. package/dist/plugin-loader.d.ts +7 -1
  12. package/package.json +4 -4
  13. package/dist/BasePlugin-6wv0hYJ9.js +0 -98
  14. package/dist/BasePlugin-6wv0hYJ9.js.map +0 -1
  15. package/dist/BasePlugin-odQJAKA-.cjs +0 -2
  16. package/dist/BasePlugin-odQJAKA-.cjs.map +0 -1
  17. package/dist/builtin-plugins/base/BasePlugin.d.ts +0 -69
  18. package/dist/builtin-plugins/csharp/index.d.ts +0 -20
  19. package/dist/builtin-plugins/go/index.d.ts +0 -23
  20. package/dist/builtin-plugins/index.d.ts +0 -15
  21. package/dist/builtin-plugins/java/index.d.ts +0 -22
  22. package/dist/builtin-plugins/nodejs/index.d.ts +0 -44
  23. package/dist/builtin-plugins/php/index.d.ts +0 -20
  24. package/dist/builtin-plugins/python/index.d.ts +0 -27
  25. package/dist/builtin-plugins/ruby/index.d.ts +0 -20
  26. package/dist/builtin-plugins/rust/index.d.ts +0 -53
  27. package/dist/builtin-plugins/swift/index.d.ts +0 -22
  28. package/dist/default_templates/angular/angular-core.md +0 -19
  29. package/dist/default_templates/architecture/codeowners.md +0 -123
  30. package/dist/default_templates/architecture/monorepo.md +0 -146
  31. package/dist/default_templates/architecture/nx.md +0 -122
  32. package/dist/default_templates/architecture/turborepo.md +0 -114
  33. package/dist/default_templates/ci/github-actions.md +0 -268
  34. package/dist/default_templates/ci/gitlab-ci.md +0 -330
  35. package/dist/default_templates/containers/docker-multistage.md +0 -120
  36. package/dist/default_templates/containers/kubernetes-deploy.md +0 -210
  37. package/dist/default_templates/devops/docker-compose.md +0 -111
  38. package/dist/default_templates/devops/docker-dockerfile.md +0 -94
  39. package/dist/default_templates/devops/github-actions.md +0 -160
  40. package/dist/default_templates/devops/gitlab-ci.md +0 -210
  41. package/dist/default_templates/dotnet/framework-aspnetcore.md +0 -205
  42. package/dist/default_templates/dotnet/framework-blazor.md +0 -271
  43. package/dist/default_templates/dotnet/lang-csharp.md +0 -162
  44. package/dist/default_templates/generic/lang-typescript.md +0 -11
  45. package/dist/default_templates/generic/state-redux.md +0 -21
  46. package/dist/default_templates/generic/state-rxjs.md +0 -6
  47. package/dist/default_templates/generic/style-mui.md +0 -23
  48. package/dist/default_templates/generic/style-tailwind.md +0 -6
  49. package/dist/default_templates/generic/test-cypress.md +0 -21
  50. package/dist/default_templates/generic/test-jest.md +0 -20
  51. package/dist/default_templates/generic/test-playwright.md +0 -21
  52. package/dist/default_templates/generic/test-vitest.md +0 -6
  53. package/dist/default_templates/go/lang-go.md +0 -571
  54. package/dist/default_templates/java/build-gradle.md +0 -102
  55. package/dist/default_templates/java/build-maven.md +0 -86
  56. package/dist/default_templates/java/framework-spring-boot.md +0 -179
  57. package/dist/default_templates/java/lang-java.md +0 -78
  58. package/dist/default_templates/java/lang-kotlin.md +0 -88
  59. package/dist/default_templates/meta/magic-helix-meta.md +0 -213
  60. package/dist/default_templates/meta/meta-debug.md +0 -459
  61. package/dist/default_templates/meta/meta-implement.md +0 -450
  62. package/dist/default_templates/meta/meta-roadmap.md +0 -265
  63. package/dist/default_templates/nestjs/nestjs-core.md +0 -7
  64. package/dist/default_templates/patterns/architecture/clean-architecture.md +0 -469
  65. package/dist/default_templates/patterns/architecture/dependency-injection.md +0 -517
  66. package/dist/default_templates/patterns/architecture/domain-driven-design.md +0 -621
  67. package/dist/default_templates/patterns/architecture/layered-architecture.md +0 -382
  68. package/dist/default_templates/patterns/architecture/repository-pattern.md +0 -408
  69. package/dist/default_templates/patterns/domain-expertise/nextjs-rules.md +0 -115
  70. package/dist/default_templates/patterns/domain-expertise/react-patterns.md +0 -181
  71. package/dist/default_templates/patterns/domain-expertise/server-components.md +0 -212
  72. package/dist/default_templates/patterns/domain-expertise/shadcn-ui.md +0 -52
  73. package/dist/default_templates/patterns/domain-expertise/tailwind-patterns.md +0 -52
  74. package/dist/default_templates/patterns/environment/container-awareness.md +0 -17
  75. package/dist/default_templates/patterns/environment/ide-features.md +0 -17
  76. package/dist/default_templates/patterns/environment/os-commands.md +0 -17
  77. package/dist/default_templates/patterns/organization/heading-hierarchy.md +0 -103
  78. package/dist/default_templates/patterns/organization/sequential-workflows.md +0 -102
  79. package/dist/default_templates/patterns/organization/xml-rule-groups.md +0 -64
  80. package/dist/default_templates/patterns/reasoning/agent-loop.md +0 -151
  81. package/dist/default_templates/patterns/reasoning/confirmation-gates.md +0 -141
  82. package/dist/default_templates/patterns/reasoning/dependency-analysis.md +0 -132
  83. package/dist/default_templates/patterns/reasoning/one-tool-per-iteration.md +0 -152
  84. package/dist/default_templates/patterns/reasoning/preview-before-action.md +0 -194
  85. package/dist/default_templates/patterns/reasoning/reflection-checkpoints.md +0 -166
  86. package/dist/default_templates/patterns/reasoning/result-verification.md +0 -157
  87. package/dist/default_templates/patterns/reasoning/subtask-breakdown.md +0 -131
  88. package/dist/default_templates/patterns/reasoning/thinking-tags.md +0 -100
  89. package/dist/default_templates/patterns/role-definition/capability-declarations.md +0 -72
  90. package/dist/default_templates/patterns/role-definition/expert-identity.md +0 -45
  91. package/dist/default_templates/patterns/role-definition/scope-boundaries.md +0 -61
  92. package/dist/default_templates/patterns/safety/code-safety-rules.md +0 -17
  93. package/dist/default_templates/patterns/safety/credential-handling.md +0 -17
  94. package/dist/default_templates/patterns/safety/destructive-warnings.md +0 -17
  95. package/dist/default_templates/patterns/safety/refusal-messages.md +0 -17
  96. package/dist/default_templates/patterns/tone/adaptive-tone.md +0 -17
  97. package/dist/default_templates/patterns/tone/concise-communication.md +0 -17
  98. package/dist/default_templates/patterns/tone/forbidden-phrases.md +0 -17
  99. package/dist/default_templates/patterns/tool-guidelines/function-schemas.md +0 -143
  100. package/dist/default_templates/patterns/tool-guidelines/parameter-examples.md +0 -137
  101. package/dist/default_templates/patterns/tool-guidelines/usage-policies.md +0 -105
  102. package/dist/default_templates/php/framework-laravel.md +0 -112
  103. package/dist/default_templates/php/lang-php.md +0 -94
  104. package/dist/default_templates/python/lang-python.md +0 -508
  105. package/dist/default_templates/react/react-core.md +0 -677
  106. package/dist/default_templates/react/react-zustand.md +0 -7
  107. package/dist/default_templates/ruby/framework-rails.md +0 -309
  108. package/dist/default_templates/ruby/framework-sinatra.md +0 -227
  109. package/dist/default_templates/ruby/lang-ruby.md +0 -216
  110. package/dist/default_templates/rust/lang-rust.md +0 -89
  111. package/dist/default_templates/swift/framework-vapor.md +0 -352
  112. package/dist/default_templates/swift/lang-swift.md +0 -291
  113. package/dist/default_templates/vue/style-primevue.md +0 -6
  114. package/dist/default_templates/vue/style-quasar.md +0 -22
  115. package/dist/default_templates/vue/vue-core.md +0 -28
  116. package/dist/default_templates/vue/vue-pinia.md +0 -5
  117. package/dist/index-AkVwRl-r.js +0 -92
  118. package/dist/index-AkVwRl-r.js.map +0 -1
  119. package/dist/index-B6BeG1yT.cjs +0 -68
  120. package/dist/index-B6BeG1yT.cjs.map +0 -1
  121. package/dist/index-B8pyjKdF.js +0 -94
  122. package/dist/index-B8pyjKdF.js.map +0 -1
  123. package/dist/index-B_6W_RnJ.cjs +0 -76
  124. package/dist/index-B_6W_RnJ.cjs.map +0 -1
  125. package/dist/index-Bg8DD8ku.js +0 -216
  126. package/dist/index-Bg8DD8ku.js.map +0 -1
  127. package/dist/index-BkJhe5Af.js +0 -1748
  128. package/dist/index-BkJhe5Af.js.map +0 -1
  129. package/dist/index-Bv4Q1Pr7.cjs +0 -33
  130. package/dist/index-Bv4Q1Pr7.cjs.map +0 -1
  131. package/dist/index-CN8J45Nc.cjs +0 -24
  132. package/dist/index-CN8J45Nc.cjs.map +0 -1
  133. package/dist/index-CPbv2Od1.js +0 -62
  134. package/dist/index-CPbv2Od1.js.map +0 -1
  135. package/dist/index-Cf-MC6Al.js +0 -63
  136. package/dist/index-Cf-MC6Al.js.map +0 -1
  137. package/dist/index-DDPXXXDy.cjs +0 -19
  138. package/dist/index-DDPXXXDy.cjs.map +0 -1
  139. package/dist/index-DO30AzDe.cjs +0 -19
  140. package/dist/index-DO30AzDe.cjs.map +0 -1
  141. package/dist/index-Dm37u5ut.js +0 -2128
  142. package/dist/index-Dm37u5ut.js.map +0 -1
  143. package/dist/index-DqHvgoXJ.cjs +0 -19
  144. package/dist/index-DqHvgoXJ.cjs.map +0 -1
  145. package/dist/index-J1qAfsnO.cjs +0 -2
  146. package/dist/index-J1qAfsnO.cjs.map +0 -1
  147. package/dist/index-Jz0HYZ7B.js +0 -13
  148. package/dist/index-Jz0HYZ7B.js.map +0 -1
  149. package/dist/index-K39pdw94.cjs +0 -31
  150. package/dist/index-K39pdw94.cjs.map +0 -1
  151. package/dist/index-L3IVvhd1.cjs +0 -89
  152. package/dist/index-L3IVvhd1.cjs.map +0 -1
  153. package/dist/index-OT2XAJkc.js +0 -117
  154. package/dist/index-OT2XAJkc.js.map +0 -1
  155. package/dist/index-TPAX4XKg.cjs +0 -30
  156. package/dist/index-TPAX4XKg.cjs.map +0 -1
  157. package/dist/index-WmVSB57y.js +0 -107
  158. package/dist/index-WmVSB57y.js.map +0 -1
  159. package/dist/index-mYXvc3Fs.js +0 -68
  160. package/dist/index-mYXvc3Fs.js.map +0 -1
@@ -1,291 +0,0 @@
1
- # Swift Language Instructions
2
-
3
- ## Project Type
4
- - Language: Swift
5
- - Package Manager: Swift Package Manager (SPM)
6
- - Platform: {iOS|macOS|Linux|Server}
7
-
8
- ## Build Commands
9
-
10
- ### Swift Package Manager
11
- ```bash
12
- swift build # Build project
13
- swift test # Run tests
14
- swift run # Run executable
15
- swift package update # Update dependencies
16
- swift package clean # Clean build artifacts
17
- ```
18
-
19
- ### Xcode
20
- ```bash
21
- xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 15'
22
- xcodebuild test -scheme MyApp
23
- ```
24
-
25
- ## Code Conventions
26
-
27
- ### Swift Basics
28
- ```swift
29
- // Variables and constants
30
- var mutableValue = 42
31
- let constantValue = 100
32
-
33
- // Optionals
34
- var name: String? = "John"
35
- if let unwrappedName = name {
36
- print(unwrappedName)
37
- }
38
-
39
- // Nil coalescing
40
- let displayName = name ?? "Anonymous"
41
-
42
- // Optional chaining
43
- let length = user?.name?.count
44
- ```
45
-
46
- ### Structs and Classes
47
- ```swift
48
- struct User {
49
- let id: UUID
50
- var name: String
51
- var email: String
52
-
53
- func fullProfile() -> String {
54
- "\(name) <\(email)>"
55
- }
56
- }
57
-
58
- class UserRepository {
59
- private var users: [User] = []
60
-
61
- func add(_ user: User) {
62
- users.append(user)
63
- }
64
-
65
- func find(by id: UUID) -> User? {
66
- users.first { $0.id == id }
67
- }
68
- }
69
- ```
70
-
71
- ### Protocols and Extensions
72
- ```swift
73
- protocol Identifiable {
74
- var id: UUID { get }
75
- }
76
-
77
- extension User: Identifiable {}
78
-
79
- extension String {
80
- func toSnakeCase() -> String {
81
- // Implementation
82
- }
83
- }
84
- ```
85
-
86
- ### Async/Await (Concurrency)
87
- ```swift
88
- func fetchUser(id: UUID) async throws -> User {
89
- let (data, _) = try await URLSession.shared.data(from: url)
90
- return try JSONDecoder().decode(User.self, from: data)
91
- }
92
-
93
- // Usage
94
- Task {
95
- do {
96
- let user = try await fetchUser(id: userId)
97
- print(user.name)
98
- } catch {
99
- print("Error: \(error)")
100
- }
101
- }
102
- ```
103
-
104
- ### Error Handling
105
- ```swift
106
- enum UserError: Error {
107
- case notFound
108
- case invalidEmail
109
- }
110
-
111
- func getUser(id: UUID) throws -> User {
112
- guard let user = findUser(id) else {
113
- throw UserError.notFound
114
- }
115
- return user
116
- }
117
-
118
- // Usage
119
- do {
120
- let user = try getUser(id: userId)
121
- } catch UserError.notFound {
122
- print("User not found")
123
- } catch {
124
- print("Unknown error: \(error)")
125
- }
126
- ```
127
-
128
- ## Testing with XCTest
129
-
130
- ```swift
131
- import XCTest
132
- @testable import MyApp
133
-
134
- final class UserTests: XCTestCase {
135
- func testUserFullProfile() {
136
- let user = User(
137
- id: UUID(),
138
- name: "John",
139
- email: "john@example.com"
140
- )
141
-
142
- XCTAssertEqual(user.fullProfile(), "John <john@example.com>")
143
- }
144
-
145
- func testAsyncFunction() async throws {
146
- let user = try await fetchUser(id: testUserId)
147
- XCTAssertEqual(user.name, "John")
148
- }
149
- }
150
- ```
151
-
152
- ## Docker for Server-Side Swift
153
-
154
- ### Multi-stage Dockerfile
155
- ```dockerfile
156
- # Build stage
157
- FROM swift:5.9-jammy AS build
158
- WORKDIR /app
159
-
160
- COPY Package.swift Package.resolved ./
161
- RUN swift package resolve
162
-
163
- COPY . .
164
- RUN swift build -c release --static-swift-stdlib
165
-
166
- # Runtime stage
167
- FROM ubuntu:22.04
168
- WORKDIR /app
169
-
170
- RUN apt-get update && apt-get install -y \
171
- libcurl4 \
172
- libxml2 \
173
- && rm -rf /var/lib/apt/lists/*
174
-
175
- COPY --from=build /app/.build/release/MyApp ./
176
-
177
- RUN useradd -m -u 1000 swift
178
- USER swift
179
-
180
- EXPOSE 8080
181
- CMD ["./MyApp"]
182
- ```
183
-
184
- ### Docker Compose
185
- ```yaml
186
- services:
187
- app:
188
- build: .
189
- ports:
190
- - "8080:8080"
191
- environment:
192
- - DATABASE_URL=postgresql://postgres:password@db/myapp
193
- depends_on:
194
- - db
195
-
196
- db:
197
- image: postgres:15-alpine
198
- environment:
199
- POSTGRES_PASSWORD: password
200
- ```
201
-
202
- ## Package.swift Structure
203
-
204
- ```swift
205
- // swift-tools-version: 5.9
206
- import PackageDescription
207
-
208
- let package = Package(
209
- name: "MyApp",
210
- platforms: [
211
- .macOS(.v13),
212
- .iOS(.v16),
213
- .linux
214
- ],
215
- products: [
216
- .executable(name: "MyApp", targets: ["MyApp"]),
217
- .library(name: "MyLibrary", targets: ["MyLibrary"])
218
- ],
219
- dependencies: [
220
- .package(url: "https://github.com/vapor/vapor.git", from: "4.89.0")
221
- ],
222
- targets: [
223
- .executableTarget(
224
- name: "MyApp",
225
- dependencies: [
226
- .product(name: "Vapor", package: "vapor")
227
- ]
228
- ),
229
- .testTarget(
230
- name: "MyAppTests",
231
- dependencies: ["MyApp"]
232
- )
233
- ]
234
- )
235
- ```
236
-
237
- ## Memory Management
238
-
239
- ```swift
240
- // ARC (Automatic Reference Counting)
241
- class User {
242
- var name: String
243
- init(name: String) { self.name = name }
244
- }
245
-
246
- // Weak references to avoid retain cycles
247
- class ViewController {
248
- weak var delegate: UserDelegate?
249
- }
250
-
251
- // Unowned for guaranteed non-nil references
252
- class Order {
253
- unowned let customer: Customer
254
- }
255
- ```
256
-
257
- ## Performance Tips
258
-
259
- - Use value types (structs) for immutable data
260
- - Leverage copy-on-write for collections
261
- - Use `lazy` for expensive computations
262
- - Profile with Instruments
263
- - Use `@inlinable` for small, frequently-called functions
264
- - Prefer `async/await` over completion handlers
265
- - Use actors for thread-safe state
266
-
267
- ## Common Frameworks
268
-
269
- ### iOS/macOS
270
- - **SwiftUI**: Modern declarative UI
271
- - **Combine**: Reactive programming
272
- - **CoreData**: Persistence
273
- - **URLSession**: Networking
274
-
275
- ### Server-Side
276
- - **Vapor**: Web framework
277
- - **Fluent**: ORM
278
- - **PostgresNIO**: PostgreSQL driver
279
- - **AsyncHTTPClient**: HTTP client
280
-
281
- ## Best Practices
282
-
283
- - Use optionals appropriately
284
- - Prefer value types over reference types
285
- - Use guard statements for early returns
286
- - Implement proper error handling
287
- - Write unit tests
288
- - Use protocols for abstraction
289
- - Follow Swift naming conventions
290
- - Use type inference wisely
291
- - Leverage Swift's type safety
@@ -1,6 +0,0 @@
1
- # UI Library: PrimeVue
2
- - **ALWAYS** use PrimeVue components for UI elements (Button, InputText, DataTable).
3
- - **STYLING**: Use PrimeVue's "pass-through" (PT) properties to apply Tailwind classes for customization.
4
- - **NEVER** override PrimeVue styles with global CSS.
5
- - **ICONS**: Use the icon library configured with PrimeVue (e.g., PrimeIcons or MDI).
6
- - **FORMS**: Use `vee-validate` in combination with PrimeVue form components.
@@ -1,22 +0,0 @@
1
- # Styling: Quasar (Vue)
2
- - **ALWAYS** use Quasar v2+ with Vue 3 Composition API.
3
- - **ALWAYS** use `q-` prefixed classes for Quasar components.
4
- - **ALWAYS** use `QLayout`, `QHeader`, `QDrawer`, `QPage` for app structure.
5
- - **ALWAYS** use `QBtn` with appropriate color and size props.
6
- - **ALWAYS** use `QInput` and `QSelect` for form inputs.
7
- - **ALWAYS** use `QCard`, `QCardSection` for content containers.
8
- - **ALWAYS** use `QTable` for data tables with proper column definitions.
9
- - **ALWAYS** use `QDialog` for modals with `v-model` binding.
10
- - **ALWAYS** use `QMenu` for context menus and dropdowns.
11
- - **ALWAYS** use `QChip` for tags and status indicators.
12
- - **ALWAYS** use `QAvatar` for user profile displays.
13
- - **ALWAYS** use `QList` and `QItem` for navigation and lists.
14
- - **ALWAYS** use `QStepper` for multi-step processes.
15
- - **ALWAYS** use `QTabs` and `QTab` for tabbed interfaces.
16
- - **ALWAYS** use `QExpansionItem` for collapsible content.
17
- - **ALWAYS** use `QSpinner` for loading states.
18
- - **ALWAYS** use `QNotify` for toast notifications.
19
- - **ALWAYS** use `QLoading` for full-screen loading overlays.
20
- - **ALWAYS** use `Dark` plugin for dark mode support.
21
- - **ALWAYS** use `Quasar.lang` for internationalization.
22
- - **ALWAYS** use `Quasar.iconSet` for custom icon sets.
@@ -1,28 +0,0 @@
1
- # Framework: Vue 3
2
- - **ALWAYS** use Vue 3.
3
- - **ALWAYS** use the Composition API.
4
- - **NEVER** use the Options API.
5
- - **ALWAYS** use `<script setup lang="ts">`.
6
- - **WHEN POSSIBLE** use `<script setup lang="ts" generic="T">` with generic type interfaces.
7
- - **ALWAYS** use TypeScript.
8
- - **PREFER** `defineModel` where `defineProps` with `defineEmits` update is needed.
9
- - **ALWAYS** Use single-file components (`.vue` files) but logic free
10
- - **ALWAYS** Use composables to create the vue reactivity "bridge" using logic from utils.
11
- - **ALWAYS** Use utility functions for **all** logic, without vue-dependency
12
- - **ALWAYS** Use Vitest for unit tests of all utils and composables.
13
- - **ALWAYS** create composable folders with the `composableName` and inside:
14
- - `index.ts` for main composable export
15
- - `types/` folder for types/interfaces with single files for each type and index.ts exporting them
16
- - `utils/` for helper functions with single files for each util and index.ts exporting them
17
- - `__tests__/` folder for unit tests with single test files for each unit test and index.ts exporting them
18
- - **ALWAYS** Use templates only for rendering, avoid logic in templates.
19
- - **ALWAYS** define Props and emits with `defineProps` and `defineEmits`
20
- - **ALWAYS** Use `ref()` for primitive values and `reactive()` for objects.
21
- - **ALWAYS** Use `computed` for derived state.
22
- - **ALWAYS** Use `watch` or `watchEffect` for side effects. but **AVOID** overusing them.
23
- - **ALWAYS** Use Vue Router for routing.
24
- - **AVOID** Use Pinia for state management. Relay on props and emits for component communication.
25
- - **ALWAYS** Use Vue's built-in directives (`v-if`, `v-for`, `v-show`, etc.) for conditional rendering and list rendering.
26
- - **ALWAYS** Use slots for component composition.
27
- - **ALWAYS** Use Vue Devtools for debugging and performance monitoring.
28
- - **ALWAYS** Follow Vue's official style guide for best practices and conventions.
@@ -1,5 +0,0 @@
1
- # State: Pinia
2
- - **ALWAYS** use Pinia for global state management.
3
- - Define stores in the `src/stores` directory (e.g., `useUserStore.ts`).
4
- - **ALWAYS** use the `setup` store syntax (function-based) instead of the `options` store syntax.
5
- - **NEVER** access `localStorage` directly from a component. Encapsulate this logic within the Pinia store itself.
@@ -1,92 +0,0 @@
1
- import { B as o } from "./BasePlugin-6wv0hYJ9.js";
2
- class d extends o {
3
- constructor() {
4
- super(...arguments), this.name = "java", this.displayName = "Java", this.version = "3.0.0", this.priority = 75;
5
- }
6
- async detect(e) {
7
- return this.fileExists(e, "pom.xml") ? this.detectMaven(e) : this.fileExists(e, "build.gradle") || this.fileExists(e, "build.gradle.kts") ? this.detectGradle(e) : null;
8
- }
9
- getTemplates() {
10
- return [
11
- {
12
- name: "java-core",
13
- tags: ["java"],
14
- content: `# Java Development Guidelines
15
-
16
- This project uses Java.
17
-
18
- ## Project Structure
19
- - Follow Maven/Gradle conventions
20
- - Organize in packages
21
- - Use proper dependency management
22
-
23
- ## Code Style
24
- - Follow Java naming conventions
25
- - Use Google Java Style or similar
26
- - Leverage IDE formatting
27
-
28
- ## Best Practices
29
- - Use appropriate design patterns
30
- - Handle exceptions properly
31
- - Write Javadoc for public APIs
32
-
33
- ## Testing
34
- - Write JUnit tests
35
- - Use Mockito for mocking
36
- - Aim for good test coverage`
37
- }
38
- ];
39
- }
40
- getDependencyTagMap() {
41
- return {
42
- "org.springframework.boot:spring-boot": "spring-boot",
43
- "spring-boot-starter": "spring-boot",
44
- junit: "junit"
45
- };
46
- }
47
- detectMaven(e) {
48
- const t = this.readFile(e, "pom.xml");
49
- if (!t)
50
- return {
51
- language: "Java",
52
- name: this.getProjectName(e),
53
- dependencies: {},
54
- manifestFile: "pom.xml",
55
- projectPath: e
56
- };
57
- const n = t.match(/<artifactId>([^<]+)<\/artifactId>/), s = t.match(/<description>([^<]+)<\/description>/), a = {}, i = t.matchAll(
58
- /<dependency>[\s\S]*?<groupId>([^<]+)<\/groupId>[\s\S]*?<artifactId>([^<]+)<\/artifactId>[\s\S]*?(?:<version>([^<]+)<\/version>)?/g
59
- );
60
- for (const r of i)
61
- a[`${r[1]}:${r[2]}`] = r[3] || "*";
62
- return {
63
- language: "Java",
64
- name: n?.[1] || this.getProjectName(e),
65
- description: s?.[1],
66
- dependencies: a,
67
- manifestFile: "pom.xml",
68
- projectPath: e
69
- };
70
- }
71
- detectGradle(e) {
72
- const t = this.fileExists(e, "build.gradle") ? "build.gradle" : "build.gradle.kts", n = this.readFile(e, t), s = {};
73
- if (n) {
74
- const a = n.matchAll(
75
- /(?:implementation|api|testImplementation)\s*['"]([^:'"]+):([^:'"]+):?([^'"]*)['"]/g
76
- );
77
- for (const i of a)
78
- s[`${i[1]}:${i[2]}`] = i[3] || "*";
79
- }
80
- return {
81
- language: "Java/Kotlin",
82
- name: this.getProjectName(e),
83
- dependencies: s,
84
- manifestFile: t,
85
- projectPath: e
86
- };
87
- }
88
- }
89
- export {
90
- d as JavaPlugin
91
- };
92
- //# sourceMappingURL=index-AkVwRl-r.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-AkVwRl-r.js","sources":["../src/builtin-plugins/java/index.ts"],"sourcesContent":["/**\n * Java Language Plugin\n *\n * Detects Java projects via pom.xml (Maven) or build.gradle (Gradle)\n */\n\nimport type { ProjectMetadata, TemplateDefinition } from '../../types';\nimport { BasePlugin } from '../base/BasePlugin';\n\nexport class JavaPlugin extends BasePlugin {\n name = 'java';\n displayName = 'Java';\n version = '3.0.0';\n priority = 75;\n\n async detect(projectPath: string): Promise<ProjectMetadata | null> {\n // Check for Maven\n if (this.fileExists(projectPath, 'pom.xml')) {\n return this.detectMaven(projectPath);\n }\n\n // Check for Gradle\n if (\n this.fileExists(projectPath, 'build.gradle') ||\n this.fileExists(projectPath, 'build.gradle.kts')\n ) {\n return this.detectGradle(projectPath);\n }\n\n return null;\n }\n\n getTemplates(): TemplateDefinition[] {\n return [\n {\n name: 'java-core',\n tags: ['java'],\n content: `# Java Development Guidelines\n\nThis project uses Java.\n\n## Project Structure\n- Follow Maven/Gradle conventions\n- Organize in packages\n- Use proper dependency management\n\n## Code Style\n- Follow Java naming conventions\n- Use Google Java Style or similar\n- Leverage IDE formatting\n\n## Best Practices\n- Use appropriate design patterns\n- Handle exceptions properly\n- Write Javadoc for public APIs\n\n## Testing\n- Write JUnit tests\n- Use Mockito for mocking\n- Aim for good test coverage`,\n },\n ];\n }\n\n getDependencyTagMap() {\n return {\n 'org.springframework.boot:spring-boot': 'spring-boot',\n 'spring-boot-starter': 'spring-boot',\n junit: 'junit',\n };\n }\n\n private detectMaven(projectPath: string): ProjectMetadata {\n const content = this.readFile(projectPath, 'pom.xml');\n if (!content) {\n return {\n language: 'Java',\n name: this.getProjectName(projectPath),\n dependencies: {},\n manifestFile: 'pom.xml',\n projectPath,\n };\n }\n\n const artifactMatch = content.match(/<artifactId>([^<]+)<\\/artifactId>/);\n const descMatch = content.match(/<description>([^<]+)<\\/description>/);\n const deps: Record<string, string> = {};\n\n const depMatches = content.matchAll(\n /<dependency>[\\s\\S]*?<groupId>([^<]+)<\\/groupId>[\\s\\S]*?<artifactId>([^<]+)<\\/artifactId>[\\s\\S]*?(?:<version>([^<]+)<\\/version>)?/g,\n );\n for (const match of depMatches) {\n deps[`${match[1]}:${match[2]}`] = match[3] || '*';\n }\n\n return {\n language: 'Java',\n name: artifactMatch?.[1] || this.getProjectName(projectPath),\n description: descMatch?.[1],\n dependencies: deps,\n manifestFile: 'pom.xml',\n projectPath,\n };\n }\n\n private detectGradle(projectPath: string): ProjectMetadata {\n const manifestFile = this.fileExists(projectPath, 'build.gradle')\n ? 'build.gradle'\n : 'build.gradle.kts';\n\n const content = this.readFile(projectPath, manifestFile);\n const deps: Record<string, string> = {};\n\n if (content) {\n const depMatches = content.matchAll(\n /(?:implementation|api|testImplementation)\\s*['\"]([^:'\"]+):([^:'\"]+):?([^'\"]*)['\"]/g,\n );\n for (const match of depMatches) {\n deps[`${match[1]}:${match[2]}`] = match[3] || '*';\n }\n }\n\n return {\n language: 'Java/Kotlin',\n name: this.getProjectName(projectPath),\n dependencies: deps,\n manifestFile,\n projectPath,\n };\n }\n}\n"],"names":["JavaPlugin","BasePlugin","projectPath","content","artifactMatch","descMatch","deps","depMatches","match","manifestFile"],"mappings":";AASO,MAAMA,UAAmBC,EAAW;AAAA,EAApC,cAAA;AAAA,UAAA,GAAA,SAAA,GACL,KAAA,OAAO,QACP,KAAA,cAAc,QACd,KAAA,UAAU,SACV,KAAA,WAAW;AAAA,EAAA;AAAA,EAEX,MAAM,OAAOC,GAAsD;AAEjE,WAAI,KAAK,WAAWA,GAAa,SAAS,IACjC,KAAK,YAAYA,CAAW,IAKnC,KAAK,WAAWA,GAAa,cAAc,KAC3C,KAAK,WAAWA,GAAa,kBAAkB,IAExC,KAAK,aAAaA,CAAW,IAG/B;AAAA,EACT;AAAA,EAEA,eAAqC;AACnC,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,MAAM,CAAC,MAAM;AAAA,QACb,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAuBX;AAAA,EAEJ;AAAA,EAEA,sBAAsB;AACpB,WAAO;AAAA,MACL,wCAAwC;AAAA,MACxC,uBAAuB;AAAA,MACvB,OAAO;AAAA,IAAA;AAAA,EAEX;AAAA,EAEQ,YAAYA,GAAsC;AACxD,UAAMC,IAAU,KAAK,SAASD,GAAa,SAAS;AACpD,QAAI,CAACC;AACH,aAAO;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,eAAeD,CAAW;AAAA,QACrC,cAAc,CAAA;AAAA,QACd,cAAc;AAAA,QACd,aAAAA;AAAA,MAAA;AAIJ,UAAME,IAAgBD,EAAQ,MAAM,mCAAmC,GACjEE,IAAYF,EAAQ,MAAM,qCAAqC,GAC/DG,IAA+B,CAAA,GAE/BC,IAAaJ,EAAQ;AAAA,MACzB;AAAA,IAAA;AAEF,eAAWK,KAASD;AAClB,MAAAD,EAAK,GAAGE,EAAM,CAAC,CAAC,IAAIA,EAAM,CAAC,CAAC,EAAE,IAAIA,EAAM,CAAC,KAAK;AAGhD,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAMJ,IAAgB,CAAC,KAAK,KAAK,eAAeF,CAAW;AAAA,MAC3D,aAAaG,IAAY,CAAC;AAAA,MAC1B,cAAcC;AAAA,MACd,cAAc;AAAA,MACd,aAAAJ;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEQ,aAAaA,GAAsC;AACzD,UAAMO,IAAe,KAAK,WAAWP,GAAa,cAAc,IAC5D,iBACA,oBAEEC,IAAU,KAAK,SAASD,GAAaO,CAAY,GACjDH,IAA+B,CAAA;AAErC,QAAIH,GAAS;AACX,YAAMI,IAAaJ,EAAQ;AAAA,QACzB;AAAA,MAAA;AAEF,iBAAWK,KAASD;AAClB,QAAAD,EAAK,GAAGE,EAAM,CAAC,CAAC,IAAIA,EAAM,CAAC,CAAC,EAAE,IAAIA,EAAM,CAAC,KAAK;AAAA,IAElD;AAEA,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM,KAAK,eAAeN,CAAW;AAAA,MACrC,cAAcI;AAAA,MACd,cAAAG;AAAA,MACA,aAAAP;AAAA,IAAA;AAAA,EAEJ;AACF;"}
@@ -1,68 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("node:path"),c=require("./BasePlugin-odQJAKA-.cjs");function p(n){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const a=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,a.get?a:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const s=p(o);class l extends c.BasePlugin{constructor(){super(...arguments),this.name="nodejs",this.displayName="Node.js",this.version="3.0.0",this.priority=100}async detect(e){if(!this.fileExists(e,"package.json"))return null;const t=this.readJSON(e,"package.json");if(!t)return{language:"JavaScript/TypeScript",name:this.getProjectName(e),dependencies:{},manifestFile:"package.json",projectPath:e};const a=this.parseDependencies(t,"dependencies","devDependencies"),i={language:"JavaScript/TypeScript",name:t.name||this.getProjectName(e),description:t.description,dependencies:a,manifestFile:"package.json",projectPath:e},r=this.extractWorkspaces(t);return r.length>0&&(i.workspaceMembers=r),i}getTemplates(){return[{name:"lang-typescript",tags:["typescript"],content:()=>this.loadTemplateFromFile(s.join(__dirname,"templates/lang-typescript.md")).then(e=>e||this.getTypescriptTemplate())},{name:"react-core",tags:["react"],content:()=>this.loadTemplateFromFile(s.join(__dirname,"templates/react-core.md")).then(e=>e||this.getReactTemplate())},{name:"react-zustand",tags:["zustand"],content:()=>this.loadTemplateFromFile(s.join(__dirname,"templates/react-zustand.md")).then(e=>e||this.getReactZustandTemplate())},{name:"vue-core",tags:["vue"],content:()=>this.loadTemplateFromFile(s.join(__dirname,"templates/vue-core.md")).then(e=>e||this.getVueTemplate())},{name:"vue-pinia",tags:["pinia"],content:()=>this.loadTemplateFromFile(s.join(__dirname,"templates/vue-pinia.md")).then(e=>e||this.getVuePiniaTemplate())},{name:"nestjs-core",tags:["nestjs"],content:()=>this.loadTemplateFromFile(s.join(__dirname,"templates/nestjs-core.md")).then(e=>e||this.getNestJSTemplate())},{name:"style-tailwind",tags:["tailwind"],content:()=>this.loadTemplateFromFile(s.join(__dirname,"templates/style-tailwind.md")).then(e=>e||this.getTailwindTemplate())},{name:"test-vitest",tags:["vitest"],content:()=>this.loadTemplateFromFile(s.join(__dirname,"templates/test-vitest.md")).then(e=>e||this.getVitestTemplate())}]}getDependencyTagMap(){return{react:"react","react-dom":"react",vue:"vue","@vue/runtime-core":"vue",pinia:"pinia","@nestjs/core":"nestjs",tailwindcss:"tailwind",vitest:"vitest",zustand:"zustand",typescript:"typescript"}}getConfigFileTagMap(){return{"tailwind.config.js":"tailwind","tailwind.config.ts":"tailwind","vitest.config.js":"vitest","vitest.config.ts":"vitest","tsconfig.json":"typescript"}}extractWorkspaces(e){return e.workspaces?(Array.isArray(e.workspaces)?e.workspaces:e.workspaces.packages||[]).map(a=>a.replace(/\/\*$/,"")):[]}getTypescriptTemplate(){return`# TypeScript Guidelines
2
-
3
- This project uses TypeScript for type safety.
4
-
5
- ## Type Safety
6
- - Use strict type checking
7
- - Avoid \`any\` types
8
- - Prefer interfaces over types for objects
9
-
10
- ## Best Practices
11
- - Enable all strict compiler options
12
- - Use proper type inference
13
- - Leverage utility types`}getReactTemplate(){return`# React Development Guidelines
14
-
15
- This project uses React.
16
-
17
- ## Component Structure
18
- - Use functional components with hooks
19
- - Keep components focused and reusable
20
- - Follow React best practices
21
-
22
- ## State Management
23
- - Use appropriate state management for complexity
24
- - Consider component composition
25
- - Leverage React context when needed`}getReactZustandTemplate(){return`# Zustand State Management
26
-
27
- This project uses Zustand for state management.
28
-
29
- ## Store Structure
30
- - Create focused, modular stores
31
- - Use selectors to prevent unnecessary re-renders
32
- - Follow Zustand best practices`}getVueTemplate(){return`# Vue.js Development Guidelines
33
-
34
- This project uses Vue.js.
35
-
36
- ## Component Structure
37
- - Use Composition API
38
- - Follow Vue.js style guide
39
- - Keep components composable and reusable`}getVuePiniaTemplate(){return`# Pinia State Management
40
-
41
- This project uses Pinia for state management.
42
-
43
- ## Store Structure
44
- - Create modular stores
45
- - Use composition stores pattern
46
- - Follow Pinia best practices`}getNestJSTemplate(){return`# NestJS Development Guidelines
47
-
48
- This project uses NestJS framework.
49
-
50
- ## Architecture
51
- - Follow modular architecture
52
- - Use dependency injection
53
- - Implement proper error handling`}getTailwindTemplate(){return`# Tailwind CSS Guidelines
54
-
55
- This project uses Tailwind CSS.
56
-
57
- ## Styling Approach
58
- - Use utility-first classes
59
- - Create reusable components
60
- - Follow Tailwind best practices`}getVitestTemplate(){return`# Vitest Testing Guidelines
61
-
62
- This project uses Vitest for testing.
63
-
64
- ## Testing Strategy
65
- - Write unit tests for utilities
66
- - Use component testing
67
- - Follow testing best practices`}}exports.NodeJSPlugin=l;
68
- //# sourceMappingURL=index-B6BeG1yT.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-B6BeG1yT.cjs","sources":["../src/builtin-plugins/nodejs/index.ts"],"sourcesContent":["/**\n * Node.js Language Plugin\n *\n * Detects Node.js/JavaScript/TypeScript projects via package.json\n * Supports npm workspaces for monorepo detection\n */\n\nimport * as path from 'node:path';\nimport type { ProjectMetadata, TemplateDefinition } from '../../types';\nimport { BasePlugin } from '../base/BasePlugin';\n\ninterface PackageJson {\n name?: string;\n description?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n workspaces?: string[] | { packages: string[] };\n}\n\nexport class NodeJSPlugin extends BasePlugin {\n name = 'nodejs';\n displayName = 'Node.js';\n version = '3.0.0';\n priority = 100; // High priority - very common\n\n async detect(projectPath: string): Promise<ProjectMetadata | null> {\n if (!this.fileExists(projectPath, 'package.json')) {\n return null;\n }\n\n const pkg = this.readJSON<PackageJson>(projectPath, 'package.json');\n if (!pkg) {\n // package.json exists but couldn't parse - still consider it a Node.js project\n return {\n language: 'JavaScript/TypeScript',\n name: this.getProjectName(projectPath),\n dependencies: {},\n manifestFile: 'package.json',\n projectPath,\n };\n }\n\n const deps = this.parseDependencies(\n pkg as Record<string, unknown>,\n 'dependencies',\n 'devDependencies',\n );\n\n const metadata: ProjectMetadata = {\n language: 'JavaScript/TypeScript',\n name: pkg.name || this.getProjectName(projectPath),\n description: pkg.description,\n dependencies: deps,\n manifestFile: 'package.json',\n projectPath,\n };\n\n // Check for workspaces (monorepo support)\n const workspaces = this.extractWorkspaces(pkg);\n if (workspaces.length > 0) {\n metadata.workspaceMembers = workspaces;\n }\n\n return metadata;\n }\n\n getTemplates(): TemplateDefinition[] {\n return [\n {\n name: 'lang-typescript',\n tags: ['typescript'],\n content: () =>\n this.loadTemplateFromFile(\n path.join(__dirname, 'templates/lang-typescript.md'),\n ).then((c) => c || this.getTypescriptTemplate()),\n },\n {\n name: 'react-core',\n tags: ['react'],\n content: () =>\n this.loadTemplateFromFile(\n path.join(__dirname, 'templates/react-core.md'),\n ).then((c) => c || this.getReactTemplate()),\n },\n {\n name: 'react-zustand',\n tags: ['zustand'],\n content: () =>\n this.loadTemplateFromFile(\n path.join(__dirname, 'templates/react-zustand.md'),\n ).then((c) => c || this.getReactZustandTemplate()),\n },\n {\n name: 'vue-core',\n tags: ['vue'],\n content: () =>\n this.loadTemplateFromFile(\n path.join(__dirname, 'templates/vue-core.md'),\n ).then((c) => c || this.getVueTemplate()),\n },\n {\n name: 'vue-pinia',\n tags: ['pinia'],\n content: () =>\n this.loadTemplateFromFile(\n path.join(__dirname, 'templates/vue-pinia.md'),\n ).then((c) => c || this.getVuePiniaTemplate()),\n },\n {\n name: 'nestjs-core',\n tags: ['nestjs'],\n content: () =>\n this.loadTemplateFromFile(\n path.join(__dirname, 'templates/nestjs-core.md'),\n ).then((c) => c || this.getNestJSTemplate()),\n },\n {\n name: 'style-tailwind',\n tags: ['tailwind'],\n content: () =>\n this.loadTemplateFromFile(\n path.join(__dirname, 'templates/style-tailwind.md'),\n ).then((c) => c || this.getTailwindTemplate()),\n },\n {\n name: 'test-vitest',\n tags: ['vitest'],\n content: () =>\n this.loadTemplateFromFile(\n path.join(__dirname, 'templates/test-vitest.md'),\n ).then((c) => c || this.getVitestTemplate()),\n },\n ];\n }\n\n getDependencyTagMap() {\n return {\n react: 'react',\n 'react-dom': 'react',\n vue: 'vue',\n '@vue/runtime-core': 'vue',\n pinia: 'pinia',\n '@nestjs/core': 'nestjs',\n tailwindcss: 'tailwind',\n vitest: 'vitest',\n zustand: 'zustand',\n typescript: 'typescript',\n };\n }\n\n getConfigFileTagMap() {\n return {\n 'tailwind.config.js': 'tailwind',\n 'tailwind.config.ts': 'tailwind',\n 'vitest.config.js': 'vitest',\n 'vitest.config.ts': 'vitest',\n 'tsconfig.json': 'typescript',\n };\n }\n\n // Private helper methods\n\n private extractWorkspaces(pkg: PackageJson): string[] {\n if (!pkg.workspaces) return [];\n\n const workspacePatterns = Array.isArray(pkg.workspaces)\n ? pkg.workspaces\n : pkg.workspaces.packages || [];\n\n // Convert glob patterns to actual paths (simplified - just remove wildcards)\n return workspacePatterns.map((pattern) => pattern.replace(/\\/\\*$/, ''));\n }\n\n // Fallback template content (if files don't exist)\n\n private getTypescriptTemplate(): string {\n return `# TypeScript Guidelines\n\nThis project uses TypeScript for type safety.\n\n## Type Safety\n- Use strict type checking\n- Avoid \\`any\\` types\n- Prefer interfaces over types for objects\n\n## Best Practices\n- Enable all strict compiler options\n- Use proper type inference\n- Leverage utility types`;\n }\n\n private getReactTemplate(): string {\n return `# React Development Guidelines\n\nThis project uses React.\n\n## Component Structure\n- Use functional components with hooks\n- Keep components focused and reusable\n- Follow React best practices\n\n## State Management\n- Use appropriate state management for complexity\n- Consider component composition\n- Leverage React context when needed`;\n }\n\n private getReactZustandTemplate(): string {\n return `# Zustand State Management\n\nThis project uses Zustand for state management.\n\n## Store Structure\n- Create focused, modular stores\n- Use selectors to prevent unnecessary re-renders\n- Follow Zustand best practices`;\n }\n\n private getVueTemplate(): string {\n return `# Vue.js Development Guidelines\n\nThis project uses Vue.js.\n\n## Component Structure\n- Use Composition API\n- Follow Vue.js style guide\n- Keep components composable and reusable`;\n }\n\n private getVuePiniaTemplate(): string {\n return `# Pinia State Management\n\nThis project uses Pinia for state management.\n\n## Store Structure\n- Create modular stores\n- Use composition stores pattern\n- Follow Pinia best practices`;\n }\n\n private getNestJSTemplate(): string {\n return `# NestJS Development Guidelines\n\nThis project uses NestJS framework.\n\n## Architecture\n- Follow modular architecture\n- Use dependency injection\n- Implement proper error handling`;\n }\n\n private getTailwindTemplate(): string {\n return `# Tailwind CSS Guidelines\n\nThis project uses Tailwind CSS.\n\n## Styling Approach\n- Use utility-first classes\n- Create reusable components\n- Follow Tailwind best practices`;\n }\n\n private getVitestTemplate(): string {\n return `# Vitest Testing Guidelines\n\nThis project uses Vitest for testing.\n\n## Testing Strategy\n- Write unit tests for utilities\n- Use component testing\n- Follow testing best practices`;\n }\n}\n"],"names":["NodeJSPlugin","BasePlugin","projectPath","pkg","deps","metadata","workspaces","path","c","pattern"],"mappings":"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"}
@@ -1,94 +0,0 @@
1
- import { B as g } from "./BasePlugin-6wv0hYJ9.js";
2
- class l extends g {
3
- constructor() {
4
- super(...arguments), this.name = "go", this.displayName = "Go", this.version = "3.0.0", this.priority = 90;
5
- }
6
- async detect(t) {
7
- if (!this.fileExists(t, "go.mod"))
8
- return null;
9
- const i = this.readFile(t, "go.mod");
10
- if (!i)
11
- return {
12
- language: "Go",
13
- name: this.getProjectName(t),
14
- dependencies: {},
15
- manifestFile: "go.mod",
16
- projectPath: t
17
- };
18
- const r = i.match(/module\s+([^\s\n]+)/), n = {}, a = i.split(`
19
- `);
20
- let s = !1;
21
- for (const o of a) {
22
- if (o.trim().startsWith("require (")) {
23
- s = !0;
24
- continue;
25
- }
26
- if (s) {
27
- if (o.trim() === ")") break;
28
- const e = o.match(/^\s*([^\s]+)\s+v([^\s]+)/);
29
- e && (n[e[1]] = e[2]);
30
- } else if (o.trim().startsWith("require ")) {
31
- const e = o.match(/require\s+([^\s]+)\s+v([^\s]+)/);
32
- e && (n[e[1]] = e[2]);
33
- }
34
- }
35
- return {
36
- language: "Go",
37
- name: r?.[1] || this.getProjectName(t),
38
- dependencies: n,
39
- manifestFile: "go.mod",
40
- projectPath: t
41
- };
42
- }
43
- getTemplates() {
44
- return [
45
- {
46
- name: "go-core",
47
- tags: ["go"],
48
- content: this.getGoTemplate()
49
- }
50
- ];
51
- }
52
- getDependencyTagMap() {
53
- return {
54
- "github.com/gin-gonic/gin": "gin",
55
- "github.com/gofiber/fiber": "fiber",
56
- "github.com/labstack/echo": "echo",
57
- "gorm.io/gorm": "gorm"
58
- };
59
- }
60
- getGoTemplate() {
61
- return `# Go Development Guidelines
62
-
63
- This project uses Go.
64
-
65
- ## Project Structure
66
- - Follow standard Go project layout
67
- - Organize code in packages
68
- - Use proper module management
69
-
70
- ## Code Style
71
- - Follow Go conventions and idioms
72
- - Use \`gofmt\` for formatting
73
- - Run \`golint\` and \`go vet\`
74
-
75
- ## Error Handling
76
- - Handle errors explicitly
77
- - Don't ignore errors
78
- - Provide meaningful error messages
79
-
80
- ## Testing
81
- - Write table-driven tests
82
- - Use \`testing\` package
83
- - Aim for good test coverage
84
-
85
- ## Dependencies
86
- - Use Go modules (\`go.mod\`)
87
- - Keep dependencies minimal
88
- - Review dependency licenses`;
89
- }
90
- }
91
- export {
92
- l as GoPlugin
93
- };
94
- //# sourceMappingURL=index-B8pyjKdF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-B8pyjKdF.js","sources":["../src/builtin-plugins/go/index.ts"],"sourcesContent":["/**\n * Go Language Plugin\n *\n * Detects Go projects via go.mod file\n * Parses module dependencies from go.mod\n */\n\nimport type { ProjectMetadata, TemplateDefinition } from '../../types';\nimport { BasePlugin } from '../base/BasePlugin';\n\nexport class GoPlugin extends BasePlugin {\n name = 'go';\n displayName = 'Go';\n version = '3.0.0';\n priority = 90;\n\n async detect(projectPath: string): Promise<ProjectMetadata | null> {\n if (!this.fileExists(projectPath, 'go.mod')) {\n return null;\n }\n\n const content = this.readFile(projectPath, 'go.mod');\n if (!content) {\n return {\n language: 'Go',\n name: this.getProjectName(projectPath),\n dependencies: {},\n manifestFile: 'go.mod',\n projectPath,\n };\n }\n\n const moduleMatch = content.match(/module\\s+([^\\s\\n]+)/);\n const deps: Record<string, string> = {};\n\n // Parse dependencies\n const lines = content.split('\\n');\n let inRequire = false;\n for (const line of lines) {\n if (line.trim().startsWith('require (')) {\n inRequire = true;\n continue;\n }\n if (inRequire) {\n if (line.trim() === ')') break;\n const depMatch = line.match(/^\\s*([^\\s]+)\\s+v([^\\s]+)/);\n if (depMatch) {\n deps[depMatch[1]] = depMatch[2];\n }\n } else if (line.trim().startsWith('require ')) {\n const depMatch = line.match(/require\\s+([^\\s]+)\\s+v([^\\s]+)/);\n if (depMatch) {\n deps[depMatch[1]] = depMatch[2];\n }\n }\n }\n\n return {\n language: 'Go',\n name: moduleMatch?.[1] || this.getProjectName(projectPath),\n dependencies: deps,\n manifestFile: 'go.mod',\n projectPath,\n };\n }\n\n getTemplates(): TemplateDefinition[] {\n return [\n {\n name: 'go-core',\n tags: ['go'],\n content: this.getGoTemplate(),\n },\n ];\n }\n\n getDependencyTagMap() {\n return {\n 'github.com/gin-gonic/gin': 'gin',\n 'github.com/gofiber/fiber': 'fiber',\n 'github.com/labstack/echo': 'echo',\n 'gorm.io/gorm': 'gorm',\n };\n }\n\n private getGoTemplate(): string {\n return `# Go Development Guidelines\n\nThis project uses Go.\n\n## Project Structure\n- Follow standard Go project layout\n- Organize code in packages\n- Use proper module management\n\n## Code Style\n- Follow Go conventions and idioms\n- Use \\`gofmt\\` for formatting\n- Run \\`golint\\` and \\`go vet\\`\n\n## Error Handling\n- Handle errors explicitly\n- Don't ignore errors\n- Provide meaningful error messages\n\n## Testing\n- Write table-driven tests\n- Use \\`testing\\` package\n- Aim for good test coverage\n\n## Dependencies\n- Use Go modules (\\`go.mod\\`)\n- Keep dependencies minimal\n- Review dependency licenses`;\n }\n}\n"],"names":["GoPlugin","BasePlugin","projectPath","content","moduleMatch","deps","lines","inRequire","line","depMatch"],"mappings":";AAUO,MAAMA,UAAiBC,EAAW;AAAA,EAAlC,cAAA;AAAA,UAAA,GAAA,SAAA,GACL,KAAA,OAAO,MACP,KAAA,cAAc,MACd,KAAA,UAAU,SACV,KAAA,WAAW;AAAA,EAAA;AAAA,EAEX,MAAM,OAAOC,GAAsD;AACjE,QAAI,CAAC,KAAK,WAAWA,GAAa,QAAQ;AACxC,aAAO;AAGT,UAAMC,IAAU,KAAK,SAASD,GAAa,QAAQ;AACnD,QAAI,CAACC;AACH,aAAO;AAAA,QACL,UAAU;AAAA,QACV,MAAM,KAAK,eAAeD,CAAW;AAAA,QACrC,cAAc,CAAA;AAAA,QACd,cAAc;AAAA,QACd,aAAAA;AAAA,MAAA;AAIJ,UAAME,IAAcD,EAAQ,MAAM,qBAAqB,GACjDE,IAA+B,CAAA,GAG/BC,IAAQH,EAAQ,MAAM;AAAA,CAAI;AAChC,QAAII,IAAY;AAChB,eAAWC,KAAQF,GAAO;AACxB,UAAIE,EAAK,KAAA,EAAO,WAAW,WAAW,GAAG;AACvC,QAAAD,IAAY;AACZ;AAAA,MACF;AACA,UAAIA,GAAW;AACb,YAAIC,EAAK,KAAA,MAAW,IAAK;AACzB,cAAMC,IAAWD,EAAK,MAAM,0BAA0B;AACtD,QAAIC,MACFJ,EAAKI,EAAS,CAAC,CAAC,IAAIA,EAAS,CAAC;AAAA,MAElC,WAAWD,EAAK,KAAA,EAAO,WAAW,UAAU,GAAG;AAC7C,cAAMC,IAAWD,EAAK,MAAM,gCAAgC;AAC5D,QAAIC,MACFJ,EAAKI,EAAS,CAAC,CAAC,IAAIA,EAAS,CAAC;AAAA,MAElC;AAAA,IACF;AAEA,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAML,IAAc,CAAC,KAAK,KAAK,eAAeF,CAAW;AAAA,MACzD,cAAcG;AAAA,MACd,cAAc;AAAA,MACd,aAAAH;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,eAAqC;AACnC,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,MAAM,CAAC,IAAI;AAAA,QACX,SAAS,KAAK,cAAA;AAAA,MAAc;AAAA,IAC9B;AAAA,EAEJ;AAAA,EAEA,sBAAsB;AACpB,WAAO;AAAA,MACL,4BAA4B;AAAA,MAC5B,4BAA4B;AAAA,MAC5B,4BAA4B;AAAA,MAC5B,gBAAgB;AAAA,IAAA;AAAA,EAEpB;AAAA,EAEQ,gBAAwB;AAC9B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BT;AACF;"}