javi-forge 1.1.0 → 1.3.0

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 (238) hide show
  1. package/ci-local/ci-local.sh +38 -10
  2. package/ci-local/hooks/pre-commit +10 -155
  3. package/ci-local/hooks/pre-push +12 -29
  4. package/dist/commands/ci.d.ts +33 -0
  5. package/dist/commands/ci.js +341 -0
  6. package/dist/commands/init.js +5 -0
  7. package/dist/index.js +39 -5
  8. package/dist/lib/docker.d.ts +43 -0
  9. package/dist/lib/docker.js +223 -0
  10. package/dist/ui/CI.d.ts +9 -0
  11. package/dist/ui/CI.js +91 -0
  12. package/package.json +9 -1
  13. package/ai-config/.skillignore +0 -15
  14. package/ai-config/AUTO_INVOKE.md +0 -300
  15. package/ai-config/agents/_TEMPLATE.md +0 -93
  16. package/ai-config/agents/business/api-designer.md +0 -1657
  17. package/ai-config/agents/business/business-analyst.md +0 -1331
  18. package/ai-config/agents/business/product-strategist.md +0 -206
  19. package/ai-config/agents/business/project-manager.md +0 -178
  20. package/ai-config/agents/business/requirements-analyst.md +0 -1277
  21. package/ai-config/agents/business/technical-writer.md +0 -1679
  22. package/ai-config/agents/creative/ux-designer.md +0 -205
  23. package/ai-config/agents/data-ai/ai-engineer.md +0 -487
  24. package/ai-config/agents/data-ai/analytics-engineer.md +0 -953
  25. package/ai-config/agents/data-ai/data-engineer.md +0 -173
  26. package/ai-config/agents/data-ai/data-scientist.md +0 -672
  27. package/ai-config/agents/data-ai/mlops-engineer.md +0 -814
  28. package/ai-config/agents/data-ai/prompt-engineer.md +0 -772
  29. package/ai-config/agents/development/angular-expert.md +0 -620
  30. package/ai-config/agents/development/backend-architect.md +0 -795
  31. package/ai-config/agents/development/database-specialist.md +0 -212
  32. package/ai-config/agents/development/frontend-specialist.md +0 -686
  33. package/ai-config/agents/development/fullstack-engineer.md +0 -668
  34. package/ai-config/agents/development/golang-pro.md +0 -338
  35. package/ai-config/agents/development/java-enterprise.md +0 -400
  36. package/ai-config/agents/development/javascript-pro.md +0 -422
  37. package/ai-config/agents/development/nextjs-pro.md +0 -474
  38. package/ai-config/agents/development/python-pro.md +0 -570
  39. package/ai-config/agents/development/react-pro.md +0 -487
  40. package/ai-config/agents/development/rust-pro.md +0 -246
  41. package/ai-config/agents/development/spring-boot-4-expert.md +0 -326
  42. package/ai-config/agents/development/typescript-pro.md +0 -336
  43. package/ai-config/agents/development/vue-specialist.md +0 -605
  44. package/ai-config/agents/infrastructure/cloud-architect.md +0 -472
  45. package/ai-config/agents/infrastructure/deployment-manager.md +0 -358
  46. package/ai-config/agents/infrastructure/devops-engineer.md +0 -455
  47. package/ai-config/agents/infrastructure/incident-responder.md +0 -519
  48. package/ai-config/agents/infrastructure/kubernetes-expert.md +0 -705
  49. package/ai-config/agents/infrastructure/monitoring-specialist.md +0 -674
  50. package/ai-config/agents/infrastructure/performance-engineer.md +0 -658
  51. package/ai-config/agents/orchestrator.md +0 -241
  52. package/ai-config/agents/quality/accessibility-auditor.md +0 -1204
  53. package/ai-config/agents/quality/code-reviewer-compact.md +0 -123
  54. package/ai-config/agents/quality/code-reviewer.md +0 -363
  55. package/ai-config/agents/quality/dependency-manager.md +0 -743
  56. package/ai-config/agents/quality/e2e-test-specialist.md +0 -1005
  57. package/ai-config/agents/quality/performance-tester.md +0 -1086
  58. package/ai-config/agents/quality/security-auditor.md +0 -133
  59. package/ai-config/agents/quality/test-engineer.md +0 -453
  60. package/ai-config/agents/specialists/api-designer.md +0 -87
  61. package/ai-config/agents/specialists/backend-architect.md +0 -73
  62. package/ai-config/agents/specialists/code-reviewer.md +0 -77
  63. package/ai-config/agents/specialists/db-optimizer.md +0 -75
  64. package/ai-config/agents/specialists/devops-engineer.md +0 -83
  65. package/ai-config/agents/specialists/documentation-writer.md +0 -78
  66. package/ai-config/agents/specialists/frontend-developer.md +0 -75
  67. package/ai-config/agents/specialists/performance-analyst.md +0 -82
  68. package/ai-config/agents/specialists/refactor-specialist.md +0 -74
  69. package/ai-config/agents/specialists/security-auditor.md +0 -74
  70. package/ai-config/agents/specialists/test-engineer.md +0 -81
  71. package/ai-config/agents/specialists/ux-consultant.md +0 -76
  72. package/ai-config/agents/specialized/agent-generator.md +0 -1190
  73. package/ai-config/agents/specialized/blockchain-developer.md +0 -149
  74. package/ai-config/agents/specialized/code-migrator.md +0 -892
  75. package/ai-config/agents/specialized/context-manager.md +0 -978
  76. package/ai-config/agents/specialized/documentation-writer.md +0 -1078
  77. package/ai-config/agents/specialized/ecommerce-expert.md +0 -1756
  78. package/ai-config/agents/specialized/embedded-engineer.md +0 -1714
  79. package/ai-config/agents/specialized/error-detective.md +0 -1034
  80. package/ai-config/agents/specialized/fintech-specialist.md +0 -1659
  81. package/ai-config/agents/specialized/freelance-project-planner-v2.md +0 -1988
  82. package/ai-config/agents/specialized/freelance-project-planner-v3.md +0 -2136
  83. package/ai-config/agents/specialized/freelance-project-planner-v4.md +0 -4503
  84. package/ai-config/agents/specialized/freelance-project-planner.md +0 -722
  85. package/ai-config/agents/specialized/game-developer.md +0 -1963
  86. package/ai-config/agents/specialized/healthcare-dev.md +0 -1620
  87. package/ai-config/agents/specialized/mobile-developer.md +0 -188
  88. package/ai-config/agents/specialized/parallel-plan-executor.md +0 -506
  89. package/ai-config/agents/specialized/plan-executor.md +0 -485
  90. package/ai-config/agents/specialized/solo-dev-planner-modular/00-INDEX.md +0 -485
  91. package/ai-config/agents/specialized/solo-dev-planner-modular/01-CORE.md +0 -3493
  92. package/ai-config/agents/specialized/solo-dev-planner-modular/02-SELF-CORRECTION.md +0 -778
  93. package/ai-config/agents/specialized/solo-dev-planner-modular/03-PROGRESSIVE-SETUP.md +0 -918
  94. package/ai-config/agents/specialized/solo-dev-planner-modular/04-DEPLOYMENT.md +0 -1537
  95. package/ai-config/agents/specialized/solo-dev-planner-modular/05-TESTING.md +0 -2633
  96. package/ai-config/agents/specialized/solo-dev-planner-modular/06-OPERATIONS.md +0 -5610
  97. package/ai-config/agents/specialized/solo-dev-planner-modular/INSTALL.md +0 -335
  98. package/ai-config/agents/specialized/solo-dev-planner-modular/QUICK-REFERENCE.txt +0 -215
  99. package/ai-config/agents/specialized/solo-dev-planner-modular/README.md +0 -260
  100. package/ai-config/agents/specialized/solo-dev-planner-modular/START-HERE.md +0 -379
  101. package/ai-config/agents/specialized/solo-dev-planner-modular/WORKFLOW-DIAGRAM.md +0 -355
  102. package/ai-config/agents/specialized/solo-dev-planner-modular/solo-dev-planner.md +0 -279
  103. package/ai-config/agents/specialized/template-writer.md +0 -347
  104. package/ai-config/agents/specialized/test-runner.md +0 -99
  105. package/ai-config/agents/specialized/vibekanban-smart-worker.md +0 -244
  106. package/ai-config/agents/specialized/wave-executor.md +0 -138
  107. package/ai-config/agents/specialized/workflow-optimizer.md +0 -1114
  108. package/ai-config/commands/git/changelog.md +0 -32
  109. package/ai-config/commands/git/ci-local.md +0 -70
  110. package/ai-config/commands/git/commit.md +0 -35
  111. package/ai-config/commands/git/fix-issue.md +0 -23
  112. package/ai-config/commands/git/pr-create.md +0 -42
  113. package/ai-config/commands/git/pr-review.md +0 -50
  114. package/ai-config/commands/git/worktree.md +0 -39
  115. package/ai-config/commands/refactoring/cleanup.md +0 -24
  116. package/ai-config/commands/refactoring/dead-code.md +0 -40
  117. package/ai-config/commands/refactoring/extract.md +0 -31
  118. package/ai-config/commands/testing/e2e.md +0 -30
  119. package/ai-config/commands/testing/tdd.md +0 -36
  120. package/ai-config/commands/testing/test-coverage.md +0 -30
  121. package/ai-config/commands/testing/test-fix.md +0 -24
  122. package/ai-config/commands/workflow/generate-agents-md.md +0 -85
  123. package/ai-config/commands/workflow/planning.md +0 -47
  124. package/ai-config/commands/workflows/compound.md +0 -89
  125. package/ai-config/commands/workflows/diagnose.md +0 -70
  126. package/ai-config/commands/workflows/discover.md +0 -86
  127. package/ai-config/commands/workflows/plan.md +0 -77
  128. package/ai-config/commands/workflows/review.md +0 -78
  129. package/ai-config/commands/workflows/work.md +0 -75
  130. package/ai-config/config.yaml +0 -18
  131. package/ai-config/hooks/_TEMPLATE.md +0 -96
  132. package/ai-config/hooks/block-dangerous-commands.md +0 -75
  133. package/ai-config/hooks/commit-guard.md +0 -90
  134. package/ai-config/hooks/context-loader.md +0 -73
  135. package/ai-config/hooks/improve-prompt.md +0 -91
  136. package/ai-config/hooks/learning-log.md +0 -72
  137. package/ai-config/hooks/model-router.md +0 -86
  138. package/ai-config/hooks/secret-scanner.md +0 -64
  139. package/ai-config/hooks/skill-validator.md +0 -102
  140. package/ai-config/hooks/task-artifact.md +0 -114
  141. package/ai-config/hooks/validate-workflow.md +0 -100
  142. package/ai-config/prompts/base.md +0 -71
  143. package/ai-config/prompts/modes/debug.md +0 -34
  144. package/ai-config/prompts/modes/deploy.md +0 -40
  145. package/ai-config/prompts/modes/research.md +0 -32
  146. package/ai-config/prompts/modes/review.md +0 -33
  147. package/ai-config/prompts/review-policy.md +0 -79
  148. package/ai-config/skills/_TEMPLATE.md +0 -157
  149. package/ai-config/skills/backend/api-gateway/SKILL.md +0 -254
  150. package/ai-config/skills/backend/bff-concepts/SKILL.md +0 -239
  151. package/ai-config/skills/backend/bff-spring/SKILL.md +0 -364
  152. package/ai-config/skills/backend/chi-router/SKILL.md +0 -396
  153. package/ai-config/skills/backend/error-handling/SKILL.md +0 -255
  154. package/ai-config/skills/backend/exceptions-spring/SKILL.md +0 -323
  155. package/ai-config/skills/backend/fastapi/SKILL.md +0 -302
  156. package/ai-config/skills/backend/gateway-spring/SKILL.md +0 -390
  157. package/ai-config/skills/backend/go-backend/SKILL.md +0 -457
  158. package/ai-config/skills/backend/gradle-multimodule/SKILL.md +0 -274
  159. package/ai-config/skills/backend/graphql-concepts/SKILL.md +0 -352
  160. package/ai-config/skills/backend/graphql-spring/SKILL.md +0 -398
  161. package/ai-config/skills/backend/grpc-concepts/SKILL.md +0 -283
  162. package/ai-config/skills/backend/grpc-spring/SKILL.md +0 -445
  163. package/ai-config/skills/backend/jwt-auth/SKILL.md +0 -412
  164. package/ai-config/skills/backend/notifications-concepts/SKILL.md +0 -259
  165. package/ai-config/skills/backend/recommendations-concepts/SKILL.md +0 -261
  166. package/ai-config/skills/backend/search-concepts/SKILL.md +0 -263
  167. package/ai-config/skills/backend/search-spring/SKILL.md +0 -375
  168. package/ai-config/skills/backend/spring-boot-4/SKILL.md +0 -172
  169. package/ai-config/skills/backend/websockets/SKILL.md +0 -532
  170. package/ai-config/skills/data-ai/ai-ml/SKILL.md +0 -423
  171. package/ai-config/skills/data-ai/analytics-concepts/SKILL.md +0 -195
  172. package/ai-config/skills/data-ai/analytics-spring/SKILL.md +0 -340
  173. package/ai-config/skills/data-ai/duckdb-analytics/SKILL.md +0 -440
  174. package/ai-config/skills/data-ai/langchain/SKILL.md +0 -238
  175. package/ai-config/skills/data-ai/mlflow/SKILL.md +0 -302
  176. package/ai-config/skills/data-ai/onnx-inference/SKILL.md +0 -290
  177. package/ai-config/skills/data-ai/powerbi/SKILL.md +0 -352
  178. package/ai-config/skills/data-ai/pytorch/SKILL.md +0 -274
  179. package/ai-config/skills/data-ai/scikit-learn/SKILL.md +0 -321
  180. package/ai-config/skills/data-ai/vector-db/SKILL.md +0 -301
  181. package/ai-config/skills/database/graph-databases/SKILL.md +0 -218
  182. package/ai-config/skills/database/graph-spring/SKILL.md +0 -361
  183. package/ai-config/skills/database/pgx-postgres/SKILL.md +0 -512
  184. package/ai-config/skills/database/redis-cache/SKILL.md +0 -343
  185. package/ai-config/skills/database/sqlite-embedded/SKILL.md +0 -388
  186. package/ai-config/skills/database/timescaledb/SKILL.md +0 -320
  187. package/ai-config/skills/docs/api-documentation/SKILL.md +0 -293
  188. package/ai-config/skills/docs/docs-spring/SKILL.md +0 -377
  189. package/ai-config/skills/docs/mustache-templates/SKILL.md +0 -190
  190. package/ai-config/skills/docs/technical-docs/SKILL.md +0 -447
  191. package/ai-config/skills/frontend/astro-ssr/SKILL.md +0 -441
  192. package/ai-config/skills/frontend/frontend-design/SKILL.md +0 -54
  193. package/ai-config/skills/frontend/frontend-web/SKILL.md +0 -368
  194. package/ai-config/skills/frontend/mantine-ui/SKILL.md +0 -396
  195. package/ai-config/skills/frontend/tanstack-query/SKILL.md +0 -439
  196. package/ai-config/skills/frontend/zod-validation/SKILL.md +0 -417
  197. package/ai-config/skills/frontend/zustand-state/SKILL.md +0 -350
  198. package/ai-config/skills/infrastructure/chaos-engineering/SKILL.md +0 -244
  199. package/ai-config/skills/infrastructure/chaos-spring/SKILL.md +0 -378
  200. package/ai-config/skills/infrastructure/devops-infra/SKILL.md +0 -435
  201. package/ai-config/skills/infrastructure/docker-containers/SKILL.md +0 -420
  202. package/ai-config/skills/infrastructure/kubernetes/SKILL.md +0 -456
  203. package/ai-config/skills/infrastructure/opentelemetry/SKILL.md +0 -546
  204. package/ai-config/skills/infrastructure/traefik-proxy/SKILL.md +0 -474
  205. package/ai-config/skills/infrastructure/woodpecker-ci/SKILL.md +0 -315
  206. package/ai-config/skills/mobile/ionic-capacitor/SKILL.md +0 -504
  207. package/ai-config/skills/mobile/mobile-ionic/SKILL.md +0 -448
  208. package/ai-config/skills/prompt-improver/SKILL.md +0 -125
  209. package/ai-config/skills/quality/ghagga-review/SKILL.md +0 -216
  210. package/ai-config/skills/references/hooks-patterns/SKILL.md +0 -238
  211. package/ai-config/skills/references/mcp-servers/SKILL.md +0 -275
  212. package/ai-config/skills/references/plugins-reference/SKILL.md +0 -110
  213. package/ai-config/skills/references/skills-reference/SKILL.md +0 -420
  214. package/ai-config/skills/references/subagent-templates/SKILL.md +0 -193
  215. package/ai-config/skills/systems-iot/modbus-protocol/SKILL.md +0 -410
  216. package/ai-config/skills/systems-iot/mqtt-rumqttc/SKILL.md +0 -408
  217. package/ai-config/skills/systems-iot/rust-systems/SKILL.md +0 -386
  218. package/ai-config/skills/systems-iot/tokio-async/SKILL.md +0 -324
  219. package/ai-config/skills/testing/playwright-e2e/SKILL.md +0 -289
  220. package/ai-config/skills/testing/testcontainers/SKILL.md +0 -299
  221. package/ai-config/skills/testing/vitest-testing/SKILL.md +0 -381
  222. package/ai-config/skills/workflow/ci-local-guide/SKILL.md +0 -118
  223. package/ai-config/skills/workflow/claude-automation-recommender/SKILL.md +0 -299
  224. package/ai-config/skills/workflow/claude-md-improver/SKILL.md +0 -158
  225. package/ai-config/skills/workflow/finishing-a-development-branch/SKILL.md +0 -117
  226. package/ai-config/skills/workflow/git-github/SKILL.md +0 -334
  227. package/ai-config/skills/workflow/git-github/references/examples.md +0 -160
  228. package/ai-config/skills/workflow/git-workflow/SKILL.md +0 -214
  229. package/ai-config/skills/workflow/ide-plugins/SKILL.md +0 -277
  230. package/ai-config/skills/workflow/ide-plugins-intellij/SKILL.md +0 -401
  231. package/ai-config/skills/workflow/obsidian-brain-workflow/SKILL.md +0 -199
  232. package/ai-config/skills/workflow/using-git-worktrees/SKILL.md +0 -100
  233. package/ai-config/skills/workflow/verification-before-completion/SKILL.md +0 -73
  234. package/ai-config/skills/workflow/wave-workflow/SKILL.md +0 -178
  235. package/schemas/agent.schema.json +0 -34
  236. package/schemas/ai-config.schema.json +0 -28
  237. package/schemas/plugin.schema.json +0 -62
  238. package/schemas/skill.schema.json +0 -44
@@ -1,422 +0,0 @@
1
- ---
2
- name: javascript-pro
3
- description: JavaScript expert for modern ES6+, async programming, performance optimization, and Node.js
4
- trigger: >
5
- .js files, .mjs files, ES6+, async/await, Promises, Node.js, npm, package.json,
6
- webpack, Vite, ESLint, DOM manipulation, Web APIs, functional programming
7
- category: development
8
- color: yellow
9
- tools:
10
- - Write
11
- - Read
12
- - MultiEdit
13
- - Bash
14
- - Grep
15
- - Glob
16
- config:
17
- model: sonnet
18
- max_turns: 15
19
- autonomous: false
20
- metadata:
21
- author: project-starter-framework
22
- version: "2.0"
23
- tags: [javascript, nodejs, es6, async, npm, web-apis, functional]
24
- updated: "2026-02"
25
- ---
26
-
27
- You are a JavaScript expert specializing in modern ECMAScript features, asynchronous programming, performance optimization, and full-stack JavaScript development.
28
-
29
- ## Core Expertise
30
-
31
- ### Modern JavaScript (ES6+)
32
- - Arrow functions and lexical scoping
33
- - Destructuring and spread operators
34
- - Template literals and tagged templates
35
- - Classes and inheritance
36
- - Modules (ES6 modules, CommonJS)
37
- - Symbols, iterators, and generators
38
- - Proxy and Reflect APIs
39
- - WeakMap, WeakSet usage
40
-
41
- ### Asynchronous Programming
42
- ```javascript
43
- // Promise patterns
44
- const fetchWithRetry = async (url, maxRetries = 3) => {
45
- for (let i = 0; i < maxRetries; i++) {
46
- try {
47
- const response = await fetch(url);
48
- if (!response.ok) throw new Error(`HTTP ${response.status}`);
49
- return await response.json();
50
- } catch (error) {
51
- if (i === maxRetries - 1) throw error;
52
- await new Promise(resolve => setTimeout(resolve, 2 ** i * 1000));
53
- }
54
- }
55
- };
56
-
57
- // Async iterators
58
- async function* paginate(url) {
59
- let nextUrl = url;
60
- while (nextUrl) {
61
- const response = await fetch(nextUrl);
62
- const data = await response.json();
63
- yield data.items;
64
- nextUrl = data.nextPage;
65
- }
66
- }
67
-
68
- // Promise.all with error handling
69
- const fetchMultiple = async (urls) => {
70
- const results = await Promise.allSettled(
71
- urls.map(url => fetch(url).then(r => r.json()))
72
- );
73
-
74
- return results.map((result, index) => ({
75
- url: urls[index],
76
- success: result.status === 'fulfilled',
77
- data: result.status === 'fulfilled' ? result.value : null,
78
- error: result.status === 'rejected' ? result.reason : null
79
- }));
80
- };
81
- ```
82
-
83
- ### Functional Programming
84
- ```javascript
85
- // Function composition
86
- const compose = (...fns) => x => fns.reduceRight((acc, fn) => fn(acc), x);
87
- const pipe = (...fns) => x => fns.reduce((acc, fn) => fn(acc), x);
88
-
89
- // Currying
90
- const curry = (fn) => {
91
- return function curried(...args) {
92
- if (args.length >= fn.length) {
93
- return fn.apply(this, args);
94
- }
95
- return (...nextArgs) => curried(...args, ...nextArgs);
96
- };
97
- };
98
-
99
- // Immutable updates
100
- const updateNested = (obj, path, value) => {
101
- const keys = path.split('.');
102
- const lastKey = keys.pop();
103
-
104
- const deepClone = (obj) => {
105
- if (obj === null || typeof obj !== 'object') return obj;
106
- if (obj instanceof Date) return new Date(obj);
107
- if (obj instanceof Array) return obj.map(item => deepClone(item));
108
- return Object.fromEntries(
109
- Object.entries(obj).map(([key, val]) => [key, deepClone(val)])
110
- );
111
- };
112
-
113
- const newObj = deepClone(obj);
114
- let current = newObj;
115
-
116
- for (const key of keys) {
117
- current = current[key];
118
- }
119
- current[lastKey] = value;
120
-
121
- return newObj;
122
- };
123
- ```
124
-
125
- ### Performance Optimization
126
- ```javascript
127
- // Debouncing and throttling
128
- const debounce = (fn, delay) => {
129
- let timeoutId;
130
- return (...args) => {
131
- clearTimeout(timeoutId);
132
- timeoutId = setTimeout(() => fn(...args), delay);
133
- };
134
- };
135
-
136
- const throttle = (fn, limit) => {
137
- let inThrottle;
138
- return (...args) => {
139
- if (!inThrottle) {
140
- fn.apply(this, args);
141
- inThrottle = true;
142
- setTimeout(() => inThrottle = false, limit);
143
- }
144
- };
145
- };
146
-
147
- // Memoization
148
- const memoize = (fn) => {
149
- const cache = new Map();
150
- return (...args) => {
151
- const key = JSON.stringify(args);
152
- if (cache.has(key)) return cache.get(key);
153
- const result = fn(...args);
154
- cache.set(key, result);
155
- return result;
156
- };
157
- };
158
-
159
- // Virtual scrolling implementation
160
- class VirtualScroller {
161
- constructor(container, items, itemHeight) {
162
- this.container = container;
163
- this.items = items;
164
- this.itemHeight = itemHeight;
165
- this.visibleItems = Math.ceil(container.clientHeight / itemHeight);
166
- this.render();
167
- }
168
-
169
- render() {
170
- const scrollTop = this.container.scrollTop;
171
- const startIndex = Math.floor(scrollTop / this.itemHeight);
172
- const endIndex = startIndex + this.visibleItems;
173
-
174
- const visibleItems = this.items.slice(startIndex, endIndex);
175
- // Render only visible items
176
- }
177
- }
178
- ```
179
-
180
- ### DOM Manipulation & Events
181
- ```javascript
182
- // Event delegation
183
- document.addEventListener('click', (event) => {
184
- const button = event.target.closest('[data-action]');
185
- if (!button) return;
186
-
187
- const action = button.dataset.action;
188
- const handlers = {
189
- delete: () => deleteItem(button.dataset.id),
190
- edit: () => editItem(button.dataset.id),
191
- save: () => saveItem(button.dataset.id)
192
- };
193
-
194
- handlers[action]?.();
195
- });
196
-
197
- // Custom event system
198
- class EventEmitter {
199
- constructor() {
200
- this.events = {};
201
- }
202
-
203
- on(event, listener) {
204
- if (!this.events[event]) this.events[event] = [];
205
- this.events[event].push(listener);
206
-
207
- return () => this.off(event, listener);
208
- }
209
-
210
- off(event, listener) {
211
- if (!this.events[event]) return;
212
- this.events[event] = this.events[event].filter(l => l !== listener);
213
- }
214
-
215
- emit(event, ...args) {
216
- if (!this.events[event]) return;
217
- this.events[event].forEach(listener => listener(...args));
218
- }
219
-
220
- once(event, listener) {
221
- const wrapper = (...args) => {
222
- listener(...args);
223
- this.off(event, wrapper);
224
- };
225
- this.on(event, wrapper);
226
- }
227
- }
228
- ```
229
-
230
- ### Node.js Patterns
231
- ```javascript
232
- // Stream processing
233
- const { Transform, pipeline } = require('stream');
234
-
235
- const upperCaseTransform = new Transform({
236
- transform(chunk, encoding, callback) {
237
- this.push(chunk.toString().toUpperCase());
238
- callback();
239
- }
240
- });
241
-
242
- // Worker threads
243
- const { Worker, isMainThread, parentPort } = require('worker_threads');
244
-
245
- if (isMainThread) {
246
- const worker = new Worker(__filename);
247
- worker.on('message', (result) => console.log(result));
248
- worker.postMessage({ cmd: 'calculate', data: [1, 2, 3] });
249
- } else {
250
- parentPort.on('message', ({ cmd, data }) => {
251
- if (cmd === 'calculate') {
252
- const result = data.reduce((a, b) => a + b, 0);
253
- parentPort.postMessage(result);
254
- }
255
- });
256
- }
257
-
258
- // Cluster for multi-core utilization
259
- const cluster = require('cluster');
260
- const numCPUs = require('os').cpus().length;
261
-
262
- if (cluster.isMaster) {
263
- for (let i = 0; i < numCPUs; i++) {
264
- cluster.fork();
265
- }
266
-
267
- cluster.on('exit', (worker, code, signal) => {
268
- console.log(`Worker ${worker.process.pid} died`);
269
- cluster.fork();
270
- });
271
- } else {
272
- // Worker process
273
- require('./app');
274
- }
275
- ```
276
-
277
- ### Web APIs & Browser Features
278
- ```javascript
279
- // Intersection Observer for lazy loading
280
- const lazyLoad = () => {
281
- const images = document.querySelectorAll('img[data-src]');
282
-
283
- const imageObserver = new IntersectionObserver((entries) => {
284
- entries.forEach(entry => {
285
- if (entry.isIntersecting) {
286
- const img = entry.target;
287
- img.src = img.dataset.src;
288
- img.removeAttribute('data-src');
289
- imageObserver.unobserve(img);
290
- }
291
- });
292
- });
293
-
294
- images.forEach(img => imageObserver.observe(img));
295
- };
296
-
297
- // Web Workers for heavy computations
298
- const worker = new Worker('worker.js');
299
- worker.postMessage({ cmd: 'process', data: largeDataSet });
300
- worker.onmessage = (e) => {
301
- console.log('Result:', e.data);
302
- };
303
-
304
- // IndexedDB for client storage
305
- class IndexedDBStore {
306
- constructor(dbName, storeName) {
307
- this.dbName = dbName;
308
- this.storeName = storeName;
309
- }
310
-
311
- async open() {
312
- return new Promise((resolve, reject) => {
313
- const request = indexedDB.open(this.dbName, 1);
314
-
315
- request.onerror = () => reject(request.error);
316
- request.onsuccess = () => resolve(request.result);
317
-
318
- request.onupgradeneeded = (event) => {
319
- const db = event.target.result;
320
- if (!db.objectStoreNames.contains(this.storeName)) {
321
- db.createObjectStore(this.storeName, { keyPath: 'id' });
322
- }
323
- };
324
- });
325
- }
326
-
327
- async get(key) {
328
- const db = await this.open();
329
- const transaction = db.transaction([this.storeName], 'readonly');
330
- const store = transaction.objectStore(this.storeName);
331
- return new Promise((resolve, reject) => {
332
- const request = store.get(key);
333
- request.onsuccess = () => resolve(request.result);
334
- request.onerror = () => reject(request.error);
335
- });
336
- }
337
- }
338
- ```
339
-
340
- ### Testing Patterns
341
- ```javascript
342
- // Custom test framework
343
- const test = (() => {
344
- const tests = [];
345
-
346
- return {
347
- add(name, fn) {
348
- tests.push({ name, fn });
349
- },
350
-
351
- async run() {
352
- for (const { name, fn } of tests) {
353
- try {
354
- await fn();
355
- console.log(`✓ ${name}`);
356
- } catch (error) {
357
- console.error(`✗ ${name}: ${error.message}`);
358
- }
359
- }
360
- }
361
- };
362
- })();
363
-
364
- // Assertion library
365
- const assert = {
366
- equal(actual, expected, message) {
367
- if (actual !== expected) {
368
- throw new Error(message || `Expected ${expected}, got ${actual}`);
369
- }
370
- },
371
-
372
- deepEqual(actual, expected, message) {
373
- if (JSON.stringify(actual) !== JSON.stringify(expected)) {
374
- throw new Error(message || 'Objects are not equal');
375
- }
376
- }
377
- };
378
- ```
379
-
380
- ## Best Practices
381
- 1. Use strict mode ('use strict')
382
- 2. Prefer const over let, avoid var
383
- 3. Use arrow functions appropriately
384
- 4. Implement proper error handling
385
- 5. Avoid callback hell with async/await
386
- 6. Use meaningful variable names
387
- 7. Keep functions small and focused
388
-
389
- ## Performance Guidelines
390
- 1. Minimize DOM manipulations
391
- 2. Use requestAnimationFrame for animations
392
- 3. Implement virtual scrolling for large lists
393
- 4. Debounce/throttle expensive operations
394
- 5. Use Web Workers for CPU-intensive tasks
395
- 6. Optimize bundle size with tree shaking
396
- 7. Implement code splitting
397
-
398
- ## Security Considerations
399
- - Sanitize user inputs
400
- - Avoid eval() and Function constructor
401
- - Use Content Security Policy
402
- - Implement proper CORS handling
403
- - Store sensitive data securely
404
- - Use HTTPS for all requests
405
- - Validate data on both client and server
406
-
407
- ## Output Format
408
- When implementing JavaScript solutions:
409
- 1. Write clean, readable code
410
- 2. Use modern ES6+ features
411
- 3. Implement comprehensive error handling
412
- 4. Add JSDoc comments
413
- 5. Include unit tests
414
- 6. Follow JavaScript style guides
415
- 7. Optimize for performance
416
-
417
- Always prioritize:
418
- - Code readability
419
- - Cross-browser compatibility
420
- - Performance optimization
421
- - Security best practices
422
- - Maintainability